From 4249528d0fb20655eb5353ba46ab614e5c9ecc6d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 1 Oct 2024 14:51:57 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=90=8C=E6=AD=A5=E3=80=91BOOT=20?= =?UTF-8?q?=E5=92=8C=20CLOUD=20=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 71 +- sql/dm/quartz.sql | 179 + sql/dm/ruoyi-vue-pro-dm8.sql | 5929 +++++++++-------- sql/kingbase/quartz.sql | 170 + sql/opengauss/quartz.sql | 253 + sql/tools/README.md | 29 +- sql/tools/docker-compose.yaml | 26 +- .../util/collection/CollectionUtils.java | 10 +- .../IdTypeEnvironmentPostProcessor.java | 10 +- .../mybatis/core/enums/DbTypeEnum.java | 13 +- .../mybatis/core/enums/SqlConstants.java | 21 - .../mybatis/core/mapper/BaseMapperX.java | 18 +- .../mybatis/core/query/QueryWrapperX.java | 10 +- .../mybatis/core/util/JdbcUtils.java | 32 +- .../mybatis/core/util/MyBatisUtils.java | 1 - .../YudaoSecurityAutoConfiguration.java | 9 - .../YudaoWebSecurityConfigurerAdapter.java | 6 +- .../core/annotations/PreAuthenticated.java | 17 - .../core/aop/PreAuthenticatedAspect.java | 25 - .../test/core/ut/BaseDbAndRedisUnitTest.java | 4 + .../test/core/ut/BaseDbUnitTest.java | 4 + .../test/core/ut/BaseRedisUnitTest.java | 4 + .../framework/test/core/util/RandomUtils.java | 5 + .../YudaoWebSocketAutoConfiguration.java | 10 +- .../src/main/resources/webapp/test/Fel.pdf | Bin 352908 -> 0 bytes .../instance/BpmProcessInstancePageReqVO.java | 4 +- .../convert/definition/BpmModelConvert.java | 9 +- .../BpmParallelMultiInstanceBehavior.java | 9 +- .../BpmSequentialMultiInstanceBehavior.java | 10 +- .../flowable/core/util/BpmnModelUtils.java | 15 +- .../task/BpmProcessInstanceServiceImpl.java | 2 +- .../infra/enums/ErrorCodeConstants.java | 10 + .../app/file/AppFileController.java | 26 +- .../mysql/codegen/CodegenColumnMapper.java | 2 +- .../service/codegen/CodegenServiceImpl.java | 20 +- .../service/db/DatabaseTableServiceImpl.java | 5 +- .../codegen/CodegenServiceImplTest.java | 22 +- .../module/product/api/spu/ProductSpuApi.java | 13 + .../app/category/AppCategoryController.java | 3 + .../comment/AppProductCommentController.java | 2 + .../app/favorite/AppFavoriteController.java | 6 - .../AppProductBrowseHistoryController.java | 4 - .../app/spu/AppProductSpuController.java | 49 +- .../app/spu/vo/AppProductSpuDetailRespVO.java | 3 - .../app/spu/vo/AppProductSpuRespVO.java | 3 - .../category/ProductCategoryService.java | 1 + .../category/ProductCategoryServiceImpl.java | 7 + .../api/discount/DiscountActivityApi.java | 2 +- .../discount/dto/DiscountProductRespDTO.java | 12 +- .../api/reward/RewardActivityApi.java | 2 +- .../dto/RewardActivityMatchRespDTO.java | 12 + .../promotion/enums/ErrorCodeConstants.java | 14 +- .../enums/coupon/CouponTakeTypeEnum.java | 10 +- .../api/discount/DiscountActivityApiImpl.java | 10 +- .../api/reward/RewardActivityApiImpl.java | 4 +- .../discount/DiscountActivityController.java | 22 +- .../vo/DiscountActivityDetailRespVO.java | 21 - .../discount/vo/DiscountActivityRespVO.java | 20 +- .../vo/DiscountActivityUpdateReqVO.java | 2 +- .../admin/point/PointActivityController.java | 141 + .../vo/activity/PointActivityPageReqVO.java | 36 + .../vo/activity/PointActivityRespVO.java | 72 + .../vo/activity/PointActivitySaveReqVO.java | 31 + .../point/vo/product/PointProductRespVO.java | 39 + .../vo/product/PointProductSaveReqVO.java | 46 + .../seckill/SeckillActivityController.java | 2 +- .../vo/activity/SeckillActivityRespVO.java | 2 +- .../app/activity/AppActivityController.java | 174 +- .../app/article/AppArticleController.java | 7 +- .../app/banner/AppBannerController.java | 5 +- .../bargain/AppBargainActivityController.java | 7 +- .../bargain/AppBargainRecordController.java | 5 +- .../AppCombinationActivityController.java | 4 + .../AppCombinationRecordController.java | 6 +- .../app/coupon/AppCouponController.java | 5 - .../coupon/AppCouponTemplateController.java | 9 +- .../app/diy/AppDiyPageController.java | 2 + .../app/diy/AppDiyTemplateController.java | 3 + .../app/kefu/AppKeFuMessageController.java | 4 - .../app/point/AppPointActivityController.java | 118 + .../vo/AppPointActivityDetailRespVO.java | 57 + .../point/vo/AppPointActivityPageReqVO.java | 15 + .../app/point/vo/AppPointActivityRespVO.java | 67 + .../reward/AppRewardActivityController.java | 16 +- .../reward/vo/AppRewardActivityRespVO.java | 20 +- .../seckill/AppSeckillActivityController.java | 7 +- .../seckill/AppSeckillConfigController.java | 2 + .../discount/DiscountActivityConvert.java | 108 +- .../discount/DiscountProductDO.java | 8 +- .../dal/dataobject/point/PointActivityDO.java | 57 + .../dal/dataobject/point/PointProductDO.java | 67 + .../mysql/bargain/BargainActivityMapper.java | 39 +- .../CombinationActivityMapper.java | 45 +- .../mysql/coupon/CouponTemplateMapper.java | 2 +- .../mysql/discount/DiscountProductMapper.java | 46 +- .../dal/mysql/point/PointActivityMapper.java | 28 + .../dal/mysql/point/PointProductMapper.java | 32 + .../mysql/reward/RewardActivityMapper.java | 32 +- .../SeckillActivityMapper.java | 52 +- .../bargain/BargainActivityService.java | 12 +- .../bargain/BargainActivityServiceImpl.java | 17 +- .../CombinationActivityService.java | 15 +- .../CombinationActivityServiceImpl.java | 19 +- .../service/coupon/CouponServiceImpl.java | 2 +- .../coupon/CouponTemplateServiceImpl.java | 8 +- .../discount/DiscountActivityService.java | 14 +- .../discount/DiscountActivityServiceImpl.java | 156 +- .../service/point/PointActivityService.java | 81 + .../point/PointActivityServiceImpl.java | 247 + .../service/reward/RewardActivityService.java | 45 +- .../reward/RewardActivityServiceImpl.java | 131 +- .../seckill/SeckillActivityService.java | 13 +- .../seckill/SeckillActivityServiceImpl.java | 24 +- .../module/promotion/util/PromotionUtils.java | 25 - .../mapper/discount/DiscountProductMapper.xml | 24 - .../app/aftersale/AppAfterSaleController.java | 6 - .../aftersale/AppAfterSaleLogController.java | 2 - .../AppBrokerageRecordController.java | 3 - .../brokerage/AppBrokerageUserController.java | 8 - .../AppBrokerageWithdrawController.java | 3 - .../app/cart/AppCartController.java | 8 - .../app/config/AppTradeConfigController.java | 2 + .../delivery/AppDeliverExpressController.java | 2 + .../AppDeliverPickUpStoreController.java | 3 + .../app/order/AppTradeOrderController.http | 5 + .../app/order/AppTradeOrderController.java | 49 +- .../order/vo/AppTradeOrderCreateReqVO.java | 3 +- .../vo/AppTradeOrderSettlementReqVO.java | 4 +- .../vo/AppTradeOrderSettlementRespVO.java | 8 + .../vo/AppTradeProductSettlementRespVO.java | 81 + .../convert/aftersale/AfterSaleConvert.java | 3 +- .../aftersale/AfterSaleServiceImpl.java | 4 +- .../order/TradeOrderQueryServiceImpl.java | 4 +- .../order/TradeOrderUpdateService.java | 11 + .../order/TradeOrderUpdateServiceImpl.java | 112 +- .../handler/TradeCombinationOrderHandler.java | 2 +- .../service/price/TradePriceService.java | 17 +- .../service/price/TradePriceServiceImpl.java | 76 +- .../price/bo/TradePriceCalculateReqBO.java | 4 +- .../TradeDeliveryPriceCalculator.java | 6 +- .../TradeDiscountActivityPriceCalculator.java | 130 +- .../TradeMemberLevelPriceCalculator.java | 88 - .../calculator/TradePriceCalculator.java | 2 - .../TradeRewardActivityPriceCalculator.java | 77 +- .../app/address/AppAddressController.java | 7 - .../app/auth/AppAuthController.java | 11 +- .../AppMemberExperienceRecordController.java | 2 - .../app/level/AppMemberLevelController.java | 2 + .../point/AppMemberPointRecordController.java | 2 - .../AppMemberSignInConfigController.java | 2 + .../AppMemberSignInRecordController.java | 7 +- .../app/social/AppSocialUserController.java | 9 +- .../app/user/AppMemberUserController.java | 16 +- .../pay/enums/order/PayOrderStatusEnum.java | 10 + .../admin/order/PayOrderController.java | 22 +- .../app/order/AppPayOrderController.java | 22 +- .../controller/app/refund/package-info.java | 4 - .../app/wallet/AppPayWalletController.java | 2 - .../mysql/order/PayOrderExtensionMapper.java | 5 + .../pay/dal/redis/RedisKeyConstants.java | 9 + .../redis/wallet/PayWalletLockRedisDAO.java | 42 + .../service/demo/PayDemoOrderServiceImpl.java | 81 +- .../pay/service/order/PayOrderService.java | 10 + .../service/order/PayOrderServiceImpl.java | 27 +- .../wallet/PayWalletRechargeServiceImpl.java | 87 +- .../service/wallet/PayWalletServiceImpl.java | 122 +- .../PayWalletTransactionServiceImpl.java | 2 - .../impl/weixin/AbstractWxPayClient.java | 2 +- .../system/enums/ErrorCodeConstants.java | 1 + .../controller/admin/auth/AuthController.java | 7 + .../admin/auth/vo/AuthLoginReqVO.java | 9 +- .../admin/auth/vo/AuthRegisterReqVO.java | 39 + .../admin/auth/vo/AuthSmsLoginReqVO.java | 3 +- .../admin/auth/vo/AuthSmsSendReqVO.java | 5 +- .../admin/auth/vo/AuthSocialLoginReqVO.java | 5 +- .../app/dict/AppDictDataController.java | 2 + .../controller/app/ip/AppAreaController.java | 2 + .../system/service/auth/AdminAuthService.java | 9 +- .../service/auth/AdminAuthServiceImpl.java | 37 +- .../social/SocialClientServiceImpl.java | 3 +- .../system/service/user/AdminUserService.java | 11 +- .../service/user/AdminUserServiceImpl.java | 23 +- .../auth/AdminAuthServiceImplTest.java | 13 +- .../notify/NotifyMessageServiceImplTest.java | 80 +- .../service/sms/SmsCodeServiceImplTest.java | 20 +- 185 files changed, 6425 insertions(+), 4535 deletions(-) create mode 100644 sql/dm/quartz.sql create mode 100644 sql/kingbase/quartz.sql create mode 100644 sql/opengauss/quartz.sql delete mode 100644 yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java delete mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/annotations/PreAuthenticated.java delete mode 100644 yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/aop/PreAuthenticatedAspect.java delete mode 100755 yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/webapp/test/Fel.pdf delete mode 100755 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityDetailRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/PointActivityController.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityPageReqVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivitySaveReqVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductSaveReqVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/AppPointActivityController.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityDetailRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityPageReqVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointActivityDO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointProductDO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointActivityMapper.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointProductMapper.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityService.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityServiceImpl.java delete mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java delete mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/discount/DiscountProductMapper.xml create mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeProductSettlementRespVO.java delete mode 100644 yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java delete mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/package-info.java create mode 100644 yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/wallet/PayWalletLockRedisDAO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java diff --git a/README.md b/README.md index 67e44a685..c43dc81e1 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Downloads

-**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!** +**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!** **「我喜欢写代码,乐此不疲」** **「我喜欢做开源,以此为乐」** @@ -14,6 +14,16 @@ 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 +可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 + +## 🐶 新手必读 + +* 演示地址【Vue3 + element-plus】: +* 演示地址【Vue3 + vben(ant-design-vue)】: +* 演示地址【Vue2 + element-ui】: +* 启动文档: +* 视频教程: + ## 🐰 版本说明 | 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 | @@ -26,14 +36,6 @@ 可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 -## 🐶 新手必读 - -* 演示地址【Vue3 + element-plus】: -* 演示地址【Vue3 + vben(ant-design-vue)】: -* 演示地址【Vue2 + element-ui】: -* 启动文档: -* 视频教程: - ## 🐯 平台简介 **芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 @@ -52,7 +54,8 @@ * 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等 * 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录 * 支持加载动态权限菜单,按钮级别权限控制,Redis 缓存提升性能 -* 支持 SaaS 多租户系统,可自定义每个租户的权限,提供透明化的多租户底层封装 +* 支持 SaaS 多租户,可自定义每个租户的权限,提供透明化的多租户底层封装 +* 工作流使用 Flowable,支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式 * 高效率开发,使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档,支持单表、树表、主子表 * 实时通信,采用 Spring WebSocket 实现,内置 Token 身份校验,支持 WebSocket 集群 * 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款 @@ -94,7 +97,7 @@ ![开源项目对比](/.image/common/project-vs.png) -③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,57000 行 Java 代码,22000 行代码注释。 +③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。 ## 🤝 项目外包 @@ -112,7 +115,7 @@ * 通用模块(必选):系统功能、基础设施 * 通用模块(可选):工作流程、支付系统、数据报表、会员中心 -* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号 +* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型 > 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 > @@ -173,26 +176,26 @@ ### 基础设施 -| | 功能 | 描述 | -|----|-----------|----------------------------------------------| -| 🚀 | 代码生成 | 前后端代码的生成(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 实现单元测试,保证功能的正确性、代码的质量等 | +| | 功能 | 描述 | +|-----|-----------|----------------------------------------------| +| 🚀 | 代码生成 | 前后端代码的生成(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) @@ -271,9 +274,11 @@ | `yudao-module-bpm` | 工作流程的 Module 模块 | | `yudao-module-pay` | 支付系统的 Module 模块 | | `yudao-module-mall` | 商城系统的 Module 模块 | +| `yudao-module-erp` | ERP 系统的 Module 模块 | +| `yudao-module-crm` | CRM 系统的 Module 模块 | +| `yudao-module-ai` | AI 大模型的 Module 模块 | | `yudao-module-mp` | 微信公众号的 Module 模块 | | `yudao-module-report` | 大屏报表 Module 模块 | -| `yudao-module-ai` | AI 大模型 Module 模块 | ### 框架 diff --git a/sql/dm/quartz.sql b/sql/dm/quartz.sql new file mode 100644 index 000000000..dca9695b9 --- /dev/null +++ b/sql/dm/quartz.sql @@ -0,0 +1,179 @@ +-- +-- A hint submitted by a user: Oracle DB MUST be created as "shared" and the +-- job_queue_processes parameter must be greater than 2 +-- However, these settings are pretty much standard after any +-- Oracle install, so most users need not worry about this. +-- +-- Many other users (including the primary author of Quartz) have had success +-- running in dedicated mode, so only consider the above as a hint ;-) +-- + +drop table if exists qrtz_calendars; +drop table if exists qrtz_fired_triggers; +drop table if exists qrtz_blob_triggers; +drop table if exists qrtz_cron_triggers; +drop table if exists qrtz_simple_triggers; +drop table if exists qrtz_simprop_triggers; +drop table if exists qrtz_triggers; +drop table if exists qrtz_job_details; +drop table if exists qrtz_paused_trigger_grps; +drop table if exists qrtz_locks; +drop table if exists qrtz_scheduler_state; + +CREATE TABLE qrtz_job_details +( + SCHED_NAME VARCHAR2(120) NOT NULL, + JOB_NAME VARCHAR2(200) NOT NULL, + JOB_GROUP VARCHAR2(200) NOT NULL, + DESCRIPTION VARCHAR2(250) NULL, + JOB_CLASS_NAME VARCHAR2(250) NOT NULL, + IS_DURABLE VARCHAR2(1) NOT NULL, + IS_NONCONCURRENT VARCHAR2(1) NOT NULL, + IS_UPDATE_DATA VARCHAR2(1) NOT NULL, + REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, + JOB_DATA BLOB NULL, + CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) +); +CREATE TABLE qrtz_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + JOB_NAME VARCHAR2(200) NOT NULL, + JOB_GROUP VARCHAR2(200) NOT NULL, + DESCRIPTION VARCHAR2(250) NULL, + NEXT_FIRE_TIME NUMBER(19) NULL, + PREV_FIRE_TIME NUMBER(19) NULL, + PRIORITY NUMBER(13) NULL, + TRIGGER_STATE VARCHAR2(16) NOT NULL, + TRIGGER_TYPE VARCHAR2(8) NOT NULL, + START_TIME NUMBER(19) NOT NULL, + END_TIME NUMBER(19) NULL, + CALENDAR_NAME VARCHAR2(200) NULL, + MISFIRE_INSTR NUMBER(2) NULL, + JOB_DATA BLOB NULL, + CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) + REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) +); +CREATE TABLE qrtz_simple_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + REPEAT_COUNT NUMBER(7) NOT NULL, + REPEAT_INTERVAL NUMBER(12) NOT NULL, + TIMES_TRIGGERED NUMBER(10) NOT NULL, + CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); +CREATE TABLE qrtz_cron_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + CRON_EXPRESSION VARCHAR2(120) NOT NULL, + TIME_ZONE_ID VARCHAR2(80), + CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); +CREATE TABLE qrtz_simprop_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + STR_PROP_1 VARCHAR2(512) NULL, + STR_PROP_2 VARCHAR2(512) NULL, + STR_PROP_3 VARCHAR2(512) NULL, + INT_PROP_1 NUMBER(10) NULL, + INT_PROP_2 NUMBER(10) NULL, + LONG_PROP_1 NUMBER(19) NULL, + LONG_PROP_2 NUMBER(19) NULL, + DEC_PROP_1 NUMERIC(13,4) NULL, + DEC_PROP_2 NUMERIC(13,4) NULL, + BOOL_PROP_1 VARCHAR2(1) NULL, + BOOL_PROP_2 VARCHAR2(1) NULL, + TIME_ZONE_ID VARCHAR2(80) NULL, + CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); +CREATE TABLE qrtz_blob_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + BLOB_DATA BLOB NULL, + CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); +CREATE TABLE qrtz_calendars +( + SCHED_NAME VARCHAR2(120) NOT NULL, + CALENDAR_NAME VARCHAR2(200) NOT NULL, + CALENDAR BLOB NOT NULL, + CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) +); +CREATE TABLE qrtz_paused_trigger_grps +( + SCHED_NAME VARCHAR2(120) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) +); +CREATE TABLE qrtz_fired_triggers +( + SCHED_NAME VARCHAR2(120) NOT NULL, + ENTRY_ID VARCHAR2(140) NOT NULL, + TRIGGER_NAME VARCHAR2(200) NOT NULL, + TRIGGER_GROUP VARCHAR2(200) NOT NULL, + INSTANCE_NAME VARCHAR2(200) NOT NULL, + FIRED_TIME NUMBER(19) NOT NULL, + SCHED_TIME NUMBER(19) NOT NULL, + PRIORITY NUMBER(13) NOT NULL, + STATE VARCHAR2(16) NOT NULL, + JOB_NAME VARCHAR2(200) NULL, + JOB_GROUP VARCHAR2(200) NULL, + IS_NONCONCURRENT VARCHAR2(1) NULL, + REQUESTS_RECOVERY VARCHAR2(1) NULL, + CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID) +); +CREATE TABLE qrtz_scheduler_state +( + SCHED_NAME VARCHAR2(120) NOT NULL, + INSTANCE_NAME VARCHAR2(200) NOT NULL, + LAST_CHECKIN_TIME NUMBER(19) NOT NULL, + CHECKIN_INTERVAL NUMBER(13) NOT NULL, + CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) +); +CREATE TABLE qrtz_locks +( + SCHED_NAME VARCHAR2(120) NOT NULL, + LOCK_NAME VARCHAR2(40) NOT NULL, + CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME) +); + +create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); +create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); + +create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); +create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); +create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); +create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); +create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); +create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); +create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); +create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); +create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); +create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); +create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); +create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); + +create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); +create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); +create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); +create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); +create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); +create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); \ No newline at end of file diff --git a/sql/dm/ruoyi-vue-pro-dm8.sql b/sql/dm/ruoyi-vue-pro-dm8.sql index 78ae24d5b..0cf97945a 100644 --- a/sql/dm/ruoyi-vue-pro-dm8.sql +++ b/sql/dm/ruoyi-vue-pro-dm8.sql @@ -5,314 +5,289 @@ Target Server Type : DM8 - Date: 2024-05-03 22:21:06 + Date: 2024-09-21 17:40:13 */ -- ---------------------------- -- 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 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 ־'; +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 +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 'ϵͳ쳣־'; +COMMENT ON COLUMN infra_api_error_log.id IS '编号'; +COMMENT ON COLUMN infra_api_error_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN infra_api_error_log.user_id IS '用户编号'; +COMMENT ON COLUMN infra_api_error_log.user_type IS '用户类型'; +COMMENT ON COLUMN infra_api_error_log.application_name IS '应用名'; +COMMENT ON COLUMN infra_api_error_log.request_method IS '请求方法名'; +COMMENT ON COLUMN infra_api_error_log.request_url IS '请求地址'; +COMMENT ON COLUMN infra_api_error_log.request_params IS '请求参数'; +COMMENT ON COLUMN infra_api_error_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN infra_api_error_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN infra_api_error_log.exception_time IS '异常发生时间'; +COMMENT ON COLUMN infra_api_error_log.exception_name IS '异常名'; +COMMENT ON COLUMN infra_api_error_log.exception_message IS '异常导致的消息'; +COMMENT ON COLUMN infra_api_error_log.exception_root_cause_message IS '异常导致的根消息'; +COMMENT ON COLUMN infra_api_error_log.exception_stack_trace IS '异常的栈轨迹'; +COMMENT ON COLUMN infra_api_error_log.exception_class_name IS '异常发生的类全名'; +COMMENT ON COLUMN infra_api_error_log.exception_file_name IS '异常发生的类文件'; +COMMENT ON COLUMN infra_api_error_log.exception_method_name IS '异常发生的方法名'; +COMMENT ON COLUMN infra_api_error_log.exception_line_number IS '异常发生的方法所在行'; +COMMENT ON COLUMN infra_api_error_log.process_status IS '处理状态'; +COMMENT ON COLUMN infra_api_error_log.process_time IS '处理时间'; +COMMENT ON COLUMN infra_api_error_log.process_user_id IS '处理用户编号'; +COMMENT ON COLUMN infra_api_error_log.creator IS '创建者'; +COMMENT ON COLUMN infra_api_error_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_api_error_log.updater IS '更新者'; +COMMENT ON COLUMN infra_api_error_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_api_error_log.deleted IS '是否删除'; +COMMENT ON COLUMN infra_api_error_log.tenant_id IS '租户编号'; +COMMENT ON TABLE infra_api_error_log IS '系统异常日志'; -- ---------------------------- -- Table structure for infra_codegen_column -- ---------------------------- -CREATE TABLE infra_codegen_column -( - id bigint NOT NULL PRIMARY KEY IDENTITY, - table_id bigint NOT NULL, - column_name varchar(200) NOT NULL, - data_type varchar(100) NOT NULL, - column_comment varchar(500) NOT NULL, - nullable bit NOT NULL, - primary_key bit NOT NULL, - ordinal_position int NOT NULL, - java_type varchar(32) NOT NULL, - java_field varchar(64) NOT NULL, - dict_type varchar(200) DEFAULT '' NULL, - example varchar(64) DEFAULT NULL NULL, - create_operation bit NOT NULL, - update_operation bit NOT NULL, - list_operation bit NOT NULL, - list_operation_condition varchar(32) DEFAULT '=' NOT NULL, - list_operation_result bit NOT NULL, - html_type varchar(32) NOT NULL, - creator varchar(64) DEFAULT '' NULL, - create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, - updater varchar(64) DEFAULT '' NULL, - update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, - deleted bit DEFAULT '0' NOT NULL +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 'ɱֶζ'; +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 +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 'ɱ'; +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 +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 'ñ'; +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 (2, 'biz', 1, '用户管理-账号初始密码', 'system.user.init-password', '123456', '0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-07-20 17:22:47', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', '1', '腾讯地图 key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', '0'); INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', '1', 'test6', '1', '2023-12-03 09:55:16', '1', '2023-12-03 09:55:27', '0'); COMMIT; SET IDENTITY_INSERT infra_config OFF; @@ -321,103 +296,100 @@ SET IDENTITY_INSERT infra_config OFF; -- ---------------------------- -- 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 +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 'Դñ'; +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 +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 'ļ'; +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 +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 'ļñ'; +COMMENT ON COLUMN infra_file_config.id IS '编号'; +COMMENT ON COLUMN infra_file_config.name IS '配置名'; +COMMENT ON COLUMN infra_file_config.storage IS '存储器'; +COMMENT ON COLUMN infra_file_config.remark IS '备注'; +COMMENT ON COLUMN infra_file_config.master IS '是否为主配置'; +COMMENT ON COLUMN infra_file_config.config IS '存储配置'; +COMMENT ON COLUMN infra_file_config.creator IS '创建者'; +COMMENT ON COLUMN infra_file_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file_config.updater IS '更新者'; +COMMENT ON COLUMN infra_file_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_file_config IS '文件配置表'; -- ---------------------------- -- Records of infra_file_config -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT infra_file_config ON; -INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, 'ݿ', 1, 'ݿ', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '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":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '1', '2024-01-13 22:11:12', '1', '2024-04-03 19:38:34', '0'); +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库', 1, '我是数据库', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '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":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '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 @@ -425,83 +397,81 @@ SET IDENTITY_INSERT infra_file_config OFF; -- ---------------------------- -- 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 +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 'ļ'; +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 +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 'ʱ'; +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 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'); +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 @@ -509,98 +479,96 @@ SET IDENTITY_INSERT infra_job OFF; -- ---------------------------- -- 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 +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 'ʱ־'; +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 '定时任务日志表'; -- ---------------------------- -- 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 +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 'ű'; +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); +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 @@ -608,410 +576,462 @@ SET IDENTITY_INSERT system_dept OFF; -- ---------------------------- -- 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 +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 'ֵݱ'; +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 (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, 1, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', '2021-04-05 01:05:26', '1', '2024-07-22 22:23: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 (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, 10, '售后中', '10', 'trade_order_item_after_sale_status', 0, 'primary', '', '交易订单项的售后状态 - 售后中', '1', '2022-12-10 20:59:21', '1', '2024-07-21 17:01: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 (1210, 20, '已退款', '20', 'trade_order_item_after_sale_status', 0, 'success', '', '交易订单项的售后状态 - 已退款', '1', '2022-12-10 20:59:46', '1', '2024-07-21 17:01: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 (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 (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'); +INSERT 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 (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'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1537, 1, 'OpenAI', 'OpenAI', 'ai_platform', 0, '', '', '', '1', '2024-05-09 22:33:47', '1', '2024-05-09 22:58: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 (1538, 2, 'Ollama', 'Ollama', 'ai_platform', 0, '', '', '', '1', '2024-05-17 23:02:55', '1', '2024-05-17 23:02: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 (1539, 3, '文心一言', 'YiYan', 'ai_platform', 0, '', '', '', '1', '2024-05-18 09:24:20', '1', '2024-05-18 09:29: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 (1540, 4, '讯飞星火', 'XingHuo', 'ai_platform', 0, '', '', '', '1', '2024-05-18 10:08:56', '1', '2024-05-18 10: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 (1541, 5, '通义千问', 'TongYi', 'ai_platform', 0, '', '', '', '1', '2024-05-18 10:32:29', '1', '2024-07-06 15: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 (1542, 6, 'StableDiffusion', 'StableDiffusion', 'ai_platform', 0, '', '', '', '1', '2024-06-01 15:09:31', '1', '2024-06-01 15:10: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 (1543, 10, '进行中', '10', 'ai_image_status', 0, 'primary', '', '', '1', '2024-06-26 20:51:41', '1', '2024-06-26 20:52: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 (1544, 20, '已完成', '20', 'ai_image_status', 0, 'success', '', '', '1', '2024-06-26 20:52:07', '1', '2024-06-26 20:52: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 (1545, 30, '已失败', '30', 'ai_image_status', 0, 'warning', '', '', '1', '2024-06-26 20:52:25', '1', '2024-06-26 20:52: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 (1546, 7, 'Midjourney', 'Midjourney', 'ai_platform', 0, '', '', '', '1', '2024-06-26 22:14:46', '1', '2024-06-26 22:14: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 (1547, 10, '进行中', '10', 'ai_music_status', 0, 'primary', '', '', '1', '2024-06-27 22:45:22', '1', '2024-06-28 00:56: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 (1548, 20, '已完成', '20', 'ai_music_status', 0, 'success', '', '', '1', '2024-06-27 22:45:33', '1', '2024-06-28 00: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 (1549, 30, '已失败', '30', 'ai_music_status', 0, 'danger', '', '', '1', '2024-06-27 22:45:44', '1', '2024-06-28 00:56: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 (1550, 1, '歌词模式', '1', 'ai_generate_mode', 0, '', '', '', '1', '2024-06-27 22:46:31', '1', '2024-06-28 01:22: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 (1551, 2, '描述模式', '2', 'ai_generate_mode', 0, '', '', '', '1', '2024-06-27 22:46:37', '1', '2024-06-28 01:22: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 (1552, 8, 'Suno', 'Suno', 'ai_platform', 0, '', '', '', '1', '2024-06-29 09:13:36', '1', '2024-06-29 09:13: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 (1553, 9, 'DeepSeek', 'DeepSeek', 'ai_platform', 0, '', '', '', '1', '2024-07-06 12:04:30', '1', '2024-07-06 12:05: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 (1554, 10, '智谱', 'ZhiPu', 'ai_platform', 0, '', '', '', '1', '2024-07-06 18:00:35', '1', '2024-07-06 18: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 (1555, 4, '长', '4', 'ai_write_length', 0, '', '', '', '1', '2024-07-07 15:49:03', '1', '2024-07-07 15:49: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 (1556, 5, '段落', '5', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:49:54', '1', '2024-07-07 15:49: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 (1557, 6, '文章', '6', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:50:05', '1', '2024-07-07 15:50: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 (1558, 7, '博客文章', '7', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:50:23', '1', '2024-07-07 15:50: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 (1559, 8, '想法', '8', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:50:31', '1', '2024-07-07 15:50: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 (1560, 9, '大纲', '9', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:50:37', '1', '2024-07-07 15:50: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 (1561, 1, '自动', '1', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:51:06', '1', '2024-07-07 15: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 (1562, 2, '友善', '2', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:51:19', '1', '2024-07-07 15:51: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 (1563, 3, '随意', '3', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:51:27', '1', '2024-07-07 15:51: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 (1564, 4, '友好', '4', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:51:37', '1', '2024-07-07 15:51: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 (1565, 5, '专业', '5', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:51:49', '1', '2024-07-07 15:52: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 (1566, 6, '诙谐', '6', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:52:15', '1', '2024-07-07 15:52: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 (1567, 7, '有趣', '7', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:52:24', '1', '2024-07-07 15:52: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 (1568, 8, '正式', '8', 'ai_write_tone', 0, '', '', '', '1', '2024-07-07 15:54:33', '1', '2024-07-07 15:54: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 (1569, 5, '段落', '5', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:49:54', '1', '2024-07-07 15:49: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 (1570, 1, '自动', '1', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:19:34', '1', '2024-07-07 15:19: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 (1571, 2, '电子邮件', '2', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:19:50', '1', '2024-07-07 15:49: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 (1572, 3, '消息', '3', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:20:01', '1', '2024-07-07 15:49: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 (1573, 4, '评论', '4', 'ai_write_format', 0, '', '', '', '1', '2024-07-07 15:20:13', '1', '2024-07-07 15:49: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 (1574, 1, '自动', '1', 'ai_write_language', 0, '', '', '', '1', '2024-07-07 15:44:18', '1', '2024-07-07 15:44: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 (1575, 2, '中文', '2', 'ai_write_language', 0, '', '', '', '1', '2024-07-07 15:44:28', '1', '2024-07-07 15:44: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 (1576, 3, '英文', '3', 'ai_write_language', 0, '', '', '', '1', '2024-07-07 15:44:37', '1', '2024-07-07 15:44: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 (1577, 4, '韩语', '4', 'ai_write_language', 0, '', '', '', '1', '2024-07-07 15:46:28', '1', '2024-07-07 15:46: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 (1578, 5, '日语', '5', 'ai_write_language', 0, '', '', '', '1', '2024-07-07 15:46:44', '1', '2024-07-07 15:46: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 (1579, 1, '自动', '1', 'ai_write_length', 0, '', '', '', '1', '2024-07-07 15:48:34', '1', '2024-07-07 15:48: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 (1580, 2, '短', '2', 'ai_write_length', 0, '', '', '', '1', '2024-07-07 15:48:44', '1', '2024-07-07 15:48: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 (1581, 3, '中等', '3', 'ai_write_length', 0, '', '', '', '1', '2024-07-07 15:48:52', '1', '2024-07-07 15:48: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 (1582, 4, '长', '4', 'ai_write_length', 0, '', '', '', '1', '2024-07-07 15:49:03', '1', '2024-07-07 15:49: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 (1584, 1, '撰写', '1', 'ai_write_type', 0, '', '', '', '1', '2024-07-10 21:26:00', '1', '2024-07-10 21:26: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 (1585, 2, '回复', '2', 'ai_write_type', 0, '', '', '', '1', '2024-07-10 21:26:06', '1', '2024-07-10 21:26: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 (1586, 2, '腾讯云', 'TENCENT', 'system_sms_channel_code', 0, '', '', '', '1', '2024-07-22 22:23:16', '1', '2024-07-22 22:23: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 (1587, 3, '华为云', 'HUAWEI', 'system_sms_channel_code', 0, '', '', '', '1', '2024-07-22 22:23:46', '1', '2024-07-22 22:23: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 (1588, 1, 'OpenAI 微软', 'AzureOpenAI', 'ai_platform', 0, '', '', '', '1', '2024-08-10 14:07:41', '1', '2024-08-10 14:07: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 (1589, 10, 'BPMN 设计器', '10', 'bpm_model_type', 0, 'primary', '', '', '1', '2024-08-26 15:22:17', '1', '2024-08-26 16:46: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 (1590, 20, 'SIMPLE 设计器', '20', 'bpm_model_type', 0, 'success', '', '', '1', '2024-08-26 15:22:27', '1', '2024-08-26 16:45: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 (1591, 4, '七牛云', 'QINIU', 'system_sms_channel_code', 0, '', '', '', '1', '2024-08-31 08:45:03', '1', '2024-08-31 08:45:24', '0'); COMMIT; SET IDENTITY_INSERT system_dict_data OFF; -- @formatter:on @@ -1019,122 +1039,131 @@ SET IDENTITY_INSERT system_dict_data OFF; -- ---------------------------- -- 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 +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 'ֵͱ'; +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'); +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'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (620, 'AI 模型平台', 'ai_platform', 0, '', '1', '2024-05-09 22:27:38', '1', '2024-05-09 22:27:38', '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 (621, 'AI 绘画状态', 'ai_image_status', 0, '', '1', '2024-06-26 20:51:23', '1', '2024-06-26 20:51: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 (622, 'AI 音乐状态', 'ai_music_status', 0, '', '1', '2024-06-27 22:45:07', '1', '2024-06-28 00:56:27', '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 (623, 'AI 音乐生成模式', 'ai_generate_mode', 0, '', '1', '2024-06-27 22:46:21', '1', '2024-06-28 01:22:29', '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 (624, '写作语气', 'ai_write_tone', 0, '', '1', '2024-07-07 15:19:02', '1', '2024-07-07 15:19: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 (625, '写作语言', 'ai_write_language', 0, '', '1', '2024-07-07 15:18:52', '1', '2024-07-07 15:18: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 (626, '写作长度', 'ai_write_length', 0, '', '1', '2024-07-07 15:18:41', '1', '2024-07-07 15:18:41', '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 (627, '写作格式', 'ai_write_format', 0, '', '1', '2024-07-07 15:14:34', '1', '2024-07-07 15:14:34', '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 (628, 'AI 写作类型', 'ai_write_type', 0, '', '1', '2024-07-10 21:25:29', '1', '2024-07-10 21:25:29', '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 (629, 'BPM 流程模型类型', 'bpm_model_type', 0, '', '1', '2024-08-26 15:21:43', '1', '2024-08-26 15:21:43', '0', '1970-01-01 00:00:00'); COMMIT; SET IDENTITY_INSERT system_dict_type OFF; -- @formatter:on @@ -1142,83 +1171,81 @@ SET IDENTITY_INSERT system_dict_type OFF; -- ---------------------------- -- 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 +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 'ϵͳʼ¼'; +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 +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 '˺ű'; +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 (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, '0', '0', '1', '2023-01-25 17:39:52', '1', '2024-07-27 22:39:12', '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'); @@ -1229,100 +1256,98 @@ SET IDENTITY_INSERT system_mail_account OFF; -- ---------------------------- -- 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 +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 'ʼ־'; +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 +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 'ʼģ'; +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 (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; @@ -1331,845 +1356,891 @@ SET IDENTITY_INSERT system_mail_template OFF; -- ---------------------------- -- 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 +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 '˵Ȩޱ'; +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 (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-06-18 01:19: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 (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-05-01 18:35: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 (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 (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 (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 (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', '2024-07-28 11:36: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 (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', 'system/social/client/index.vue', 'SocialClient', 0, '1', '1', '1', '1', '2023-11-04 12:17:19', '1', '2024-05-04 19:09: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 (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, 'ʵ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'); +INSERT INTO system_menu (id, name, 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', 'crm/statistics/customer/index.vue', 'CrmStatisticsCustomer', 0, '1', '1', '1', '1', '2024-03-09 16:43:56', '1', '2024-05-04 20:38: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 (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'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2758, 'AI 大模型', '', 1, 400, 0, '/ai', 'fa:apple', '', '', 0, '1', '1', '1', '1', '2024-05-07 15:07:56', '1', '2024-05-25 12:36: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 (2759, 'AI 对话', '', 2, 1, 2758, 'chat', 'ep:message', 'ai/chat/index/index.vue', 'AiChat', 0, '1', '1', '1', '1', '2024-05-07 15:09:14', '1', '2024-07-07 17:15: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 (2760, '控制台', '', 1, 100, 2758, 'console', 'ep:setting', '', '', 0, '1', '1', '1', '1', '2024-05-09 22:39:09', '1', '2024-05-24 23:34: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 (2761, 'API 密钥', '', 2, 0, 2760, 'api-key', 'ep:key', 'ai/model/apiKey/index.vue', 'AiApiKey', 0, '1', '1', '1', '', '2024-05-09 14:52:56', '1', '2024-05-10 22:44: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 (2762, 'API 密钥查询', 'ai:api-key:query', 3, 1, 2761, '', '', '', '', 0, '1', '1', '1', '', '2024-05-09 14:52:56', '1', '2024-05-13 20:36: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 (2763, 'API 密钥创建', 'ai:api-key:create', 3, 2, 2761, '', '', '', '', 0, '1', '1', '1', '', '2024-05-09 14:52:56', '1', '2024-05-13 20:36: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 (2764, 'API 密钥更新', 'ai:api-key:update', 3, 3, 2761, '', '', '', '', 0, '1', '1', '1', '', '2024-05-09 14:52:56', '1', '2024-05-13 20:36: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 (2765, 'API 密钥删除', 'ai:api-key:delete', 3, 4, 2761, '', '', '', '', 0, '1', '1', '1', '', '2024-05-09 14:52:56', '1', '2024-05-13 20:36: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 (2767, '聊天模型', '', 2, 0, 2760, 'chat-model', 'fa-solid:abacus', 'ai/model/chatModel/index.vue', 'AiChatModel', 0, '1', '1', '1', '', '2024-05-10 14:42:48', '1', '2024-05-10 22:44: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 (2768, '聊天模型查询', 'ai:chat-model:query', 3, 1, 2767, '', '', '', '', 0, '1', '1', '1', '', '2024-05-10 14:42:48', '1', '2024-05-13 20:37: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 (2769, '聊天模型创建', 'ai:chat-model:create', 3, 2, 2767, '', '', '', '', 0, '1', '1', '1', '', '2024-05-10 14:42:48', '1', '2024-05-13 20:37: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 (2770, '聊天模型更新', 'ai:chat-model:update', 3, 3, 2767, '', '', '', '', 0, '1', '1', '1', '', '2024-05-10 14:42:48', '1', '2024-05-13 20:37: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 (2771, '聊天模型删除', 'ai:chat-model:delete', 3, 4, 2767, '', '', '', '', 0, '1', '1', '1', '', '2024-05-10 14:42:48', '1', '2024-05-13 20:37: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 (2773, '聊天角色', '', 2, 0, 2760, 'chat-role', 'fa:user-secret', 'ai/model/chatRole/index.vue', 'AiChatRole', 0, '1', '1', '1', '', '2024-05-13 12:39:28', '1', '2024-05-13 20:41: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 (2774, '聊天角色查询', 'ai:chat-role:query', 3, 1, 2773, '', '', '', NULL, 0, '1', '1', '1', '', '2024-05-13 12:39:28', '', '2024-05-13 12:39: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 (2775, '聊天角色创建', 'ai:chat-role:create', 3, 2, 2773, '', '', '', NULL, 0, '1', '1', '1', '', '2024-05-13 12:39:28', '', '2024-05-13 12:39: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 (2776, '聊天角色更新', 'ai:chat-role:update', 3, 3, 2773, '', '', '', NULL, 0, '1', '1', '1', '', '2024-05-13 12:39:28', '', '2024-05-13 12:39: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 (2777, '聊天角色删除', 'ai:chat-role:delete', 3, 4, 2773, '', '', '', '', 0, '1', '1', '1', '1', '2024-05-13 21:43:38', '1', '2024-05-13 21:43: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 (2778, '聊天管理', '', 2, 10, 2760, 'chat-conversation', 'ep:chat-square', 'ai/chat/manager/index.vue', 'AiChatManager', 0, '1', '1', '1', '', '2024-05-24 15:39:18', '1', '2024-06-26 21:36: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 (2779, '会话查询', 'ai:chat-conversation:query', 3, 1, 2778, '', '', '', '', 0, '1', '1', '1', '', '2024-05-24 15:39:18', '1', '2024-05-25 08:38: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 (2780, '会话删除', 'ai:chat-conversation:delete', 3, 2, 2778, '', '', '', '', 0, '1', '1', '1', '', '2024-05-24 15:39:18', '1', '2024-05-25 08:38: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 (2781, '消息查询', 'ai:chat-message:query', 3, 11, 2778, '', '', '', '', 0, '1', '1', '1', '1', '2024-05-25 08:38:56', '1', '2024-05-25 08:38: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 (2782, '消息删除', 'ai:chat-message:delete', 3, 12, 2778, '', '', '', '', 0, '1', '1', '1', '1', '2024-05-25 08:39:10', '1', '2024-05-25 08:39:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2783, 'AI 绘画', '', 2, 2, 2758, 'image', 'ep:picture-rounded', 'ai/image/index/index.vue', 'AiImage', 0, '1', '1', '1', '1', '2024-05-26 11:45:17', '1', '2024-07-07 17:18: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 (2784, '绘画管理', '', 2, 11, 2760, 'image', 'fa:file-image-o', 'ai/image/manager/index.vue', 'AiImageManager', 0, '1', '1', '1', '', '2024-06-26 13:32:31', '1', '2024-06-26 21:37: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 (2785, '绘画查询', 'ai:image:query', 3, 1, 2784, '', '', '', '', 0, '1', '1', '1', '', '2024-06-26 13:32:31', '1', '2024-06-26 22: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 (2786, '绘画删除', 'ai:image:delete', 3, 4, 2784, '', '', '', '', 0, '1', '1', '1', '', '2024-06-26 13:32:31', '1', '2024-06-26 22:22: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 (2787, '绘图更新', 'ai:image:update', 3, 2, 2784, '', '', '', '', 0, '1', '1', '1', '1', '2024-06-26 22:47:56', '1', '2024-08-31 09:21: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 (2788, '音乐管理', '', 2, 12, 2760, 'music', 'fa:music', 'ai/music/manager/index.vue', 'AiMusicManager', 0, '1', '1', '1', '', '2024-06-27 15:03:33', '1', '2024-06-27 23:04: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 (2789, '音乐查询', 'ai:music:query', 3, 1, 2788, '', '', '', NULL, 0, '1', '1', '1', '', '2024-06-27 15:03:33', '', '2024-06-27 15:03: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 (2790, '音乐更新', 'ai:music:update', 3, 3, 2788, '', '', '', NULL, 0, '1', '1', '1', '', '2024-06-27 15:03:33', '', '2024-06-27 15:03: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 (2791, '音乐删除', 'ai:music:delete', 3, 4, 2788, '', '', '', NULL, 0, '1', '1', '1', '', '2024-06-27 15:03:33', '', '2024-06-27 15:03: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 (2792, 'AI 写作', '', 2, 3, 2758, 'write', 'fa-solid:book-reader', 'ai/write/index/index.vue', 'AiWrite', 0, '1', '1', '1', '1', '2024-07-08 09:26:44', '1', '2024-07-16 13:03: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 (2793, '写作管理', '', 2, 13, 2760, 'write', 'fa:bookmark-o', 'ai/write/manager/index.vue', 'AiWriteManager', 0, '1', '1', '1', '', '2024-07-10 13:24:34', '1', '2024-07-10 21:31: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 (2794, 'AI 写作查询', 'ai:write:query', 3, 1, 2793, '', '', '', NULL, 0, '1', '1', '1', '', '2024-07-10 13:24:34', '', '2024-07-10 13:24: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 (2795, 'AI 写作删除', 'ai:write:delete', 3, 4, 2793, '', '', '', NULL, 0, '1', '1', '1', '', '2024-07-10 13:24:34', '', '2024-07-10 13:24: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 (2796, 'AI 音乐', '', 2, 4, 2758, 'music', 'fa:music', 'ai/music/index/index.vue', 'AiMusic', 0, '1', '1', '1', '1', '2024-07-17 09:21:12', '1', '2024-07-29 21:11: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 (2797, '客服中心', '', 2, 100, 2362, 'kefu', 'fa-solid:user-alt', 'mall/promotion/kefu/index', 'KeFu', 0, '1', '1', '1', '1', '2024-07-17 23:49:05', '1', '2024-07-17 23:49: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 (2798, 'AI 思维导图', '', 2, 5, 2758, 'mind-map', 'fa:sitemap', 'ai/mindmap/index/index.vue', 'AiMindMap', 0, '1', '1', '1', '1', '2024-07-29 21:31:59', '1', '2024-07-29 21:33: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 (2799, '导图管理', '', 2, 14, 2760, 'mind-map', 'fa:map', 'ai/mindmap/manager/index', 'AiMindMapManager', 0, '1', '1', '1', '', '2024-08-10 09:15:09', '1', '2024-08-10 17:24: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 (2800, '思维导图查询', 'ai:mind-map:query', 3, 1, 2799, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 09:15:09', '', '2024-08-10 09: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 (2801, '思维导图删除', 'ai:mind-map:delete', 3, 4, 2799, '', '', '', NULL, 0, '1', '1', '1', '', '2024-08-10 09:15:09', '', '2024-08-10 09: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 (2802, '会话查询', 'promotion:kefu-conversation:query', 3, 1, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:17:52', '1', '2024-08-31 09:18: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 (2803, '会话更新', 'promotion:kefu-conversation:update', 3, 2, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:18:15', '1', '2024-08-31 09:19: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 (2804, '消息查询', 'promotion:kefu-message:query', 3, 10, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:18:42', '1', '2024-08-31 09:18: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 (2805, '会话删除', 'promotion:kefu-conversation:delete', 3, 3, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:19:51', '1', '2024-08-31 09:20: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 (2806, '消息发送', 'promotion:kefu-message:send', 3, 12, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:20:06', '1', '2024-08-31 09: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 (2807, '消息更新', 'promotion:kefu-message:update', 3, 11, 2797, '', '', '', '', 0, '1', '1', '1', '1', '2024-08-31 09:20:22', '1', '2024-08-31 09:20:22', '0'); COMMIT; SET IDENTITY_INSERT system_menu OFF; -- @formatter:on @@ -2177,42 +2248,41 @@ SET IDENTITY_INSERT system_menu OFF; -- ---------------------------- -- 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 +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 '֪ͨ'; +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); +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; SET IDENTITY_INSERT system_notice OFF; -- @formatter:on @@ -2220,60 +2290,59 @@ SET IDENTITY_INSERT system_notice OFF; -- ---------------------------- -- 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 +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 'վϢ'; +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); +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 @@ -2281,177 +2350,173 @@ SET IDENTITY_INSERT system_notify_message OFF; -- ---------------------------- -- 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 +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 'վģ'; +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 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 '; +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 +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 ׼'; +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 +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 ͻ˱'; +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.yudao.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.yudao.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, 'yudao-sso-demo-by-code', 'test', 'Ȩģʽʵ SSO ¼', 'http://test.yudao.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, 'yudao-sso-demo-by-password', 'test', 'ģʽʵ SSO ¼', 'http://test.yudao.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'); +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.yudao.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.yudao.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, 'yudao-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.yudao.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, 'yudao-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.yudao.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 @@ -2459,166 +2524,162 @@ SET IDENTITY_INSERT system_oauth2_client OFF; -- ---------------------------- -- 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 +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 Ȩ'; +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 +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 ˢ'; +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 +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 汾'; +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 +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 'λϢ'; +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); +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 @@ -2626,53 +2687,53 @@ SET IDENTITY_INSERT system_post OFF; -- ---------------------------- -- 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 +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 'ɫϢ'; +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); +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-08-11 10:41:10', '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); +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 (153, '某角色', 'tt', 4, 1, '', 0, 2, '', '1', '2024-08-17 14:09:35', '1', '2024-08-17 14:09:35', '0', 1); COMMIT; SET IDENTITY_INSERT system_role OFF; -- @formatter:on @@ -2680,29 +2741,28 @@ SET IDENTITY_INSERT system_role OFF; -- ---------------------------- -- 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 +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 'ɫͲ˵'; +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 @@ -2766,7 +2826,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update 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); @@ -3270,7 +3329,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update 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); @@ -3346,7 +3404,6 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update 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); @@ -3532,6 +3589,20 @@ INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, update 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); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5779, 2, 2739, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5780, 2, 2740, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5781, 2, 2758, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5782, 2, 2759, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5783, 2, 2362, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5784, 2, 2387, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5785, 2, 2030, '1', '2024-07-07 20:39:38', '1', '2024-07-07 20:39:38', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5786, 101, 2758, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5787, 101, 2759, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5788, 101, 2783, '1', '2024-07-07 20:39:55', '1', '2024-07-07 20:39:55', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5789, 109, 2739, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5790, 109, 2740, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5791, 111, 2739, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5792, 111, 2740, '1', '2024-07-13 22:37:24', '1', '2024-07-13 22:37:24', '0', 122); COMMIT; SET IDENTITY_INSERT system_role_menu OFF; -- @formatter:on @@ -3539,46 +3610,44 @@ SET IDENTITY_INSERT system_role_menu OFF; -- ---------------------------- -- 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 +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 ''; +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'); +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', '2024-08-04 08:53:26', '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'); COMMIT; SET IDENTITY_INSERT system_sms_channel OFF; -- @formatter:on @@ -3586,165 +3655,163 @@ SET IDENTITY_INSERT system_sms_channel OFF; -- ---------------------------- -- 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 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 'ֻ֤'; +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 +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 '־'; +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 +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 'ģ'; +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'); +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', 4, 'DEBUG_DING_TALK', '', '2021-03-31 10:49:38', '1', '2024-08-18 11:57: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 (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', 4, 'DEBUG_DING_TALK', '1', '2021-04-10 01:07:21', '1', '2024-08-18 11:57: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 (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', 4, 'DEBUG_DING_TALK', '1', '2021-10-11 08:10:00', '1', '2024-08-18 11:57:06', '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', 4, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2024-08-18 11:57: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 (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'); +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 (17, 2, 0, 'bpm_task_timeout', '【工作流】任务审批超时', '您收到了一条超时的待办任务:{processInstanceName}-{taskName},处理链接:{detailUrl}', '["processInstanceName","taskName","detailUrl"]', '', 'X', 4, 'DEBUG_DING_TALK', '1', '2024-08-16 21:59:15', '1', '2024-08-16 21:59:34', '0'); COMMIT; SET IDENTITY_INSERT system_sms_template OFF; -- @formatter:on @@ -3752,49 +3819,48 @@ SET IDENTITY_INSERT system_sms_template OFF; -- ---------------------------- -- 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 +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 '罻ͻ˱'; +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); +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 @@ -3802,122 +3868,119 @@ SET IDENTITY_INSERT system_social_client OFF; -- ---------------------------- -- 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 +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 '罻û'; +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 '社交用户表'; -- ---------------------------- -- 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 +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 '罻󶨱'; +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 +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 '⻧'; +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'); +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, '2025-03-11 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2024-07-20 22:21:53', '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-29 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2024-07-20 15:51:18', '0'); COMMIT; SET IDENTITY_INSERT system_tenant OFF; -- @formatter:on @@ -3925,38 +3988,37 @@ SET IDENTITY_INSERT system_tenant OFF; -- ---------------------------- -- 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 +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 '⻧ײͱ'; +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 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'); +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,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,2739,2484,2740,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-07-13 22:37:24', '0'); COMMIT; SET IDENTITY_INSERT system_tenant_package OFF; -- @formatter:on @@ -3964,29 +4026,28 @@ SET IDENTITY_INSERT system_tenant_package OFF; -- ---------------------------- -- 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 +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 'ûλ'; +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 @@ -4001,6 +4062,7 @@ INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, update 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); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (125, 1, 2, '1', '2024-07-13 22:31:39', '1', '2024-07-13 22:31:39', '0', 1); COMMIT; SET IDENTITY_INSERT system_user_post OFF; -- @formatter:on @@ -4008,29 +4070,28 @@ SET IDENTITY_INSERT system_user_post OFF; -- ---------------------------- -- 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 +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 'ûͽɫ'; +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 @@ -4059,73 +4120,72 @@ SET IDENTITY_INSERT system_user_role OFF; -- ---------------------------- -- 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 +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 'ûϢ'; +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 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.yudao.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, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '', 'Ҫ', 104, '[1]', 'yudao@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); +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,2]', 'aoteman@126.com', '18818260277', 2, 'http://test.yudao.iocoder.cn/bf2002b38950c904243be7c825d3f82e29f25a44526583c3fde2ebdff3a87f75.png', 0, '0:0:0:0:0:0:0:1', '2024-08-26 16:54:00', 'admin', '2021-01-05 17:03:47', NULL, '2024-08-26 16:54:00', '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, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 0, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', '1', '2024-08-17 11:06:13', '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$04$fUBSmjKCPYAUmnMzOb6qE.eZCGPhHi1JmAKclODbfS/O7fHOl2bH6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-08-11 17:48:12', '', '2021-01-13 23:50:35', NULL, '2024-08-11 17:48:12', '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$jDFLttgfik0QqJKAbfhMa.2A9xXoZmAIxakdFJUzkX.MgBKT6ddo6', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-08-11 09:38:08', '', '2021-01-21 02:13:53', NULL, '2024-08-11 09:38:08', '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, '0:0:0:0:0:0:0:1', '2024-07-20 22:23:17', '1', '2022-02-22 00:56:14', NULL, '2024-07-20 22:23: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 (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', '测试号02', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', '2022-07-09 17:40:26', '1', '2024-08-11 10:12:03', '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 @@ -4133,42 +4193,41 @@ SET IDENTITY_INSERT system_users OFF; -- ---------------------------- -- Table structure for yudao_demo01_contact -- ---------------------------- -CREATE TABLE yudao_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 +CREATE TABLE yudao_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 yudao_demo01_contact.id IS ''; -COMMENT ON COLUMN yudao_demo01_contact.name IS ''; -COMMENT ON COLUMN yudao_demo01_contact.sex IS 'Ա'; -COMMENT ON COLUMN yudao_demo01_contact.birthday IS ''; -COMMENT ON COLUMN yudao_demo01_contact.description IS ''; -COMMENT ON COLUMN yudao_demo01_contact.avatar IS 'ͷ'; -COMMENT ON COLUMN yudao_demo01_contact.creator IS ''; -COMMENT ON COLUMN yudao_demo01_contact.create_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo01_contact.updater IS ''; -COMMENT ON COLUMN yudao_demo01_contact.update_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo01_contact.deleted IS 'Ƿɾ'; -COMMENT ON COLUMN yudao_demo01_contact.tenant_id IS '⻧'; -COMMENT ON TABLE yudao_demo01_contact IS 'ʾϵ˱'; +COMMENT ON COLUMN yudao_demo01_contact.id IS '编号'; +COMMENT ON COLUMN yudao_demo01_contact.name IS '名字'; +COMMENT ON COLUMN yudao_demo01_contact.sex IS '性别'; +COMMENT ON COLUMN yudao_demo01_contact.birthday IS '出生年'; +COMMENT ON COLUMN yudao_demo01_contact.description IS '简介'; +COMMENT ON COLUMN yudao_demo01_contact.avatar IS '头像'; +COMMENT ON COLUMN yudao_demo01_contact.creator IS '创建者'; +COMMENT ON COLUMN yudao_demo01_contact.create_time IS '创建时间'; +COMMENT ON COLUMN yudao_demo01_contact.updater IS '更新者'; +COMMENT ON COLUMN yudao_demo01_contact.update_time IS '更新时间'; +COMMENT ON COLUMN yudao_demo01_contact.deleted IS '是否删除'; +COMMENT ON COLUMN yudao_demo01_contact.tenant_id IS '租户编号'; +COMMENT ON TABLE yudao_demo01_contact IS '示例联系人表'; -- ---------------------------- -- Records of yudao_demo01_contact -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT yudao_demo01_contact ON; -INSERT INTO yudao_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); +INSERT INTO yudao_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 yudao_demo01_contact OFF; -- @formatter:on @@ -4176,40 +4235,39 @@ SET IDENTITY_INSERT yudao_demo01_contact OFF; -- ---------------------------- -- Table structure for yudao_demo02_category -- ---------------------------- -CREATE TABLE yudao_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 +CREATE TABLE yudao_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 yudao_demo02_category.id IS ''; -COMMENT ON COLUMN yudao_demo02_category.name IS ''; -COMMENT ON COLUMN yudao_demo02_category.parent_id IS ''; -COMMENT ON COLUMN yudao_demo02_category.creator IS ''; -COMMENT ON COLUMN yudao_demo02_category.create_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo02_category.updater IS ''; -COMMENT ON COLUMN yudao_demo02_category.update_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo02_category.deleted IS 'Ƿɾ'; -COMMENT ON COLUMN yudao_demo02_category.tenant_id IS '⻧'; -COMMENT ON TABLE yudao_demo02_category IS 'ʾ'; +COMMENT ON COLUMN yudao_demo02_category.id IS '编号'; +COMMENT ON COLUMN yudao_demo02_category.name IS '名字'; +COMMENT ON COLUMN yudao_demo02_category.parent_id IS '父级编号'; +COMMENT ON COLUMN yudao_demo02_category.creator IS '创建者'; +COMMENT ON COLUMN yudao_demo02_category.create_time IS '创建时间'; +COMMENT ON COLUMN yudao_demo02_category.updater IS '更新者'; +COMMENT ON COLUMN yudao_demo02_category.update_time IS '更新时间'; +COMMENT ON COLUMN yudao_demo02_category.deleted IS '是否删除'; +COMMENT ON COLUMN yudao_demo02_category.tenant_id IS '租户编号'; +COMMENT ON TABLE yudao_demo02_category IS '示例分类表'; -- ---------------------------- -- Records of yudao_demo02_category -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT yudao_demo02_category ON; -INSERT INTO yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_demo02_category OFF; @@ -4218,47 +4276,46 @@ SET IDENTITY_INSERT yudao_demo02_category OFF; -- ---------------------------- -- Table structure for yudao_demo03_course -- ---------------------------- -CREATE TABLE yudao_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 +CREATE TABLE yudao_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 yudao_demo03_course.id IS ''; -COMMENT ON COLUMN yudao_demo03_course.student_id IS 'ѧ'; -COMMENT ON COLUMN yudao_demo03_course.name IS ''; -COMMENT ON COLUMN yudao_demo03_course.score IS ''; -COMMENT ON COLUMN yudao_demo03_course.creator IS ''; -COMMENT ON COLUMN yudao_demo03_course.create_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_course.updater IS ''; -COMMENT ON COLUMN yudao_demo03_course.update_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_course.deleted IS 'Ƿɾ'; -COMMENT ON COLUMN yudao_demo03_course.tenant_id IS '⻧'; -COMMENT ON TABLE yudao_demo03_course IS 'ѧγ̱'; +COMMENT ON COLUMN yudao_demo03_course.id IS '编号'; +COMMENT ON COLUMN yudao_demo03_course.student_id IS '学生编号'; +COMMENT ON COLUMN yudao_demo03_course.name IS '名字'; +COMMENT ON COLUMN yudao_demo03_course.score IS '分数'; +COMMENT ON COLUMN yudao_demo03_course.creator IS '创建者'; +COMMENT ON COLUMN yudao_demo03_course.create_time IS '创建时间'; +COMMENT ON COLUMN yudao_demo03_course.updater IS '更新者'; +COMMENT ON COLUMN yudao_demo03_course.update_time IS '更新时间'; +COMMENT ON COLUMN yudao_demo03_course.deleted IS '是否删除'; +COMMENT ON COLUMN yudao_demo03_course.tenant_id IS '租户编号'; +COMMENT ON TABLE yudao_demo03_course IS '学生课程表'; -- ---------------------------- -- Records of yudao_demo03_course -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT yudao_demo03_course ON; -INSERT INTO yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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); +INSERT INTO yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_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 yudao_demo03_course OFF; -- @formatter:on @@ -4266,40 +4323,39 @@ SET IDENTITY_INSERT yudao_demo03_course OFF; -- ---------------------------- -- Table structure for yudao_demo03_grade -- ---------------------------- -CREATE TABLE yudao_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 +CREATE TABLE yudao_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 yudao_demo03_grade.id IS ''; -COMMENT ON COLUMN yudao_demo03_grade.student_id IS 'ѧ'; -COMMENT ON COLUMN yudao_demo03_grade.name IS ''; -COMMENT ON COLUMN yudao_demo03_grade.teacher IS ''; -COMMENT ON COLUMN yudao_demo03_grade.creator IS ''; -COMMENT ON COLUMN yudao_demo03_grade.create_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_grade.updater IS ''; -COMMENT ON COLUMN yudao_demo03_grade.update_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_grade.deleted IS 'Ƿɾ'; -COMMENT ON COLUMN yudao_demo03_grade.tenant_id IS '⻧'; -COMMENT ON TABLE yudao_demo03_grade IS 'ѧ༶'; +COMMENT ON COLUMN yudao_demo03_grade.id IS '编号'; +COMMENT ON COLUMN yudao_demo03_grade.student_id IS '学生编号'; +COMMENT ON COLUMN yudao_demo03_grade.name IS '名字'; +COMMENT ON COLUMN yudao_demo03_grade.teacher IS '班主任'; +COMMENT ON COLUMN yudao_demo03_grade.creator IS '创建者'; +COMMENT ON COLUMN yudao_demo03_grade.create_time IS '创建时间'; +COMMENT ON COLUMN yudao_demo03_grade.updater IS '更新者'; +COMMENT ON COLUMN yudao_demo03_grade.update_time IS '更新时间'; +COMMENT ON COLUMN yudao_demo03_grade.deleted IS '是否删除'; +COMMENT ON COLUMN yudao_demo03_grade.tenant_id IS '租户编号'; +COMMENT ON TABLE yudao_demo03_grade IS '学生班级表'; -- ---------------------------- -- Records of yudao_demo03_grade -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT yudao_demo03_grade ON; -INSERT INTO yudao_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 yudao_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 yudao_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); +INSERT INTO yudao_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 yudao_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 yudao_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 yudao_demo03_grade OFF; -- @formatter:on @@ -4307,42 +4363,41 @@ SET IDENTITY_INSERT yudao_demo03_grade OFF; -- ---------------------------- -- Table structure for yudao_demo03_student -- ---------------------------- -CREATE TABLE yudao_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 +CREATE TABLE yudao_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 yudao_demo03_student.id IS ''; -COMMENT ON COLUMN yudao_demo03_student.name IS ''; -COMMENT ON COLUMN yudao_demo03_student.sex IS 'Ա'; -COMMENT ON COLUMN yudao_demo03_student.birthday IS ''; -COMMENT ON COLUMN yudao_demo03_student.description IS ''; -COMMENT ON COLUMN yudao_demo03_student.creator IS ''; -COMMENT ON COLUMN yudao_demo03_student.create_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_student.updater IS ''; -COMMENT ON COLUMN yudao_demo03_student.update_time IS 'ʱ'; -COMMENT ON COLUMN yudao_demo03_student.deleted IS 'Ƿɾ'; -COMMENT ON COLUMN yudao_demo03_student.tenant_id IS '⻧'; -COMMENT ON TABLE yudao_demo03_student IS 'ѧ'; +COMMENT ON COLUMN yudao_demo03_student.id IS '编号'; +COMMENT ON COLUMN yudao_demo03_student.name IS '名字'; +COMMENT ON COLUMN yudao_demo03_student.sex IS '性别'; +COMMENT ON COLUMN yudao_demo03_student.birthday IS '出生日期'; +COMMENT ON COLUMN yudao_demo03_student.description IS '简介'; +COMMENT ON COLUMN yudao_demo03_student.creator IS '创建者'; +COMMENT ON COLUMN yudao_demo03_student.create_time IS '创建时间'; +COMMENT ON COLUMN yudao_demo03_student.updater IS '更新者'; +COMMENT ON COLUMN yudao_demo03_student.update_time IS '更新时间'; +COMMENT ON COLUMN yudao_demo03_student.deleted IS '是否删除'; +COMMENT ON COLUMN yudao_demo03_student.tenant_id IS '租户编号'; +COMMENT ON TABLE yudao_demo03_student IS '学生表'; -- ---------------------------- -- Records of yudao_demo03_student -- ---------------------------- -- @formatter:off SET IDENTITY_INSERT yudao_demo03_student ON; -INSERT INTO yudao_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 yudao_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 yudao_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); +INSERT INTO yudao_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 yudao_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 yudao_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 yudao_demo03_student OFF; -- @formatter:on diff --git a/sql/kingbase/quartz.sql b/sql/kingbase/quartz.sql new file mode 100644 index 000000000..ff1e215d1 --- /dev/null +++ b/sql/kingbase/quartz.sql @@ -0,0 +1,170 @@ +set client_min_messages = WARNING; +DROP TABLE IF EXISTS qrtz_fired_triggers; +DROP TABLE IF EXISTS qrtz_paused_trigger_grps; +DROP TABLE IF EXISTS qrtz_scheduler_state; +DROP TABLE IF EXISTS qrtz_locks; +DROP TABLE IF EXISTS qrtz_simprop_triggers; +DROP TABLE IF EXISTS qrtz_simple_triggers; +DROP TABLE IF EXISTS qrtz_cron_triggers; +DROP TABLE IF EXISTS qrtz_blob_triggers; +DROP TABLE IF EXISTS qrtz_triggers; +DROP TABLE IF EXISTS qrtz_job_details; +DROP TABLE IF EXISTS qrtz_calendars; +set client_min_messages = NOTICE; + +CREATE TABLE qrtz_job_details + ( + sched_name TEXT NOT NULL, + job_name TEXT NOT NULL, + job_group TEXT NOT NULL, + description TEXT NULL, + job_class_name TEXT 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 NULL, + PRIMARY KEY (sched_name,job_name,job_group) +); + +CREATE TABLE qrtz_triggers + ( + sched_name TEXT NOT NULL, + trigger_name TEXT NOT NULL, + trigger_group TEXT NOT NULL, + job_name TEXT NOT NULL, + job_group TEXT NOT NULL, + description TEXT NULL, + next_fire_time BIGINT NULL, + prev_fire_time BIGINT NULL, + priority INTEGER NULL, + trigger_state TEXT NOT NULL, + trigger_type TEXT NOT NULL, + start_time BIGINT NOT NULL, + end_time BIGINT NULL, + calendar_name TEXT NULL, + misfire_instr SMALLINT NULL, + job_data BYTEA NULL, + PRIMARY KEY (sched_name,trigger_name,trigger_group), + FOREIGN KEY (sched_name,job_name,job_group) + REFERENCES qrtz_job_details(sched_name,job_name,job_group) +); + +CREATE TABLE qrtz_simple_triggers + ( + sched_name TEXT NOT NULL, + trigger_name TEXT NOT NULL, + trigger_group TEXT 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), + FOREIGN KEY (sched_name,trigger_name,trigger_group) + REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE +); + +CREATE TABLE QRTZ_SIMPROP_TRIGGERS + ( + sched_name TEXT NOT NULL, + trigger_name TEXT NOT NULL , + trigger_group TEXT NOT NULL , + str_prop_1 TEXT NULL, + str_prop_2 TEXT NULL, + str_prop_3 TEXT NULL, + int_prop_1 INTEGER NULL, + int_prop_2 INTEGER NULL, + long_prop_1 BIGINT NULL, + long_prop_2 BIGINT NULL, + dec_prop_1 NUMERIC NULL, + dec_prop_2 NUMERIC NULL, + bool_prop_1 BOOL NULL, + bool_prop_2 BOOL NULL, + time_zone_id TEXT NULL, + PRIMARY KEY (sched_name,trigger_name,trigger_group), + FOREIGN KEY (sched_name,trigger_name,trigger_group) + REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE +); + +CREATE TABLE qrtz_cron_triggers + ( + sched_name TEXT NOT NULL, + trigger_name TEXT NOT NULL, + trigger_group TEXT NOT NULL, + cron_expression TEXT NOT NULL, + time_zone_id TEXT, + PRIMARY KEY (sched_name,trigger_name,trigger_group), + FOREIGN KEY (sched_name,trigger_name,trigger_group) + REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE +); + +CREATE TABLE qrtz_blob_triggers + ( + sched_name TEXT NOT NULL, + trigger_name TEXT NOT NULL, + trigger_group TEXT NOT NULL, + blob_data BYTEA NULL, + PRIMARY KEY (sched_name,trigger_name,trigger_group), + FOREIGN KEY (sched_name,trigger_name,trigger_group) + REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE +); + +CREATE TABLE qrtz_calendars + ( + sched_name TEXT NOT NULL, + calendar_name TEXT NOT NULL, + calendar BYTEA NOT NULL, + PRIMARY KEY (sched_name,calendar_name) +); + +CREATE TABLE qrtz_paused_trigger_grps + ( + sched_name TEXT NOT NULL, + trigger_group TEXT NOT NULL, + PRIMARY KEY (sched_name,trigger_group) +); + +CREATE TABLE qrtz_fired_triggers + ( + sched_name TEXT NOT NULL, + entry_id TEXT NOT NULL, + trigger_name TEXT NOT NULL, + trigger_group TEXT NOT NULL, + instance_name TEXT NOT NULL, + fired_time BIGINT NOT NULL, + sched_time BIGINT NOT NULL, + priority INTEGER NOT NULL, + state TEXT NOT NULL, + job_name TEXT NULL, + job_group TEXT NULL, + is_nonconcurrent BOOL NOT NULL, + requests_recovery BOOL NULL, + PRIMARY KEY (sched_name,entry_id) +); + +CREATE TABLE qrtz_scheduler_state + ( + sched_name TEXT NOT NULL, + instance_name TEXT NOT NULL, + last_checkin_time BIGINT NOT NULL, + checkin_interval BIGINT NOT NULL, + PRIMARY KEY (sched_name,instance_name) +); + +CREATE TABLE qrtz_locks + ( + sched_name TEXT NOT NULL, + lock_name TEXT NOT NULL, + PRIMARY KEY (sched_name,lock_name) +); + +create index idx_qrtz_j_req_recovery on qrtz_job_details(requests_recovery); +create index idx_qrtz_t_next_fire_time on qrtz_triggers(next_fire_time); +create index idx_qrtz_t_state on qrtz_triggers(trigger_state); +create index idx_qrtz_t_nft_st on qrtz_triggers(next_fire_time,trigger_state); +create index idx_qrtz_ft_trig_name on qrtz_fired_triggers(trigger_name); +create index idx_qrtz_ft_trig_group on qrtz_fired_triggers(trigger_group); +create index idx_qrtz_ft_trig_nm_gp on qrtz_fired_triggers(sched_name,trigger_name,trigger_group); +create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(instance_name); +create index idx_qrtz_ft_job_name on qrtz_fired_triggers(job_name); +create index idx_qrtz_ft_job_group on qrtz_fired_triggers(job_group); +create index idx_qrtz_ft_job_req_recovery on qrtz_fired_triggers(requests_recovery); diff --git a/sql/opengauss/quartz.sql b/sql/opengauss/quartz.sql new file mode 100644 index 000000000..4ec390c52 --- /dev/null +++ b/sql/opengauss/quartz.sql @@ -0,0 +1,253 @@ +-- ---------------------------- +-- qrtz_blob_triggers +-- ---------------------------- +CREATE TABLE qrtz_blob_triggers +( + sched_name varchar(120) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + blob_data bytea NULL, + PRIMARY KEY (sched_name, trigger_name, trigger_group) +); + +CREATE INDEX idx_qrtz_blob_triggers_sched_name ON qrtz_blob_triggers (sched_name, trigger_name, trigger_group); + +-- ---------------------------- +-- qrtz_calendars +-- ---------------------------- +CREATE TABLE qrtz_calendars +( + sched_name varchar(120) NOT NULL, + calendar_name varchar(190) NOT NULL, + calendar bytea NOT NULL, + PRIMARY KEY (sched_name, calendar_name) +); + + +-- ---------------------------- +-- qrtz_cron_triggers +-- ---------------------------- +CREATE TABLE qrtz_cron_triggers +( + sched_name varchar(120) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + cron_expression varchar(120) NOT NULL, + time_zone_id varchar(80) NULL DEFAULT NULL, + PRIMARY KEY (sched_name, trigger_name, trigger_group) +); + +-- @formatter:off +BEGIN; +COMMIT; +-- @formatter:on + +-- ---------------------------- +-- qrtz_fired_triggers +-- ---------------------------- +CREATE TABLE qrtz_fired_triggers +( + sched_name varchar(120) NOT NULL, + entry_id varchar(95) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + instance_name varchar(190) NOT NULL, + fired_time int8 NOT NULL, + sched_time int8 NOT NULL, + priority int4 NOT NULL, + state varchar(16) NOT NULL, + job_name varchar(190) NULL DEFAULT NULL, + job_group varchar(190) NULL DEFAULT NULL, + is_nonconcurrent varchar(1) NULL DEFAULT NULL, + requests_recovery varchar(1) NULL DEFAULT NULL, + PRIMARY KEY (sched_name, entry_id) +); + +CREATE INDEX idx_qrtz_ft_trig_inst_name ON qrtz_fired_triggers (sched_name, instance_name); +CREATE INDEX idx_qrtz_ft_inst_job_req_rcvry ON qrtz_fired_triggers (sched_name, instance_name, requests_recovery); +CREATE INDEX idx_qrtz_ft_j_g ON qrtz_fired_triggers (sched_name, job_name, job_group); +CREATE INDEX idx_qrtz_ft_jg ON qrtz_fired_triggers (sched_name, job_group); +CREATE INDEX idx_qrtz_ft_t_g ON qrtz_fired_triggers (sched_name, trigger_name, trigger_group); +CREATE INDEX idx_qrtz_ft_tg ON qrtz_fired_triggers (sched_name, trigger_group); + +-- ---------------------------- +-- qrtz_job_details +-- ---------------------------- +CREATE TABLE qrtz_job_details +( + sched_name varchar(120) NOT NULL, + job_name varchar(190) NOT NULL, + job_group varchar(190) NOT NULL, + description varchar(250) NULL DEFAULT NULL, + job_class_name varchar(250) NOT NULL, + is_durable varchar(1) NOT NULL, + is_nonconcurrent varchar(1) NOT NULL, + is_update_data varchar(1) NOT NULL, + requests_recovery varchar(1) NOT NULL, + job_data bytea NULL, + PRIMARY KEY (sched_name, job_name, job_group) +); + +CREATE INDEX idx_qrtz_j_req_recovery ON qrtz_job_details (sched_name, requests_recovery); +CREATE INDEX idx_qrtz_j_grp ON qrtz_job_details (sched_name, job_group); + +-- @formatter:off +BEGIN; +COMMIT; +-- @formatter:on + +-- ---------------------------- +-- qrtz_locks +-- ---------------------------- +CREATE TABLE qrtz_locks +( + sched_name varchar(120) NOT NULL, + lock_name varchar(40) NOT NULL, + PRIMARY KEY (sched_name, lock_name) +); + +-- @formatter:off +BEGIN; +COMMIT; +-- @formatter:on + +-- ---------------------------- +-- qrtz_paused_trigger_grps +-- ---------------------------- +CREATE TABLE qrtz_paused_trigger_grps +( + sched_name varchar(120) NOT NULL, + trigger_group varchar(190) NOT NULL, + PRIMARY KEY (sched_name, trigger_group) +); + +-- ---------------------------- +-- qrtz_scheduler_state +-- ---------------------------- +CREATE TABLE qrtz_scheduler_state +( + sched_name varchar(120) NOT NULL, + instance_name varchar(190) NOT NULL, + last_checkin_time int8 NOT NULL, + checkin_interval int8 NOT NULL, + PRIMARY KEY (sched_name, instance_name) +); + +-- @formatter:off +BEGIN; +COMMIT; +-- @formatter:on + +-- ---------------------------- +-- qrtz_simple_triggers +-- ---------------------------- +CREATE TABLE qrtz_simple_triggers +( + sched_name varchar(120) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + repeat_count int8 NOT NULL, + repeat_interval int8 NOT NULL, + times_triggered int8 NOT NULL, + PRIMARY KEY (sched_name, trigger_name, trigger_group) +); + +-- ---------------------------- +-- qrtz_simprop_triggers +-- ---------------------------- +CREATE TABLE qrtz_simprop_triggers +( + sched_name varchar(120) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + str_prop_1 varchar(512) NULL DEFAULT NULL, + str_prop_2 varchar(512) NULL DEFAULT NULL, + str_prop_3 varchar(512) NULL DEFAULT NULL, + int_prop_1 int4 NULL DEFAULT NULL, + int_prop_2 int4 NULL DEFAULT NULL, + long_prop_1 int8 NULL DEFAULT NULL, + long_prop_2 int8 NULL DEFAULT NULL, + dec_prop_1 numeric(13, 4) NULL DEFAULT NULL, + dec_prop_2 numeric(13, 4) NULL DEFAULT NULL, + bool_prop_1 varchar(1) NULL DEFAULT NULL, + bool_prop_2 varchar(1) NULL DEFAULT NULL, + PRIMARY KEY (sched_name, trigger_name, trigger_group) +); + +-- ---------------------------- +-- qrtz_triggers +-- ---------------------------- +CREATE TABLE qrtz_triggers +( + sched_name varchar(120) NOT NULL, + trigger_name varchar(190) NOT NULL, + trigger_group varchar(190) NOT NULL, + job_name varchar(190) NOT NULL, + job_group varchar(190) NOT NULL, + description varchar(250) NULL DEFAULT NULL, + next_fire_time int8 NULL DEFAULT NULL, + prev_fire_time int8 NULL DEFAULT NULL, + priority int4 NULL DEFAULT NULL, + trigger_state varchar(16) NOT NULL, + trigger_type varchar(8) NOT NULL, + start_time int8 NOT NULL, + end_time int8 NULL DEFAULT NULL, + calendar_name varchar(190) NULL DEFAULT NULL, + misfire_instr int2 NULL DEFAULT NULL, + job_data bytea NULL, + PRIMARY KEY (sched_name, trigger_name, trigger_group) +); + +CREATE INDEX idx_qrtz_t_j ON qrtz_triggers (sched_name, job_name, job_group); +CREATE INDEX idx_qrtz_t_jg ON qrtz_triggers (sched_name, job_group); +CREATE INDEX idx_qrtz_t_c ON qrtz_triggers (sched_name, calendar_name); +CREATE INDEX idx_qrtz_t_g ON qrtz_triggers (sched_name, trigger_group); +CREATE INDEX idx_qrtz_t_state ON qrtz_triggers (sched_name, trigger_state); +CREATE INDEX idx_qrtz_t_n_state ON qrtz_triggers (sched_name, trigger_name, trigger_group, trigger_state); +CREATE INDEX idx_qrtz_t_n_g_state ON qrtz_triggers (sched_name, trigger_group, trigger_state); +CREATE INDEX idx_qrtz_t_next_fire_time ON qrtz_triggers (sched_name, next_fire_time); +CREATE INDEX idx_qrtz_t_nft_st ON qrtz_triggers (sched_name, trigger_state, next_fire_time); +CREATE INDEX idx_qrtz_t_nft_misfire ON qrtz_triggers (sched_name, misfire_instr, next_fire_time); +CREATE INDEX idx_qrtz_t_nft_st_misfire ON qrtz_triggers (sched_name, misfire_instr, next_fire_time, trigger_state); +CREATE INDEX idx_qrtz_t_nft_st_misfire_grp ON qrtz_triggers (sched_name, misfire_instr, next_fire_time, trigger_group, + trigger_state); + +-- @formatter:off +BEGIN; +COMMIT; +-- @formatter:on + + +-- ---------------------------- +-- FK: qrtz_blob_triggers +-- ---------------------------- +ALTER TABLE qrtz_blob_triggers + ADD CONSTRAINT qrtz_blob_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, + trigger_name, + trigger_group); + +-- ---------------------------- +-- FK: qrtz_cron_triggers +-- ---------------------------- +ALTER TABLE qrtz_cron_triggers + ADD CONSTRAINT qrtz_cron_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group); + +-- ---------------------------- +-- FK: qrtz_simple_triggers +-- ---------------------------- +ALTER TABLE qrtz_simple_triggers + ADD CONSTRAINT qrtz_simple_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, + trigger_name, + trigger_group); + +-- ---------------------------- +-- FK: qrtz_simprop_triggers +-- ---------------------------- +ALTER TABLE qrtz_simprop_triggers + ADD CONSTRAINT qrtz_simprop_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group); + +-- ---------------------------- +-- FK: qrtz_triggers +-- ---------------------------- +ALTER TABLE qrtz_triggers + ADD CONSTRAINT qrtz_triggers_ibfk_1 FOREIGN KEY (sched_name, job_name, job_group) REFERENCES qrtz_job_details (sched_name, job_name, job_group); diff --git a/sql/tools/README.md b/sql/tools/README.md index c05365231..94c5300a5 100644 --- a/sql/tools/README.md +++ b/sql/tools/README.md @@ -19,10 +19,14 @@ docker compose up -d mysql #### 1.2 Oracle ```Bash +## x86 版本 docker compose up -d oracle + +## MacBook Apple Silicon +docker compose up -d oracle_m1 ``` -暂不支持 MacBook Apple Silicon,因为 Oracle 官方没有提供 Apple Silicon 版本的 Docker 镜像。 +> 注意:如果使用 MacBook Apple Silicon 版本,它的 ORACLE_SID 不是 XE,而是 FREE!!! ### 1.3 PostgreSQL @@ -38,16 +42,14 @@ docker compose up -d sqlserver 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 +① 下载达梦 Docker 镜像: 地址,点击“Docker 镜像”选项,进行下载。 ② 加载镜像文件,在镜像 tar 文件所在目录运行: ```Bash -docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar +docker load -i dm8_20240715_x86_rh6_rq_single.tar ``` ③ 在项目 `sql/tools` 目录下运行: @@ -59,22 +61,17 @@ docker compose exec dm8 bash -c '/opt/dmdbms/bin/disql SYSDBA/SYSDBA001 \`/tmp/s exit ``` -**注意**: `sql/dm/ruoyi-vue-pro-dm8.sql` 文件编码必须为 `GBK` 或者 `GBK` 超集,否则会出现中文乱码。 - -暂不支持 MacBook Apple Silicon,因为 达梦 官方没有提供 Apple Silicon 版本的 Docker 镜像。 - ### 1.6 KingbaseES 人大金仓 ① 下载人大金仓 Docker 镜像: -> x86_64 版本: https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/x86_64/kdb_x86_64_V009R001C001B0025.tar - -> aarch64 版本:https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/aarch64/kdb_aarch64_V009R001C001B0025.tar +* [x86_64 版本](https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/x86_64/kdb_x86_64_V009R001C001B0025.tar) 【Windows 选择这个】 +* [aarch64 版本](https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/aarch64/kdb_aarch64_V009R001C001B0025.tar) 【MacBook Apple Silicon 选择这个】 ② 加载镜像文件,在镜像 tar 文件所在目录运行: ```Bash -docker load -i x86_64/kdb_x86_64_V009R001C001B0025.tar +docker load -i kdb_x86_64_V009R001C001B0025.tar ``` ③ 在项目 `sql/tools` 目录下运行: @@ -106,9 +103,11 @@ docker volume rm ruoyi-vue-pro_postgres ## 2. MySQL 转换其它数据库 +项目提供了 `sql/tools/convertor.py` 脚本,支持将 MySQL 转换为 Oracle、PostgreSQL、SQL Server、达梦、人大金仓、OpenGauss 等数据库的脚本。 + ### 2.1 实现原理 -通过读取 MySQL 的 `sql/mysql/ruoyi-vue-pro.sql` 数据库文件,转换成 Oracle、PostgreSQL、SQL Server、达梦、人大金仓 等数据库的脚本。 +通过读取 MySQL 的 `sql/mysql/ruoyi-vue-pro.sql` 数据库文件,转换成对应的数据库脚本。 ### 2.2 使用方法 @@ -119,7 +118,7 @@ pip install simple-ddl-parser # pip3 install simple-ddl-parser ``` -② 执行如下命令打印生成 postgres 的脚本内容,其他可选参数有:`oracle`、`sqlserver`、`dm8`、`kingbase`: +② 在 `sql/tools/` 目录下,执行如下命令打印生成 postgres 的脚本内容,其他可选参数有:`oracle`、`sqlserver`、`dm8`、`kingbase`、`opengauss`: ```Bash python3 convertor.py postgres diff --git a/sql/tools/docker-compose.yaml b/sql/tools/docker-compose.yaml index d6f615d09..0fa95130b 100644 --- a/sql/tools/docker-compose.yaml +++ b/sql/tools/docker-compose.yaml @@ -58,6 +58,20 @@ services: - ./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 + oracle_m1: + image: einslib/oracle-19c:19.3.0-ee-slim-faststart + restart: unless-stopped + environment: + ## 登录信息 SID: FREE 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 @@ -73,11 +87,9 @@ services: # 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 + # docker load -i dm8_20240715_x86_rh6_rq_single.tar + image: dm8_single:dm8_20240715_rev232765_x86_rh6_64 restart: unless-stopped environment: PAGE_SIZE: 16 @@ -93,13 +105,10 @@ services: volumes: - dm8:/opt/dmdbms/data - ../dm/ruoyi-vue-pro-dm8.sql:/tmp/schema.sql:ro - # docker compose exec dm8 bash -c '/opt/dmdbms/bin/disql SYSDBA/SYSDBA001 \`/tmp/schema.sql' kingbase: - # x86_64: https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/x86_64/kdb_x86_64_V009R001C001B0025.tar - # aarch64: https://kingbase.oss-cn-beijing.aliyuncs.com/KESV8R3/V009R001C001B0025-安装包-docker/aarch64/kdb_aarch64_V009R001C001B0025.tar - # docker load -i kdb_x86_64_V009R001C001B0025.tar image: kingbase_v009r001c001b0025_single_x86:v1 +# image: kingbase_v009r001c001b0025_single_arm:v1 restart: unless-stopped environment: DB_USER: root @@ -109,7 +118,6 @@ services: volumes: - kingbase:/home/kingbase/userdata - ../kingbase/ruoyi-vue-pro.sql:/tmp/schema.sql:ro - # docker compose exec kingbase bash -c 'ksql -U $DB_USER -d test -f /tmp/schema.sql' opengauss: image: opengauss/opengauss:5.0.0 diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java index 91f534788..d611fdf23 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java @@ -290,7 +290,15 @@ public class CollectionUtils { return valueFunc.apply(t); } - public static > V getSumValue(List from, Function valueFunc, + public static > T getMinObject(List from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + return from.stream().min(Comparator.comparing(valueFunc)).get(); + } + + public static > V getSumValue(Collection from, Function valueFunc, BinaryOperator accumulator) { return getSumValue(from, valueFunc, accumulator, null); } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java index b8c8e0b2c..3a67b905f 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.framework.mybatis.config; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.util.collection.SetUtils; -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; @@ -42,9 +41,6 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor // TODO 芋艿:暂时没有找到特别合适的地方,先放在这里 setJobStoreDriverIfPresent(environment, dbType); - // 初始化 SQL 静态变量 - SqlConstants.init(dbType); - // 如果非 NONE,则不进行处理 IdType idType = getIdType(environment); if (idType != IdType.NONE) { @@ -55,7 +51,7 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor setIdType(environment, IdType.INPUT); return; } - // 情况二,自增 ID,适合 MySQL 等直接自增的数据库 + // 情况二,自增 ID,适合 MySQL、DM 达梦等直接自增的数据库 setIdType(environment, IdType.AUTO); } @@ -86,6 +82,10 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor case SQL_SERVER2005: driverClass = "org.quartz.impl.jdbcjobstore.MSSQLDelegate"; break; + case DM: + case KINGBASE_ES: + driverClass = "org.quartz.impl.jdbcjobstore.StdJDBCDelegate"; + break; } // 设置 driverClass 变量 if (StrUtil.isNotEmpty(driverClass)) { diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java index 974986fca..3929b7106 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java @@ -18,10 +18,17 @@ import java.util.stream.Collectors; @AllArgsConstructor public enum DbTypeEnum { + /** + * H2 + * + * 注意:H2 不支持 find_in_set 函数 + */ + H2(DbType.H2, "H2", ""), + /** * MySQL */ - MY_SQL( DbType.MYSQL, "MySQL", "FIND_IN_SET('#{value}', #{column}) <> 0"), + MY_SQL(DbType.MYSQL, "MySQL", "FIND_IN_SET('#{value}', #{column}) <> 0"), /** * Oracle @@ -39,6 +46,10 @@ public enum DbTypeEnum { * SQL Server */ SQL_SERVER(DbType.SQL_SERVER, "Microsoft SQL Server", "CHARINDEX(',' + #{value} + ',', ',' + #{column} + ',') <> 0"), + /** + * SQL Server 2005 + */ + SQL_SERVER2005(DbType.SQL_SERVER2005, "Microsoft SQL Server 2005", "CHARINDEX(',' + #{value} + ',', ',' + #{column} + ',') <> 0"), /** * 达梦 diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java deleted file mode 100644 index d775f17c7..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.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/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java index 99a6c5147..01f214230 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.SortablePageParam; import cn.iocoder.yudao.framework.common.pojo.SortingField; -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -22,7 +22,6 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; -import java.util.Objects; /** * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 @@ -135,11 +134,6 @@ public interface BaseMapperX extends MPJBaseMapper { 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)); } @@ -151,7 +145,8 @@ public interface BaseMapperX extends MPJBaseMapper { */ default Boolean insertBatch(Collection entities) { // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 - if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + DbType dbType = JdbcUtils.getDbType(); + if (JdbcUtils.isSQLServer(dbType)) { entities.forEach(this::insert); return CollUtil.isNotEmpty(entities); } @@ -166,7 +161,8 @@ public interface BaseMapperX extends MPJBaseMapper { */ default Boolean insertBatch(Collection entities, int size) { // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 - if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + DbType dbType = JdbcUtils.getDbType(); + if (JdbcUtils.isSQLServer(dbType)) { entities.forEach(this::insert); return CollUtil.isNotEmpty(entities); } @@ -185,10 +181,6 @@ public interface BaseMapperX extends MPJBaseMapper { return Db.updateBatchById(entities, size); } - default Boolean insertOrUpdateBatch(Collection collection) { - return Db.saveOrUpdateBatch(collection); - } - default int delete(String field, String value) { return delete(new QueryWrapper().eq(field, value)); } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java index eec4172f1..087b1b846 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.framework.mybatis.core.query; -import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; +import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -147,8 +147,8 @@ public class QueryWrapperX extends QueryWrapper { * @return this */ public QueryWrapperX limitN(int n) { - Assert.notNull(SqlConstants.DB_TYPE, "获取不到数据库的类型"); - switch (SqlConstants.DB_TYPE) { + DbType dbType = JdbcUtils.getDbType(); + switch (dbType) { case ORACLE: case ORACLE_12C: super.le("ROWNUM", n); @@ -157,7 +157,7 @@ public class QueryWrapperX extends QueryWrapper { case SQL_SERVER2005: super.select("TOP " + n + " *"); // 由于 SQL Server 是通过 SELECT TOP 1 实现限制一条,所以只好使用 * 查询剩余字段 break; - default: + default: // MySQL、PostgreSQL、DM 达梦、KingbaseES 大金都是采用 LIMIT 实现 super.last("LIMIT " + n); } return this; diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java index c4894cad0..0ee22dbe7 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java @@ -1,9 +1,11 @@ package cn.iocoder.yudao.framework.mybatis.core.util; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.mybatisplus.annotation.DbType; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import javax.sql.DataSource; import java.sql.Connection; @@ -49,8 +51,13 @@ public class JdbcUtils { * @return DB 类型 */ public static DbType getDbType() { - DynamicRoutingDataSource dynamicRoutingDataSource = SpringUtils.getBean(DynamicRoutingDataSource.class); - DataSource dataSource = dynamicRoutingDataSource.determineDataSource(); + DataSource dataSource; + try { + DynamicRoutingDataSource dynamicRoutingDataSource = SpringUtils.getBean(DynamicRoutingDataSource.class); + dataSource = dynamicRoutingDataSource.determineDataSource(); + } catch (NoSuchBeanDefinitionException e) { + dataSource = SpringUtils.getBean(DataSource.class); + } try (Connection conn = dataSource.getConnection()) { return DbTypeEnum.find(conn.getMetaData().getDatabaseProductName()); } catch (SQLException e) { @@ -58,4 +65,25 @@ public class JdbcUtils { } } + /** + * 判断 JDBC 连接是否为 SQLServer 数据库 + * + * @param url JDBC 连接 + * @return 是否为 SQLServer 数据库 + */ + public static boolean isSQLServer(String url) { + DbType dbType = getDbType(url); + return isSQLServer(dbType); + } + + /** + * 判断 JDBC 连接是否为 SQLServer 数据库 + * + * @param dbType DB 类型 + * @return 是否为 SQLServer 数据库 + */ + public static boolean isSQLServer(DbType dbType) { + return ObjectUtils.equalsAny(dbType, DbType.SQL_SERVER, DbType.SQL_SERVER2005); + } + } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java index 611b71565..0f9351791 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java @@ -96,7 +96,6 @@ public class MyBatisUtils { * @return sql */ public static String findInSet(String column, Object value) { - // 这里不用SqlConstants.DB_TYPE,因为它是使用 primary 数据源的 url 推断出来的类型 DbType dbType = JdbcUtils.getDbType(); return DbTypeEnum.getFindInSetTemplate(dbType) .replace("#{column}", column) diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java index f23aeed54..694164556 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.framework.security.config; -import cn.iocoder.yudao.framework.security.core.aop.PreAuthenticatedAspect; import cn.iocoder.yudao.framework.security.core.context.TransmittableThreadLocalSecurityContextHolderStrategy; import cn.iocoder.yudao.framework.security.core.filter.TokenAuthenticationFilter; import cn.iocoder.yudao.framework.security.core.handler.AccessDeniedHandlerImpl; @@ -38,14 +37,6 @@ public class YudaoSecurityAutoConfiguration { @Resource private SecurityProperties securityProperties; - /** - * 处理用户未登录拦截的切面的 Bean - */ - @Bean - public PreAuthenticatedAspect preAuthenticatedAspect() { - return new PreAuthenticatedAspect(); - } - /** * 认证失败处理类 Bean */ diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 413b8fa0a..e36faccf5 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -129,17 +129,15 @@ public class YudaoWebSecurityConfigurerAdapter { .authorizeHttpRequests(c -> c // 1.1 静态资源,可匿名访问 .requestMatchers(HttpMethod.GET, "/*.html", "/*.html", "/*.css", "/*.js").permitAll() - // 1.1 设置 @PermitAll 无需认证 + // 1.2 设置 @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 基于 yudao.security.permit-all-urls 无需认证 + // 1.3 基于 yudao.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))) diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/annotations/PreAuthenticated.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/annotations/PreAuthenticated.java deleted file mode 100644 index efc85c678..000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/annotations/PreAuthenticated.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.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/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/aop/PreAuthenticatedAspect.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/aop/PreAuthenticatedAspect.java deleted file mode 100644 index 808afc393..000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/aop/PreAuthenticatedAspect.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.framework.security.core.aop; - -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.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 cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; -import static cn.iocoder.yudao.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/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java index d30cf6b3e..46a6927d6 100644 --- a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java +++ b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.test.core.ut; +import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; @@ -44,6 +45,9 @@ public class BaseDbAndRedisUnitTest { YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 RedisAutoConfiguration.class, // Spring Redis 自动配置类 RedissonAutoConfiguration.class, // Redisson 自动配置类 + + // 其它配置类 + SpringUtil.class }) public static class Application { } diff --git a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java index ee43fcb43..98b06f95f 100644 --- a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java +++ b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.test.core.ut; +import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; import cn.iocoder.yudao.framework.test.config.SqlInitializationTestConfiguration; @@ -36,6 +37,9 @@ public class BaseDbUnitTest { YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 MybatisPlusJoinAutoConfiguration.class, // MyBatis 的Join配置类 + + // 其它配置类 + SpringUtil.class }) public static class Application { } diff --git a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java index 7b84003d1..ff6315a2d 100644 --- a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java +++ b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.test.core.ut; +import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; import cn.iocoder.yudao.framework.test.config.RedisTestConfiguration; import org.redisson.spring.starter.RedissonAutoConfiguration; @@ -25,6 +26,9 @@ public class BaseRedisUnitTest { RedisAutoConfiguration.class, // Spring Redis 自动配置类 YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 RedissonAutoConfiguration.class, // Redisson 自动配置类 + + // 其它配置类 + SpringUtil.class }) public static class Application { } diff --git a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java index 095269751..1cafbcd45 100644 --- a/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java @@ -134,6 +134,11 @@ public class RandomUtils { @SafeVarargs public static List randomPojoList(Class clazz, Consumer... consumers) { int size = RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH); + return randomPojoList(clazz, size, consumers); + } + + @SafeVarargs + public static List randomPojoList(Class clazz, int size, Consumer... consumers) { return Stream.iterate(0, i -> i).limit(size).map(o -> randomPojo(clazz, consumers)) .collect(Collectors.toList()); } diff --git a/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java index cabceb807..3aded8873 100644 --- a/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java @@ -85,7 +85,7 @@ public class YudaoWebSocketAutoConfiguration { // ==================== Sender 相关 ==================== @Configuration - @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "local", matchIfMissing = true) + @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "local") public class LocalWebSocketMessageSenderConfiguration { @Bean @@ -96,7 +96,7 @@ public class YudaoWebSocketAutoConfiguration { } @Configuration - @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "redis", matchIfMissing = true) + @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "redis") public class RedisWebSocketMessageSenderConfiguration { @Bean @@ -114,7 +114,7 @@ public class YudaoWebSocketAutoConfiguration { } @Configuration - @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "rocketmq", matchIfMissing = true) + @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "rocketmq") public class RocketMQWebSocketMessageSenderConfiguration { @Bean @@ -133,7 +133,7 @@ public class YudaoWebSocketAutoConfiguration { } @Configuration - @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "rabbitmq", matchIfMissing = true) + @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "rabbitmq") public class RabbitMQWebSocketMessageSenderConfiguration { @Bean @@ -162,7 +162,7 @@ public class YudaoWebSocketAutoConfiguration { } @Configuration - @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "kafka", matchIfMissing = true) + @ConditionalOnProperty(prefix = "yudao.websocket", name = "sender-type", havingValue = "kafka") public class KafkaWebSocketMessageSenderConfiguration { @Bean diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/webapp/test/Fel.pdf b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/resources/webapp/test/Fel.pdf deleted file mode 100755 index 405b67fedada1d989b18a7d81df1149fc7ebec01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352908 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
Fijw^)$D%QILN=)zF{%qagD!ovQOM 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

Ql{C5jDPsKZ(&1FAJne`d?X^bb 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 z zSTS)o@7G8M<{$wn;rR2vu<;sH1&MaX+-YUirjAUBpJhQ@RQ&Yosn$--0}*^j3exzH z!Fb@e9OL~gmh^?zT=z#TaVm9sKV%|8zhBpOKcnUR^i}vNe~RqOF4B|s0^IREXg+aj zkf7xN8u#*V{71k2iVl*ttUtF_cKWbzIn6CadqR|4UNpcjsQ)bC zw8oJ+ca`b2V9C!5h{1hbJFBwng5*BGb@p4W`aUjK8kAW?)0nl@(<aH#x=`}MUpdF4E$EQ84tJp*vefArjs6iI}Be~vjt{;O_3*28mN6C+H$~(Uqt^44#LpqpMu>`sKs#rurPH)Mn*Qw zHhS+^!&iKku-QC4zBqF>2>WM+Vp!M%0D6tucO?U*9G-_s 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 S&vVgA3mzVJ7i;d^|firQX1! zNkDdA35?T&lY^F4lJzol7#a$Io}n! z!f&{Sx?b7ze(}y>Dm8+{GbNXZn?Do&Z>8s_mMOxlla{vWx6{Qn!|{^kc6W3|lAzU29!!GJC`t*(!?QI%ht+E8a`qnE zG2I-cZYrL+$@Xm5n8N-C-iSneJ4kl2I2ewK<4$HS?hL)96XVc}no{D3#OT`IuAP1E zjnAyFuU_)wrqfHyyzs*;ZZrbByEb}z+gyyYhVuhS;ANTV=jwRwmFfg1uR2@tpG{71 zI-LkdeMcQm9cqU6W@*l|L8DG(iZl$8&N_);u(<%h>b+gWQk z_rEiX-FEqsx|hMeUs|H6^&PD&uv$qglG3a1WT|8|iDDO(S88&D`*2}ZV&yAnnVy{v zfPPcG(zgO|tgb+@CtJs6&Mr}B(c@8JGZ#7hux#dLTHNQ3yMfj2*-dk_BUXE+T2S$v z(efkrN0T_UrP1PhBF&7h=q66Hy=knqo6Ts+=qGOaK%^EDKPN;&SHO z%Tcj)PU20px3hJaHj2GXH8tud*&tV^a>hoIuIzWMz%!f1(rP<1Tf^9LB5A+`ap-hR zHUd<$a<1+E-O%-aJh3-*(1tE&JsoV{cto`cgb4o`PgQ%opRb*J?|JDhcz_Y#4!mVL#8R^;CbZ?>==FPGAR)zTto!qkhKr zs81?lav-MKMsn7xnu+RDeKOr=SMxASgD5V#8=*DmuACF=!_*5!xoDQTl!Ggxv^Txf z4x>hJuJ6X*<3v(7N}V7mrNNh~nd{OhN1oadaM6p7OFwjjzju6mWvx}NTbu2!Wg1@4 z8-$H?vA4B(v17JQU+Q=(sq3sLk8x)7j@|euYZqoK4I4oaBvCtmxNUcyZ^dSD&{Hd( zB%8?xkzSece^n(-y?WF>I@=&i2MWN5Yo@p{oi`ZtUEfP@ zMxyMCDBTn7#x-^8eU#tdkFpokO#LAA%iQRA&h51Ppx^4csgoDMMmudT?v_z}WSpo= zPL{UBmCb81{covzZ?nex-0nCmt+d%WjKZ~*(6fhbsqjKc zrVTR));7XmD=|A^+O!s>&e>fz-D)4PqQ^fx^ADVpH2Fl0Z-8Jivze`eiM~x@dho;0 zm>!x!i{C!D`TRKC49CCnUnRw3lZ7karA|^^-uC=EcGwz6{`JynTCb<&4L{jf6pI(K z(@Wy1mDQ0Q?>WBvnEQ{0!_~FwZ!0c`>Nd*A_8lu9r_Rv)n5WJIYp(|lTXwybyHT$r ztqiLXcAbVJ2`G`hn^?eqbhbYCoV3GkF8pT;-@5Smh3{gz-OP&Y4F(NcI}1x73K=yi zKrbbOt6q-J?$bGiWj<%_0=$5@g601x!oM3z>ughTxZiN2hc=zyo3`G)70Ca-Gj)d} zNiI_NNIIf3auUb+n z8ukO~3i$^gyyfO`^mDOmSxqbID2v8*$%&x7)u&lmo(-k znN&<{qgnC#P|~NBWR@94p41!Fl^T*Nmy5v2*5#}1CF(lW(1_zQiZ=bw539Xfe_riG zh@}0pfA<>0>Ta2h>t>rBU^3ZM`(+Worf%SUmmfdZ^@LsSY#O7Dmb(-k*iEBp*-hWM zok=eH58jo!pZ%medPWjroQL-CczYB#!r|7nj|TBdr;rVAU5(SwuKXjD+Y;9oju&oK zXU-xEC}z*R25G<#*gtFf#3NC4;Fz}EUv4>S<9FdF=Z$6GiwmRIH@hvNmhGHZX3@Ey z7115FQ2Mr;+~2Z=Q%YiJt>OR?WKK6~y@WExriwfV~JYMg+4R^44`6I`jIJEA#qcG|;!)jJ!LKEsVt?|M^HH)r! zqCO4pblkGml|2Dd#A-VI?!6ewE;QOJbOOQjyn*rMEJ>~Kf{{wRc`o=>wMEl2n%`77 zrCUTNQb$ewFRK0ep7OAN!)n`Y^v;hqw!(2Lg-3AcHAGV?(c$j|MLxCRqD_So4j>__jv8d|%nnasDi_gK8)2cEs=$Gs$PL<`k^RW&#K zRmlskEqq|%Bhq&G#KN~Md`_MFq_2%Qn;+3fElCn5fQNK%cx)MUTkxINOb2 zOc+2lodnweCP&i!YhgN}=!!UQh)vO2G+VNp?z2vGRa9$a`%z#>j-I=AS0Y5_C%c0n zy(GT9aIJ|FA%!iML$al@6$mGy!o8uP@2J_2uPfh-zCUbowJD!BHV#85EN*iQb z?Id_UJQAT3KKtuY@teNW{bW>p)^okjg!$)uH+io*);)PW5%KGP9Ohv^-iivdC&N%` zfQjpc)_q5bf?6KPJjA3N#axsaH>(`S#;qF5=P^h5iJE%P{uEca=BhSL92 z-GyUSJFaMj2v)pN9T|>Tzg{_Cx73whp|iUstKKlrHKnbWIR0n4?oO0Hb{J>h?Yqu> z|HKTV*k8IT>wRf#?t5{=d)a)C?>rEfAB_r$`G4zR0ruVvrHnp3I|+M+_F(zB_B^$< zD{5*8{(WiU9ZS{W$(6KaW^JS6IQE^WxUwE+e`;i@5jfG7nU}T{2)6HTSgHHuLtW?6 zzUkh-*fP7<;;

nRS0ueB5-y*zf5+@rWbTq95Ww|HjE2iQ<`@NE9Ww^yEdp69Z4DKRNCTKtNvb6^XJrC z2Kw@bm|P;%nx440F|&7AJ5ko;K$wAjDO_rXjYxIQN!*S~kxJ}Ov|EXk!X`}xw@tT`7t(U63*w3zx&L3rF;x%k>y0?9`-55N0 zTkUA`hF||D+f3u&O-);)$@5`RW_OH4@BeuR`+Hu?*{Pd!k^?YeOk=d)?IQM2qKRb9H%rPwWm`Vbjf{UJ-7Hp=5j4+p?dB zQumTJ?UlVKeN23tnZ%8txxVJa?vfd0&A2H%$N#d_3zwqIkjAT94m>mIxBI5qDvH+s zusk%~71M2do)ZVzN|>+Z|56Th;`EOs(!R7}w0c3@lwF^kaQknoTddY9+vQfR9#1Ow z`m~dk$ekU+(=%HApG5SqTE(|mZAI+%#O6ge^tX0`^r4X#zWd>yHM)*O!1$aI^&Q_7 zYFXEg7kM|XCRUbMz2lB8*~p<`G@I&9W&1eD_Px-&e*N=i9EWEA7YAn8_oTpmrMgSD zTFLX5)lPIpS=EmF$&I*oW7iDt!{wmdO>tf5?u`w<6ro!VO~16FrlPWQPV9WLC8g#d zE*>04+4XZt_J}&IRDQc%%76CP`&O)E;0(NB+zWXX-2-g}jyV7(`5 zcEh;bjEbGO+-=$CmX&+R-IUa}WXti2f?>6DM4b%syLykN+IRe@UIBbKv&XFJ-`T&? z2Ip5-=_P4Mh!u3cLJYWL$~cKq9B z>dXE#EZdIUv9v>%%p|ohpPqhOkS$AeQ`>FaZNphMSGTuc*lk&fWWJY6Nn+n+_RK4xl-~qn+?PMRmUp5WT5tJ4otU*pMGj{ zE#EBEgx*SIh2iCm4aI+Qea@&l8|$U&JRnOQb)nA;I|BRv><7I76?&`#k|=&X*(P%4 zTRNSb>MZTAL$wn8XB^9GB$+W-37X>Y&ZAombLXPCIyRe~OX6y>6NxA{+PjXl4I^>$#b)G>gUxQz==V2U*Q2m$oVU!_Y~HxvG<$1hGq%;jw6=XAY_!k& zjm^Mpuh~{FHy0((>kV92;zkk~o|g(Qm7=GNnpV@yVlTJSxI45=!;jZK(D(hOHA>T-3m&fZ8mQl?(Z>=$2t&sLt;+t;>& zM!tEH1rIdrFin@Mar{@+9T-uyru4qr(*`CMuHKgRR(sr6?353WQEmeIMR~ueC^*X{MFgGO-=zgkQTk_`SHER56=M@+j_$A zNNrv_om%U(7I^mhR(7O_wg|YE`bJG-G zXt+@-GS|E;VsS3LAr8_FJ7`))xIR=zHb|scm0?X?w-jw$mWf-VROV?eh0dkpeQAvk z+s%fvIO;dNqRiu;FXdm~b+gRz7Q?9NJEmnvQEV0QC~2fUCor?nDNQ$yea8>eKpl~1 zWv=aKZnR)X3r0z2wdU!3t^PZij#2BnR;E|eN0X}q%g5jU38^H#Ub%Dk4wL-Z3)c!U zytz~6LnG^%?WWxr^mcyh#*HVF8`2sKoTFAVybu*v9XWQP)f;TL%;I`a8jiup`G`Ha zE$3fX+;mUPT+oT-$K&Zjj_EZF=%ugPdkTj(YA?)Wq@}{EhY_@llhd1Gqu~!bU8#}# zwp3kLnvJ4qHF`mEF;ka*hJLcSBX-4`p1l-iH~ph1d&WO>vasWK8qIXnmTYBk;Dimg zVX8AXJmtXKvZcW^jI7MEww>7QOVLrbJu^y!>`LDD>~4^4N@aJa{1^5x%(udP#m&r7 z;zw!TiA>8obR$tj)m0CJ*2Eg7op|eN=jACL$f71^3_N-9jQ>n`bKC_cdlsrH^{@4} zjEkck$$jp4Qbu_FUeoHl`1UY8+6=Q#$mnaa<3H|7(QY-zl3$g5McjV8z9BXh9-BdY zuIEZM!m(uH&yPxT?XuL860;w=QIsxkhWQb^x3>AY7=@bkiIkRfM2^; z51xlhI}g$eSJmM>Vn5EGQXAuPCobZF+b|5fy&8_zjm=KfctdT+uiUq96sh5Q*^fuN z%eL=i5V`jG5Tnm%?%Owdt<@Z$>6^q^GR~@_X)81y^vzOB_-(FoBhxXFqAlVW9 zUThEAtGPK?9bc;0du}*>?6$IB5_aDT$EGVaTeIN>*=iiSb`)e?%k;aEHS%4%(z*X_ zrIYSf`t~iUoxMW0L`=v2hPVePZWuEcz)a6yQd{-Fq&%LUztsNthV0mS(@WNRPUxme z`5Jqoa2nRoi!Ww92}{?Fme$ur=|#@LyMy!<$M2?Y(UxZL;V=l?z>A`&yBRi@%jMJK zLFzUA)bX3em1v`IHae233<=Z7J}})i-?u!epIyoe&u+Q#ruTiOmn8jxx;s5K+ld)1 z+Hsz=VsCG|HF8bK0*7P2k*zH5ij8i(+zBUpg#NOkuHA*J(q?{6YH;tW*4_Y8lxJ`| z&~V#laI4W(Cp(DLK8s`8TB45nnl2PNJ-#6kLfZ8!n~H>1Y|q`24fYDfhhe%4P`{UG`1RrU8;Pa;9rOE&#Rd?B$myP=)?N(>*F z?y9fO)AQ3yqimchS3x(E_;R?s{L_n)1DDN)YeaZ8iAbNxb_-{CAvQN8Xrh5sFk&;2X21<0a;p@DEef@u@kgW-ZF2h>E_L>j8&Cgx?^~4I*0<>3pk!QEvcuNZA3z@amQ`c-ackRR&bWFEX_@Q&JqP7Qz#z}QgY{Q!IQ~Yg1v~3{{g6s*yD%S(4 zIHviDal=xFQEy0dN!tB^vvl*gmzjH4)>~HYg=wMAhFbSy?|Tk2-|cq7JkPvAUMw#A zdtGz=j_KZ1XDYi(Kk5~RFdB_O7;(=m(=d#ml&BJ0)oj`SQPGXHFp_fV)|n^p?tR{q zbselH<(|1R+m+XhG8KV;RkWQ}m>s*GHRuQTOKEc6$Py8FrN4Ods8j4-S?S2}kFwIK zdJ#FFGow5TR=0Pgf+OY3hy0+SHkdi@tLDPu*jxIN7d6bPAEw`GMNt?(RXO7)-lP8@ z`|%aok5!4|cc$lRTsNlc?p7?eN_Vy|D|_Z_U*7Xvl)Y?A2xmn@sq~+T^OrJbl)WHP zwQQT7Wgd;CEG!};v?QFbop#IJD{C#U-HeiMH9B_c{sSp6KW(&Dq%IJb;da)DQzLBW zPHHzD>z52Kiv7V4c$w;$~knZI=Pq?3!C%d1_xZAFRF zqudQYa>L!*+e35nPFNk=*swab^-TIMGi+ymxAR`ZNn&sGLqTH54mCp4@0fi*4ALjm zP!Yx{P1TZAv!zaUg4u~`aasflz~r))mA4$JFBmPa;aS%|9cSBa+G{l}zw0h-8|RBo z*I3Px=6#NT-N=*=tZ25nnk0f8*G%pzIhFaFSY2>k*67fe89oxpj zL}A*Z;rrVc<)7*H`++?k^n7O=WEX?%a%2}*&UekhIn(`s^7*;LFS)5{m<`J_yuL`v zAWEK|kei}5#rf13Y3e*b@&nSj7#4VE@AlzJ);JkLgK-YM9`<8TURdhyT@FKkknKn5 z6HAt~Qllr;T>8?v$af!k#$9^;xY)YB+VNVAIO(Xllnt3^Y@|u(K6h~NPIZ8N=oY52 z8x`x){N66CBxsfgiL)+y=az;tTa2(PhdzuRsV0G*mDCwUOBGlDcNJGZkyiKfbQ215 z5m={(t+PW4*H5QIcs8}Ad&wES#^aAlWvaO>hp-=}m$t&}qKFcyk2XxVnU8YOF)tcB zW=pB@V>gmE$pzWvlXCC!YR8o*o3%qr@s>ntlu2L&%`XQH&l{(nqi$~x^Xn2;X(!7J z`J3H$yJhyTn(jG?{H?7Y@iWtsd`3tX)abZj;yqDy|2g5yA@5BzslU=VJXuMke4#Jb z++3+|!9E+^^@({l>FB!Mns|g;dWJh1 z@DHecF7bWI7tAaapxIA?YZ5$nc{uTKXX`H=2^G3oB4l%yHm7J(-bHQ26)NT0?1%Ri_3W zEnHFeCy?C2ZN+yfy@%6XtCM3=I36%s_>d7x^~o018TZHLSa#_7)GF*WSP!!&!oBKp zl}8jad{K%s5lZ`Xbo=4NIDdV)Yj?~rt@J6$=e^%IZ7G|2H>4p@?bW(p;{Py@%p?i( zj@q6+=va|&jjxOxsVc^az4-UM!nPWw1VK0uT`Tg!cWC{}s&=T;n!6pz6Vxu1g|@z` zJ+5X8^pTP4YT@ZdH7_*LMQCNn)X-YF>#7+#J?1AxwChUQlO;*iY!|8H&}1o^ufXFLE@Tm>PYMIbS(*+VM{q)Ki$31RS0pI+U@dZBn7A?y4AXX$tv9T!ea|h zRaWKM{w39CJp(f7F;V_>@Nve7ctv%VFznM&lK~2I#_FG+l7`TZC)KCrMjSO;i=mgd zc3zhTkR!*-%9=^hk*1`VpK~JDh)*LCwnPz&APX)?I9yfdzhAP|4VCAe)84^n&P%Jb zd1Jg$T9MVX;?3Ue-~FwLg&74=ELwd(Rg9o{t8|Le9^7`^hVM7rW)fA`lUi#<`i}n6 z`s!-M3I9z638%UhpkJLQDEm1+zHZpC%1rZsdtJw<&TROTIQ{5-2RBc?G_)f(xnWA{ z&waRb`?=Y>AW|`Y$hf(pCVoC3&7#Mn{I%5^k#n*4C%Nz&rtPigWwO+Aj3mpKdy%!C znyaVJw(RRW*T;=@Y4e0h;J8uoxZe=r@DaL2QO&8B)yb5vF1#^kPW|heQs-xiXtig( z+O&6e;n4Kx?{9pEWXpLv*v!mfcd#keTd6d@f~@p5ggRaMnmYDuPal4@8Kn1%SJfex zLu1WX^U?e5R)5=z{BGP#?IddX$$pZ$!F40?;>K^gQFEA;qG5Pm*$&OTY>iB#pLNQw zc9*N==2_x3^B`Lcvi0zdJFE8j8>@@v{-!z}SSskDlL~9U7lk5=?I6pnu-$vc@RPJ# ztwi`gtD6+fg_{ev7ak-%ukN0u^}BVx+PReJ21s>K=E1j0(%n}V!n|_S-hU#FgZ|R3 zIDc)wIx+L$B+Q<9Bq`J}tsg#AhaB(AzwqFtet);K({|d@CYPF?DS4nU)iSZR6k1zd zJLre`P@OP5lv=KJr}76Z^?GV&uvh8le{`nXsQU!3E<94Lv0(bm>AiY!HkDm>n68At zB*X3F@bKd@gd#dTk=pZPar#eWH$HeI|9R$EtxNcr6@SN@Z@wuLys23Fhpgnwe;B1- zb^Lc%(*cG2>qsHxNG8=$XGTaC-m;|h${ojlXPUONtXvB$&$W_$&vt#~o7Jaisyz_u zc7n$%PtRQ%EG{*WO6keztSd|}R699ydf5`6_2hxXd{{!J6<)^lCYAh>=k-L}NrQB+ z6-qND5!JzWeLHk*U%AH|qm+8^Mv#18A#IHyF9O$h2XgR({Ts2kHqOfC;<7PrhE1uj z`tG=}ZKD+zmeY`=a_qVrK`aGiyzyW32A$YbI|es`Y$=yIrs-}tQ8SSwFo=VuqPBLL zrGwUQgtoM--Ozeeo%7T1arn82OD4eU#b(K zt?Gt~m4$$ZYeky4@t$Pl z@u^a8PVB__naKJHd;1gLZW!)QS2OfK)oW(rV^J6Kq&_Jq$lcXxWXxx$CLS3_+)t0=NM^Xf?cy|*n5#>i9`2zT7iEIH~7 z&NsbCa#yEaF5MU@nR#pEB>ww1Hg>nRJ{_m!DF4kwHt`qY!1_|tw11&m%=NRO+Hj?O zX1!{ivRbdJZV8<32A&xH)l##GJUyK(Je#iHHO`ju1B&+4jcs1!+O0GdN!Cb2KWwzh z&0lq!o*Y(@wVKXxpLLyP)HMHL zs``JWJ6v=l>$d%;-){S>OA@OF`W_&4=9W4wR9S%wr~0O&!|58|*;63t@D+QiBvpIi z)KUQ1ucO~yNy8usAA8YHUU2-uXM^-XCpG$mK$7vUyErn+ZsXmOFRscy4Wx?im1dC^ zYu)(e+1^py86z0b${&X z!i~yTao0v+`wa2e)dZ8xm3nKQb{s-Kg<11Eg=$M8lNv*Y$ znCa=@Pa49xuTna_WG%=Z@cm|FOA)Z?oAG+XOo}jR_uh8+Jr%KD?6k|&3hjm+FZZtg zp7L3AD(mE*sT1!P_A8nGUZvydoev5k+Smkfb^>F1w4rZ;DfQ6KXm}^bZF1|=R{SG8 z(BV0=)rcEkOhj*EP-adX<%aK;R_tWst^Xz(O8n^9c{6Bbk?5zRR?>Xt;D+!bqa7-5 z-mX*F&Q6d#EXCS+E3u72nmq>xzi4DhJp5s0jv0O#C%*4LY`TtbJ&;)9chr4nm)%ak z)9~&4?cT4PT>I9hyEg9iK9#>3dPYwQz>e!Rq~a&R?)ug{GfQ2iXb%sbQku}@9O%ic z&{&^j@eDg{TkmUP3u8*X+MkTxyU&Im^8*L(T)HFjzR_BB3pf57LHgWzKY4i9PaeD& zq(5>Y4@1x2yL9PNQ?#5Xg7iK4g{9c+ZDp1uo$`21tRA@6l_}6}?`{x~rS-zTmc*q7sGs7CYjrhVs@{m`R!c_VZ#TBbD^dawQh*;KYx7GBdNmyvU1UqMwg727X{`-!X5-zWcjL_Sx7AocGv?E#e#R^Xk^t z*7=>Ccee}W19Qw&Cb3_&CpFmqhQ zWGa2Kr=vZYOV9tyq!^2&z3lk+qE}(=?0(L zXD1>|nt6NExLz26KU7|#`@&@Ff|R!HMrDV7G)iw;!M@sq6FqV2r0c83`JQbgTWY;T zaWQQ4!)9T4A61Ib=X>`Loq=DS2(jpe*0nTqKKS~>&dIrfXO^qS8_%|q#ZEhwR#u>I z%v1An4^}sCzP#|t!s`nkT=?w5m+m_Ajh%rp(U&HE#rEml!vI}AyC#y3uOp#piQ3um+pUk{hTwmbNHtiAiQ*r9Ua6E6S2f8bTdc z|AMqj8s6B6FUu6Iu^1HLQqo8lKYZR0pL zpIy%|y}%)!976U}g)`WW8|&#{%jm4EzAZ>39ff9YyRK1~y+&eq7fU5FF3B0%W z{@d$L?0U8oxKinN#XtM}y34 z8^d-YRyU00K`>YjBXey>8QM?1DUtd)sbOF1`Gzdb5{t)9(72TO*3}oy?=-wd>PXn6 zdd;xXlE>9a&+7ahz2=|%o|CIDVOhnTBeD7YqB80Ykp#kXUi(Ur{^QX9VmJ5+g&;pJ zH7Y62hwl?2dAd4;?YZY<^i}okvKu~e^{b}k241U_{rh=SIFG+#53dZB>h!oA$R#O=ZEXg-Wow` z{_5O+k^(fvgaQ!1uj*ZR4_1%%^ zc)cLKkZp$cvS)}tapSZbbtPke^~TWH{Md!Jmrnc1b8TZ+%APgHvj=`!+Ci)LO7#5p zz}&uQx{DI!dqH-qG=;Zu^+UPx3Z=5I|GwJU;4UN!?S(}-mg=;sC$&a2apjR`v)V-4 zhI=^Q!c%lMn3Fu;dHqv)lvvR_3rE^!#rq_=2hHWePEGH9c{_27j)<=xg!xmqlGblY zNW5{Z?j*UQB+3`O_{Xp0S(sY>Ke~0x3vy{}HzKp^8{@yRn%RDui@X&rm8ReBEOoxP zSK96<%=^j}CMEJnGPVnj)DLdm`r)uFRG$zbi4iR@N)dEyO;`rl9NNIh^Z%&uBX5)xJ> z^*FJ&Vl1zy(@1Z2{m@PB-`#cGWJyi-Y;{AS&SMQ75f0j3d|~g=pb?7ZvTsW3c<{Dv zuMvb{qfE`vuon}F^wO@ByxjlxOOmf%5A)NTLBsGnH!t3KTWYqh-!gCcaoJBl8$@;bzy9G{pHsj8{cqg9`L+M_wSOsN|4hCHQb(I4 zQ2+kf*Zyo_RV;k%KUJ@j__M!fuboAF?kw!fkjdc6kjh}{5Xo>VgRj5&I?mDQR9qm# zq70!7v5t#%e4_KHa6yJc9Y^_99!~~ChK7!B%3#Z2>0cG!(dAk?jiCd^Il3Oo)6i+C zES2^^hFsS@)O{~?K1;Vd)@_V*Q2F~Z6uOSChK-~9XzPABx~v51696|==ZOqgbsIc6 z4jmcZF2hqYEX%Md!+T`d1Gps+G96TXflRlm;YGn`X$dX?e9z#WhiaT;hi!Z=;u}ad`rKpzFd^yM8B(Y&dIPP!@7>UPbi@`Df0;#UefS* zP=;q@_@E3A%Wy}Ahh%s}x9bU=M&-RXIrON z{aw@VmvnnibUl}J|F(7fwhn;~DsG_DsW!BA{nWNcbl+58-l5x|zCEDB9o?5}y1kF< z_(yg6$Mv^U-H+Qk&$@2&bzSCT8b&8NjT%cwhF4|yWf{gYd_sm58G15gdOQ_emSk9z zA=P86%24=F$gm-UuY-!qHN09fC|oXOc(?w2mkbv)JT^3(2fFMf9XHm`mvnec!)H&2 z59wdZw+PPzogd#%ZKU&`*LAFG*c4()TZM+(k}k8W(=F=!T^;&5 zzNf=woksO*S@&a0mvKoyKcM?^MZ@G&m!-zxM7MoShdo_~8jBs>W$Io3o_(Ee zTi3m=VSlLGtDZ{@%T--ptmAjY6j#Q&-=|{AOC$YV{ayuls=Nv(-Y3J$x?Kc6m3~u9 z@ouR5dsFv$SJ#v3cC~cafS~GrME7}5x9wPuH~rqPzbjevu&#^b!rOE_jn}?TOSq}V z>YN_qZQbU9ZpV(!cLd|FWcfonzJPDnblI8i^PcW+NB6I*%RbW21n-WnPvv{RhMUUw zb@5oz5p{cbSkb>rVoF~sEbDJ-9N(q;eM`f8MYrvX8urIJ{{ZqSKB0K|Gy3^q4QJx( zcl4M&E~b12=|TPa8t!V02!|=`=x;A+cqv@FD5f|?=`QNu>-zVcn9{o{V^_ETd&PwA z#=6al$Nh?K-~GBTiXN4$eNOjB!Q(XzBQ@TyXc*ko-yhQHUxq+&AaQ;nVC{K=^uek9ncgzyCr^aCxBnh~a`BXNB9}CMG=iV`8Ff9B4SHF;P0H zqSa7L_?UY3^_bXVB0oYMm+16M`dzg_>0ck$&kL-b_tLQ_|F(W6J(*+&!L6s`)bls# zzA8QABQkuWnBbWDReVC}t_nXD-n^vKk)5D$_$mEM?}{#-&_TiMw$6V^Om)UX-5%mE ziU(fTaQzkyL(=OMd=&lsq?qu&RXq-ho)pb2Xd9SpTU*5-3WRFwd z8~T^Nc>tRQXao5eLJf~4U5|=i5K}!a*0@OTp&qMLk6obgJ%;r3JSuC^Aa7Zx)twJG~dzXE8HE6sT~tSI|)x8&~@kf*Vko) zI?ji-EsLprO7LkxKd4NfrBQK;|JR&Vz7` zbsr-Q3+e-XqjVvZ6G49+4ew=LP6qis7%v*D0P3TDd%AoK2or*1EM~`r;t-~VnBoxf zR~O3hSRFouK=+Aoj@r-@Q~V@&xcc1@Q+)Oz-h=$a?8M=HM{V)gFSeg(WJ65x z1oQhfWqD9H<;Q1|BUnD>BU%e;0`I>sX8Wmvt?P)zEIctUZxg;dEFITX12GFvEQ9xd zUfVI=WpRin`0l_nrlG#O5OBJXSxi2m6F|2IB7aaGVWU znFQ-t%=QV(#PN^BY`a4EhJnWs>+qh_8>byUc03=}TbCcl+-LP;*;GHLr#gMW6|?e$=d0^4=UoW%uqKWN z&NKZvY3uqvFWzO(d|c}ISsmZv@R~>0KC7#)&4kCuyBsKsw~51)w*~uwuyf|*hH)my=i3rwyO0i^i>dzD5>wgN5wp58**j?WkROut zXVRw={S9?euK!}YIQ}bpU{k-N-IYQ59Mb1v)|T?2f0U2f;ESn_P4HDV75Vj*&A$fE z)Q1s_?UH^+-;!#>K-Zr^J5n*V5j=nc!iw~IvR^#NlfihA?G!?J1WT$jV88V2iK(w9 zg72u)Ct_BI;A2K@jG-?S7eT;!slC((!tGehjuE$^F(A&6Jf{99@J-oEmxIITY8s~S!&#AAmt{3@949_&))E~~rsN4{K36?3V z8)XjXTU-}c<+NEE8V~Z{b#;7COnC>5Rj9vHUW%)eZ|XOPdburvau8upHlPphjvnWj zl~25a@YaE{3EqS&Sgs4-2(P%!hj_sGF6UiHD=5z*F+2VdD>H?1@1^e&-Vr`y`!PS_ z6ZVgI0R6^dw!iAPt;dUKlJLIHHlVyE%b&4w5$Cy#L;bJLWP#J^8iyZ?5wxcoz_G zF0g9?~NTA1`=Hm(PXgxt9ruqQsW*wbZ;SuSwL<6Mzw#9V* z+1Gg$US?v7f5cBzTBZM$I;b=|IzP1`)$Jg?kYLr)Z7Ow|7L0eM+fB4gIs&!72V>vX zX$baI9@X2{X$z<$(BIqocUw&T^GFY<`xC#QK1Di@5B(?JM$d(Y8O62rZw%#9J20;b zeKExa;%_OuCy9@rIAUPyeE{Nn^S3N+V1V@SM|;Fan34r^;0 z;;8KzD;r@*b@4uV5T8I=8WWN!G&VGMkU<}pb-F}M^)XtLkwV$jUeXV9RtMn~!JvR| z)P^?XA-H0HsQowwgbxG@oEJjdgvO6-z8Lb8ev0-I(F4iD4CMsQ2vo$xmoQyQgjR3GsudZzwRJE@I{nDR0Y(zhWE8q!iMT4SYqCmnA(UWUs{lt@Q!GS@)13e-H$MjS)lKnXCUoS9|;!; zmx(WutR&i{@2@@_Np{NJgpOo|xq?B+F<#TVjg)$X{?AkuM_Ma(vDq zO(|w!kL{)Ta2yw$eLM|?ke?9#lU;{$aRBwBETsG-570&6J#nD>o0l<;)jPwn9 zM;{5r&ToosqOsxW(3U29o6l#|&2MlRqMglsquj@U{i*Y_Vm{smq+POMxz7#j zq~DmuA?$Fhv5(vzO8M(>4fF8w`561+?tXHAA(rXa)JeJv;ULK(^zCGjp5r~zBlkli zejxnkwGYeW_`qoaaTEPCoL_J{Mjs`o30^<{Hjf?==Q%$jJgb8}wg<;F67%6jFroD1 zdnFx}V1e*N-#^DYPDhAioL3RwLw**rIP{U#@gAHzL7be&qv##i1yX)oGe!Y@-@Lp! zI*V8u?hEDo3daJ+8`ll;e%IkPmPhuCUDJOL($IL59@b{x(MLsekU)CE5h{aVO8J#6 z&f%SS0QzuUsE6YA;Jmd_k2!_(#d_NoTH#VaoVlpcbs?gbZ$*L zsxM}F_xY4; zhcW6A90r`v)r}V)&pN#Vc@FFfG|We~j+|0AA>eW}xr>c+gTjq_*+aetnUQ#U5m z9zHK$SALx=r}h^RhjccNPf^IlZ2RldAs!QqdHI;m5wkp}u1{1KwtHTm>Vh*T4)YNH zaenEuxH=j|U9zrz8fTByk9-*4iO*sFfR%&m^7wdjS;E(wBA$~kjPpK@KY^I-E4G)* zelAn6EnH@)IK@ZQo{dd0)tzu`3FncQArHi{p*1_C*F~Zp4wMe{eze6y$b+<>)YMP@ zFXD;RPxSktAAsi2DL?w?X>4fz2yF$NTSZ?mu1`U~DEipRZ|y<3TQ zAUlbCl{mjeupz%X;RET<X?~$*S=$hJ%a|5)F zgZf5uW8_mMA1>i5>F&7Z4c8waUnbfh+QM;0y2JHv&1(HFEKW@(o5NyHJ{vqU(I z>ygn$K-#X8^ECHM{pEDdeThhu1bg%oA%7vA1ZfoYojRGs^>$tk)m0}8QP)}*Qy>4b z9tX6Q2w$lGh&wnxxFn|M&)|Hl8lwTEr~Q>7lt*PJP$sU2UKdlDtMbv=6xa@ILtaxh z%~wz!oGZv#{Uqa4D39V|sFVEoYHne%rd%pJ5VQTqa<`!UA;jZ;Ok7uie(AB8<-OE4 zf*r0`AfA;$`7JREE0ik*q`@@~*gjfAq~2Fqy*a!`tX_f}A17L`Mtq6-OXq@kViqqb zA8!|p9iQv=;Ty#-iP^T&vj=4$36SMS0bCNWl#c2RxNaeMmeD!@Kru0qoX9S}$l!>&1 zv_LWe>2(C}e7zsfkMuyai0~n}(L5ma8}TiGdQj&fJt2bfh;I0L7@9{$xzZC;+UScZ zUUB~G>2cfC?9o4lEZ{k zq`To7Ak+&ZD3jX&5(K$Qli>7i3moW~X z(T2daKBO;@Z9*~v^^iK)k?um@P$vtaTuO&NP}FlmNLT0kr!pgW<~AG7+n~ORx)Pt? z;5Ih)F@m@N;xHgwTvi6IJ*l%xu`kGTe2A}W6R(%*4j^A5X4{VQmjo;H;S-La-<;3$ zdF)$I^Gx{(fAKr@U-355sYrJq-i+&Ysc#9qqYg~6D26%-_fdBsnM`G2`6$EbJJA&4 zu>*CWK2CNGy`$gVh4-GA(o_%1AYMUs9NG@letI84TQQ#3$?@A`<#xnuTRq5+_=oLx zYw8Zf-F@cv5&ohdvo4O?nq*&M8thjHc{ndYdo6^3wh_udDl3F%gb$`CoJG1LTnZo# z^+1wO0;<#s7uf1jL{!6Po`5|>O%y1 zus&`dkbI$f2){^|Lp-&ie$tT$=etlRpA#flA`KxP;Q4FB+bIrp2J(?{J%MZ%f&urX zV?2!)l})rvWm{sZFQR{+@D0x^AzGrgBHk0ca8D?`=Q_)$GR}wMEU?sTl-8L=Y=B z34Xr6=l6S__jBL>yx-3~_niCObMCqKyk3`a!;<*g_#-IJNuhX1OA|WiEcM4G9%=Bb zrM;@Eiv<;77&#olSQrmiyK>NYIvws~NvO#MAh5}wBAY3W)5#&wX=|gG5U(xFww9ELUyb2<>R(dmO!>y|3<-(7F_1k{$I_4J0MXck*b2 zYD6LVxi7pyYbUmQ4)=09EX{>>7$i_pb)RwRA^L+boW4ESJ~V_L;(Ib~_)Dr*F%o`a zU8l=X!bj|WrVxX5oYkTci#EZ;IM92seuVK>*Vg7xd0`{)ol=_q-}l~h@PCo-=L6U| z=>BYRe14`SDG`lR5*leQOvC^FT=G-A2OST}x_%(O!T!f9dkcABolorw&$|sKEaR#p z+HANd!|)Sp@L~hK=J<2STxKe|tfXCGu#=F*1oO3&3Ys%x=ks5u+coBXW5yiQ1j>rT z4ZRvT(fHf{%=Ai|73PF{Qbp;%5ZXBQnb3#oYKFi#Fwfb8(mMoespvefhF(z2LOZhF z^%8bdOUc|Ej5X%eH7eJZ;2uOjp%tr}9RdIome(7l1uIq8^UIDrG zurvL0rJQBc*m{FR3EyaY2GKUbg?c5-T`%6tjkM+@fL%l z!#JT99xH852I^4R6Oe-HczYoOiYJBLmg-Lt1H+y}@Fh=9y-FM$IO@z(TD+Zxvcf8w z{~YcL_@j1N*)J| zU3qm!6Qaaz`X4pn>2J$fWZZ$DwIN)ixtn!NkzMy~fDel$%10&EHg-qjE9V@lny`VJyalIhYn({*Wt(z<}5966*c1o#dz%Ph*-7n zOIgHPw#OIt@|xT~0uA0tE6F=5ku2Gco79Wot5gB&4H{Po+-nrI(!>=}VIF)Qsq>G~ zwe1`08&n(aJRw4bd(`h4%EJnLW(80fp6KbrJHw+s*@9o~#gNQ3?hj@JIsVz7y*1%k zPaoFmpO!b13B$VcN;3J>N3W~RK7e+payMj$>_obUEuG9f`*Udj<}F44MNxxJ*ksPX z8Q}w{#oLv2M^&Nnn}1uqdpn7rS^GXMmk0~3wiufsBUJ7lJWr|-#@&!p(A9ETk>-Oy zvJk=Nbo)RLo*3fS;~`s;aVlyToDR?h7Vo9&Eo}amC^ajg#u4^p-ponJK3mlvs8&V{>oV(p!&$bAClQ6(L>xmrXC@OB)rgO08K0>Z?2PFoaQ+@YS+ zZalG|An^)DWUG$+a-hXB@CLh%Ps_HJj6&QV^aC`I8cUpPA0OdC8X)Fz77c$1oy7H? zK>nO1_Z64_Y80j1IlDmRohYqYdjGhA%(n5xs|0ileB6843aZUqut-t(yzQmXPDbI` z`}8emRVDU5a}?peCZj;th#n>ZUeL7dqq0s*fMBN3o*aLmV(Ht#%N$jM8BR`oi7KVr zmStCt6=v`0&i#V>neUPeI%xe<7l@M_-tv6_;7q&A!XPA}{v@t*l&$7cvmzB-AlUZy z5;QTj{X__zzP|rBDcDQt2Wp+LH)t%FI>v&uWhxqi1j=_U`k$bE7jPfsb-PYBOb_7e zI9vW~G-*i*Xk+ewGA-0Fxk@C7PbTX^MpDBlXd67F)OlZg@(&e`+Ck>jf;hQ<-*p$% z)xuOlOW1W3XYLLYqo0frV+#e{PU7%jGHu6OL}Vf3*E!fdwW9g?{*OWo_I?l%XXfTkPl09rMLVE=c=oNpiJ z9Kt5rzg|Ki1_U1}$H^|Soh~a_yi?kLw{ZG_eKg#v|?BVz(MVp9t_R zxpV*wFvP3tFOB8ug7@rn2CRnmROUCTcH<4rLGts~jarP?*t-ONfm{XL6%tk1+ht+} zkS6egm**SLv+@VP_i}l^?p}e271`+6EEC^tr=)e8W?m4W=>s3QbwlY7FV|JM2S~SS zQT4A}yC3$aL0MdQar8u0TS{7i_|k8MI;mP_jF!6^q6bg2ewNAL*uq4kWuz??&BeB# zm^~tCPgH4urF{CNezr`zD0j2q`HvpAy?Mg4C2vX1@OgU`9zyKL`9Bfw<*HO_{ow(b zR1tXuW}OZ#XD3Ii2o=8~ z)a){8yciQsh44&CxYF_SEqXn;SW>!*rh6yY+*DVZGv|jIgZV^S{5A|a@ z?BY`#QfSiokMBsT=#=YE@MO9NR&j-&($(5r>z2Bnr@B7wEf#(H@+c|cHUocl&kcgG zb8+g138H@53O{XqID6|G-{R|Qw*UM-Uz*M2nafYb+(%N;7zKbt40C@_$MZ}dQm%7S z;;Q}8bOoKQwI4tiU*n+wII%WF-&fK&yDUC=sY<^Xa>65JUSc66dDAc{by!o~*s3{! z=3UQV#@KV7Yqo&8Xv(h_dD*VC$&pX~`c+CMv6JFHh1$Gz;rCUFH|kzQK-l}AXSQQm zvY8kZwzS-e{q#ysDZL5~Tff zm#x-6@yB+rQM^S0(syH;eXRA0mlAznOgx^TL`Ad3+#4}DVTvFglO?dGV{W$$>BwqswK0narxkngGg(*Fz-vuBYc ze-Cam;L_X#@-`{%RBS7pZ&LA+u8K2^?D1_|UwG;G5xkBtYQ{bukA2jUH2~ehS zELSe>WB(`vn)6! zO!{B>->=6J-VggIN}PrJ5qqH2%pSs zUu@&s65Km4=pa)KfXUf_=PmJA<|xKW}MOUOFjpdG4Pt>5N(!G_IkBkx96s&=G!CTxUPNf zn!D=-gdip=fVy}h4@9NWsZxkL#{AbS9H3-^~xT9h;8-6(Yk^39t;*FDA@5)D&9#p>~`qK9ADnWS1mw)F8v=t6QT2jX3 zMy}5Qyp(7NFU{)i^MFosDIjf#mlCIHo(sxrQt4bt7kf!cAZd3-vx;2W(>8;7@~d{R zS-~rDasbJ(vR4MFDHzUKc&JUd%Z}6T-Y#)}xvAC|**c@_#;s@uv2eEk+yA@MB&PH9 zj{UJu$H9&4NUZQjpk(2ZpK$i8rn@9yH`k;Wc@;`C!;Bq)_*pkGW(}*}=jDhNVay}z zj2|J=RE>g1f{Qk920P;WH>#_(+WvZLTrrr*c?KxGdv!#c!At*sx(;6dLPL+Qd$Ez_ zIyCRJ`1UvWt*G-}Sjbatuy;O}o=Urr{gaG$xl!Ej*kZoL^nb;sBk7OKjx+8Ty9r^pbpFrGKNK9%QS9`brbfEOgghGNXl%*q2bPR^8{248edj3 z2l02`)Hc72?-T&nHl|tk$kAus-5WE4U0IM*jv@g#ULBK4SXAhC%tD8em581hO_w3D zv(BCu@#8x5v$6f((OvuOY_f$rT%m(^Z@2MHEnQ{Vo&zs3)ARBE^JcN(ECY$9tA{Wm zoV$(kqlKk`p?5%CDg6@6)UAcytKqpvR4Q&V>4W@mCTv!;L5~kk*rjo78^&%`)$UQg zJ}z$jglGOZf@`^j)f-;Ql3~$3WFDd&KiN{8pXlR?lhFcBNhaC!!YajPGx~`g@zqT$ zi}aK4&=nAy4?^&jR#ajebnfBzO5iUrU7`98VY7pi6rw@W)!^Brrc6|n@! zx_esZZwbaC+6}J5)JeJciV9kkZwl{P7llDvC9hJ{4kefmek(0Zi{i=mT&6oPh8PQu zuw|E|swp+;N{5{8=xB`AzdB+to^Pt5Cbaa#^$ zsm7G_X+m!Jbo^*iJ5}oJ61% z0P-;ubWF1)I*fm(X0@TUSKi3SBpg$cmGXe&bP4LuS*HugoCxR{mJ^M zoYWqB(9tgYL-6Q$vU~;K4cd>)U#mY%GyAeXEDy<*(#&YmIa-iTzh#_ZN}x|afcizv15NNjK<*;6cq5j_WI|O(Mhjt!#0!)iV;R)r$^NOj3jpB5VZof z(`I}t;+VY;jJ`o~C>cFAR5}yiSvvCFyo~7Pt8AeBS|Ll%5x)Mxao}ESvK`72XA?*@ z5gBl0Cwa$5r<*FzN0Q!ABbmzaZ+@E zuJm3yr{WERp81=z_CO}0=VZ;!&7VWlh2l09HVN!w$z6dL)R+>=8JL%=-C&E$nXBsj z)A{{O0%FwLzU|v`^Z1zu;!brAepYSx(W5lpL)1i} z^XyTW*HepqjwAj&irQ)Pf%7VWXwxeIRPO`xtf+p*-wu29OH8NJkJO#C(*2$WXdpsR z%5@T<6=Te_lUUMvHp~w%TID`zt?ilkbvxbi(dhmfXP@S|?T;TVzB;{UlJ9%o&L*Bk zxJYi4EH#?4`4EOSI=6^6&Z(g@QH~NXA<>2kH`WFB~%0 z#^^FgEF@pIByMFU-5H6W$!Khv<%a#jlN9h&fVOW9J3CqEIdxA3(b~=C=^6ua?j(kr zw&0wWehA@O*DP5?t`w50um@Th(2!d^qJ)k-D`SH}xp&um&%!Y;%dI{?U^u?n9CBtn z==2+=AnDi^+HZrQZ;On`pdIx%Gl|Q0VdfI_c~O7V_taAQK=-wEj_^^|lPK8nnaGRb#~ zl46B`%*u5W(PsI0Db@EhM4?HWw?4d*leu?J+%v@v19@U5RA|6tSG|u@m9s$7nOUzu zef_fhQKIc8+DDvt?R+Vn=C@@^a^gV}^Dpz10hBT8gEqB%`YiTeW+ElIa`@wyDAj3f zWsuv${;#F40wfP!fK?fnv9PBW8`KaKL|FAS3hHXsvz-@WE8mrKIoWI^1|Fv>#*r}| z$)f@)E(IM??_wT^;YVaLMA+OoQ!8<3yeiV_2V?(>@B zeHkncVnvd*WbTsk&+a4r{)v*`QU_i_K-g>{zn@16GXl)&9zE1Hqk$7fvoATtrRR&7 zPdn6=!U>f>l|PU5sw#R=>^~O0*$UgW1HeYL0>TvU);HHy2&&pzQNHi*C%0~>JS|#q zpOn#OqdL5(-dbw%IFk#hbxDuYJAb)gG*jlmFk?UPx))*}F$v)GWe_B^$D1n(g$?69 zGui)Qzo#}e-N;X9N%V?Gn5+pb`76#Pq89rgZTrDtP~3(ab&&6cDr)Ysvg0Q!%5#tR z%^G!5VD~@HxLT()AascM=(|sturDfazq9)9tatGAU=xN|j?>l;4~`;P9W6BX^4b7LdR3%HvxE z5I?hR_%Z$25aK94&iV)P0b<;$T5|E^{wvx6eQc8!uQ1&Se5o6uRNybn7igMdlwvyR zZyb%QEftuq;QJ!5qP(4Z)qG0x5#B>|b&QFdLABlU&BKThY}uHK={FlW4U;1SMre#OtHh#r}cOt3A7YEuKD?VXqWil~^?S(_LZR$q$o8 z>zsW@4=hTLo?7JBu;5=eKTAQQ83J6`zHHxttF_o+G-k9i`gDtDJ^If68H-_z*1cCG z$K>xqI*{>^(EP#v!|&d=>P2^x$)YKJo|b&ui86gCJ-(ZLj>7PNt%!5(rppD1RP!?Z z2F^>4x6PJgqxmXODll}zrLOaFe-2Vwf*IAYgCIUVJb$?i_mL`i57?$cew15gcQl#* z(co*u;mo@Q>@A65KVo~u)9=O8d!IibEz&=pbtO8+bU*ZHg34uhTV?1a$3G5f-B(#c)G@ItLnRtV^!|fiU(_$nneRM&Sy#+qfq8 z#%edWNxqSbDS2t8Be_Jp?b$C~L-Oe*2Z+^7frRiH=cfy<(FKzmg;d*ixBE8i4!$x* z;jbvw_EBTuYs8S>z04^7D#m9sklFLnylL1aS}mj!7=a9ba7TBm8wWrk_$GN;Xpnx| z!=};+@~eZm@{Jm|Z)k!qAj+dL07CzusG-!}7I^EA=A(YA=BwzIEuqbc_}ici(8s#; zeDjCx0M$Z~&jzm`i{8uorKZMM`j__z;^ zOjwTjHSD5I@>vR*%6CAzH{jv8WdS$LIVk1mpVE!Ik>^8uj6+}pr1dsq26E1xBg2>C zqNc(Z()!MqO&Sb3fn+^B^f&(thRQH4_}s&#bEZ(WBt{@hKP&|}-0n0}2lzxPvMiOo zQ%uKE1Np8iJ=snlQ%w>1_w9rM*g1&JetxfqZmM*Ox(oH-El$EMF}uaR!n5Ub*049- z-Zii5SY4z=I7vciUwN?67%>G{3WNbVPWhmii01Q88zK(7O9a_}h?m@TMoe*jl@+qf zD4T!*C+`JtvD?lMC8A`YT&gW6X?btL8Aht<%_Vf$@{DSC*ft@g$s2l;e7ThT@+5B; zOO;wtqI7TgEG^S01PZK0e|4eO5!z&Hl)KifKHQ!^`1yS{H&+7OEQjG_VF#)(a2a9A z#J-v>^A}tiIEl-I<5IoaYT4uK?w(Y(-bda)Pj*4thM#_))x19@-DaYbW}(56MI7!3RI|veJbDl%hKE%1;~KQW%!p`FOgc_dUoYf3f`7J6CtxoA0X~skKat zVQp^=?UA=!iUt9^_Q49(DhxKJkpy9r`{p?+`x7At#(Wj(IHsWHluc#F?Sf$cQsw@s z0UCJpTUwNqZ(!e{o`V}FhIRvOm(!eCR27JSVnMVwM@i>IJl*q6AVeThiaYoIQts(N z3zIQ!Vq2YPenN%5H{EN#FG1x5y`%x0jaK3Ez07D8x_Y&TKiImD`Bh0~O##T4 zJHf`imu4Bj&51Hd(9MZ?(#o$oUqn9Lr#a%;+OD3pJryGMDd(f60vS$j>%pG47_&Rd zXa!Jxq)8$?i7yiK5&nBv|KhF>)`@j=EYt15uJuQSIXW9`PKF})ym-gql?`y6(RBT= z94+z9EDkZAUts4*c8%nG6D~R{ba@MylNj5{5`G}IYSL14O{M!d z%zY9~AJ=8x$YFrlnGN+4@LUXC0%57$)DSgKx3=EdThbB_^=EMq#v`Ufr=Kx`e8<7< zmM4QxW?Fwq=Lde`0P3_D7c@|`Z!gO*qr;Aq{h~K7F=Mmz)3udU7`yAFMnA>$w8-RF z6to%iyu1e=Q<19%esi?p`y-~l75N=^3&RkUzJLe0jV?{ukh?*7rb%OnCNHe{AWj z(;z-=tVW0U@2bL8%0rjju5+h)t!Q=i`E?{dv&bx(-Me;L|I1X(MPh9(=IDFs5PrO+ttb*pBqF48SxEW`Ipe|Ay8ZqeM+^nT4F98% zzelH@tb6bKSqTCd9}{e{%cHfMeP3?qPu69?xDC|K9(y8KRmYGpy^EV`GkO;(wud9F zCRyr>-wU&1h>cnUyMMvG2oEwvWMGw^RE{#LG6x*|0XYoPmHqDXeA%LPm$vAre zX%Qwu@rZb(YFz|*KROAA013bM;gA?eJh(A3d=j<~wd8r^_Bow9mEitc zO8`@RV|KelXy7L|`>g~YKEBiaX`R3OeNsPB5;wXT`{=fTjDK>qt6{@ahZYW|OpN^WX1xn^s z%1E><9*~}WM9^FeH#BkQDe?F~o|52toF)W=q-~M@i{j2#sX!!9qMz!lu^F&Zjy9W) zb@S>x;{_``C}%WCN6wwmANhBMWksCT|4axU%ko_0rp5ke0YA&G_3GzCgCE;uZMoce zhGb%j^Y<+}O-s>;NG#vP%ahnP!KsLdj-%y;d zy2v4nZR}YTP@d7YZAZDNZ;(5)HOGUoxTl502Z#Q1q!{+y?i#%*`(A7oEw&PV_n?RO z8I+DkrM+4GU$)~0mQU#?r3&W3LT=?PsS1Lt&i5IQ{(YKXw_Tse#Tx5Hx*W0(L;)x0Y-mKd;3um^E@aeSo+frGpOVTa2f(jx~ zPhrk)9kC(E_(zjeDng&l`8VBN^AMK~5cz;F`zR??Bkp)E=(}6M;p2JJ*M2Nr~fd2cjW$JL%hkttM4>*Nu z>VN{+d2onjRBQW`)BYsBEmK+jTmw|^MmqJs>yy*>+;2ab`P;?r-1Xc)ij8g$pGvMA z;(Wf!pc+wSv>ngjNgo;|M9AUXV~|<;zRqf5a4(!F$bYok=UW}56(Byg(@cH3pE&+1 zmprS%--;pR%{}(z&PGN*4ehzpmxv$&&c*kJsx|=FlXF8yqPjy_tSzL*%QiB#EBf@^ zr1HbD0O;*Ly&UI)_uiJK5~7wV(M@l#?}}$_Rc^(m`pOkJUa(S4WgpM;cF?fczeXPq z3C~v&pbIn5`&W2kTPp4C@A<6V!bdmtwtf`pZhfDxx?Fiza#a3~?f%5ec~d4w+xcC< z?%%+i++Josvn_Mt0Psb|wVrN{?l&pg|tT+!BAUX{&RPLB1ynANZ29K zmgI|FZb#8S*WB5=ISVr}@;Fx5Lg<#a|JR#(@T83~)+@6%=QE$%Rt3^r=@{~2i{Qa` zZA`GOBJ$W{Tb96&HerrJAGy4!rOMf}7=E!VfO%DCvWJ<{Osn7Z|1=^<8P*vTeYn82 zpvb?C$DJUceBy1AP5DnL7VNz*o*x<9>Qo6nqmNf^@yR)AC;7YMWk-9DNFDZL|JnwH z=z{EUGXBpu2r8P~v1xgGK8MfpW(8n!w&~{ZdVmFN@~aw765$4W>YVxtvINm^h#>%^ z*^cn1e`e+XlIic~InyzUv`sXK9#JP;NMi(Qz5BfIDz+^X4HzJKMfI+5jw8Nq#kbdT zluPOIaJ+!y+7`_D-61|~*Os%uH4(Bm;}B6a@U=mI#WssP^QNEXf*~c})X;E}S>BVU zKXvb~F@50cW@ToGG~Y7$?g_V7kIZUrz%D;9Iv*@E{T;N-dw<>^E^Rw)(&E6LAFQ%m z^IpGDfv--$IQ&U@pHz;QL2*{f+U?(|RM|pcgvS=wudr=c|Lwlad|4)|Tt!RH2pB0V zC+Nlq^LMIRrfgd0eF`f}N~D4qHPU7qnSQN*P(+m+@=R!SLGfxzWYW@-qU3StG~qf{ zaeFR2lhgzVatc1e)}c)eprRVVm=xpn?MiTvT&a(twoGn@0jIWBkmH$I4g_OW-O^ z(7)|8*lhNyC`Frbu*QzGL=KOds^B8E+>(3JkHT#!YkxKkIoiqS3`|CysTb~O%j8>e zsFPDcMi!9mr>k@KEp}$;;RzIm|6VMIAbMP`&ZJAMvIctJ^6EKw9427?^5ji3E#*^= z!la%|g5*-o)@%g3mo}%rX$0n;r_O4o*S6L&{oKdyIi=TGmr6M+%3UnQU7u7W>7>5e zu)V1y3UA&v*do$-(3=f^;3snnR^UI{IdI#~2_A8;ESZ)2kYoqGu=*U>I%L9hQfz|m z`jg>~%ZK=FlknqifTs!kd;fR2J8iVL1GG*%r@|NAL~F8fr}DOP{;$h_KFQ7tu{(Zu z!iAe%5u^4{5yrVH?}FV6dU0V@JfbAP{lRHM)kXRB&-YGQaP2W2>6Q*)9myP3yq^F) z(IbvF;E`<_`N=>&cj~G0@|`<;IB%v1frG09R|bSW2L~|f!wJ7);?Fq0`>)1^(>hfJ zxdGauQ*)?jb^zj29*`^dxV}#f-0{4Lv2?cFl^25F<%uotIhPr4&Lz%F1(LlxN5&}@ zto~Wp-iw5W=HYRQwI%0rS?*rU0H4Q`Jb&NwBZrMkPJu!tCdnCTvCe-74(hx`jTiF% z$K~z^jo*)N1yGq@mHws*T-{S){OjMxpxk6=j^T}*cj?e=!g zIpvl7npl1N{zYDKOxz^D(69XSRSu zo@vgm1HCrou9;~42cR?F=<)){{o&x9ficoJIy*Y>;pzG5dfjT=s_F=%hFhcsU#p-W zct3CC=mnPj?3t&LCwRYSb(j;&GsknL7jW2ma3PO=pYo1Pdp)yfgwz!J^v8s!d~VID zN(CzFwEn*eq-?*^LwSD3fb1W&uXun`i$fp4_0mQr0YE85yo5?@_`wHjYewz(oOU<~kDDi_D6h?WQzmN_!x7ix=N(vtiqTo1#?oAGFIf3X}3vj>rF` zCzpjsMJ6WY4+jnPx*Ax30c8W(6O9!=_CA0oey)iYMt*z&_ee=q1uhhX7<aqDyV_uqZ0;FcjLo`;MT9L~zDg=P9jKp)OLcb7{5&-A*{^adF+ z-}h-f8E2cfnb}pN(xBaR&gn3yePL}C?G40GHzDtixt+!AA{c_RMWTvM-CMMP8$LuWM zk9*0#+2dLg!{Oh~3FWr#w3nxKO1i{i<}J*ihnx=@@yMVEq>q+AYaNe~`RxSHpV&#-Z<@m?xM!G@sV^TlhU`qz8D=RjXHXRqFV6hrN^G{ zmzrW!V4PV}a!uY}{N|^sKoGKi?_g^BH1~TJnM?X{Zs-4F6JCd+XFoNaSSVO_7BMzc?<4O6NkKF*^d?@b3aNw_-|uXB0=z_qjQgmkRTuP9+B3jC)9N4sn@CGDJV<%Gj2w`% z>qxJ9=HjC1QaU>n=pi%OA=opQKg9mga_NuDz68Z7CnAw8TatU2#d)9-)k(vc?I6>aPpRllwhZP)Ernp2&$8ld6|w zZC6@u2C`6Z8^{CfHdWm(Z*)I>>Y*T$^g*H`crCFr!d^ID9fNr@W+@(~zH9q)lXHvV zt;1f>zeCEnqqVa4a!*t>cx9Ht*JxqN!PWQCxUyD5;MTXO7!5|WG3 z8^~g5Xouri2dL6BC4`=@aCPCg+Xf&U8M==Tt6 zG^|N-eczYqT{*gD%cGjVI4!no@qB-1)N1)Sb>YqsO!(P=nF->Rkr5{yUh*MM;Gns3_hm` zg6N)zSN4m+ZvN)^nZ2aGX}{OwCYS7ACm-q#Y!Ht&g_HhRJR=^xrN2HIUN(3kD{URy0ni zC>G_Bw}MYU^>MX}nGB-Ej{SAS3Ld-;m`dj=eXkscchxa!gtYOQ%HTxio&>%lJ~Hz` zwB-%wHGOH}B(Ai4DMS9=WAVdQ9JK0aGZ@$e&p_|mw3bh9D)<};h8uFBPc@1p%2acd z`8pcn=Jb?&>Yh*%WfEOitaW2;Th`U=G&om!JhBw{Ho746f*R%EB7T~(^6-G`qMxVg zK3c8#Fr#@ZO>-}Z9OD3tIqcAtN+-hb21Zr(b?@U>~Hl}lQ6tW^PI*1~_N=g06^ zsshSxUF?cevLBank;hd3Fs8cnHaX$$Z5r-EKvyfGc<-B1_S!NP4~*B${J5sZSWO^qTh+&1JR$v+3;i*opCE z1g5@BBPKDmTq%|6i4%2_IG-vtd3qk7o(o;xpA-HDL-`d7l_5c29DXRZ*-Xr*D>zki zR1_A*J|1Is53vw+> z-f@!tvzv&N-AD?Ce43mIl93hIOXAFOBylaaqReB4h1U(^SKL=Q zB;7@J-FIp3t< zYzkLKP2q&5M%-qMgSDr#WxF+UAKf85l(8or1fw+lHCkgYl-7rG6qG_~;{9O~vFdlZ7P2@^{ zxmWC5zqW19wNkaR^dHj)dA}P?YiD^IYa(;2pQNmGEh|V-YD$a?xRf8uM`?e2Y*&`r zT@E9ZuNW9uW@y?C`)dDr!bxTGeE#*@^)FfJr^dP-RvOl|T6WONFeh_gv0L)?X^OF* z4L1IuFOpA`NQsYLC)fuC$CVSPPb;-`&(w!K7PS(X`0jCcoiZ{w8Y+XlJ zT%jiW&wbRx^My>t?` z+3D{SEN}i%wfUl-D@iI|_TfDl`B4COOm-RFs3pk(Cz&^zid^29#ud1%+W{tpZ2W_< z!7G}OUVGsM`e%W4gD?yu>1r0liejjk^4iu{=Pd}+R zNZE`p{fN;p#*hls>QB9tcQ_WIpU^sOXorzo)qf;sS`3HGn4HQ})C+P;J!|SZB{oZw zZ@Jl;o;nBZ$$Y65rJyUHH`%`oRn^$Z&CA(GeFuGFz}fa!%z2`Rr^DZ5+2+t}d9^aX zdf!l2gV&y0|715DkRjw^dFUZ8C7NLVx<=>T{#UGRxZ>^C`}$w}Eo*W%BNQ39xXUZx zjd_Z|jjbu;sa*fA<4(D^y;fkvN+1_^g*v=WIYM{RN{Cpw@+=!h-MroeEBKq@Ke*hm z*stKcY9b#v+PQKuyFs(R2R8}Lx)CTCUq5q4peVUN5)(AuYk_wj7#up?obKI_?bmLp z!sIH*0N@EH+H+goRU}1JW~(fi&EwtJM)}IHmsz55F6`)BX}ZH z9c+72<_aD|J-72+w$#V+HX=UxShBhf-OCHf3hAH`esC;pW#5k3@VRrsI@YzCR+S<0 z5&O}HZTqMf^T(?V!)v%+nf$eM%+FyY_}JFp>6sFy?)YmyyT|vsyBQ4$SCK!HOP((q zeRH0=HSJ9O-Cc5^a)XBDn-b&4ABzEhdB2VKb-(U%ibiPOe!E?(e4X=R=XGcnZRFZ! zUN5lk$rDd$%a%VjZ@Bc@%C$=9&3O!z_>`g;(-lN{bSl!wu(xrr2Iqt;JeY&c2?#EIZA!m3cs1vI?f*Sz%`H6{EVsH}Ml(+OChg1)-^rn0K(gKn zQ>$`nK;gdU(^izdBObiTu58%H%K~_Na`S23YK#@@Zf4)GapzgI!60{RWdThx4+7pRB5!Wqw*f=oH7@>e?^l?n81 zZ&odDfYAAV@o(6biB=%nut~P`EWPYwAc;h~ovuD8_tU&5iLlvrKZuRuSxk_y*i8{` zTG5LYO2rj0z8LvqX}H0TIO#<3p<5|m7Y)cTtUJ1~eV}~a2D;nP?M7+D`$AmEEtEI! z_A>$nqY(JezXs9ALyX2|L1>A^zL!v_1QIU?7ge_OVcWn=*!O_HyN>kNV|M490KCzqfe=geL29|i zaod#9^TlRFxk5w(iCr}i3G-&GXtbjB{k!CoJw?N7*5%~(?nxk8mWuM9wan~(*bu3i zPxWG_iNNwd1DivSGEPBz4L$ZKK1w#GvjM+r{+GSU_v|d{tb@z-;5ggyimv!lEXp+w zOQwMd4T}e2bE(6NSZ{T^E>2d6u&^`ELpS9>sBYMHtDDpD*^x!2?|>}fMh=FD5{zVN zj>I51d-z&h2)<4uA#jnp=xzVG_O4BPpSW#c?$ierFVJEfEh{Y*aEBwznhAKEWL@u0 z5D8mS>8i1!{IenO`j}T;hx)mZU|Z9Q^M`lV7q}#A-a?q4 z>-3jr5S*8v69oM0&hcIDK$6|&OeuX2z9Ns<`FxAimV~hXHKdW+Q(bs~USu{BeKe!0 zHEE1-^EMFd#vZhe*u?4PJb)f|{LN`>j`oksQl?C+W4fp@oiI1UOvz)gP+fS=oNwUq z-kxfQkvL#C6lv*8S-|DNHzm)PWG+pRtG59>9~B8x1HHpdM{^xnR4BOZly+MNIx`*3 zK@)J%1flbO)hKWn83?sntU$ON?SPH8sSzO1LWL@Ck0sF4YN_1`Wl5p$F2~_2lz}99 z%iJkOmHom^oLlP~5|p&3EBrrOlPDy*?e|Xrq+ffCLH^}>W>d%Aw5(CB?bt>?pPe24 z|B1q_K)Hm-oAVJlyqW_|{GV+6fO^HiwMp@Xn*YfA)E8#Bhp22jriEYj*BurebbRY2-}wkn)aC+T&_H`T5Q0BnOsy~!W{GM= z0$WK73sub$W|SK8Awy1}wbSw7qg!FtC{l83Coo6@^pA9m`@ibphEk$Yo8srTEPw6g zkj(HfQUw4Z3*BOh4mz8lW4~CbwU#8EXysm7+j{nbLUO};krs`3r-CTWNYUc@yWwhnIDg{~pe`O4jY}LH{@qg<1|F0?D^RdW)p8vzyTSvw9EDNK! zySr;}cXxLPZowS}w*bKj?(T#DAq01q;O;O4cXye2VRdsdk z>Z+PGz4oq7LD~{SzlT@*@z=#cW3;i43+N`okF^!T`38mq!By|1ZV&Jk5c!{xlbAt^ zJ6U7UK4u4xVfI6K5pjQV37`wfE~(M(_q0Uev>sq*4Clz*@pr# z{@d({x?fGO!tEqsawR^Gn6bOV=&ZAbFG*)m*Ftz2r(C1$_jn6yxG@`phw&T3k7w_O z7}leu}$(Y|RBWbmJdRcAmG)xFSUz&T)A91`)_-5z*;@rEaEmbv=l&>Tchk?dr9m-t;n3;as}eg&Bz*!5ZUU*>~{wGk~`Mq}+(`EU8} zo)EMR%XfzQqos~qFUaVBQvTcM|K}3?-}mnEH2??1+d{<|vJ<9(xSce9=7HDyE^lRY zTWj$HDLy2|#Cczb-Ei}2g5}Peqs9&+o|^$nI)R<${lR}C>TAD}#|OXB2XP95rW=8t zb1dkcFOMhW@$j`l4sRFZRb=t#JT{Tp^|&7Q$A%~M``5|$*U9_Wv+uy)E2sU1?1a_2 z(fcJ}U+0Q%<-NuZc+XRj70Jr^lLx@v%G~KMQ)M`Dw4wsiSq=WN6FKatulI?i_Qcql{R+<{FUutNWsC&{tv|%NmTSd`u&Uh@8i5{sBGnI1F(JPeYuoLXbe|Q zc~lBXJl~h(i?MMFD%#m3C--=(Ts$59yNz5>ZiF@Y!S3?i84g>&r@e)HRK*Wd!kh+U zu9U~M+!MDnJmB$_e_;GkIVsvznZ2c$_s!X!cb(d*j}e{r9>^ zbpHi*>L{V|tJYFMemd^d5lAq;;HpEI=J$0j`bW^89p0gV?U4Pe3n^kY%Z-7`b2Ycd z$#k`@NyWRT5BF!m{eS9?T^&L5*w$m5LiKd;3_Vy-;s~`6v>lMb=FkXVShmvCAvO_c z&7_tgo4$C9L$VVV(h&5-n?YW{c*AF4CT?Y#{cXZM{{{Z-QXDhb|EE#D!+%>5^?cnl z=JCfv1W#tb7ePEhNz&Lr?DL%Pc=cgPxo?*5bhmdp|2v(eNwHN2%~_ETp0q69Y`{a> z?97fObDw<9l|dLioT8UYB5^B=Vp(H~6qf{PN{TY-CJuYRcL;G?cn8KU-z|oJieDzz zCU;xihYU%^&a9G(l3gMRBePH*L0O#!hK>OX3L6J81Tp4I4~&eYS?K>DU%s;}vljDm zk*pwnriL|-^nSQX-UM#H;NCn$C}f{-v*1IYQ?4UDycC}7bXVDv41Ln~1pnxQIOn8E z`|DZ%D`fuhr@ubN!}Z?*^N%zB+wuNiLPJVH`mfvmrEvcLh!7;U_W@eI9snyR1!rrQ zcW2hLvax&D!2R}Q-U((<9 z7th1XO~J|YFWlcdCm;X6@PBFlYQ{*M-2ce<@4kTHU%r2M-^c%z@!pJ)xOffuI5{bJ zdHMb}VUMjKsrX_|Eee{|>*;^_QQQ-;kU8 zUGBRM|MUJ|dcWiUONW2K#z_3{a{i_B-*NAKo`1~nch3L$Tz}{P58q$e-0wEw{5uc- z`xp*Bfqy1`C%ktAc>i{ck^YZV^pCm!w@3WH00193KuJ?sE zca^uYv$1{e^1hS)mG%G>ESwy?|5{Q>Nf#eO79L)H3KlMQzP~E5Q*f}ezZ>$O6<0NP zde6jvQ!X_p`+L@Xzy6bWk=PUf=8krj63#Y`Ruu1PTI=1pbl+|=c0k1q6@+ohtuaa{<355U5}3_y^leQldg#iW3a=NzT1G@XGAmc9+E z;r21J&jVAjLC@uV?tUx&+tntHs&?BK`7^GEzCDlo8X$mcrj4Zd>v6}*oDEA%oInWC zIfUW?CDrrTBkpB4TOr6 zifa(ED-T=t#yYsfW-My-g8tWh;$aTf-QdI8W?RLKCg|&oHO-aB5>PWA=XQlY*7?az zVYpG3Q}$S`_ZExBD6G9cg3j=0m{zRArpzqh{d>S)Q6VopX>%99#dE7u)lx1~O`be7 zqpIHYe~tW>T9%Z1Q)_gj{3^2wLxFy^G^Uq?|HLNiBYb$*A*K*T z4jBNu3$X)<&;DK;P8N#kbKS@qlo9cUvd0%*A>O3k`J5f*MM{7LP?Z8C!ZE%RGEaUf#h;3hv&D4-C zK7>tZwo*!flfEGr~ln4F_H)GXhja2#i`@MnejL;iwNgssg z$BS7^bQ*|2$eDAzEp~Pyc}!n*7vXE6=>#BRK4u5wqts=@BzTKH&t_1Vb!ZuZ47oZh zF959u)*^)Dy&fXPuOvNFHVZPDff?JQxol{#&FD!` z_p9IrMMKmd4_$~BNt~;io(~jjhn9w4Z}i*Esq}mKDn7&hlC_GF4cw#FrW`&xnT&mm z{w8FauLiBIY9VKv$DMSp>8(|FE4Yv8bj5f00a8QE)&rmXZnw4II$2ff)er5%;%5Qr zJDvsL`;YyP=NI7I(x>2Ho6nl9)2Nc7?-e%zDq{Hpdj?Y2FJ{J4r9pm1HVyX- zvO7&<^?cuO(X@+5H1xw60^{Hy<>=9+Hb$Sl)9k;?5YC=p`-;ot z9(I2S6ANc1h+yCUK$9`JUL}@DIHC?xE%ULi{iPJFTgy7!teH&!-+8Keh&yj}snIb0 ze$?sC!k7_^zXUn@NRP86=KMsMblx$4o(+p%78MwM$o816a9yd)7FgBH6E_<7#%P?i z3vPGTlb*9ZQq!hDrKW#X5CqnS#E*t{k-)tn$Ol6U_U0^#e_UD+ybG>9c}Z&%O;EqK z`{k?_#hpfCkGF?7LRQM7@dLnitPj!k3<-*S4cZWWB#*&zq7IUu7RB^}T3Q-oVt63g zi{YVrE<7QgDOl@qk^9XEDE`A5XHJl1ZjB_Qwfr?)oV%|Nus)BP6Xy0Ca&-Nb#oTk2 zPBbLm^7kq2^%TBW;VmzZ;)5CJKG`rE>g|miumf>;iAhjpsm<1j68vGi8FI|*g@rQK zu}FUwenc;-!8+9+(Q`c<5aOV|PdXiGTX-v+$3_|wcp35&bA*KrHV;mF&a5eN|K`H3 z%K#})xCiXt85BYb0v@&?``v_@tx(){MY#SDWs7w3jt3nFo^7hl413(F%~KvPj8P^q zr@-#qqHUp0Pu2xcpTT)uHYa)Gu-H7jpqm>--uC=FH*ft?1982JJ-xpk=-Sr^Flo9Yo?cGtv=Ymk@oo{bK zQ;!#t)y72yV8gq&_MX=tFy%*qk3ze3lTtXpH!r)P1*1D5J3DcH;fV9&|H+*8iP%TH z;yb<)*+=h?v>5jvdO&%|T{1^`mmji~kT0DzsUCBtgYeFOXfG6GI() zcta}hk!@AEMHJ4wn)_)WM+ha18mNM0^>hF8k4uda9r4|Tv790{$T~0B$NuR-aXml8 zPomRKMoNP%ip{XIQa9My8TmJ1AiL|a9-QTRHZ90QpXpJIvo34@Yrs@XBC~*AKAA(w z*1_>>F!oQce0UIy@D2E+i6BG|lBsa*8}v_jwvY({1(F3ohde+Kj~mVplIeo`)_&OG zatb2gQY^HkrqDrx(q7e@Y7bxfrDE=XYN1Vk~>2tmbdK3VA^)dFR z++-d4TkUMY+WU?Ycf%CIOu;E72wQLqSZs5~BY6XM;BLs^hhG?`Tn=tD3=VQjz%Je* z*YfU3zemW?T%PGm$GxxrN#6c#xfylNPWfj(Mk4|#gQJak_XnA0-;!nMr?xYA2T8w@ zc1NoUTVgZVQwc$G->zYk1FI1--71b}$BU3AVN8gSsQ6 z{6t~qC_dn@+rB%T$k}YcGGsRvh)3u_4E3Qw2(;sh-cEya9$irSu-lm^lJZ5w6+vWi zBN(Z!Iq{*O?oBH2ur>butPJ)zj_*fkBO%I%)y!M0Bgo5O5DtXD5g0Y@sm|yBT!xua#bSg)QWvX*&ZCf9=ACRpb zwDJnw6^MCP5{p$;cft$L8^7nCeNDT@?TR~=gEcOhX$>Z*xcCljyz-|7NC6r@_=z=_ zV)(&jMK_lHB=g;PeuW5kG4(EPa9x?K>6(S)=k)kulJ1u%S&}xtw*wRpnHnW85m%aq$$al z;hy&C15-NIqc4D-11CokO>hM{b}zi{`IO14xNNd3dxeVX9ie8#QaxgCGSANig07I8)Riwyl+$lGY@R?DFbS|19=HDd0ucdp}4bW(tO4!hD-5~%?xs=2Wv$Fib+zo*|nzw z!o!1x{hqgYaKY?wq8-$>5$YReBI^SX=9!Pf%h)@l-ZuVrSKm7nb5=}#@dBnBnjI`I z@Lo2oVlLFdAv4G;>R_P&lNWa%K>O^kXdlsm5SNgzm#4OHoYGT8kg|{nM%SpGjkH+M z(5A2L+C&F;Bic;fr6Iu(*n<01Z5_6?+m|Kmc*MpJ-c~&f=or3{9H-Dl#WE@i(W#9fHT1 z_)oB=w-BS_2$IWth@mdKzY{fVEM3(Ks|%k*LVP4TMKI&kju8it4HmGYY6a!Qf>?o5 zcRL5$bN*0QN8s?FSEJ7SeDRJ0{AazjcaAso=PQq$+(qmtwU_XqxO2pTg!2{jk&1-R z!*y(LLJaq_pd2W-pt|O8ucKFtpi{P2kI+9my#WqW;;)av(8|cEH+)p+_Z=WMh*OzY z%c;T}M698#UyGMe0-k^bRa&) z0p^ygw*9G|-)FbRnhxlE8}Lh7sRa-kF{gO_uy#-PxAS zaTWC~kkHXjmF`eQQ&hI2WerI*#g8`aH~hEYC?YU|Km4<-O0na}5z$;fw{jlMIpP@O!6`(j*4uBDhf?T!j!IDh=9g6jkpxw~;|o!rFsCnvEB8a}M1{bw zXR|<-=to45IoSYr9GLRy#$vIQXodyW0Fp zRpM!}7*qMUY{n-!7RSx{r_E84&SqVViQ|AMlO#G^XBEv86AzZCo-22sUT58|B(GMQH zSL(Kn>cj?Py`h2-6}OD}ssth3Uq}#EAH+i3i8yiCQwvb9;(OU7!iR9!+a^&1O$+VCQx&NCEh_i4BR`S=BkFuD{Po@xW2l(h4v`d+g zSC|RJRev@Zr*661H^7$2M_cxua~;`> zM}lBK3w-|u;NiK8%;}H5{jT7z!wV1sDeY#B1gSgWwi&*H%GT1%R;;vevp84&+Zsfv zRS(ZHJP;`W9n3laM&1!Z3p)K;#shJxu?e*f4_2Q}5cj4)ceFJ5{If?V$|KYS$p|eI z+RPNL=OAP;q?qMMYg*Ba8w0bn1bT1TVEU}5*sP1O^zy4X?yIUg`C*tiE@QFiy(~L8 z)!BDaC`B%0f{ZsZ!b}B~;}tGI|43{=w9MTXNyc1tBIHf#U@Rms)>$rEM3(d?>Ysz) zYZLLqd|`RqG@?C+pG#o)`@rqae9})EaN@N=5@Bg1?y(-o^IFJpI2ae$CpK!>zcB<~ z&?IUq_~+&li+=tZcp;`7^@iUpu)&6QYcu`m(hiN6_0fisSnn(SkNXhPtco>N-M3E8 ztIazgU_(&;Fu=Hbak`-pRWCd!`mN+6GTUd5QJtYC_k1BDm0<6Xx0+y>JQliOShLEoM@*h+H0r8X;!yX&-%r+*arwvcX3%TrEL}JuHjFUf^x-$ zngY3f7=YNPvP9#03V8Dy_>-!Xf*C8{gl@OXVDjfRIJ>4G)eqZeZE@H(T~Edb4aPPN zMcoS1OLGg$XGurRC6ewf2mo=yB1e2HHsw3J8<3@+- z*GW>v*4`ctulI%uqeY^HQ25ZS6k0$vAi?M0x@El+ zze)-QdYR50bu`eHNCa+Mxly&m6(4)IHIoFm8>azL(udKO{_u9mvCnxApIp$NoJ81#tor0?t21ayB&205M6?R&?0`dc z3TDbzvVjBQZCq|?CPF^*_jK8FtD_luIx-PnK*b{VI-j)H+C})i+q0;YU&MzrN_j2` zQ)g^%L=a@J2e;+rxI(VyMoD+VmA~Q=&=L-H6&ba#Aj}~2z_Gk1&-j4vQV#Bwlnw5| zb-~!b=nY1we*fgo8A^T z3@#m=;RIOgVyEDyVO|jW+ObYz>ZNNf+r~HXei)$uDdX>Z8bb@o07qp&>H?NsJOVlw zA?kN3rCbfwuQu{2RkWRzGO7NGgS($@FiCw7yzKFePdi3{%tE; zVUR4mz{A3;)_5opyIYebT4go9{G4syzP6E=GuH<&L}%yoDF` zej-D_6?a2#Biq5qv%^{qcgb&jjxjEW=lN$mJHIen>d{EADnl$*kt83wsL>MmrP`x> z`;5gUn*0l_-n)~f76Y%inv48nJZCBBW7|KQlqx5Yg?}74zBKL_+s4*9e{(UfnkiHg zj`S(-nVYzukIF1ZHe#VuOS9R0M$TsEP&hHPU3d3(&`kE44$e)sH#(u8_g`nh^-}A< zJ>CthYY1Au=FQpvm6w;CQ$Iz7ORyN2lwL^Rx4yyE&ZP2iv=UzHWwg}7IYT|=`co>_ zp&VJH@?k6M8PUc|%s{N3{MVm~kRt6d=JDYtmhxVelNzh2=9p`in5AR48gK+VI6uWS zmy}C{pv12Rn0SfAdSt;}8u`j1YO3VbWQNgiHqP+OFOQzFyU*-!z>;rWg$&a#XUX0) zM?8AX@#x%~xrus4G$CGSwXpmwzAVFaT2s3BLS*2RA}@fY7@fnQsT;1@7Q^S;GmL&x z%Q@6YFxMW$viO*p?Q6xt48l*gfuD64_O~Bat@K`~c0r1FI{Q*D8FCwBY$rjEOk>t# z_=!!{z6HLT&sniEs;73Fbh}cZ+m0Ze=y@57tHtEkO~mJfHQLS(mlyLtvSkWICFg1V zb@ISAjl^+gW+D--5e*-6B4F1e*qdK~%=719#njo~Sr)xE_KY`qq-3tTkJaZg)fv;~ z0(ncSnZJSpm-X$WD5@80$+z85^??mRe(k{vC<$Z7`oZeoGme+|mbk;qyElSu!#b@- z8c}_se5+BaCo1g=B5O$7)hr!`)hfkoY29n`)PbXfn402?zOhUUYs*}j&l0?nj@?TNY3~nLb zZTO0tenf3$cR`zlIf~_FT+`Peq|Ym)TjpCULq8G`r(?3HzSM!3xO{;e43_rmt|>29 zcYwd!J8IzJs=6$cw^dPOeGR)61xgX_N)PzgTzQG?Z7hEOURcp!+B27)XZUDhm3hk= zi0FD`d?Yf8l4?IT&h+|yHVz>|s~(7^A{{cst65~$;rWMVc} zWXV4MgLHUsGFg$WyCQt)TW{){Q<6rwb}PYZ-VA2T@aLT#y=_tm1BwkfrVy1L6Y(Lk zCsA!z@;zuzD%n+*Gg&e3;tp76(Vq~@Fe3zg#!&@q?{x!?pcG|R9LjPS&;Vh864eVx z6{t?+E3|1LOgw-;dw|e4`EC}1V5YvSLc_3Iyn!`|W(wxRiQY?2yGj#hg~anjyk^1N zMMd~oV{u4|UT^FGKJ!Co$*3*PqYp=ton?WA;f46H3=t>Sy3KM0C1Yz?j^RS=r5Too zY{MhQ@k#BupJ-|j_Vh7FQkZJQ^KnP&p?r1Cw2?{&ZC&b?v-=vMSjGEV*oInSAMsk` zK3n>|F1YeR3rWkj!R%y)o7AMR+D-sMfA2TlEg>F&RmG23mE0i2jQQIX= zrUjHWXqr@xz%DR9yHzF*^>6?LWgFt|skJ4k(rR5*RSU+izax%ScP23EFLi=Na zMg=Eby~>;g((iWlZ7V%FeL4Ml;Yy3HdOi{@c%pPhZbZxRqYJYrMPyqBA=YMG6qa$s zm>0>D&_o=>UkPGv2FxLiBu9`)!od9BLK9)1m`7|Rs$uK!2C$5hIN@xevcoFv^%TFw zjeyhSAqRjnGE}@+mi{E?dVTP5;v;d1gp^$Fq&pQeQcOnp>~M*TR&V2|^{Z)P&qgeA>N9msH1xlf^+m_WJKu8q5pxlHk0J{rcOY}( zpQfG&dv3Okx8=EqSM(Vs>DOsZKJ5D6aNT&1swT{xj04V7`M$0TU0)^1$&G%c#*Z@+ z&^(T2x>nS1bJw@&ehdYPl)fJLc`ua)dQ$x~E-oiCG)9?S`J-dFQ%^&e?bZeXnN- zHYgVB9SuaVpxsyRICx2^n~MG<OD)WiBMUjw?2JJd>TcxXHE~|T zuZyf7v&+pjcJ#SvZl^fJtg)A3VYlRt{AX})NC4KuPVLE#!iR=*Q_5@L*Xw4=0Q@o{ z8IX`&oQbm#@sDA!=*RQ;#au$$yZgo5J=;6p(HX1W+R5?o5?DUBafFkgq4vZ)U%PiRCZI_KtT(AqMl2o%FfDG;%z2RUo_43GV@r zZ16@!@)DZ2!?XD&EzF|DAWzO?HS6K?jn$O-!JOThqh{5OylOipV!}a#M-#9WJ#0O+ zBbU_md?M>4V7jE@{FVY&tFu#h$+z7m=0=yTuV#|ToeX!QF!pjFC2>8GYee8zK(j|w za~`EWlboeNX8m~m$O`$)+v>_?)5fHz-B~dc>^I8?NE==Q<%dJ#tmOv`HcDv2?|TI4 z1l9y}ghNDd1TiSBa2b??iH=b`vcxq*@|IsX#%;O3%dU)k{S@c)K)w{PeWGKb^Jb{4 zt>5zNyg5e96_w;sQkIi?c-1aC$=>(u@xvmPu~H-UcZ26=`!!UM8_QcjBg+s+cO`Im z*%K9^@v`wJ4gGwWgv`8s`*JWD&Cs=;O9OJ7#obT@obHHqO(V`-K$m0)=}Y=nXrH+RgY3p2IVCFFG}A3iK9=%t+#-;RoPr zmhm0=Cu^rUU>1*7E;+Zay*0E73vv2{lA}IP|K2L!N#0hkq~Baz)(uRaX!{=N)ah}$ ze!l%u*AdrLlCTzy+Jp8*Nfr(1gDgBjf#+Y^&Blg^q|H=SxP=4{raG53rqm3NcGQC582fM|ZhXcx=; zBm+pThzUsj=n>?(bg?}cn}NV=d>q#P$*!2J876j7q^rp)YI!QXId!SQR%HQIS$TMN zYii4H;@RhE#=WaB!0M^|`fSgCEUiq57=!f9=XgeYGqa7t)9Sc<{;bkpODBoF5%gKN zOXO}$+m5j%nx$7wrEzm#Q~fn&E4eIo5WOg5P`pq8s0rM99@Wl9bjaxCoGK&efyRN{ zfeZ&BJm_q>^oT)b{Rs7^cIBIp(@lQo$6c^dZEm8Ci)Bw0w2nNj}?QeQr+&zt`v37L{MK51^u>LUL zvzUweWD=ay#s-RFVW7klitCaKBZBiaU!Dz$9ffO?xSp)P5xQOO6*$1|n z9Wk7h$s0_X^w|2DnXjY!{`s;_E{UjIWO&4qtr&YKB^Yn)!O}Tatf7X=W7)h61T(H1 z7@UYj8JTluk`+sxO7iAk{~;gpV8=39-4&BWOg#$z4W^Uqu0Yq%4kkwpyP%E<_3TRi zG0gi6<+mA3B%)G62p~7?6%BV@a+s1MJ;^06|4$(!C}$cDM>Ut%{&e~CYEkBa)jN7!}s7@$-;(FBq8DjdA2TlaO z68`=i^k~b^Gb`JMU2+AN_n8r6QqkCgf0z4xBVZB2UmY*_=6NH@OK!?eU=o;Nc)KD=iVfmb`p%;);)u*M+c* zItEliyR?et!?-?u`T%&+620m73XkW&>F$rbq8B&7t2EGW(90Y7aYnuBv7DtH5=)^K z0C6K+KQKAJIQS=dE22Qcs2Wqo2h%5)p5<~a+-H->^&O1|xN%LU#+@6ue9oBGOPsf5 zTi*BytDI%L#mP+z7q_(bq7Pyz2Br9=-n*JIR~bd+K6NSZ8Or6pnIS;)2A7_jO*OSS z59au?dL!W(Vg@h^c~8|GpRP4cdf{&<16WPJPN}>S1cwDv(JFD( zflb1vc#l5c;*~Zqzobb9L@*MkzRcsJWJQ=q5Dww16`YQo+aCHfrwFD92G6yY-9%3& zyrsO3%>=XUX_EQ1!F6`v3b$Yv7;g-I+U%@a(@ z*3~^K57=<#giZl?!zTJ|XblH{eA26{T9Ngt2d%`|to2=x-s#Uew)SJKiFR0DW!7Z@E z?H?ocJHU0%Alu#13qJ%MgHmeAtYXtXJ~h9JRL4qJ>g)H@Sqx~4O0=oBsXo_pMh4Qh zF0VOu0=l??!Oh%Xz)A)^bXUXr-*>e~O9cQdPb^qplG5aU>Ctxduu?Cg7S zy8(Zc+EKS_ol*Lq0I;OhtGm}1F&1N5<2^8R8spls|0pjAsdaZpIAXK^yGg%`L{Y}m zQvmeB*x+aaKy>I0a<7@-LLz`=EZrofc_uPB5{%tm#ga(GR)^_MB$n`C(@yColo_V_ zD|~+3neHp8HMoD(92>~CF)VwHFs_TtSKr0nZkoJ)%EK5(Bu%a_m|$u7s25Ot`^``J zLvPao!CMxq6&6z=uJO)-0=^~e`T!TjoIQn#iB)*2e6#pw!Eu1LyyKpV74+k&Dr4l3 z2BgXkn>yj*P~_wM9FMkqWKWnw#vO!rKs4HnYaHBoa zCyNDyAe5bwI$rwKJx4npp62<5(<;fm#t8cNJj_!&WPv_6YLU<(oM-p-hlM&As+EOS zR3i{t9(>*nUqgZP-XRdDO>0u3);Mt-Sz|kX(!BJK2Wn>zzj3@MdY>RUHG0_Y#&$P^ znvW=8UjA_4;4lEp!cE}8HyNB349)X=ajQ0{>e&Gf8Ub2?bU&2wC_)#MKJHqKEFUau zP0Iya5mPir&a5TMnWW1X{JFt+7LylHKH2LQ_tJf=z3WzWBS_GWn?|vn!3JQyk?!y+ z3rfo5l{|@pF)9g(jzx%0x~DEanR8DCQ_@_NG|Ux>-&a#b{=)8Pm&or&o(3|<*gQq$ zeRsUb?zXal_D~Y$f@qDF@5JZ}hEHNdZ7E=2HtfiTd(9eIM-f)T$wFF}{^T1m(iY3` ztXaJL46$v-M3XC*%3nl`VdFrnC@A~MR5~?aiI86-_}G?esvgqEg?g004KC|YZ4on* zu1wmOIvQ!Zq7NO4At>@2Ko{a|>IG;{@oeM|n|D-j&6gbF&b z;}1ky*EnZjBS~kTv&#VNHk3~%>?S7^z9NDV@8dWNs2Gy=N%z}FWa+?|6WXh_ncOwM zmKnM#7#IJrqA5M=?XGLi{!)s$D3O~6df7cvTZesGwCMZ8HZv}5{!1s84Q*~Wc%>Sc z|9+g%hqhpl!gqds^S5tmkcQvDDy<2qmDXg8ouw@e-`GW27by_+?n+|_c-cBlNOKEJ z8BKHb^t0f9wrYAQXbz4fHAZ*M!KSrR2{vm6tlZfD?kAU-nn;!Q7M^wXU%WT|f-`dt z*2@_-te#sBwOBj{m!cY%dx7f>kc6A0`4!%_0`PlLFcC3@nSFW4#+A<;C37ScV_=-V zrXeKU{#+rUlZ&y5RZ~=qLTZ->S@y}`3>NFIrMS48y4n>_J)AYfyFe!p1}w&3BXR7C zHn|#Hj#1-rFqW*%wY7^0E-CK#b_<(=GeLP=&qME(*5aOeb7!)(58g z`(*+KE1yLPm!gCBsAs}K`m;5omb+ynAIx*^X&;eHNZMEk4gIRPt|Kzo?CIf=r@UVW;`Zl#24B4iTq6&2zGpuCp<9tj+oS zzF5xilJxALnYR}?T7-;f@lb?Qt-%KnDNPQzidPHZ=GP8pnm|dg2-l(_neApOQtRE? zGw?Dg7_Y{W`{*N4@G5FF;eqr1neLwzu5W6J=P2&{H}3U)oET}CWD<++4y|h5nNt~o zutBzexOpe=wQ$G_Fw%ZZ`2drPTOMIxM2?OKHLgM@P~GyeU_PdP9~vAQPQ7PgVPRCA zYGJ1j7@N3QN*Dg6M7+edcaCxsfm*@W=`JsH@q^HDsQTy*ebM^9s`^EQxbr+hUevMw zH3{E%k&MgpJC+^6{L}M2F}2WM`ipKgxZZQ&!%7MxZJi#~emq&%^{ur>u}zU~B7oaiWYv4QK-O=!**UeJ- z@#k>I81U+QTe#v&CCct8&1aOJ z3bP~}G~Rggc%&5-+(fnnB{h9V)Vj4J4KK5N^IDa}`2G#U(oQ70k{Q1DON_uN+fTYF z@7B9YQP}9rBI~kW%Z7>PclJkbvmPCLCJt>vB9x*Wn|N%Mn435*8U?dB-<63|`<`F6 zh!bH=m9=vp@qBEMl#n9XR$xpOg3OVs1SL8pMQe9F{n?gCYZ#7zMa zw~2`dwyO3v=kW+i8P6*XJGaTu`94wBqmUwExibUK0Au5gwj$X4^^W<_j)qXEW=?RV z-RQ<}ZSY~;Z~sZLVBl_0x5zJZA5%HN)wf7;Vx4)nt5gw>2hx0Z;Oh-}wzj6=Zi16k z>@%86U_%oEiTX*f=@VwhbR^uY>$tJt0$J_eqCvTA_UWG=kMiwfx|L`XCT6CIt%bG{ z3uRt9te+aUk%1OFv9Js7R3)+X4aISxtG$F=C@Q~I^i{&^;d${{2_Ku7sQON0HQ;e| zt!d>leVe{F)h8Jo7w#@ggeB7o(6cpD0DEGR>la9Xg_(*el~cOghP|d|v&)e$s8{mk zUR|2V&1fP-%V@JY2|G;lLa1X zK~{zWWftRSc8hy5(u3w&ND!NSe^K10XCFg2Os^2icgq<AUWQ|9SK!_=o?L+LK^haQ!?*19 z#OK)s4>*w5({mZFQrS&sM9d`p(iE|&(0bQZb_6nO{<8bgb+8eK%U#cgR)k}&e{cK{ zI@#OJeg}6umZ;g-y!inO+ev*#|NUiW#=^Q#Ajmj;+n;$zl8yE#z3<}$8D8rsM>Dq( z!yH19@>+iZYB1MpimQO+;f$O%BNnzLmZCOtY!tgOO%117i`+*B`XX96!$AnGL53p6 z6)NV^%yUIILpw<~=W_^SOly< z0*;KKK1vv(MVlC>XWZz#P963nHma)7ipGyA3hP?6kS?^?}jUV)u|@7I^#gm`$)*_-$zO?qMTBbhijSPOE(;vTz>5FqI0}MDj%Jm zRE~N_hErA}ggMV`XUQWwa&A{KEKRM%KZz;n&wjp5?kbat86vdQs;*qTULIZkzT7Kt zpPL`O5ff?2j^ty;h}jiFyTG z1X|2*akynfU$#;F23HZI^_VGO0NwfTr+CPtv+!SG>WAJ9)OU|XR|d}J`qJ71bC17k zdpj>Il*Gh1WGw9qlJvt{q3*ib!FttFv$9DNCUULkq~;nVrdhcVaThk+|4Lmqiu4~C zbazy_Lt!)cFy2|es`W7=|Kv8kOnPvQdZ&t$L|~==^!{gxa7vNAjj8hwfvv?nQ)yX7~vIys>;aBlrE|51Ee}Q zd+{D}S6?RO@9zk_zH?bnzZ~%2C#a6KsMh=B#|nAZ*W5DGPW!Nwgz(V_OM!=eJq^&d>NG&&uJCs!~a~p<}f7I(7qCusqsnAo>u*+=KOT z0NGMe(KG2t0aeBIGbL+&`}8OFFa9N#FR2UZx)U4otwQvkbD0G7jEma3^EM;fL#;2; z7en5dMRwadWq<#ZpMm!6(X+#m!?ht8Abjtx&~a$6a?;-bv?dK#KVh z4w(`(P=CjG=>>$>=qh&!&Y$1t2vC`4dQ!WT`1pYJbxygoV{0HNj)SAfnsv}U-dRd7 zLJCT#@neQI1&_k}$2~_arHYX&VXv^Qc`VBh`K;k;(U2^)45lS8HB1HUmXC##EgYvF zdu`-&jO_zt4qw37N0?S*`ix)E8ddq)R7t7=%GZ-r!82D*D$KUQ8 zx%;I?#p8IrDy~Wknfa}DL}u>9@dRr&@5tq$#7HfBQtM~av+#Va%2kM~f^+#LGI;(| z$zHi_kT^fzR_UkP0*l-PMMXAu*r045J~^Z*k;jCY7j>?!!#c{Z@ZKZNrC*+(Y)mn= zNLX;3Bm=aWmt>?&9YTL3E0uhiT+ok7Xz}`;S}vr!-gUn~sAl3eqs8-vpU&#Gi(7g( z^`VNDP`2cD3Ft(NAJk}FuTZGRiD-@vu9gC?hXx*05m#>%p?7d(rWTAp>OsP`` zmSlbA^?@u4PFdGzw7QGLz!p4GLc5t_MI>e>mK+u#=3j&9u2B_r*uA}XX$gJS^35MV zjFt?9zQ2~2D?HJ4^%R=SJ!FW38>^z2+x`iI4HKFoAI!wtN2(>-n8J4#i_Ybf(xG!* zaQ^BxQ5=MJes`TJnsM#zJnAKo8;b668P|?`RZz8Wr$>a<|3Xhght8}zzqS0u(rsYa zhHwvFrguK|#zzxl3)pEN*Z;AG;~3E!yq_o@rj zQVUSdm8FR1Qb_0U()9q$D2`&}E1xV9a^kc3RScK6gfO*TpWz}6q4mkS)|+M`ZX-sn zd35)#E2s*v;OSz^&4-{O>5|*OFqjb%y%*nuUl>9?m$VhI^WHhyaTN4$YWG>Z2h^S& zo(X{~%mzAv=oVb8xxzHjjCo>y`nYS)J-837#y*!>OT1Hg{!5_A+GqWjs0%KV1RYVt z8~qVkvQl>N)nXKg&U`yV?zWbD;R`Batx8%#_D5aaZswYn%17I)tL=+E6z%a3Doi37 z`)7(mnO+PRtsM`-7rx-^2mRxU&8R;^)m~mshSue2t54BQmax@@#veA>7#Dr;fRjxZ zYBK>(gN$d6t~m?2X}*~gB_BDjy6yg0vcm_|i^6CAZc0bMqm0Mu8{Yjfx|ieOy?bpm zaN)vTJy73#gWkwqlX=DR_@bbh{WX1?2&6!qH#Z}yy9JV{R9meH=d?Zd8Ux_zEJV%^Ob z)J?f*Tb~1$wOnz3bw)~#QK?YFw_R9Q+b<=v(h+vv)pc`M-YZt?49xCwWhA+oLmPaL z%%U3{=Q~y^E7g@L*UB4H3?;n8JyDwIn(UsRyi8f1yoRq&TAzHkbiZkb=eWm09%ivd zMaRU&Cm3U)XQXzPtVOxpP%yH~on%jz42iOW*zIjDmpkSV)=i=mqeYm_>;vK-xZSWp z4zWRGXG8a|GVBnu#=gO;rjztzQfJjq7u#I(yTkI+-ge|CqSR-Q+Q$; zgqn4l*n8;{d7^7SrcWPaoLEz9jCno<%8W!Hu&gxmBDRPxa$U);tS_;wu&M@6 zt=Gcm%L}4sIhvK`6lGciObUbBAnVqn+RdT}PL;45nY4U#=e!1Hx_$NJtH&;0e(8cd zPf|vH?Wm>uwr#lRQ6?)RcOA&swzhr#fmIoO#}_91tnT7{D=&M!EZ4v-LZ8-SF7{!i zB~m7x*0PtHmW5psd8O$s@26f>mDuIdrShfms}tmMW2UM|9$ThOm0XQ5+^|v(xUj)Z zx4;zH*p^6&P{nN)GsEC&Vve-v@FdFCvbmPsl)WSSc($Bv3yeFGD8?G&iYbWEVm8O@ zh%v<2vd$>v(=e}21U0h0Fd)7#s@MsOZSI+|d^lXSt6U#Ktd^W)uPHhu*^$iED6cu) zYw}<{SnV^&9SL7rSo#c>9POGxsS$9f>i{J?xIkE3q+|$5F`<#8ilfs?i`y*z!gGS6$SyX#NuW*%?Z zb?vUHZ7k&g8`fFhQN3n-)B9EV_iWw$gA1!*r2mAp6RRMco;XOd|9D%BeUPGm#WXxN zBU7YoQx$3ECi4#S^XxhPCVP_~H)BXyI3u%WmbfCre!5Xhl6b5naal4e+Rzf^1Ezwg zA26_aJG=G3j&K%ki%<^nPe|e)YY`+{WlbI(MT9t#03w^K%;|P0GoH@a0F=V{V|I%6B%x>=7u&`i4QHnA$ z{fEcor|o%7;ey{G0!dCY})~YN+UxA*v6v8!9XqE9JeEm z$34ot;Lbl|C$0DKl&;T$yH+3TW}?P)H&@-k)B2qJ$|^ynmVn)wSJ@F$74TJw{#=J0 zLA$gM{qfLD&F=O-5jD5;8Ou|tJi=^`iL;s_4kSj1e#N#+qcx{PON8xgF*#u{m)fmm z7Pr&A$}PE{wcFB!`K%uzLgnh#YzKOoZ#|)_Rs8A~4&6H}{mg!WB?UWwUeAq#v`-84 zUHjpOpKc)-Wzb>l*KQ(}{`p8>i6u~?%7arEE|bx~G?TfQDU_e@(|cual_5T1u7|5i ztSWI;;eoJ;SS(30G4+syagwT9B^R$Wv1)>4!ruZXy+tmPS+$m@DXcolqQ8YA)0GSv%(=D6b?2V58LM-T0B|QV=8Y{H>rGqx>DupRD-_RJ2ef4 z%E{By#Lq(gh$4U5!jnn1j*g^65bMd4kgAD38Dh1|16BkZPK#l248Iw2@#z`TwjW>Q zPqIHx?!373f+_3`G1p%9S9z-bUrh|OVxMZjgC0=o zFI7xi=)(^7+iCjsm)M?(k5}&d<8uPi;&G?O>HF=&a)X#ZCTn4dl%R5-)L-hFLXwRJ zMNFZ>{(~tbF@>r=g>rBTm98n|m_nb%SOr_4e*>z_6q#FC9pfUriEU@{0>&&XA5o1+ z4b5Ms3Qc|lT`-2{Wm9+3CY4r#IM}&Pd5AH+T;eLx9- z0SJ>m&=QP1*&$hs$?+-VY{pZAZH*Rgr2Gn@XI?t?QhvTrGw9pjzhL=+AM537o_fj( z^eM1wc4MT)Vz!1kOwKWGHO>-aO^Qmg+mjPhRJZtdGTstF+6wB6b?VF0X=_#>+La!N zPI3gI6ZGiTIGt#>SYwLKmT*+w-!j57#5&wj=Weh}woZ(#cU)kZYn|sl-4q6Uc|B!Uh@q*=f>$54(JN{~U)B3sP6YD3A?=AnbexLHa zBgbT^wR0yVJ_dsCHh^R_9=j zcK(GH>Cz&{M1B=1Mc(I{zh37ITN0#YVv;bU^y@Qx;GPmkapmGLTUbwPrbU7+)?g3f zOC;+_WsVKGYtrvC_9X4e_%!LWjF0mp`q8Bs z%ZqL+ytQa&+ODEElitjDGc!ysYv&)gS>~3O39d*^Ef!S!TU<{UV{;T2YMx9u z_LSo4v}*6Vq_@}`X>S*O=rzb`%xf;RN^z<^Db^967M~eckXKlfHllbktG7+b*utZ% zWG$P>rld8MHJ7a_+fimrDo83ELz2~yl;+5^<;yCU90`uPqP1zarM*>TaFuCgW6Eao znNpL|q&69v3YMvhlNQ^X9ZS*{XIz?jwR(;H8po!hRb|iTzn%Yi+7D^A2BXDkH@Q=- zPJ6uDQLFHWMeW5a}*@=2EHMYL#P*8vlW?Rnt5S@pO}^y@rvo`M~nyD)Gj?bWY-0@kb{Drng1 zn|P^pNLi+Dw89hiSy)q=N8MYj=L>)M<1{}5*==Ip!e8xTo(7+_>I!~_}@!glJ-c4 zB~yeHDf5(JQiG)A8?8}kc9^!xer{*%5VcFS2VA!)naL7s=kM*0^0io*wOy**zsbDa z%+2jmzLp{+{k4*|!=64nyJ+Q9xwfEXPzuvs?{@DHZ|8VH^ z3v9ySVev8c0x|MXmGZ-oPDQL#tI$g3CSQ_#d%**VdkPL094|3WvNfyChLy&Zrd8@H z!zSYv!Ik5~Vl?eB8r3}&;*^98RzsaZLR}weWAwU~)_n3Cp_9VJo;S@mUX)t9kVpC@aoH!VVxP17UOl0;o-0Yq`?!)X)MYu z=A$UeqaTmB#c5@cep=hNND3^oGwV#uEPQMa%U+UEta`nXk`hsYy14wd6}%eTRI{_}-FU^?fRT z8up|7W0RUqanWsiqoFpPE|3fA|^|*tC6}S zcR20oZjUb~Gt3wP^Bz-;;ZMjVPda5UeGI*(5BU2qI`b?(iktzC2rfkcb9$bb(9P1N#O1GxP z>lr8Xvt;Yvr*%zU;CfC>p)WXl9U+P-6j$HadPRvT!zAW$k0&bdIz&-iHz^sKKcus} zznfTR_Ig=HP4#!?Fjr1NpN>NX6VemSVNNiG^bfNqsb=;Cn6%Gp7j%}?jqr9(n(MYj zCwjeoT$f502K=3GG&W?4`6`03`djgzNazV|fm>fuZcRL=Tgxo5xu-|XDm6Oo+?|@} zv`4#BZB9FLdrVGyl-m;>g+Vta+PD}un^6prO%_FMsitP*D&ujZ`UO|rtbXpq?wUMqZw&5mo%rwb9+vEW^9k`WR&|fG2}GC#FTKu#&!u1 zAdP!K2y}^CN-5CAwA)g8EheXdQcRmtdZeUX%0gQf+J8!+;BA&o`)5n+{NL|sCP#Ps z`TU(o@9F6n>FIZTf5&@*!#L8D+|=n04#2s%GN*?KGhe0+W2^PeC{v2|M~9-!bo5x1 zzU()+zi}6nF2{-wcec^*q_eYx8DO3GpIznw3)a)zJXBs_~E0yRaZEKS%?!jy+ zabDj*{nY13oye%uzh#`bhho$_de0IWZEj?e z=I6LKxYM}T=tejFQFoJW@{<1ZC*HvN`1Gc$uD z^cpH?$(ay_^0jM4HS}1OA43-JLvWF74#UrM<1sj)c4yDIG!#)z37+r ze`~kPHpDn+3vF({huYo#2=y)WsN?7DoQ;C;q*;hq!}eBeUl*-)>l*8)sTV4*QSVno zt4+0)P?aw03-$gbkD-62zp5Xi5Al-=k5a#(j-i+7SD1IHchL#-Xa0onzFqN_y_HIP zsj?0|NPW)!`S$xO)`smHEs8DS-tdye9?Daq9VLoMDPA?8SQIXk45WHeG>G-tACMJb zuMzShinF}|y=Jkq0SlI7O0=aI38bSfy$j|Add((Nz$}8?i$x-VR5aF8=??T@`@h9u zcRL*R1r!A)&$?2@T`E;5WUnkRFDX$ADyD8bqTvJWEbAC{Jm;VtN!G-&Ua$HsrMIUi zolec`?#^VA-%2SypT%NM(PpmqK9i$VDw@X3XxNO*Q*@Uu==Od)J!VIfc4VKT|69)$ zMIs$VA_zqy9mSSNm`KMkX$%vd4nMMZ$#+mM0j+8iv^K>g7LcP5>>)0Qo6`j28UpCI()?Id0=W>K)3bWrmM>H)g6mt>9y&Yxd z2U^=B=>6RCt5Q<{KUrqI25*|D`_J$*@- z#2&MS2 zP~!=y@T8R|q{2TEy=?HTA~mGd$&(}`22He)a!{Plq1w}8Mr<{eSa}|rR~%5bp{tb}iaV4C&_l(aD8EwPM(-+i zyMke~rL?rfbSNFAWeVdhrIcieu_)$}&&On`4BqOYx_vdJs#Z(&_BHKSQ@2t#DLd2~ zOLtRylsiffQV*2APCZt7w0*Mur@kL4)9t_Uy`~&%pYi=s`J?(~`(LQP`u=Yzu^g@N zEiGP*27DWe*ZOWzUr>HfdPRAq^n2y^C5K_(YLS3H+EO4=gpLHbXw0y9qeO!E6r}~+ zZi-4FRZ&2E%r6z)CB;`ND%j$|_wMtns*kpE97UB%sWeyGjIn`QEVO7^^wH>K6m;>M zQA_j@y&bh98ZKd%L``&pt=dMEG=7(mP~Qj07Ajcl6zA{@Z7{dtMuAAlnE(`VtU;ym z=|^y{VGTcmIhX{V0!7I!)RD20YKr2lDUw{HIHl&BI(_V*ujVVcYewLgECUEDuqffn z^SLsKi3Xu_5WzXS5wmpmWFXOBnoE~9#Jz6EsTVgy zdl9xV*Hrh?NDk2`Mdw{zu3KDRpx>ZR)2yqdMaJ)pkG9}<7KpYm@LpqXc&{;8b|RW? zkz3rd+=4mu%et8Q7UHc|L z_$lgDJ%cp({PCL^I^%M~B|On+sRd29pccZhEfSpB0=eKkoZ6zMFZ*(nYYmhEuX|)P zOJE1CzXby->c+dCnc3ZlGhzr_Bd?f+L?CJq#B9Rn#DZiK=oQ zs*L?Dl@aqQfQFfQKr!f5pr!b!PXv-{Fkt~9^~~!D^_W+mVi`x1R6g8eT72r+GlcWR zlAOy*(Zp|;CAd6?Zh49-;Ma9ucePm9uG|>7F?f4=xNv`v-Ju+gKb`({;Mc)l#Vu+| zDx{OOL@m{mE)_0LU6UFvj1_DzP{<$51Xl(BP5pJi{CFDuIR2XNSMk?UucqIPTY`El zl;#{DE?Q6|z(!+On0TTwDx~FFL+N^KO$?hPtfw{Y^?GQINrO@dcGcI+^h$%P1bitCZSWMu|YI+;nt& z{NvP$br}AJF^k1|Of6xphl*+u3X$OnRF-%_Mn=&nkX-hEks`!jbtZ+nd_mpYTvDo z9dj(>`7e!adSI0czxm~J+sr%6*HIoSNzLk+C1?|SKVmEnv=P^?L^q*3(Kz*a?uX*< zDXU4;sfCEyz%dV)rs!jOk@Kb{h6;a+<3LA4u){=M#Bp{e+tM3x6*I;a2X0bk4osXb2rQ#{qMQEOn>~uKhI6h z9p1NR&zDi}e?2y~18kJB)4w&D@q6f^H|nZ*(t6GXc{UWsADSza?NX+szKDb-LShqwPlfjgFhd;qY)|xHw$e!`*4yZQt$ql(;+l zxask-B-_jOioF^thbo~eI3DvREv!W{nS6OZnorkFCAAbTMM}|mm3h_W_T{bXY#Zzw zr45-4*-!*U=s-DA4Rowi)~W0K1MQcTFR5Hoy`M$j(q_D)$EJji3HYSz^eEYv{uX-fp;Po8i^QSGB^xdq3IPRwLv6}%rr>1BVJ-% z>7*@ZEmIj0goX>R*b?64^Fo=j3At=a!XiX;WLgt479(8IQbr_?>6{@=hWm7o8XW|i z<8s@T_N%1JvtV;zb2>|n7%4P@O%ZFRl2|L_1ysxcA`YL%0GKe{NX0hN)|}-q-Aty5 zC!5Jo;3i_enUDv+b;;FtW#_;1-FsI3={r4@$oKtfh)pE?n+{&T^D~{@skyJ*xBAU* zU%#Wv=a2H{>*lh%AH8(fh4ag+c3yeI=PrEc4Xe2xE~1}*_A^7Dy14zyT=@GpetO+! z|Fx<{iV(Y8ae9W?!#qK?Q}dV=jo77DCtjht4szWSU<(P(W~0|9h-^<#LKzT(O_u5P zWiK3pxBvYBi2E}5HasBm%jDQ{jU^?UC(1*!;!_G`Ds0N+N)7 zyxOuvThg++Td(g4alC`osFoFI6~Dr^qPnVcQTK{@8*NwF?y!D}|CCK!=l!IYj?}l* z=^?I6ReB4VeB~Jwpae=dJ$=Yp6VkStKqPN>RTBCITF0v)fze2DlVB2h6@V)lTWyW9 zMcJk>MP-*lD<6wU2%fmqtM}6Qv4{3-kf zEbGh9psT1jm4IKwR&FAa7)y*NOnTx(f*wntgaijAo}m{}EakzrZ=~j#LRabGK(W@w z>W-Sm_OoLwBeCcNi~3o_E}FmS9}Gqu86C~`VQ$J|>kagE?`*bd$72J4szVmMG&544 z0lPoztidtaY|-$X>|+Fs>;`5U0~iQLF01wgV`f)pS4S6Zv2r{|Td-x*LR+e~8kYVc zSCEojV#FRqEwLVREl7276%AD@HaRE-k)s8#x-Gpyin!N-IStj4ZEc0X6dFa?uE0!* zIdap!x{M%|ElZ7J_B_yrpR@oT0ErZb9JNjjKRX~v0g5+uo2{m3wwezwL7;ZOt;XY5 z*_not$0d(TD=w{P5M=WY!^eR{GgGd!qodOZa#=h+_nG_}@FRGL{~kR09)d5N7Pc{{ ziC*@P@s4?0ZVP9A^4`X^^+b{`CKJWUiCZt|3Cg@rlmt)j@Re=d=z-jt#T&X-f9eLO z`iW~7wJpA7LwwJbEiJk3LVG2@VLTIAn7w1}N1yC*v-aMu&o90Y4fd+Jq1y5-nDbA6 zc=|Z=l=)uDOU2PI49_{f}r>) z6K!=(F~8HDZrzFxb7KUMu-c*nG)rW5{q?LNv<$C$ro181qezUB;qr&YiL^aE0BA6`w$v0$xgrqBD2W z7BP<-sYFkh8S}e>m!g!oAV~Ip`>=i7ZW_a@NjpQ?0a}%Cb=rQ+&e}2eAMUN%hZ5gg z)rjbUPuuW)%?^$l+HAD$^wmf{I$@2psxdY;sWD*<`FSNssftYqa(F9ZifTx;1%gz_ z63`kMghV+Jz&ipoK8QvK2GH3oLQGo*Y)vJ~PN(-w8X;>zJ$F3xkH7fxJ>TsA>IP9$ zf~^kZ%9n4bZT_c!+FGrq>AyVnpFcl&|5$f7bMTAH{ZedrHa+{B_VSC*O+FjI=!{y5 zX=o+Z9#Qn?eVhq3^#|>@5cqE)@ZUmofW?~-tt^afrXj!NAkb4ZgeCp~mz!RXD?dI2 z8YR@mU=feScXqITWQGvRQOI?9QjUQb{b*~xLdD?i`Rp6bbkMcVwAQ@VvX0#p*c4>1 zGT&q#qsF2K0zc4>X>U@$H(NW=GPFTiAKVffQig&zDWk!=<$GP@&T-{2^cDJv*nadp z`XT#6^&Reb@Q>O_q*&;c@<#cd$UWLv>_m)pYUn$s-=s9WM6kf1LKFz#5~hox=vb7d zqEb{N;fvwu_&J`F6H$Bg%Fr7aM*h&7u(BaAKixGb^e(xEAJP{6X+%J4guMbS6eZ$g z8^RcVoSLK{pUDahH1&;-`akKX`~7IbkNi_e(B%^rL|G(@F_6w|S=6%VDf%-8RDuZc z;ONNg$l&o2LRQ&qeP(8ai0J7h6JDWP^aD zB&8O>a_^9L z|4Uo0C+xJvV)M7oyYNeUK5{{41zmFR`^fUftH`mpFIh}_Zi<9ge&kDE`EXHT2Y&j+ zr;lS)elNC*^Yp3)Z6%8&Zk4epgs3=!zzDHXTF6TTme;0%SaJeAX#xl}hPB|5UTuwbsdgoQy>_cMK}~4iV4q@NXtgCdS4vnQhh2+3p_F$)FdSMO!Kc|w zIS=WzNDk$45ylpwY*9f2fFXN^ykp)cyiCM9?xnr&X8JAQ(McC7P##`ZwJa(u+STwi z_07zVLW&~%froe$KQb1N5|NLTbXH9IlUWm&N+h|AMrBQSm1YwfYBlGyX0`*QRd)e} zgOQ0wAt!49YiC0d%UBUt&q_u^9sA6&suQ4kgNErJE*e|;`8PlK{*EpJfm=>&g^r(F)-^I#iKZ_Wv zg|%{m*|Wm3hyJu>w{W*~N9dpFZz=~}FVnAyzmiVU|HZiEA$Eux#!t7$`aJuhc!I^6 zjg@tUycv zQC(2HsxOyo(8req5WErgr<^w(sEJ;*&AZFH*UNZMy4_j61SIogJUF4=kSwo zliZt}h5LrXW1{u|T`@UbE;%48lA#=uLvt`E9LNE8V#R&wSQK8=KrYw>=$jn@*fIj4 zy%~)2NgDhpkW_ZmiC+=M+S@!BYeSwf$)X-5!&0fPE{LZs+H}A|A(|c;AjSc4xQ-G( zFN=T87OM$*zGlY@Os}&qU1N;`WW>IJu@x}(HMV$Ti#N8cWJ`BgYaU6hshYE9*NBT3 zWzR$D0|Nsti|_2@12mBZUQZ&LG;H!;p{-kYUwlVC;`#9xzWVNe9(w47+1==Iv!q_$ zvG$X6&rff>@$y^Tdwz@1YwsfVC*SDa6z|eMj`7eMiehdxf11kDT!Xt4d7`iKI;fpI zv8w}FBsnaIb7T-lyrr@OqWv;3s6!^KZ@5h@pq{K)C-Gc75%y7(m=UK?V4rM(9O0R1 zX}W%NMw&5{(lo&7Bhm}-?+D3}2s9^o5y?3eK2;B8EOC4#E`taoA`5UJBDk8|#;dxG za3g8Q+rJ|C+TqCOnkwjZSmB>Pdej*H5YXq}qdn+(Fv%=t77NSOJD58J^Ft<7%MA^oVmZZ`Y-!XYjz4rx;>pivgnjPD~c!%#JYcIs6xu_ZlkQ% zjWXUwO5GcbR>mC&NPLT9*fH%m=CC-_+|!JOVH?gSgDCrEFzFJ@wig#~4IUpQj_BUr z+0owmEVgWm4KK8uNV&bqgeRHsrh`<<9S@?0)&W%m8Fm;Xo#R)A{H$2D3T8FINuenMsIMr+OB$K;d00Vo;SCY`8CGmJ=6+nfO$awgzW8qAo*YiL*=E- z^i8cdt);0}OTlu{J({WBxn}dW&h5$J&3jFI&7bsrO4(bzd;TYv>|J%|n)`kCD-W)j zGCgHJ;5(rFsPdy#)0>ZNeslAQ%>lpWDN9v%M`W}4Yuw6?dVumW9nqBmN?jyFlC~Yv z609zl+sch4kemSjkc{Sh_uH=g<>Q~29T78!O1!cj^)kpQ>UA%==FGLsSa$?_inG)7_VZ5$UeN0J@NF}tb zw6`=-VoD0=*OCA%QL5Go%-A}#4xY`9xfNG_d_Z!O%D)p|%sL~Gh8byHB9cbL0q^zs zD|^#uO?o&zoj#T}r5$i&x*4^@mH*IX5E$w0+UC+`ee`)u!_W3Dam*lEK$> z;z_yT4{rK-Nvajt>6TcmVMAGr(SAN-{tmV=X@@aQ2N_n@(wHX6m_*5P?iSvzuDkf? zqn{l5Ue>`_%#4`5x$DSR7ca|2qNU*Q&*lwoyY`D8K7Yq5o3qMpsbp)&vvTX=O8@GQ zEGf@@P%L$CefGdN%aw` zdT&EFhPrfMT#0w`L=o~z9JUn_E>ytF13aOCKaN;DjrW>homK>}K(BQLZ|N3urCQEVU{Imb5KRFQ!tt7MIT zF;&4Ag-be9JW;XG3cfrQN6>1<-|`!tjof0fFEpFLvpzRlaKo<7P1-CdazQyG)Z^(_P29n5+f$ zcMWw7LzCWxG)~Ecol}gcJ6rOZaB5`>p9xDVW6?}FImI~iLadr9EU1L5i;u+bHh_c9K(>0 z3w{h|hmrBv$T2c>H3uKer}9Bs8LO^J^yzdO)iw>O*Y_R2xRZ5p^kd~2fHqPwsfZrO%;7^c}F zNS0XbZ~;q;#f8z}D_E!>9h6=lY(oM6`o4@Aitu5)13szznO z0;8g8TI=H$Xwb1aR6s1L5SQk9rU-TfHX|={1}muJaWoVkj*rJ5jh~2{wRnG=)?pO~h1uR-A!S#$ zQRYiV8B35-FR1-$UA4y*JzG;q+^D0wGOnP01q~^~%DD2VazZgH`(pe4*_e_DrpW;wz^Zq~ zfT>vX!We=xlbaYS3X{6w7Cv{V@)^4B=r}Xs38w2zYfn#WYj4lT)V2k4ixw3ERyOPp zrX9#_z87}%wzl@nMQ61QHB89<-u39R`*WHq#)m2T^yPC)(O&ajOtl$wq#@^RX%{hq zToHJGCl7#tCY1(xzS$(tS9O;`p9XF7&}_%n`y4q1SKcG1;L2~vDG@lu3a3OUOC|;M zDx`IA=A|>^?01^lX22 zJo~ug@zA4Li-tGGvW$dVj%67?mriL5QsMMs6&}g5-sQKpssSw{u-+-;(CrdM2`v6) zal(aM;P~ooHD0s6tjZL!KA#`IUxR9i>kpn3uj7%(xQ0Xx!7M8$G)B{icW~9T?q~&Pf0HL>;(E%76W()_b$=Sxl zH%4xFFzgURiJ%w>qOcS)y-w!22K{9H zME$E|tr6##)5tR-Yuo}9;Dt5D25%D@fr_3rKte~V5J3%iK*l6QEd($Wi2g5lfw&4y zoKR@ugaSxXxIh7hERfW=f`ptAQC)=8rQ#^RUF3>%tE45gWUoikL+K4uaZ%Kca z%qyJBBj2-rkN-cs*=O}ikx(SEgkC6GY);W-_X{C0?1)&_GV4ui%>&Xp=Q@`~6+@wL zWG!uKi2Y)RLTDOE44j}XS0cv? zg<98HTti?D;F+UX0i6l>VRfUgmqbK6WtU4*BmS^jz)&UC!qe6;4@e~y>qr$BRKp#M zsUl^=awo1u+!~^_2*!pbM7t59A!$0|LZ%cg@{*+RofPGpLhtFT72&5g8*jmsuc``f zD+yx)eL_ITgf|6xSeS;Gj?XutAjKc4p&EuZRJ>TE3Q}Q`B+Z%o3uvq`UZ4v@U9~B6 z%l_zN|3FxKWE8S0F}l1!8ilM{@SqKj^qw7)43oR`s_@8Q6k)=VdV5KxyrY?4>o8_| zsVNN&U?j{N!;@j(5tb!+^P?jW@)<>BiUVw~P)5F`gxSW8?UhIxTV8kx>6q}+BBV@C z@3YlxP&jL%QCN)v5*(g%lEmC>lVk@V-tGjO1=3ooFyAN3x`<6vZjO3J&H1+4JI|sm z5F~5fSt)SQB)a#a8y39#?nhcmadrOOqGTXF_XoAmH&<91^Vmd(=J&KZkz~I2)X2+= zWkGO3z>xz%L2|ANSb*VVToAM zc+h8>_{xXj1;JNt!GhR^e~!ouL}UgM0A@F0;eR9+hR}pi0st)%3ZFXt?*~bA-25yS z4jhd6r(9S-*j#7g;w%7VPRZ&R5&4+ zg?-+0V2c6Y>%C`z3O1RE|BT?2^RY>jGHz2V%jW9!g5MEQ{Ank0n(zH^!G^97!6A(P z@G=8E6D?vXF;7q%nSX6)5#Io@HV23g*5@Rz*13LlsVVPE@IvABL5nWJJ1%9(QQ5Z6 zrOl(3Hji3L#&N+>OBXC#K#p5L2xS2wlm)BZ@N27^=dEt)m(|S+;L2Zh6^>oa!(~=y z$>~{gdbX3~SV2Rl1gCXEZj=qq>kPt$JBbkthj!9rKN&XG=_J>1l5032p~bj{R%*mQ zzh_)SYbCMKsnfsGZE&bYH};>xGz#%juUc$hvK#=Fwrt&c9gZokM{Cw^Tfb{PvwnkR zS(}o`+1TEk*~siDf<_x0#K3BH8vdFJ?F`~Nui7AW@TVM+vZQ>0SP5sG)_O0#JifY( zHM8s1Z(xGazN{feq!nquq+Vhb|irMRNckF8JjEm#*`znIH(_UW}u znxojnvJD&I#Uye9Z(}VcGrMeQTS@Wp0~mcu&Umz>pGtr&@V?R>|) zxn5UK)W@3wsSVZZR@1bnd+A);>YB|Q&8_LEuFb1$tLA#@?S6uDQzCL_>G!sZ$=0n~ zZdtWzefRBiH*L_o*ueKmF=s!zd$^!im)o*)tBBQ)wbDhntxXT*I_EqWcLd_`K+k$~ z=>xeY9u_Ey`M+3_mFY8*tV$$ViQwTjBhj7{y)h681=xy(;u(&Jq{bLrA`dt(aj$ua zd(BJoBD_uU=Y3+jux5 zLj~!02?U9?jaX)F?RJ<5N5V^s;cwHeaWUS``g2B>Sg}Z)YZA#7tDO&x&ygPz2oT9| zvYizhmlnOmJ5T)IZKO_apv}0x80U!glomn!Fq|dA-#N6(UE5NJEJ1 z43P&V85&J-kpW=>M`SY9%Kxvk4P(>ps@_`Vs=)uHYJYX8I$RyEn)4>4llmCmnygwT ztH-MJWEBnJhUqF3;=Gx#XgJ<7nQ(k%3zrEyR>ne^aLjPLwWV4Yl)`O`gH)`&OrAI% zi;1Fx_j%*&IEN-VByz*t1oskW;=u71$dp6z)<~v5GX!Jh$1>xY$qYkfqzp}l4Oub6 zXND?<^DX=T?|hRLm9dx-D&q?xvqdrcn`~@M7&15l*+#_o_IEvRFfqtEjb}kX8Lj%# zXIEXXc^$U4g>yYFz08{y^xb@u%>j()UfL!`ntV9(y;U1}Z=c(-F`^Qmo45wuymRCe zbD=?R2y@!9t!Uj>m-~t50t@Zq%u|@pL@GoJ4NePU7-%Fn5;$krbP^;(3w{&u4(x=A z?t(@WIn3lsa5gDH8Jf{ZVKclAXOk$0Y4363Cs>$@)Rg?V}Ui_pGUh!nawBn+RH$4lP(3A-;k<-(l0vB!i4&`Us zDHG*p+TW4h37oTuwZp*K*^fI=NKQDCbRwAK6PBb?bZb-y`8DLV;+n$Zn#(R}D8S&A z$L7;0)r?mSo4NT%GJ!FzVX8xmHtEjo^mfaw{H=~#qQ>(*-T3YZ z-MWa3bZLeTAl|G0&;talY51tL#gU?r>cBT+gS&wnAUV2{AsNw`?4M(e^q(wH^~d-g zpw^nSLfS0tahmSTp`Kj5XH{-{X)d9|R1?6Iz30Rv%!a^h zd_IND-i`dpWqa4$eaXmO!{1ohk#6_ZR?TT@XUgS~VqqnLDpto0Yq!q7@DhDfsTgN! zqp$3^?D|i=JoE4_kC>l(=hAW*29?{|wlW_XC@GFzbKlq&>)v$1l~4U*Rl%-|VKAJDg9kS(^;?V?WW z;wMb3-io%gq6p9;LG^dWQYmdgGMrjW@wQf{Ta%DUfyugSl7NH(hM`!D+qYPdZb6np zq!qPN&Uhpe(a@MSuF;exVH`iL9n;L(Q0B2S<1`E;K6-p)v@w8kbY{?LAnqDL4!Fl4aCUAS&?-KQ5Y3 zwV3|#NA{?wA_%DnCET0@bwLUpD9m6KqTFev1^93Y}Rw+2xi-L4!V322Tgn|90xd;Bg@fh%9Gu zWcQOb;lw+4Hji8KADrg#^f_-M^{b0|ME6f;Gv-(Ev2@Gs%WGYSx5%3dGa9Zkb=`c- zk2^k#RpV|&tih%!ejbNGh8wZTJ}(>aRzDaBEL(T6%03dwSXy3_WiZ4XP#Avo`GJ&iT=Ahc!xYeQhq#>D+Y)<+&ax3t z%{JgB6yGLgW%XHS0?kqk_jHD{P~Q$M2Mu+r6tD0TQcSEC0kMck@;@YtNP{MZS$!)5 zN~m~&0Z<|~@GBy-_tQa>F!P6eQywLA&1$aSe?2_S;2K8zMAi(v1E5wT3CW9?^keg1 za3E>jwv_taWun_nW!R$WL@;buUVk4VPUY}L9m2V7l_VnOvvMQSPKhwH;pB^=i%=wR zUtGB5F=GXSUnf*qEHW=kY-}5xRWXi8)2pA z^wWbNjh;P>-bV3L=DzM*VD`CXB$6zA2_2r$MJoNalCZCOqkBoGFWpZIS#E&}JtQXO zk3AS@-55-Sxq8luKYHWdwht+2CgY=z zgP2I(o(TLcx%~d9^~kaJZWYDL@I1$m{c23nlRt6ij}8%W`Ar&?eV0Ydnq7Cq``{-) z7t(Md>#UcZ8jMEKihQTf<|^)1{`J~A`A>Wq87)U^43YIo-8Rc237F%XxMk+{Sq01W zAJM<2cTOeASstXDN3EXaM$M9xM$j4OF{edRJpS0upT}zHJe8^>>_!w@zS~+wUnU!R z7TbQv*ao{WcZq4`S6vzO`NVrozbL$ienF!*C?PxqTE5l2n11XATsp#3hCYdo8s1xc zum&6_8_@V|f8=`~O(|$9!H+=V{)uB*HA~!%Qex0CODs!N8Z?qPcK)rrIR8`Jx-~1% z&K@DdZc)G%*w@-Turi_c6rl{?@iQ$3cmlZGd8BGrD^}63nr0Xva8&}QmmTR~jcVPJ z=Lg)Er|176r@d^_e)iuaYIbZHti`M!={J-*_|0scPv<*dEK5?6-E<|jvkQXs3-e3k zyydL~CpMC9Mkm_O-ti4-bt_R@zX;tv#q~aO@1oMEh*mX3J+`S9anLMPUa+uckjpzn zlBPGW7&t=oMo$bC(;$ZnR7|!Lhg~RZV0uz zMSp2LGc+W{BRKK4BT5jCS@cbJ=(Qq(u(t1Lc=p#~mTUvy&aO2*Mq*`)aZf9N#Yw?q z76rh2+bX6UnRGzc&`G;j6VW8ryNAHYe@_(ET0o`6T@$T9#7We>_S-myqlFv?k(a<3 zNtYREG+mWTg$JcJ43qfQvs3eKzHr(2$?gR|+ap58=)5&`uLdeyT6h6Y8sadj@pnUd zDO>AP4F0InDjJpHYPN($hQqxs15q^Q4dNvUNZqFf3D#?GD5?~+{x={pgKewbJOBY6|Ser;;M*#SKFzujj1aD2&iF}BCB5XoNQH}wlGGRalR_<9 zcu^TPLNxZ+NPCDAFSf*Hh58zfa8*@-Ftxa9xc{ehkR&qttJ+;@L^ipBwdvf{U}S11 zL?}CR02$~n9`{=~AWn>&8u`Fp_%KrEx0FH*`7s%^6ifxLiui@a_yK;1N{2+zjOGjE zcz&ddpaAuj1a4hL(ZU{Jal@kPlCz%16d08rSo+AD8kyj@{#; zjpqrIF2#wP=nn@;r~X7jK*Ltw`NEA7_`E-fZc8P9b~}%%=svuVkiCMFQb)o~7qaCa z^_ob+kserB8*LOtB6((xP`*tnSV~20$H-H|cXklNe-i99Vbs5&8_nCb^&1A_ClYEBy;Jb1^ z&WPz#RQ1xtkM+|^EVny1PS(MlC!m{i9)o*aMntKmlsfu`7{(S(Z?IyiI+gQc`j<-0 zip7y37NLAOJS+ENMoMP8myQk9BISLXKt=VRy{hb5W$L5zzd9CmoWBDw`jo4`t&}~4 zDz&68VXk5n7<(C06;r?kYjc12QY6qk?rv;oiL2G8$(7RKRa30ZTZ&v2D;L#mF{D6& z4lv5MXiHH4RF_$5hrNJS!P31tGlgsTH&x1K(x} zOll^H$KeDs2*zXBfB@KJIhEDk8q4sl3E`UnGbU?X6{;S}O6oZzx10rN_pj9oLcWdioFr@|i$^D+t4Xa_q}1WlHd8e4)wgwx5p}rZXz4KYsv>?$+G8w z@4DDoW;!@0$>=h{H3LGR4%=_C^2#nENfc_hf6fb61m@W&>R6W_uev<1kAA9{u#<@| zr5B0VQu0FW7h{!)3nvD=XyW zf;6XZl}VKjGt{x0_lGxf^7N7d-K>TvC)_m6%jfBwXbzjr*53=+8HV0Qtg%kw$^%Sq z<`>GJt>$RoQedhk*L%;m+)6oL?GV;}ul8LkbqV?Oy!e0IE(1!9lQwmXuoFz`TNl&` zQ3|WRbWAmJZu$J4Rqg7U8*RS^Z?#Sad$pz&D4Mrpzt%-cp^?DVtpLAPF_~ipuBtMt z!-r$!OjUo;{(81Qg9n2BYJqs`w}azLDI3)}FskY17*|C&3j8jz^88D}%By)#ky&GE zhPzSsnTPB#ZmKKxfq)2~Tfocl+o0o={xnGF`MQEcesa8fFsq;yZ`1dqJ>sRpQG%2h zx6Tha0*%g=n{pqYZdqOosFsB~&B_1leHUFIpKLXfzaXYv`^V|gna{y+>SR*6A^D(h zYzO`TDN;%8CW#rbM5K(|>HMfVt--o+nORdKKjx*(uVuGtpmm{6BU6w`_%asVD3A>M zmXdYR_~bsf`cyoPmAV*q_LooZwaaW`c-9q3yIp%{WkJpg*@IWA|Hz?zcuG10>LwEb z+A_3SG0N^O%lC68`10|iroocoaq^xzO)<_0^T-yt!U5C?m3u8ZvXPTBEJ(|xhNAcH z((rtS_ErP;uJzAgL``Y<`Pcwi+Yn}Ejuo=+J=^tt)u}HN!@70wm==*?{iyjK*EpU6 z`?<1r-uy$ky^!98otrT-uImEUfV21f>Iq|w7ZL&wH#7(YCUe`%0S zbjQ%s9sk1Kt9T^-> z_BG|(;f!g}yMJ2+KkFmp2NuE5x%jyW`!hlhsq}uNwdfA7Fm&iHiF1sq$F$;( z$E@BP$_L5`tuyPHxIg5%oE?wHOq3%7&#ey4jpM?6?Yx=yLsFytda8Xrn>ukR=Vjm& z(BhyYc zi@sQI?RZ(cY4<&h3>H{eyanacP95t<6k{@LFk4M5D(Tb2meE90g-TzOe~EX7KWr$v zPZkv@vE>ze#*U!gslpr?_hDiJs$oH_#~RIl_{^X3qL5FQbwV!z@mR^;aB#u@Z{oiv1CdbYnBPLipObCHR$G|G=hw?OPCqwUjy zvYp5Qw}@mNf>j?k-ixa=boSKzIO!7Cvi4?oDU5}oNdu|6wS32N(Oe<++V~wn0fR2HWHCbRs9%E!m3>S1rnC}C&o49BSAV&weK(?298I7SgeC)0lzjG7`6 zVsgr~!j2Y()^e)!(k7<1&KAxd^ipt);f1Vlpl%x#D zC}!$p{Hdy;t@A%4I_Z3JIRC}bgA)+=Z?*o_`kzUB>LqJx3vf37Y{&KQ5hN_EolPAX zC9DmdO~p+A8U3H0|FMF5rryjC+aRWI&|CZ^S9Mxq&_i*mB2uu0sF4DyD-hqjr06k> zaR5E%R%U-0B1{Su9-dMF?&};YZR(k|bYepWm%DR5T%>up(D|AsA&h9i3^uXTg1 z&hdKu8`~Z0+1A}O|1$`7?4kZ5HH3uFJi|5(BC3+0xNh&V))mRuqdO4M?;f|Kb}>}5 zc6)uI)ed`?oUW3ljhMol4k@)8zTWGl(9pH>%jPOAnJI49AK46$BKgnzu5)VzwG?5W zdtd%6(`#p%Neq#yCDUK{BwwM7B$r6Zw*7};W5WXN#m-jai!Vwh4E2% z*G4QPjm(AfP(|V4k^ueTSHDWH?;inGKANF-yrjjp8$$~_WVO{+lF`9khV3J@nvGR^ zFpr)owf~s=f1~FgBmWCMO#cHr|E$n|R^$JI5>aWff7bFJ4$J>1Sl}2xo2hs>Ih)!@ z+nU*ZuB);sz~WQ72bJ(Aa80Qh6&y`W9X}C7^2gkxh%)&{`&dveH%Av!-!Knww#;n7^ z%>4PwuEWm6qzA{&`ENQWv(9I;f12vSadQ2`BW7V?(S!Sc_hPQueh3D{MPY_2)wxQ1ZXm3!!+jLJ&jaKiE^rQGD+G{r-7v|Ur|IG z1Qn^(X)G(v8yV(y^b@rU;mD?5`5!$feue#gSo}Er@Yqx^yXicvnp&UaKV0+5AtMVL z7G*C~vLD?4@jb(F1C(h#XDoKmzYKqZrYmmJlumt+bhj#hA*h$LH!xFoR9@ znB_HcM~fA50%HH_4Izf9&tqlSgIC~&n)Dt`we1(SYGz_f)wNd%D29^has{-93qF1{ z8e4Z=_E%Xc&U&!1NeyLlxw^zW6TTOD0zmMrR=*3zWt>iloNiTAh!nVxmw9)|6J+!_*#~UQtr@i((Mpp#O>t zZL?K3EC}mPLtsOTl%Xt@co z52lseC!?hpMO%@+GKLDmpEC(V2oX+83rLW&1ZRVv2fXLlJ>t0s9607=y#9LNwRvGU z<4A6XJOLrbG5)AP7Urj4S->6B*|x4swG=vpSnlR(jb)gbA`iH3TYZXSgXT&YI_BS! ze39irHVkl;XF4&52o0Eli>#D*BU~vZ$OD&ZU(t>A9q)I4{1T&#{LFb`hB?i0waCQx z!Ly~$cZ)WF%xdxd#pm<91R>t9>b{N`Nj*yUfm{&ePqKp|=$6#g zpck*J)Z3285jpZ_v!Np14t)FwyHY zh{E$8Cl+uta~NkB0muuO0|)^4z7XY{T&ac%2rk=jLlp$R!KB}foo^EXI2TweKbX~L z&Bz2e@OvB>vuz3!3MMSV-_otrvA(Z7gL5Tyy?=9 zbv?nRDmWN_$u3J3+>x`%v_~_{AlGPa)!%-8NG=OhgaVRWp@psL|3)-LK%j7LV*JBkV_eX z0;~hSCHgFR44;?KNJjM$KqgjR{romnVVY%^>wthovC*xd9-2AZ{L#A;*BBVEkWZAh zB2yvR524~AJE!~2v_}7DR_S`UgPEQ)EB)d-f>*#8rpoWXSfe29A>qe5h3Ht`r=7Cfq#rR}W(LOk|0|joS8} ze>7~PH`cg$nQ2laxefE6++$irbNh?i85WXpdu-OfZY?CAzmf6H4PwDgp<;cWipX`3 zBky89?6A(%daNe8`*Z-K$fRCk8N6_%+ZFC)QJ_d}g}VXHn{Ua7a&TMX1UlKQfEnw^ zR5ZBSrDh={0)9nx&qBB@WY?6rGXxhkjBX*1_wMxQyAR9#f~Vm*g%al*vS#__U&aP7 zx!K3RjCY>eV}|@`JQmD%T}VyjLtP@q-1@+fD?K)GM)7C0J2W3$`h}*zM}5j_0X(N@ z$3gn71SF~tjOK)Q*$d@qbY8x!u46o1YZJKUIgqAyWx7U!*)x5-#H;WAZ` zY8$GK)of_cLA9Ow98+)cJhcbDBVYX@2svL!c}G|a0|>&mML$9zaQ}K?7GLY^*6Y69 zwV?00&tw3SM_HF|Ctf8?v-@)yu`_8O4skt-`n=r{X(1w9?QkPF;S{wnl%Q9V?l>t` zsVxl;dV2omF*kX;m9=>x*_y2%;F8dJU=|?CwfOk5VIfQ^OR#=L)O;=ob>N1hSTy(u zFVpA|hB|<^z?+*efQLTE0D=7FtD7hnw?Ou_hX{y(1~?B2&-X9C&nq2?hNZF03@I?Qvn=znkrWXqf}(tW*dvBW#Odjjy8Up`3+yfz`o^>w zK%flG>nM1ZKs4)^FERWZjo&|%IFup~7|vyWSv=`a^iI}40scllb6vgNg?{~Nqp3Vq z937*V7T$6$uho3p0qgp_+eOOb3hCa<;O7m`g#6wGF?~3+3FU)%$FTQ-ux|_IGbwME z8FIDX&HB|Z=4wC)3Un%@BHaFEMCj}OBI^?2^Q6FCm%KvP$CC!Nbux}QAa$xkD5Ysb z6g0*rkORoAe8jze7DTggFq@88+4bk2g{gTpqJI<+Y#0hx83(BRI7+CHSV|OVDp*c7 zebriyMN)g^G#$#<&rjqsT}?aJXv$jlg<3D1L_nC&mhPC+ICs30__0hAGunrE)XA7BFq` zaemcRPWl0nwX)jNp#B7W;)3Sl%9zo{`e^4$xOk6sd44=PO7?v5!;3k6=Hd$~~ z#Ko>W|9iOv4)~fgGWq7#S9u=e$GbMl5FVUcD556VQ^Ru#Z=6o2aI|Km1!_-CRz z7iKC{;I8IEs54DKTVl*-u6`H|lnI%#c((DoPZp~Ad()`XMUQ*8(Y-^T*dIxq(>-yj_Ho8_Jn z{Pj#}ed>Cd$sXtp|9m-s`v$uJ=dRc#y1u=>1?Ev1s@fWP?#1f#MKQ#6LZX%4+YKFN z-5qs7*ax*zN%7Ef;f-Zr1>Ca?)Y)c?z~vT@_M)9$I?1N60c&=YHP`Aw>GR$H8Kz34 zCFrDGbY4?jiNW88;4yycpbd>=q7u=0QYx#Xs>J*kEu61hF3KRsNiMzrTOE8I1B{a! z(gC~BSR*o(29XeJ16lgWH`0offy3OIIh-5T{w^p_yk76eR|>svT^jXMCC4qj`b%*B zPAOxl193WH*-i?Y$4{%vzWqtluE9^NP1BjA*}ns$Dq!JL}l{!A-IUyta})>r>QJHw|Wq z%|_;OKX~C@dsguJGjyA@Gcc^)HRv@5ssLs=+P!yobGxiCQ^_Mhekkh+^$4wtxM9HxJ-omeYt4z`Nz_D3%9vl&`-K|P$hb2Q!ax+uOM{6 z(?Z=`;}_`RD9i6hC+Lfq87G28PD$fF`{;U&iX(kpf6d4*>4t&ICpIsJp`hO(HS66h zYpF#yni7=d}TD+8S}CZ z3>#boCqjU58MCGRE!h$Sk4*>Ud(7T7@c1XdNVAr<@4oQjcd=AM^{B4vl^m_qz6x5ezmfAg~A-pGNn*wPc8149SJ zP&dmxp>6hx*VT|y{Wp2#8Lt+J9vGBBKWVwqocBNypX~bQmSH~Payr57aa@peQtD%X zl}*17BtLI)@uV}$D|9&6S97~Dg!`G~m((Apxj;u{-B)m5JA-C5?l=hP4dWJf)w9y# z^iczN>61)UV|?y{SyBRgL@mMMYN&bc%w(NTz8uLcOy2*6_Ay`2dpJ%{E3a_-9^gaa z_B(xZS+KFtQeMjGOtWcoO6d^j&56(ExQL6ZhOLuL+UT=HWhhhZEvkpJw^qMnWoClsQH$Q8|{o}zQ_OSy&4N0%eIWOL(^Lvt)ZMTiu ztn*^5)c3IR{*Nl8_U)e$Wh`Adh+a4Q!gKIi$hC4+z;Bd8ibcxBL*j;{} zT?H@jkR+#HUOGrTuZYJN?U*xvP2THc@(?c5plIOMUH*U>Y3A#tHLf8AM0q8&am_rj zK#{T!9J!(Vn~=fy{n+GtzEoB3$2}x=!ji}+A|=iOl!qSPtsn?h zOZ*}OY}2_Be0cr`Y-UD8NOwEVj7>`QOVrC|{g@n|AwzY=KZnh1s7_L#cZtkVNpN3s zzu$i)PxL%{7FG+I#EUm_nikXRob>w4xfia#{!F~xc(i`?Mc|-X$hPe&S&{aOTUmC+ zzsyT#(#EU~g^fd;094C9XK@_R4`GTaoiab;URqVYduxyk-Mni5Ig35_DH}MP7le2k zzsbgYR5-=?@Y}Q-QGZn2bTe=+c4M8qs~U9c{W!>yId$Wlyki)`>8rfZopd&U);GoT zfV>-(cZzHz+Ai^5B{m@Xd1Rt>;yu^2sBQ(Tx%#69hChRc3y|+EpAP?=R9>wHc%eNz zRAMoi{q}0T!Ltp@4&qVRujg+1(TH&G^-XK?lKtv-%3;!O{!)%DXZ9gan$AkAm?o>| z($zQz+JiO0G}1dhVjorqI{Xc;zfLOa2a+&eDAgZOT_mYWNSq{Q0i)Z}^p}N584B_h zmLH^i)!F+vch&UOD;8Q!px@Q2EKu)lIc*4$+#BsrqJ z)xJan8-kxLz zwVs?Wq>TnR!Ol&>@+;5Rx3268sid#A1`QinS3XEnHr@($IT`Go8-eomd3S8FyF)c& z9n+r&-gt<2=X|D&PQzy9H*!n@73?fGUI!i>uREbT$g)$&?N-4V%3h&-n=^vVr zndW%O82<*H=$R?@pNj&Onl==9_L{rPyNUc6{W;H^{tSMWYYKJOO@9=9yncm{llsSK)h``y-nMy1Z;ZerEnT}CfM1sRc{zW1?yZu|F(xtO?H z_wPF`B2*KG4B5zCAx#kRjICDE+T2rgXMh>d@%wG7#|ubN#mW--E~rb}3gTjnjS_M2 zC8r5S>3o}o3sK0y!Q-tmda60==oq!tGd4Pk0>K+63X)+`DQlUR{-H2Kif&b9kB@BO zbXNI{qSmuoSb#b1J^8*l4oaIXQSWa!PSTZBMmZtC{L%IDb8v*1kPuh9w$9YDsmaWJ zP#guRN~@j)b(O0s-_(+@Jt@f@dUP}pW!_36_oNZK{{|Lij>4{@A}kzF$@G_3Z)e>r zC#@gXkm^)qKi{+H&0$rVMs(STHd?{8#{RsSskoaa43(9;$wYqys6$iB)p!5SkXuK^ zeB!CR$y9>C-+%Y|S;y0iy@WbvbP{-TJwZy_BK`~rA~A}`L1`%b zPUM5zJy`+XU^WP5(pRFKt7=VQwwIp@FuzaV(!!tGH})_?bJ!Y z_SD!eEU-*K2J8E`avTlAP*P_@S9)e&5+jDM*yksgk`?&KO-hi><(<51_wq2bo1DE_ zbX3ZIj+RZNaVu^|9z#7bW2j73xV82q(MX6%^asutSU3O8NO@$${L_r&L@h3l>6DJc zTYfZm)veN7!Zy_`AsTcqq9x!kn$EtV^7r$=a4>)u5?=w0_U5~&F&ivxJ(%GALKS$_ z=$R(EC`Tfz|Hl~>rMt|a^^ie0vJ;@Wij??hp#mqK2&cB#bK=gk{Gb;k#pE}E^qlE! zJJGv6?=V=_jQg3VDOyt}yf&S7vNu1D&BO|*$!=?`E~qeZ(;P~vGG&@kx?7N>oWDRWMMy@vS8ARiC-cz-theVDZ(d zmFPPk9*i3JJ0B>-na$D%r}ING7Xtmo1nnzq zs?+TuWs93$i(72;h*`3teOSF1j+{`xa+z%Up*f(Xuz$PCs>0ixDlWYOvzWAkDcFTs zKf?q5id71hJ^rk2*h@k09sGdz7?zI@Z6c?*2ije6-#~bN&d&S>!u#X(&3Qj+WRE^4xua<@hfLM-gR{Dn0Q%oUy{l;Yg0U*-ALyRb#pie`)zvidp2L9khW9dMP4 z#B(b^h^YJUY{R15u-1r~vw z&aY}!-21ejmZ&>kc>cLQIeuOp8 zDF5J#k_wrnqnKP(X?R3>$p9FFcy!o87Ajr1Sy*~!{(*y1z2+QxMEVz{S>ZV`u@Cdk z@pArl&G_vIYrOGDq&vwVVxKQ8$fW5o*;7HXOR$d^-O71XEaEGxX{=6ZO`8iv<4A6T z<&S|q1$(ztPkhDO9-c(g%)(Pa(b+?y*+URt?8p2qx*0xE@*egP3kC^d)PwlP}Zt|sJ*axMA!g8C(6d)kXr16be=W3Bp zRLr9SBM^#IYhm1PNqfk{f2K0OT*(}v!Yrjf!?pbuu50P_w3->Tt>AP*-jTD%N8rn< zTphV`<=fBK#t-tGJh_VGKUoj+D6Y}>XA@IhAmE1RjlERUsut}HS-EPIZ3?X(!NJMS zDL^$_hQ*?jpu+tc%b1Bu7<`C0*2;vh7X`3IPTAM}#?a_=zt6JT$3OGy`|2uG^m%3h z&BT-%a^_r@{&=*jOQoAy%V5h(t7m&#+l{WF2CqgF?Erxz%zC(O&g!XayIk`{vaMsu zoDNLBI4FfdS@s@=(fyQ0O5;7(L?f%uP#nIw(1|L!B5CXfR#eQxdJ%!9iwTvNhonp2 z-LMk-SyYTpRem2Wv>zHhX|cWHy7paspLubKNW&UqCt0R{aF53PI2_}?cc&Du-ov0K z=$BO6^?`M9mTgCC-EWq^42)w`@Q5-rILv2k@{PNgSs;_l9Xl)?1A)BnO+|X96`Wob zu1Wi~yzaX-qTb|4$V5$|pe$+A0VJEaC(9@Im_=yB@(Q|YtOPZIh_EhFBCdl=njE}{ zv|FYAEUUxSpNF(U9($+Vke`1Y(kMQ|@ew8|U}f5!?jZGr+MG`d?@Px{8zli8JPS>; zJE4YE6mxG1=co0P0Cw7lhvA6IT8@r!g*Of zCfWGBu^&Qwu^(VJ=x^mYTA~pV{Y?Q$ti?CQ32I%}T&bK;LZ%a`_sE zqjk=E$y{SwYn6bp!fj10s763{arnJN`eJH?w6*G8SHrK$%EYq0sYsqOC&PpmxLqvI=T>nZ2yW zghYq)?v69)+GT0D?>y9gUq9bm*4L(q%%FV3hbbfPZ;g8_g!ZfS+8`gILc}2okEI=Q zvHe;Gv{7Tz8nfm$-LT37hJne5A#yT=P#Zf*SIIps{4$FP9PX;mZ5KkyUAMyzmQbX9 zHAT{#4T}6$BUt*XIit_2qU2&dVgUGAFrA3`z8x87`&ug0$lWRXbUjru*VL9N2fEhr zYi{G({ybM{bS-?M-v`LZ>Poj^^gR$G=DD)OWA3Re_aXuY^-tNSXvK0^S~>PSD$h8O zdYusY6L&2wVT2`FcbQyK$_hV86(y~|AQpI;Q@=&2i&V-9k6Yr#RtG%ggv*x4curGL zHOVy~drXyBl?D723%UOcPsVE$%%6+iD|ui`9sK*HO)Jw%PeSF`$A|mA#Oau_L2*tK zV}X9*d;#K)_X8Cknvb~C0FgZ zH{F;(6#nK2u0gnDra|HCx48QY-HWD4Ska0i-@bbA&vRHd1#*Y6jWCK%Rx8~m8C6%R&HY@slZf49VWns=;PX)(d^k*WE3am2b z^v5*(-JfBssZpqqsUsV)=<>=%>R`_qvW5r4M359nML+VA#U@su7gr=4J7v|q;kfw@ zE1ujljM=E}j1FtqtMSK3G_Kb+ZvsQF`(|)S7YxS=gU=1dxyDPui$lHMEI2I+tFlyA zuEF2>-q>u3ej|rYcTtcUQqt@m;~vb))ScwrqVDX>Df|&?TN+`JUql=>@nASnWUEn` zCbcb^Tcpp9+I2WS9p&ir%@3QZCaKqG0mx0*7bBn6+TNBCP+?iVh1)Dq`n$z_llnB* zRiBIbTb47UXH$@VUh|btj=;ANsc+#=5@Ok@WWEuXjXP!zT}yO?C@!V@YS#fz=rqSx z4!R<XxE5cqjP1adg1-NOrwkqxOStmPUvOAioqS- z8^(Gs*CWRQ-Xl&%v}E*QRA2Fw3%@hy2c_@)QqgrMg{Ag<1F)>AZ1M%Z$OtKqzh;|8 z{Iq137x}i65dRVKP3eirRVzOdn{0AmSQhQJ|GNXZ#0_+rsnO)l}66}VJ(|`P!{-XV7K^(74&7!`6d_`@=lfJmKu(RAJ zmtbCg%j#I4zoK~&{{Fj9p@3YMY?sD|=EqX1C1~Sm`Yt^sm3G|o_Oiwjx^=K^u=S5_ zb6ZopzMDo6Z%zs2F}3A23QWUk!}dyob0pmYYi+Ox4u~(>%(8%-OU)Lue2+a}-j%6} z4Q4c8hmWTM%c$aU_;pW-TM>_bbO17a$WJd^&@2K7RjBHhjdVPfYsa`dqLD7(Pzm~b zr&L*UN$FR9KNs1sIlH>@+FN9oFL0dqm?acFHHhz8kT?yE zzBXb|?`CfZ#MD}xQIiOMPfrz1PnCsw0hekn(zfGAcE%|jRUK|P*IY-8g9vJz2^#@B z%!CJ~Lc-R9Z?+RtI@?c+YwjM3Ms&)$9EfQtI7Nwpmx&gB04@0BY6N_Jm#d1m8-aCvE4z)HVfcn~hXd@A z_!)Q2Ryng-2&-yV+4vCD&MVxzA&1rblRr$~Hvm_{qP?``n6GsnH;-P-Z?nWH&XQe0i(!Bl7V2{h$}`b-nLpgDzmdJMsAIDt<}^O|3;phMNZ`+>MtJypm-@w% zoAMBC%ti55rb9Ry{{P=Tb>S^rFX@`iT_9q2& zw$hKvI%ID6e4M((jyh*t`drgH$YZ>CpwgzZhJ@0Ux!ODl4ewkzz+rP|F2v{c!D0C^ ze9yrc%j5X`h^cz&5RWB1@l;M$%HN<>zj+h6%dxRkux!fPC#^$m<9vZ=HaJvP)RIv2 zsc`AE$kR$=E+b{LgcA1MO6YzepzWukeBfcdxiT@BLCh2k=gg%>ZD>JSfIoM5pa4<3 zuizS84$3{u3pS`i%r}|jyTn|agqcVX6$YoW#EeHzkXmHKH1*+Q4hj{)x~7b&=`s2D zvO*07C2=+JUitAc1r|AtP2aZ{tg&5}pbxI=L!vv){14~pzgPbcZEqD^N024jS{7Nd z*kWd8X67SimPHmbvn*z2W@ct4i}{H8h?!Z}-Tmgio{4!c=6>AYU0G385t+LxvvRFn zBXN-xtd@*&Odly+J+UlAf11FJ59Zo+FN^28r5c0zP>P8UF^Ib|oLxo!`CM2^L3K1O zDaTIn9H)?ySjej{%GXEe)kY;wpN%AY2-nt@nVyjlny5qY$ljvIk9RL+>)}C)D-+L* zA_tpv=jKh&@me}UbRme<(eZaBDXmMDUH#~LP+>Xa2@L5UH$Lcmm^@=HDvqGNrLJ-M-l_Kn4?DD5Q-LM%CN7K=%k-%@te+#?k&3*6HVTNpIB9@5P8kQAnU#r|nY6BQ z$>fDRG!nOmP^Td9wPDh*LXWs>(nr76KWl+^?(U>$Bum=*WwRlN8D_B(8y%eQF+Vpc zHAHynY6`wV4*8Wb9RFeFlBJIwFQmsYhK7yMZrLov{2V1>ls3QmhDef>#GagtXHm(W zifX9$yMejRQ*oEAZ{wSvquCdJf4p)O)f8@D%zQ$&npy$QQvIH8Z`j+ljOyt37qmw? zfGn8lj)ZI05ySje-~LuPYPvSZfIcjmkm;E4RUL!< zOix@~L44^F7gd%?*}kPXq5tgxIZgEmUta?Gsn@B0CuXX29|`sR#bm5a5mC!LH|;~g zD_rE73gH^H#4bi8qC^Z`)R;6NMY3=hZTckK)S1oHnU3CA?nslelu?6ncAiAuzO3JQ zgZX60Z*@W-9E!>B8+fvx7xHdTP;<3qSL?=3biPQq0HJWIKs2iAij~7R8HZTlP+qPf zdWJfoW-lHRy`dsmM9Th$x%p7nUy;|n?ZfbM0M_6TJ*b5tQwO8l@uQyNqNn(2JyD^5 z_XX{iUMoW><#DB^W}V0PVd50X=6y5VkgSny|2VdM58xW`uHGI#pj^ut5#MQ)7 zvN6y1$kB3U@$y3Q@ncpqRzs)&%wdfodsT@4RO5~bpP;7YTnza^v27z4aB}uIH?2W<}QNXIgboZRa0T z3;KbK+_qf#w~wy$?0oa~1B&C@Q~GoBXV$hn5W9F+;pwQbXO~A;=6j-nTfuq1cc=Xj z*tCT6#NCyb;>hhu6~=pkk9woG4}rSuU+kjYZ+|FuTmD#tnUX{)K__***U^qAB~G4v zDWb`u`xD9}?`{}bZ>gv+#$VbRA|?@^PL_H{ik?byrAsn|_Z!65RGWKK{ZxidMRgFFXpA}` zP?2FO*tjpLo-Z|O=e*h7+;($#`A)fb#@|Ps?-!XTS{Fgc!|!zg3`0OtcT z6RX9U_@c&(OY8yjrzRoRVhohs%Ir+H+JGe4`GS&fP_vk2$BSlnMd&w~gTs zBO9*EIp~Ye<3;T|n6O)q=nJl+2-jaK9PhVHY$4TXAj2}Z{guh-EVmX5fXRE8E8jJQ zxD&UNcKS8rv$+AQeT)9lQ=H8PIH>P$eKpkfkwg7T^LS{7$ogm2G&DPg2QN9JUYYqq zHK=+)+8^zsGEV4!2_+KM2x$odE+@S!%1d;AOoV1gK)kfo0OEK0He0=Nsr2KqOAOfi zoNB(d=3@o-o?e9W7vIXI7{2a@sbYos>lXn5dj1~_>jRz*FdA%W8f?dj@_bFmJe1G? zqA&_ZK$wAgaDz+c@&om{NZZD)i{9a{6wY7>s;Me?PZ7cH6hZJ zD%HA~SS4NY`&^Sdv}hN&DQD%a^`)Mrf&GyQhTT&VD{UK^b%tBS6wa6UW8-X5a&1Ju z^xCNLi~Vuuo!|Jxz><+W*}<=)pgdI!2}Slqm-e-IQ+?#SxyWv}9IeXh&$kx+wI&>*As#+AP_jksh zyGeQUvjgUWxU_07kFr0q=BMO%I<82zO8DUAk%mQ_qqo?-0$RCBughW z>p-&gZS9>NuJ@uszCU>nNCZt>akS)dl8EFR#6h&m%sdiai5WuttVTwzvxbFxhNK+y z;traTltk$rZY2_K*!#HD4$NpnENE=w>G?yy%^>Q@2`Q1_Mg_ZC>C#ttL|{_k$bK>> z`u)+soexxFI22XpDIG+ht_zSptL0?tMvf^IS2j6m*JBuT&QLNtyIHkBb{ejgh9}lm ziLO-is5+SwYb?EK6pwpH4hr&q}0zt~=dT zwWLRHy6l8MJKE~-c}|r#OzCm#v`@z9_naBfb=>OSvUk6K46g`Wt~)=Lo6@2f0;{IO z!yIij_^pS>aO5-!fKl$H2QPFPd5F)xwm3<(wYrIvYjv}?vR*tM`BO}--C=*XNW@I- zW&6ynfL5E;TpRqEkC5` z0X&Nt5|*BA)STc>b4X`M`PdX`k%xoeK@Z;^;HK=S?^U4H%}@OqustVq`v&?TS`?|s z$LspqVCuF7ygsi!NoEUPoqDoM$=vvYtBoQK*>&j&-fZR%QAF4G{J5vXTD_h<+s}B*MNCGfM{G2&nmr`RW6gj)iM5 zh|?LDTE_3Y<+Trg@FPHjSF7tdq*V-)>AFH}y0M5{>yZ29z*!kKFb9MnD2i*EFXhz- z6!nQbX_`ARQ2VPk)q4i#hoc$n*T7wDX0>`gN)HtOoVwBI54_R1Xr)4P_7HUJz^)u% zJn1&@sX|SuCwq9$@lvF{Y2u~hlBYQ{YiHGbgVwyhD2VD=zDs_3-5^;#M8$z05f3#@ z5B@`C_#RDT(;as1&Y0#y@-!~;DB)|2-DdMxMZe<^SA1ybG`b!5RKUK;0rh7&={(7EVLm-r(g6Ed`Me`Ie#{1LQ=nBCn<_>EM0ev*Hmiqa=3!Pa>@EoQi+5Sa&?N+Kl!m%S(XHn!z256 zrZQt9YczO!#|pI;ao){tlIJLRc`l`;mFn{44v|+r-U;CeiJB^$S1`bSEYs=JI~`C1 zP@qHJYGS$5>1fxosYcFt=`!mPKPC?P#u(yqc_`1UepZ#vxv2Uct|VeIi@%t6aBgcQ zi4}1`y}2ET$}lQwdc|MiD04n-#doPXM}YW5nLfoo`&+k6$2R%)DkfiujElRLCh2r} zpGYKDn<*~^E@lmB?&$iWd%NQ`K0Kli%VbPzEZXJBAe4SVistI!>i$mkRjotabLrXT z8Q~R$xVw(uO83Y5-0UL$4uFsYUsJ6Zok-e~FFSNi(!K*e^miz$QXwmE>B)R(%6hh@ z4HKY!akyLgk48(WeT^dtoX~d4tQ^^VVXNvUMbUn0VJOp5EMJs`QC8hJrxm7nmrfI1 zo`<8jBKdb1e(GPwSDF|?g2wp%sXuqNN1@Q+n;|5BLzEVMDSX?q(Ye z9ar_E{$8XRuk#c~LGzF4WQ5krG{xjmKCfg*x?Y(pKl@jnTI3~))mIC&rXM^7fG(v+jHlP9kmsmwDsRWBlpkGt%H;bKaV$}q z*;rJITpj&2IIjs?lW&aA1Bndt0@H7`8^3GOh=BMJl z-$4$ozM^9*T!)?%uZK?ptO9a8j)Dtz|>Gx)6mq z!etE=kC|pCX)GzShhuxRX5>c78U_GlDicw&(Hs$lC}7W|w{m0rL7)Bd9<+GsX=NG7 z>#_nuwD~wr%1~SHczCM0__3O9A7HXuhs=C8w`uy=`95c}nUkWObJX@i__y-uI*u%& zvK+OFRgxkoEs+tBVM}{8A#GPu4|WE(*mvai&@`^NwlTwibdCaAru3n6vB*EgJNdEQX?yk;!(fs>-V`FA-`?k21a)5_RG*ArQ z;d{;}B~0a1?xG505RxnT;StR7^}PRG>xBPd#yKz1v7!KJRs8bDlVY|2ec<~WrThrJ zx1rC@G%QJDRcwF;&!vAh?%yWT50u)aJLtHnI4@hGk3}+_Gb=jB0D{`>Mkv6 zkG=nO`;k)Ig;i2nD+gIo>rG-alDmb7wFL&N)4SnFiL8EjqU%G1sQvB_+w&-vCH8K* zk!L6wy{v4h=&HZU zS%h+rbiYxr0?cF3P5Z7L4HnHE>$!#sAm2V2qtnwzMp!IXD>U(%SMlZ73%ESR9Op>S zVQb*h;`TfFOE0dP6-M~+vt4Fl^N4R$MDL&mQ`>Ehe)&#IZcs9IxYKm1o29sKEqz$D z<1>qOYaUVCrKE!MntU*QNO#Ru+NpX}&(<(sJe)D<&u=jzrsuSOnERZ{!Mk?_7az~D z>f*=XfW@roZZjJ=q^DP7U~ZxgTzT+)tBs$9pC6)F-VdU}3hmcZZMOB~2nm+xC7Uav z$JNz5?X`okK>C47LAGpK4rxrIUPfFLo(L&iNunrjRExVZcr?@>aYeGcusOO?D?H8PpcEb13<<-t-B2K=T7Za0WeABjh@n)(O4SwEgqkB3 z@T(L+tv;iBLcf@Jsw40+&PROKCX|p3=c`1}UqEy2cv=daZ_*7L+4wtmEq>@)bs;0H z0g9upq#tI=iRcKK#oa%kOzs#{|xJX!>h70arOmW(bzbkuq`PpSrOE(YNYt-I|imK~1_ z{xKb@F%ODjF?l*ECJ1;;F#@}TzO*!Cg#&9+o$H)}ItkqMG8D>-BsC`pp~3hQWnWP~ z%OC#R1N3SIDxZsJGXDVifafe^;gREq%znYL z$#KVIhk&ECtYNl*nVe^ovY(^{Rv~{+>MWA2wcaxAP3kgh@WBC&?2&{JJJnJ4Wb#~R z#xtbj@x57E(F*kIcLlA-kmh|d8i$d*XxEr)Hot?_@Sh6%UrhjmfpSX(lS-YJ4L&&e zz8mh%l9^Aij`vu!{{~0@C!PEcVws7Jm6h#(>jD1BBmX1J%FN8f{J+Ehp*Z-T$qZCQ zlmMEdG|J}Ie*xf_R^(!r8Mu zCcF~+4PR}W_p<6qlg!|vON7Bir@$>6zD;OaHVR$Hw;l zo^!z*4>)oZuRjE9i%#rWwu)sjRqR-j=k*du4!TX$;SbE65)Cu9kA8nJ^L{xdCVC4ZCtz2^4o zCUdEXHmoD`SJ`cte4%YTeGWHNA&uwr{m8hVT$M{AoRBy*_O_oImjkujDN{LOEExpZ41R+m|s!~ou1F=Lz z`8yYmd~yzX5TTC-LYB!SVwRfFF6w7tP%;Z8axc|U2686yQ{Ycp;h!^>1%~8DGqTza z-@!H-*VY|`zAba$^GI4m<`w=S)TjfS8qtXPD%{Vg^&^42)-AK}inBjA-K3CQCxnpp z_jE3lwFnzBYoc{iZ#~%n*jh9c+!$P+;T9>7kpL%<=o?fYlYc4_Z!)3k@9q`cI$Nay z@2`^af_Z{Fq}vdZJlRsKrbu?ov4SpNdw;X|Pk#%ZQtQog-ZZcew~vWc)Pf04jvXZ? z)gmVOPWh!!F!#GmUy`4)0#r4gpdkd~-4aXi;};tT@zGQju5~KJfn~uTKetp+70M)J z{q}RaHZ9~U9@m+4guRG9_>p8k>u76%cabwnd)zU~?~ij6Ep5Lk-&}mZ5Ty_`{C8vT zKWqW)|K(QlCv(DM(aPSm}-XzhneLph>z>9!=IbJpFNL<7a#Md zYSUF0OUvmLftZ0%#>7OwktDUi`j`=z63`6yn*1;a#~d{J3}BEn!}}oMh&ajp(8$J( zshFe$k)YNv!SyuR1yq|Jt91{%feznEVzut4w=T2u7j4~vZ$B8`$#ge+7J&lfG8+d8 zJxuQ7yAs`n9@{aZzihr;E6aDk#Y|jIcOUcF_S{}xyeZpDcnRwt7!niyetr$($w4|K zwm;lDzU6V-de7)yT6aHm6|+TpY~{E>!MOi}H0TC+?wmt>>8R@bx|@D6yE5%GVlCMkUK2{)O%c0cG+wixX?#Yttqy`Y)s=+*!9 z2LAz%ycBfeh&O+z5!~zY`mD5x^^xwxQ5TgItevVKW`5iy3(vL`lr8p@vD@`}<((j3 z_G*x~6NHVwR9mwnIk3jI9(7r$=Ly${O>dOeCe`!6TV%Q{utGIm_I^6;rNDieV(AtY z%wg_U5L~lh2fjlE|7g}KKR_4Q!RAGmE#POJ=XiU@)aiqI>lPh+`g8{M!H;q4gK~WX z>1KT)uocU;blUdxs^sUi$^=f0J zvopKD9>4E3FeK#qSqvWIYSUT9_Ttj8LoXcE3AOg2;DP zS`RrV^uoj?*yB^)#9{5kzU;x>0Wisvd}n9%iVN0{^urej?LjoxFgL4Xz=5}2stxlt zxj=N=TJI>|Iju#6o1!;rkI>`CK>CCN27hdYoHMn0^$r|z1wz*{Ozpm7``T9irt-u& zHJ=ketl@!Izj}VXdIn4OjdXTr>Su!xF>*D?a6yXZT^{C*uC-oEJ;2RYb}#N(WC^^R z#?p&=w|#kfUhc*)*vi-{L4uZ;{sM;p>A!R7$`^22b3gTd=+iEL_{?2d@@WMjB5^sg zU1ga!)|ZqrU7|e8+$|wgA1q5iYMk7%Y*Z7 zQ`fCF%7o#%Gu#jTqQB8I^-;C6CE}j32hlJ?1}CTYR(Fu1D9@*uJ+1Cs1Ub@kS_D^T z;1=h}b8X-mT;tJlxmYC7v)0B_!*x#fp%#zh`o&_;GWd=9T)=qL8X2k&fO_J%g^b)Q}_4?tTzk#;cG z&fjYo40Ua`pLI2+A9tI|w%)M%QTwjy;#kCsE0H_~57~F^!$5C=!HAYmKJWr%I|bPM z`8yrgc;J_e?M)waL(;h66?HwIT$atNGyPIIor-SYm0eVarMks|-RW?%19GizUa0l(>q^rFV#Z zeAjzdF{%sDKGngU^7!|0X`nVPE-`%7*UaoHuQZN~)c4%;#xI8?XvIIZubp=Xb}5D= zhFsUWXO*OT6vKcKz9uy^S;M$R%?EG~lQqYD2_hz*P4#@KEBGwa((i+JHYJD&0aWrU z-R~B`wk%PN3AviGKwn>(g3kG@0yvO z4s4vRZqqqdc4*~sy~k*(f*DRq=W=TRT~bv}o`6Ue&P&!rGnAIWs?kx^65F4_2xq;v z?zLT;Q<0r72h@y^1R|W*FXNebE|yboqfpY9dIj#o^iVxC43-oxR(b13IVkB( zmC;bl&bR@~iZYzeM>|m+?*6_IiZz%^(%hZ>Zdk0qx00IQ7L?LHn;qKF+)~DsAL!ba z@O$*23|)KpXVX!I>XQUtAos;7Cx$RfaPcS>@$B5+>T*V|h0krqZRO6aPGMQ&3 z^A}|3BhrHMWlg51&s9dwGT@OV3DZg7ppBi)yVKOFofX?HOqRJD)Wx%7?XyR;h1}kF zIY5`5+J%FG95;NyAC~^7KMM=H373GBIfbT}_v88fv2z`U&tuD*yJ`7No-Wt2XcjQk zB)3M9rjiG&W6MJ0C={-idg&7;p;crsQk5_r9nEJbFWB=j-B*;?C8aGa1+C_nji5!& zpN-VkSV`yBLBOsgvkVVo%DXM=ch_<09r(5HG~TA_F>gF-AHZhvw5hEHO#>gUXwtT% z>#*cc!6B|O(lA!QLYik+J})&fY+^Kx+Y5tTsqi{=VahtF@7?f&J=D_C#wkz_ z=%d`CxPn|iOQ-ZQ#j%o1$-^xzl`YD=_G1- zS3Ioh#b||_x_)GZ-q{v59Zgt>NGs0>E6?{^_+D93TINyxxzaA7s%UsQl-@G0LSI?w z30RDFVRcPwJc#CE=~U$^H@^bfIR>MaoXv}uSjT!QSCs+Ae?vDTvR58doL!1&38V@h@}aq2g;`i8Yu%W9N;q|lfop-)4H+8`|s_QS5enbu^u|PuxV5a6TlB9 zaV^!f+!b^ADbKmg&dY3+t(6Pq_BwuU;nC7-dn4{^nx5Aplo^klEJU4mOzn0y`F^)d zF;UZUVV5AmO6Htnd+A!5yQ@AQAAZP`vOH;OG{K}ksY36pMXjx!#-Jpl8NY4v=GVa5 zSo1MI?N#?iCK!-r1JrCvEn7u1!akcwN7`g-z!-0TG8meteF<4Jq{(F3P;CaB7s*MO08WmY*^7; zMQiVL%}|)SRLCQJJ4L_hc@TXkWPBQ-)^kCr`Ca|Ui(Cw16z&>Iwh;k zq#3k5W`w^?`YVX)v}3)!TtL-$fOq$3mycoWan*=+jRBLeDD z|7m_F>VB9gM}+4<$5QhiTi#cJ%k?|&?n3bVnAi0g%}vY}H97v6ze&@eiVBZ+@+xXw zx*5ei-or9dJzin~D*kmZzHg+#V5AM6uB4^%!lIfz3)&3)QkXlz0>sDhn1a6Dh4!I) z+;SB8E(Pc`{G8k7l{?6;caYM8tDXGzLM<606MI268^g3D<>gHx(v@sQ8 zQ?%$WXnV}d7viWaXSrvO#d^4WyZ}40vGAZm_NLf@VqD~ho@02N%i|X$-t9k{R2jZvAW!TgqFX9a)Wh%0sl+22ozZgNkSx(M6QrAW3(o&aK-KRv2p(v0+IW7Zzu z9fG?{uaJ7|YI<6Y_o)$5OXauxMwC{`q1Q=2TS>pGzMVvVtOkGR!aexll}F z6^@&uTFr`?#mw*scUq*-E+Ut-2=0J;$b3c-^!_zle2XTY#07Sc;Yo8LG+~f&qGQyxV;hamyevPX-c}&h{LCB^-)mECw;zX377t4PUjHO{fYhBUj(1Rj zn-iBMmh8y3OLL$UrUH|hN|KV$q~x}6pbXX&T-Isl)w@}SYi@d`j$4w~7QcS${ws94 zj+M|V-ozpOGwwvnE#D=!OLRf5+bF0$GUn^GJW8_1s4dQ8ntsSc1xsQ!(fyC%(y26> z97d&Zr^JlLRdhgof_0E9jnHP-ue-O#mN$L{gm7eCq{XKuyhrTEZ=R0dNN8yQKmyhu z$wUY^6J>TPaU?Cj5Ju+i)xxp2J$OpVA$Qv_`F37njrVX9Db_+Clz`~RH>I8HH;Ue^ zcN0n)M58HUZO=Cv+*F+W(vRBaIKH*3^|LjOg^O_7(Clmz2u+k(j(tvW_;lC=f+XPF z&}~{8+NJ|1t6W-=3pBYYR27r1ONM4u7$kjIIl~VClAi}M`D&(xlTgwIsq>0UJ~}^h zzE1Bi@sC0*i@|FVb2V4hv!@ALt7r;*f6{CHMP<=UYHtutJ)}q{a{LvAQ{t3ZA|q@Q zFgv&Xj2>G^<{)ItB-)@5TQZ9hg=n!uSuR$2!%5eaEp|w&_p}M{@@D<#q5to zeu-lR&f}qv__~~U2_a7H&^fIIv}AB@*MLZ!AN+;P@27i%08?bo6zeKHN;mm0=tWi`q= z8Tb|jm!xPM$Fm){&tDgr!@+ZkNam<0*OKYqV`Nx^jrE=jgN*$<>#(HjA*B(n-oH#~ zE&PzQjelr!xZzrS*XekJ6(S+KlQwn7<%~WET&X|Hgp_hGmV{kI0`6>;5&nI8^)U z7`Xf~Y)`Wfd&7bjbStA;J$1$5sMeYG?8jdoSOYHwoNg;%O=j%{8QUtH)R7X?gC_+;pjiV?DvkXP*1{&;t`=(>#>)$z4B?}4lc~a)4NB#aEY#JOPpuoP?QR05q_z5S zQ(g&?dGWE1%dE+4U@@L?r5 zZ!%H+^Eo6V#>LsTS3#TzlncIo!FddlbE+B`9wZI**>qZ?MNUQgob+*7GB2WG=75?F z<2=EtGL__6BP+j;uk~$C??O!h71)-4SE&cQmbOxFp4qaCU$hsb$8#MRf_jrsgm8 I)3{_X|vOpW}69n+Y{# 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

4RUT#uGc`f|wIHtUm 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 assigneeUserIds = taskCandidateInvoker.calculateUsers(execution); - execution.setVariable(super.collectionVariable, assigneeUserIds); + // 由于每次审批(会签、或签等情况)后都会执行一次,所以 variable 已经有结果,不重复计算 + @SuppressWarnings("unchecked") + Set assigneeUserIds = (Set) execution.getVariable(super.collectionVariable, Set.class); + if (assigneeUserIds == null) { + assigneeUserIds = taskCandidateInvoker.calculateUsers(execution); + execution.setVariable(super.collectionVariable, assigneeUserIds); + } return assigneeUserIds.size(); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java index 6beb6e7bb..16a54481d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java @@ -8,7 +8,6 @@ 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; /** @@ -42,8 +41,13 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); // 第二步,获取任务的所有处理人 - Set assigneeUserIds = new LinkedHashSet<>(taskCandidateInvoker.calculateUsers(execution)); // 保证有序!!! - execution.setVariable(super.collectionVariable, assigneeUserIds); + // 由于每次审批(会签、或签等情况)后都会执行一次,所以 variable 已经有结果,不重复计算 + @SuppressWarnings("unchecked") + Set assigneeUserIds = (Set) execution.getVariable(super.collectionVariable, Set.class); + if (assigneeUserIds == null) { + assigneeUserIds = taskCandidateInvoker.calculateUsers(execution); + execution.setVariable(super.collectionVariable, assigneeUserIds); + } return assigneeUserIds.size(); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java index 3a812eb25..c046011b0 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; import org.flowable.bpmn.converter.BpmnXMLConverter; @@ -9,10 +10,7 @@ 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; +import java.util.*; /** * 流程模型转操作工具类 @@ -111,7 +109,14 @@ public class BpmnModelUtils { return null; } BpmnXMLConverter converter = new BpmnXMLConverter(); - return new String(converter.convertToXML(model)); + return StrUtil.utf8Str(converter.convertToXML(model)); + } + + public static String getBpmnXml(byte[] bpmnBytes) { + if (ArrayUtil.isEmpty(bpmnBytes)) { + return null; + } + return StrUtil.utf8Str(bpmnBytes); } // ========== 遍历相关的方法 ========== diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index 49d83bdbd..706157a85 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -1 +1 @@ -package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageReqVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.enums.task.BpmDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.strategy.BpmTaskCandidateStartUserSelectStrategy; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants; import cn.iocoder.yudao.module.bpm.framework.flowable.core.event.BpmProcessInstanceEventPublisher; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.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 +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageReqVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.enums.task.BpmDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.strategy.BpmTaskCandidateStartUserSelectStrategy; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants; import cn.iocoder.yudao.module.bpm.framework.flowable.core.event.BpmProcessInstanceEventPublisher; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.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.getProcessDefinitionKey())) { processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey()); } 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/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java index 1b2a4514c..4cce820b7 100644 --- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java @@ -15,6 +15,16 @@ public interface ErrorCodeConstants { 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, "获取参数配置失败,原因:不允许获取不可见配置"); + // ========== 定时任务 1-001-001-000 ========== + ErrorCode JOB_NOT_EXISTS = new ErrorCode(1_001_001_000, "定时任务不存在"); + ErrorCode JOB_HANDLER_EXISTS = new ErrorCode(1_001_001_001, "定时任务的处理器已经存在"); + ErrorCode JOB_CHANGE_STATUS_INVALID = new ErrorCode(1_001_001_002, "只允许修改为开启或者关闭状态"); + ErrorCode JOB_CHANGE_STATUS_EQUALS = new ErrorCode(1_001_001_003, "定时任务已经处于该状态,无需修改"); + ErrorCode JOB_UPDATE_ONLY_NORMAL_STATUS = new ErrorCode(1_001_001_004, "只有开启状态的任务,才可以修改"); + ErrorCode JOB_CRON_EXPRESSION_VALID = new ErrorCode(1_001_001_005, "CRON 表达式不正确"); + ErrorCode JOB_HANDLER_BEAN_NOT_EXISTS = new ErrorCode(1_001_001_006, "定时任务的处理器 Bean 不存在,注意 Bean 默认首字母小写"); + ErrorCode JOB_HANDLER_BEAN_TYPE_ERROR = new ErrorCode(1_001_001_007, "定时任务的处理器 Bean 类型不正确,未实现 JobHandler 接口"); + // ========== 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 错误日志已处理"); diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java index 41499eae1..e03ad665a 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java @@ -2,19 +2,20 @@ package cn.iocoder.yudao.module.infra.controller.app.file; import cn.hutool.core.io.IoUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO; import cn.iocoder.yudao.module.infra.controller.app.file.vo.AppFileUploadReqVO; import cn.iocoder.yudao.module.infra.service.file.FileService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.validation.Valid; 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.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import jakarta.annotation.Resource; - import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "用户 App - 文件存储") @@ -29,10 +30,25 @@ public class AppFileController { @PostMapping("/upload") @Operation(summary = "上传文件") + @PermitAll 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()))); } + @GetMapping("/presigned-url") + @Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器") + @PermitAll + public CommonResult getFilePresignedUrl(@RequestParam("path") String path) throws Exception { + return success(fileService.getFilePresignedUrl(path)); + } + + @PostMapping("/create") + @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件") + @PermitAll + public CommonResult createFile(@Valid @RequestBody FileCreateReqVO createReqVO) { + return success(fileService.createFile(createReqVO)); + } + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java index 3f1aedb97..ea5a9bb63 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java @@ -13,7 +13,7 @@ public interface CodegenColumnMapper extends BaseMapperX { default List selectListByTableId(Long tableId) { return selectList(new LambdaQueryWrapperX() .eq(CodegenColumnDO::getTableId, tableId) - .orderByAsc(CodegenColumnDO::getId)); + .orderByAsc(CodegenColumnDO::getOrdinalPosition)); } default void deleteListByTableId(Long tableId) { diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java index 57d92759b..e694926f7 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java @@ -22,13 +22,14 @@ import cn.iocoder.yudao.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 jakarta.annotation.Resource; 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 java.util.stream.IntStream; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @@ -179,11 +180,18 @@ public class CodegenServiceImpl implements CodegenService { && 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()); + Set modifyFieldNames = IntStream.range(0, tableFields.size()).mapToObj(index -> { + TableField tableField = tableFields.get(index); + String columnName = tableField.getColumnName(); + CodegenColumnDO codegenColumn = codegenColumnDOMap.get(columnName); + if (codegenColumn == null) { + return null; + } + if (!primaryKeyPredicate.test(tableField, codegenColumn) || codegenColumn.getOrdinalPosition() != index) { + return columnName; + } + return null; + }).filter(Objects::nonNull).collect(Collectors.toSet()); // 3.2 计算需要【删除】的字段 Set tableFieldNames = convertSet(tableFields, TableField::getName); Set deleteColumnIds = codegenColumns.stream() diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java index 6d3882208..289cae1e3 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; import cn.iocoder.yudao.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; @@ -18,7 +17,6 @@ import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; /** @@ -49,12 +47,11 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { // 获得数据源配置 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 + if (JdbcUtils.isSQLServer(config.getUrl())) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419 dataSourceConfigBuilder.databaseQueryClass(SQLQuery.class); } StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到 diff --git a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java index 68310b3bd..0ab4cb6d7 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java @@ -24,12 +24,11 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import com.baomidou.mybatisplus.generator.config.po.TableField; import com.baomidou.mybatisplus.generator.config.po.TableInfo; -import org.junit.jupiter.api.Disabled; +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; -import jakarta.annotation.Resource; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -235,17 +234,16 @@ public class CodegenServiceImplTest extends BaseDbUnitTest { } @Test - @Disabled // TODO @芋艿:这个单测会随机性失败,需要定位下; public void testSyncCodegenFromDB() { // mock 数据(CodegenTableDO) CodegenTableDO table = randomPojo(CodegenTableDO.class, o -> o.setTableName("t_yunai") .setDataSourceConfigId(1L).setScene(CodegenSceneEnum.ADMIN.getScene())); codegenTableMapper.insert(table); CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setColumnName("id")); + .setColumnName("id").setPrimaryKey(true).setOrdinalPosition(0)); codegenColumnMapper.insert(column01); CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) - .setColumnName("name")); + .setColumnName("name").setOrdinalPosition(1)); codegenColumnMapper.insert(column02); // 准备参数 Long tableId = table.getId(); @@ -264,7 +262,7 @@ public class CodegenServiceImplTest extends BaseDbUnitTest { when(databaseTableService.getTable(eq(1L), eq("t_yunai"))) .thenReturn(tableInfo); // mock 方法(CodegenTableDO) - List newColumns = randomPojoList(CodegenColumnDO.class); + List newColumns = randomPojoList(CodegenColumnDO.class, 2); when(codegenBuilder.buildColumns(eq(table.getId()), argThat(tableFields -> { assertEquals(2, tableFields.size()); assertSame(tableInfo.getFields(), tableFields); @@ -458,9 +456,11 @@ public class CodegenServiceImplTest extends BaseDbUnitTest { .setTemplateType(CodegenTemplateTypeEnum.ONE.getType())); codegenTableMapper.insert(table); // mock 数据(CodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); + CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) + .setOrdinalPosition(1)); codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); + CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) + .setOrdinalPosition(2)); codegenColumnMapper.insert(column02); // mock 执行生成 Map codes = MapUtil.of(randomString(), randomString()); @@ -487,9 +487,11 @@ public class CodegenServiceImplTest extends BaseDbUnitTest { .setTemplateType(CodegenTemplateTypeEnum.MASTER_NORMAL.getType())); codegenTableMapper.insert(table); // mock 数据(CodegenColumnDO) - CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); + CodegenColumnDO column01 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) + .setOrdinalPosition(1)); codegenColumnMapper.insert(column01); - CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId())); + CodegenColumnDO column02 = randomPojo(CodegenColumnDO.class, o -> o.setTableId(table.getId()) + .setOrdinalPosition(2)); codegenColumnMapper.insert(column02); // mock 数据(sub CodegenTableDO) CodegenTableDO subTable = randomPojo(CodegenTableDO.class, diff --git a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApi.java b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApi.java index cc381c23e..a4580800d 100644 --- a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApi.java +++ b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApi.java @@ -12,6 +12,9 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.Collection; import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = @Tag(name = "RPC 服务 - 商品 SPU") @@ -24,6 +27,16 @@ public interface ProductSpuApi { @Parameter(name = "ids", description = "SPU 编号列表", required = true, example = "1,3,5") CommonResult> getSpuList(@RequestParam("ids") Collection ids); + /** + * 批量查询 SPU MAP + * + * @param ids SPU 编号列表 + * @return SPU MAP + */ + default Map getSpusMap(Collection ids) { + return convertMap(getSpuList(ids).getCheckedData(), ProductSpuRespDTO::getId); + } + @GetMapping(PREFIX + "/valid") @Schema(description = "批量查询 SPU 数组,并且校验是否 SPU 是否有效") @Parameter(name = "ids", description = "SPU 编号列表", required = true, example = "1,3,5") diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/AppCategoryController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/AppCategoryController.java index 5b1912257..b8a3605fe 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/AppCategoryController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/AppCategoryController.java @@ -10,6 +10,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,6 +34,7 @@ public class AppCategoryController { @GetMapping("/list") @Operation(summary = "获得商品分类列表") + @PermitAll public CommonResult> getProductCategoryList() { List list = categoryService.getEnableCategoryList(); list.sort(Comparator.comparing(ProductCategoryDO::getSort)); @@ -42,6 +44,7 @@ public class AppCategoryController { @GetMapping("/list-by-ids") @Operation(summary = "获得商品分类列表,指定编号") @Parameter(name = "ids", description = "商品分类编号数组", required = true) + @PermitAll public CommonResult> getProductCategoryList(@RequestParam("ids") List ids) { if (CollUtil.isEmpty(ids)) { return success(Collections.emptyList()); diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppProductCommentController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppProductCommentController.java index cd9fac80e..b57d58f03 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppProductCommentController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppProductCommentController.java @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.product.service.comment.ProductCommentService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; import jakarta.validation.Valid; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -30,6 +31,7 @@ public class AppProductCommentController { @GetMapping("/page") @Operation(summary = "获得商品评价分页") + @PermitAll public CommonResult> getCommentPage(@Valid AppCommentPageReqVO pageVO) { // 查询评论分页 PageResult pageResult = productCommentService.getCommentPage(pageVO, Boolean.TRUE); diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/favorite/AppFavoriteController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/favorite/AppFavoriteController.java index c632171a0..fa0903ceb 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/favorite/AppFavoriteController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/favorite/AppFavoriteController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.product.controller.app.favorite; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoritePageReqVO; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoriteReqVO; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoriteRespVO; @@ -36,14 +35,12 @@ public class AppFavoriteController { @PostMapping(value = "/create") @Operation(summary = "添加商品收藏") - @PreAuthenticated public CommonResult createFavorite(@RequestBody @Valid AppFavoriteReqVO reqVO) { return success(productFavoriteService.createFavorite(getLoginUserId(), reqVO.getSpuId())); } @DeleteMapping(value = "/delete") @Operation(summary = "取消单个商品收藏") - @PreAuthenticated public CommonResult deleteFavorite(@RequestBody @Valid AppFavoriteReqVO reqVO) { productFavoriteService.deleteFavorite(getLoginUserId(), reqVO.getSpuId()); return success(Boolean.TRUE); @@ -51,7 +48,6 @@ public class AppFavoriteController { @GetMapping(value = "/page") @Operation(summary = "获得商品收藏分页") - @PreAuthenticated public CommonResult> getFavoritePage(AppFavoritePageReqVO reqVO) { PageResult favoritePage = productFavoriteService.getFavoritePage(getLoginUserId(), reqVO); if (CollUtil.isEmpty(favoritePage.getList())) { @@ -71,7 +67,6 @@ public class AppFavoriteController { @GetMapping(value = "/exits") @Operation(summary = "检查是否收藏过商品") - @PreAuthenticated public CommonResult isFavoriteExists(AppFavoriteReqVO reqVO) { ProductFavoriteDO favorite = productFavoriteService.getFavorite(getLoginUserId(), reqVO.getSpuId()); return success(favorite != null); @@ -79,7 +74,6 @@ public class AppFavoriteController { @GetMapping(value = "/get-count") @Operation(summary = "获得商品收藏数量") - @PreAuthenticated public CommonResult getFavoriteCount() { return success(productFavoriteService.getFavoriteCount(getLoginUserId())); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/history/AppProductBrowseHistoryController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/history/AppProductBrowseHistoryController.java index 5b0d292b1..46dfacf2c 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/history/AppProductBrowseHistoryController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/history/AppProductBrowseHistoryController.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.product.controller.admin.history.vo.ProductBrowseHistoryPageReqVO; import cn.iocoder.yudao.module.product.controller.app.history.vo.AppProductBrowseHistoryDeleteReqVO; import cn.iocoder.yudao.module.product.controller.app.history.vo.AppProductBrowseHistoryPageReqVO; @@ -40,7 +39,6 @@ public class AppProductBrowseHistoryController { @DeleteMapping(value = "/delete") @Operation(summary = "删除商品浏览记录") - @PreAuthenticated public CommonResult deleteBrowseHistory(@RequestBody @Valid AppProductBrowseHistoryDeleteReqVO reqVO) { productBrowseHistoryService.hideUserBrowseHistory(getLoginUserId(), reqVO.getSpuIds()); return success(Boolean.TRUE); @@ -48,7 +46,6 @@ public class AppProductBrowseHistoryController { @DeleteMapping(value = "/clean") @Operation(summary = "清空商品浏览记录") - @PreAuthenticated public CommonResult deleteBrowseHistory() { productBrowseHistoryService.hideUserBrowseHistory(getLoginUserId(), null); return success(Boolean.TRUE); @@ -56,7 +53,6 @@ public class AppProductBrowseHistoryController { @GetMapping(value = "/page") @Operation(summary = "获得商品浏览记录分页") - @PreAuthenticated public CommonResult> getBrowseHistoryPage(AppProductBrowseHistoryPageReqVO reqVO) { ProductBrowseHistoryPageReqVO pageReqVO = BeanUtils.toBean(reqVO, ProductBrowseHistoryPageReqVO.class) .setUserId(getLoginUserId()) diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java index 2690bef0f..87b0f2939 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java @@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetailRespVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuRespVO; @@ -21,6 +17,7 @@ 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.validation.Valid; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -51,14 +48,10 @@ public class AppProductSpuController { @Resource private ProductBrowseHistoryService productBrowseHistoryService; - @Resource - private MemberLevelApi memberLevelApi; - @Resource - private MemberUserApi memberUserApi; - @GetMapping("/list-by-ids") @Operation(summary = "获得商品 SPU 列表") @Parameter(name = "ids", description = "编号列表", required = true) + @PermitAll public CommonResult> getSpuList(@RequestParam("ids") Set ids) { List list = productSpuService.getSpuList(ids); if (CollUtil.isEmpty(list)) { @@ -68,14 +61,12 @@ public class AppProductSpuController { // 拼接返回 list.forEach(spu -> spu.setSalesCount(spu.getSalesCount() + spu.getVirtualSalesCount())); List voList = BeanUtils.toBean(list, AppProductSpuRespVO.class); - // 处理 vip 价格 - MemberLevelRespDTO memberLevel = getMemberLevel(); - voList.forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel))); return success(voList); } @GetMapping("/page") @Operation(summary = "获得商品 SPU 分页") + @PermitAll public CommonResult> getSpuPage(@Valid AppProductSpuPageReqVO pageVO) { PageResult pageResult = productSpuService.getSpuPage(pageVO); if (CollUtil.isEmpty(pageResult.getList())) { @@ -85,15 +76,13 @@ public class AppProductSpuController { // 拼接返回 pageResult.getList().forEach(spu -> spu.setSalesCount(spu.getSalesCount() + spu.getVirtualSalesCount())); PageResult voPageResult = BeanUtils.toBean(pageResult, AppProductSpuRespVO.class); - // 处理 vip 价格 - MemberLevelRespDTO memberLevel = getMemberLevel(); - voPageResult.getList().forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel))); return success(voPageResult); } @GetMapping("/get-detail") @Operation(summary = "获得商品 SPU 明细") @Parameter(name = "id", description = "编号", required = true) + @PermitAll public CommonResult getSpuDetail(@RequestParam("id") Long id) { // 获得商品 SPU ProductSpuDO spu = productSpuService.getSpu(id); @@ -115,37 +104,7 @@ public class AppProductSpuController { spu.setSalesCount(spu.getSalesCount() + spu.getVirtualSalesCount()); AppProductSpuDetailRespVO spuVO = BeanUtils.toBean(spu, AppProductSpuDetailRespVO.class) .setSkus(BeanUtils.toBean(skus, AppProductSpuDetailRespVO.Sku.class)); - // 处理 vip 价格 - MemberLevelRespDTO memberLevel = getMemberLevel(); - spuVO.setVipPrice(calculateVipPrice(spuVO.getPrice(), memberLevel)); return success(spuVO); } - private MemberLevelRespDTO getMemberLevel() { - Long userId = getLoginUserId(); - if (userId == null) { - return null; - } - MemberUserRespDTO user = memberUserApi.getUser(userId).getCheckedData(); - if (user.getLevelId() == null || user.getLevelId() <= 0) { - return null; - } - return memberLevelApi.getMemberLevel(user.getLevelId()).getCheckedData(); - } - - /** - * 计算会员 VIP 优惠价格 - * - * @param price 原价 - * @param memberLevel 会员等级 - * @return 优惠价格 - */ - public Integer calculateVipPrice(Integer price, MemberLevelRespDTO memberLevel) { - if (memberLevel == null || memberLevel.getDiscountPercent() == null) { - return 0; - } - Integer newPrice = price * memberLevel.getDiscountPercent() / 100; - return price - newPrice; - } - } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java index f1ee49b10..525f22453 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuDetailRespVO.java @@ -46,9 +46,6 @@ public class AppProductSpuDetailRespVO { @Schema(description = "市场价,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Integer marketPrice; - @Schema(description = "VIP 价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "968") // 通过会员等级,计算出折扣后价格 - private Integer vipPrice; - @Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") private Integer stock; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuRespVO.java index df61090bb..04e9af9ea 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuRespVO.java @@ -38,9 +38,6 @@ public class AppProductSpuRespVO { @Schema(description = "市场价,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Integer marketPrice; - @Schema(description = "VIP 价格,单位使用:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "968") // 通过会员等级,计算出折扣后价格 - private Integer vipPrice; - @Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") private Integer stock; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java index 5cacccdb5..59495a11b 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java @@ -87,6 +87,7 @@ public interface ProductCategoryService { * 校验商品分类是否有效。如下情况,视为无效: * 1. 商品分类编号不存在 * 2. 商品分类被禁用 + * 3. 商品分类层级校验,必须使用第二级的商品分类及以下 * * @param ids 商品分类编号数组 */ diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java index 64b8a6127..0d30dd5be 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.CATEGORY_LEVEL; import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.PARENT_ID_NULL; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; @@ -112,13 +113,19 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { Map categoryMap = CollectionUtils.convertMap(list, ProductCategoryDO::getId); // 校验 ids.forEach(id -> { + // 校验分类是否存在 ProductCategoryDO category = categoryMap.get(id); if (category == null) { throw exception(CATEGORY_NOT_EXISTS); } + // 校验分类是否启用 if (!CommonStatusEnum.ENABLE.getStatus().equals(category.getStatus())) { throw exception(CATEGORY_DISABLED, category.getName()); } + // 商品分类层级校验,必须使用第二级的商品分类 + if (getCategoryLevel(id) < CATEGORY_LEVEL) { + throw exception(SPU_SAVE_FAIL_CATEGORY_LEVEL_ERROR); + } }); } diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApi.java index e446f6414..99395b983 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApi.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApi.java @@ -22,6 +22,6 @@ public interface DiscountActivityApi { @GetMapping(PREFIX + "/list-by-sku-id") @Operation(summary = "获得商品匹配的的限时折扣信息") @Parameter(name = "skuIds", description = "商品 SKU 编号数组", required = true, example = "[1, 2]") - CommonResult> getMatchDiscountProductList(@RequestParam("skuIds") Collection skuIds); + CommonResult> getMatchDiscountProductListBySkuIds(@RequestParam("skuIds") Collection skuIds); } diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/dto/DiscountProductRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/dto/DiscountProductRespDTO.java index 52dfdbe27..479c84b3c 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/dto/DiscountProductRespDTO.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/dto/DiscountProductRespDTO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.promotion.api.discount.dto; import lombok.Data; +import java.time.LocalDateTime; + /** * 限时折扣活动商品 Response DTO * @@ -44,5 +46,13 @@ public class DiscountProductRespDTO { * 活动标题 */ private String activityName; + /** + * 活动开始时间点 + */ + private LocalDateTime activityStartTime; + /** + * 活动结束时间点 + */ + private LocalDateTime activityEndTime; -} +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApi.java index 1e81950d8..5843ee4cc 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApi.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApi.java @@ -22,6 +22,6 @@ public interface RewardActivityApi { @GetMapping(PREFIX + "/list-by-spu-id") @Operation(summary = "获得商品匹配的的满减送活动信息") @Parameter(name = "spuIds", description = "商品 SPU 编号数组", required = true, example = "[1, 2]") - CommonResult> getMatchRewardActivityList(@RequestParam("spuIds") Collection spuIds); + CommonResult> getMatchRewardActivityListBySpuIds(@RequestParam("spuIds") Collection spuIds); } diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java index 958668461..2eeb07266 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java @@ -18,6 +18,11 @@ import java.util.Map; @Data public class RewardActivityMatchRespDTO { + /** + * 匹配的 SPU 数组 + */ + private List spuIds; + /** * 活动编号,主键自增 */ @@ -100,6 +105,13 @@ public class RewardActivityMatchRespDTO { */ private Map giveCouponTemplateCounts; + /** + * 规则描述 + * + * 通过 {@link #limit}、{@link #discountPrice} 等字段进行拼接 + */ + private String description; + } } diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java index c1af1b874..af8206d2d 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java @@ -11,7 +11,7 @@ public interface ErrorCodeConstants { // ========== 促销活动相关 1-013-001-000 ============ ErrorCode DISCOUNT_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_001_000, "限时折扣活动不存在"); - ErrorCode DISCOUNT_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_001_001, "存在商品参加了其它限时折扣活动"); + ErrorCode DISCOUNT_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_001_001, "存在商品参加了其它限时折扣活动【{}】"); ErrorCode DISCOUNT_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_001_002, "限时折扣活动已关闭,不能修改"); ErrorCode DISCOUNT_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED = new ErrorCode(1_013_001_003, "限时折扣活动未关闭,不能删除"); ErrorCode DISCOUNT_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_001_004, "限时折扣活动已关闭,不能重复关闭"); @@ -38,14 +38,18 @@ public interface ErrorCodeConstants { // ========== 满减送活动 1-013-006-000 ========== ErrorCode REWARD_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_006_000, "满减送活动不存在"); - ErrorCode REWARD_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_006_001, "存在商品参加了其它满减送活动"); + ErrorCode REWARD_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_006_001, "该时间段存在商品参加了其它满减送活动"); ErrorCode REWARD_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_006_002, "满减送活动已关闭,不能修改"); ErrorCode REWARD_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED = new ErrorCode(1_013_006_003, "满减送活动未关闭,不能删除"); ErrorCode REWARD_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_006_004, "满减送活动已关闭,不能重复关闭"); - ErrorCode REWARD_ACTIVITY_SCOPE_ALL_EXISTS = new ErrorCode(1_013_006_005, "已存在商品范围为全场的满减送活动"); - ErrorCode REWARD_ACTIVITY_SCOPE_CATEGORY_EXISTS = new ErrorCode(1_013_006_006, "存在商品类型参加了其它满减送活动"); + ErrorCode REWARD_ACTIVITY_SCOPE_EXISTS = new ErrorCode(1_013_006_005, "与该时间段满减送活动【{}】商品范围冲突,原因:{}"); - // ========== TODO 空着 1-013-007-000 ============ + // ========== 积分商城活动 1-013-007-000 ========== + ErrorCode POINT_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_007_000, "积分商城活动不存在"); + ErrorCode POINT_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_007_001, "存在商品参加了其它积分商城活动"); + ErrorCode POINT_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_007_002, "积分商城活动已关闭,不能修改"); + ErrorCode POINT_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1_013_007_003, "积分商城活动未关闭或未结束,不能删除"); + ErrorCode POINT_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_007_004, "积分商城活动已关闭,不能重复关闭"); // ========== 秒杀活动 1-013-008-000 ========== ErrorCode SECKILL_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_008_000, "秒杀活动不存在"); diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java index 1513e62ea..eff4137ac 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/coupon/CouponTakeTypeEnum.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; +import java.util.Objects; /** * 优惠劵领取方式 @@ -20,12 +21,12 @@ public enum CouponTakeTypeEnum implements IntArrayValuable { REGISTER(3, "新人券"), // 注册时自动领取 ; - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTakeTypeEnum::getValue).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTakeTypeEnum::getType).toArray(); /** * 值 */ - private final Integer value; + private final Integer type; /** * 名字 */ @@ -35,4 +36,9 @@ public enum CouponTakeTypeEnum implements IntArrayValuable { public int[] array() { return ARRAYS; } + + public static boolean isUser(Integer type) { + return Objects.equals(USER.getType(), type); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApiImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApiImpl.java index 4a001c4d2..2184b4287 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApiImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApiImpl.java @@ -1,13 +1,14 @@ package cn.iocoder.yudao.module.promotion.api.discount; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; -import cn.iocoder.yudao.module.promotion.convert.discount.DiscountActivityConvert; +import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService; +import jakarta.annotation.Resource; 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; @@ -26,8 +27,9 @@ public class DiscountActivityApiImpl implements DiscountActivityApi { private DiscountActivityService discountActivityService; @Override - public CommonResult> getMatchDiscountProductList(Collection skuIds) { - return success(DiscountActivityConvert.INSTANCE.convertList02(discountActivityService.getMatchDiscountProductList(skuIds))); + public CommonResult> getMatchDiscountProductListBySkuIds(Collection skuIds) { + List list = discountActivityService.getMatchDiscountProductListBySkuIds(skuIds); + return success(BeanUtils.toBean(list, DiscountProductRespDTO.class)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApiImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApiImpl.java index fd411aab3..6bf9a185c 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApiImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/RewardActivityApiImpl.java @@ -25,8 +25,8 @@ public class RewardActivityApiImpl implements RewardActivityApi { private RewardActivityService rewardActivityService; @Override - public CommonResult> getMatchRewardActivityList(Collection spuIds) { - return success(rewardActivityService.getMatchRewardActivityList(spuIds)); + public CommonResult> getMatchRewardActivityListBySpuIds(Collection spuIds) { + return success(rewardActivityService.getMatchRewardActivityListBySpuIds(spuIds)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/DiscountActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/DiscountActivityController.java index cecda05e6..bfbd0d530 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/DiscountActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/DiscountActivityController.java @@ -3,9 +3,10 @@ package cn.iocoder.yudao.module.promotion.controller.admin.discount; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.*; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityUpdateReqVO; import cn.iocoder.yudao.module.promotion.convert.discount.DiscountActivityConvert; import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; @@ -33,9 +34,6 @@ public class DiscountActivityController { @Resource private DiscountActivityService discountActivityService; - @Resource - private ProductSpuApi productSpuApi; - @PostMapping("/create") @Operation(summary = "创建限时折扣活动") @PreAuthorize("@ss.hasPermission('promotion:discount-activity:create')") @@ -73,7 +71,7 @@ public class DiscountActivityController { @Operation(summary = "获得限时折扣活动") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('promotion:discount-activity:query')") - public CommonResult getDiscountActivity(@RequestParam("id") Long id) { + public CommonResult getDiscountActivity(@RequestParam("id") Long id) { DiscountActivityDO discountActivity = discountActivityService.getDiscountActivity(id); if (discountActivity == null) { return success(null); @@ -88,18 +86,14 @@ public class DiscountActivityController { @PreAuthorize("@ss.hasPermission('promotion:discount-activity:query')") public CommonResult> getDiscountActivityPage(@Valid DiscountActivityPageReqVO pageVO) { PageResult pageResult = discountActivityService.getDiscountActivityPage(pageVO); - - if (CollUtil.isEmpty(pageResult.getList())) { // TODO @zhangshuai:方法里的空行,目的是让代码分块,可以更清晰;所以上面这个空格可以不要,而下面判断之后的,空格,其实加下比较好;类似的还有 spuList、以及后面的 convert + if (CollUtil.isEmpty(pageResult.getList())) { return success(PageResult.empty(pageResult.getTotal())); } + // 拼接数据 List products = discountActivityService.getDiscountProductsByActivityId( convertSet(pageResult.getList(), DiscountActivityDO::getId)); - - List spuList = productSpuApi.getSpuList( - convertSet(products, DiscountProductDO::getSpuId)).getCheckedData(); - - return success(DiscountActivityConvert.INSTANCE.convertPage(pageResult, products, spuList)); + return success(DiscountActivityConvert.INSTANCE.convertPage(pageResult, products)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityDetailRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityDetailRespVO.java deleted file mode 100755 index 85a989c05..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityDetailRespVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.promotion.controller.admin.discount.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.util.List; - -@Schema(description = "管理后台 - 限时折扣活动的详细 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class DiscountActivityDetailRespVO extends DiscountActivityRespVO { - - /** - * 商品列表 - */ - private List products; - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityRespVO.java index 2059ff6ae..abc6af8c7 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityRespVO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityRespVO.java @@ -25,25 +25,7 @@ public class DiscountActivityRespVO extends DiscountActivityBaseVO { @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; - - @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") // TODO @zhangshuai:属性和属性之间,最多空一行噢; - private Long spuId; - @Schema(description = "限时折扣商品", requiredMode = Schema.RequiredMode.REQUIRED) - private List products; - - // ========== 商品字段 ========== - - // TODO @zhangshuai:一个优惠活动,会关联多个商品,所以它不用返回 spuName 哈; - // TODO 最终界面展示字段就:编号、活动名称、参与商品数、活动状态、开始时间、结束时间、操作 - @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 name 读取 - example = "618大促") - private String spuName; - @Schema(description = "商品主图", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 picUrl 读取 - example = "https://www.iocoder.cn/xx.png") - private String picUrl; - @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 marketPrice 读取 - example = "50") - private Integer marketPrice; + private List products; } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityUpdateReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityUpdateReqVO.java index 6b261a96e..fab5a3d1b 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityUpdateReqVO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/discount/vo/DiscountActivityUpdateReqVO.java @@ -25,6 +25,6 @@ public class DiscountActivityUpdateReqVO extends DiscountActivityBaseVO { */ @NotEmpty(message = "商品列表不能为空") @Valid - private List products; + private List products; } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/PointActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/PointActivityController.java new file mode 100644 index 000000000..d8fb54b08 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/PointActivityController.java @@ -0,0 +1,141 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivitySaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product.PointProductRespVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointActivityDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointProductDO; +import cn.iocoder.yudao.module.promotion.service.point.PointActivityService; +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.Collections; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; + +@Tag(name = "管理后台 - 积分商城活动") +@RestController +@RequestMapping("/promotion/point-activity") +@Validated +public class PointActivityController { + + @Resource + private PointActivityService pointActivityService; + @Resource + private ProductSpuApi productSpuApi; + + @PostMapping("/create") + @Operation(summary = "创建积分商城活动") + @PreAuthorize("@ss.hasPermission('promotion:point-activity:create')") + public CommonResult createPointActivity(@Valid @RequestBody PointActivitySaveReqVO createReqVO) { + return success(pointActivityService.createPointActivity(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新积分商城活动") + @PreAuthorize("@ss.hasPermission('promotion:point-activity:update')") + public CommonResult updatePointActivity(@Valid @RequestBody PointActivitySaveReqVO updateReqVO) { + pointActivityService.updatePointActivity(updateReqVO); + return success(true); + } + + @PutMapping("/close") + @Operation(summary = "关闭积分商城活动") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('promotion:point-activity:close')") + public CommonResult closeSeckillActivity(@RequestParam("id") Long id) { + pointActivityService.closePointActivity(id); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除积分商城活动") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('promotion:point-activity:delete')") + public CommonResult deletePointActivity(@RequestParam("id") Long id) { + pointActivityService.deletePointActivity(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得积分商城活动") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('promotion:point-activity:query')") + public CommonResult getPointActivity(@RequestParam("id") Long id) { + PointActivityDO pointActivity = pointActivityService.getPointActivity(id); + if (pointActivity == null) { + return success(null); + } + + List products = pointActivityService.getPointProductListByActivityIds(Collections.singletonList(id)); + PointActivityRespVO respVO = BeanUtils.toBean(pointActivity, PointActivityRespVO.class); + respVO.setProducts(BeanUtils.toBean(products, PointProductRespVO.class)); + return success(respVO); + } + + @GetMapping("/page") + @Operation(summary = "获得积分商城活动分页") + @PreAuthorize("@ss.hasPermission('promotion:point-activity:query')") + public CommonResult> getPointActivityPage(@Valid PointActivityPageReqVO pageReqVO) { + PageResult pageResult = pointActivityService.getPointActivityPage(pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 拼接数据 + List resultList = buildPointActivityRespVOList(pageResult.getList()); + return success(new PageResult<>(resultList, pageResult.getTotal())); + } + + @GetMapping("/list-by-ids") + @Operation(summary = "获得积分商城活动列表,基于活动编号数组") + @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") + public CommonResult> getPointActivityListByIds(@RequestParam("ids") List ids) { + // 1. 获得开启的活动列表 + List activityList = pointActivityService.getPointActivityListByIds(ids); + activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus())); + if (CollUtil.isEmpty(activityList)) { + return success(Collections.emptyList()); + } + // 2. 拼接返回 + List result = buildPointActivityRespVOList(activityList); + return success(result); + } + + private List buildPointActivityRespVOList(List activityList) { + List products = pointActivityService.getPointProductListByActivityIds( + convertSet(activityList, PointActivityDO::getId)); + Map> productsMap = convertMultiMap(products, PointProductDO::getActivityId); + Map spuMap = productSpuApi.getSpusMap( + convertSet(activityList, PointActivityDO::getSpuId)); + List result = BeanUtils.toBean(activityList, PointActivityRespVO.class); + result.forEach(activity -> { + // 设置 product 信息 + PointProductDO minProduct = getMinObject(productsMap.get(activity.getId()), PointProductDO::getPoint); + assert minProduct != null; + activity.setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice()); + findAndThen(spuMap, activity.getSpuId(), + spu -> activity.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice())); + }); + return result; + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityPageReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityPageReqVO.java new file mode 100644 index 000000000..89786c2de --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity; + +import cn.iocoder.yudao.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 cn.iocoder.yudao.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 PointActivityPageReqVO extends PageParam { + + @Schema(description = "积分商城活动商品", example = "19509") + private Long spuId; + + @Schema(description = "活动状态", example = "2") + private Integer status; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityRespVO.java new file mode 100644 index 000000000..d81b3d690 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivityRespVO.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity; + +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product.PointProductRespVO; +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 PointActivityRespVO { + + @Schema(description = "积分商城活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11373") + @ExcelProperty("积分商城活动编号") + private Long id; + + @Schema(description = "积分商城活动商品", requiredMode = Schema.RequiredMode.REQUIRED, example = "19509") + @ExcelProperty("积分商城活动商品") + private Long spuId; + + @Schema(description = "活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("活动状态") + private Integer status; + + @Schema(description = "积分商城活动库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("积分商城活动库存") + private Integer stock; // 剩余库存积分兑换时扣减 + + @Schema(description = "积分商城活动总库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("积分商城活动总库存") + private Integer totalStock; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("排序") + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "积分商城商品", requiredMode = Schema.RequiredMode.REQUIRED) + private List products; + + // ========== 商品字段 ========== + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 name 读取 + example = "618大促") + private String spuName; + @Schema(description = "商品主图", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 picUrl 读取 + example = "https://www.iocoder.cn/xx.png") + private String picUrl; + @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 marketPrice 读取 + example = "50") + private Integer marketPrice; + + //======================= 显示所需兑换积分最少的 sku 信息 ======================= + + @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer point; + + @Schema(description = "兑换金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "15860") + private Integer price; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivitySaveReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivitySaveReqVO.java new file mode 100644 index 000000000..fda1dff6f --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/activity/PointActivitySaveReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity; + +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product.PointProductSaveReqVO; +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 PointActivitySaveReqVO { + + @Schema(description = "积分商城活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11373") + private Long id; + + @Schema(description = "积分商城活动商品", requiredMode = Schema.RequiredMode.REQUIRED, example = "19509") + @NotNull(message = "积分商城活动商品不能为空") + private Long spuId; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "排序不能为空") + private Integer sort; + + @Schema(description = "积分商城商品", requiredMode = Schema.RequiredMode.REQUIRED) + private List products; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductRespVO.java new file mode 100644 index 000000000..8e8250b38 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductRespVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 积分商城商品 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PointProductRespVO { + + @Schema(description = "积分商城商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31718") + private Long id; + + @Schema(description = "积分商城活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29388") + private Long activityId; + + @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8112") + private Long spuId; + + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2736") + private Long skuId; + + @Schema(description = "可兑换数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3926") + private Integer count; + + @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer point; + + @Schema(description = "兑换金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "15860") + private Integer price; + + @Schema(description = "积分商城商品库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer stock; + + @Schema(description = "积分商城商品状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer activityStatus; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductSaveReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductSaveReqVO.java new file mode 100644 index 000000000..c1452537e --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/point/vo/product/PointProductSaveReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 积分商城商品新增/修改 Request VO") +@Data +public class PointProductSaveReqVO { + + @Schema(description = "积分商城商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31718") + private Long id; + + @Schema(description = "积分商城活动 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29388") + @NotNull(message = "积分商城活动 id不能为空") + private Long activityId; + + @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8112") + @NotNull(message = "商品 SPU 编号不能为空") + private Long spuId; + + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2736") + @NotNull(message = "商品 SKU 编号不能为空") + private Long skuId; + + @Schema(description = "可兑换数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3926") + @NotNull(message = "可兑换数量不能为空") + private Integer count; + + @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "兑换积分不能为空") + private Integer point; + + @Schema(description = "兑换金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "15860") + @NotNull(message = "兑换金额,单位:分不能为空") + private Integer price; + + @Schema(description = "积分商城商品库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @NotNull(message = "积分商城商品不能为空") + private Integer stock; + + @Schema(description = "积分商城商品状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "积分商城商品状态不能为空") + private Integer activityStatus; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java index 3106460ac..d18def550 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/SeckillActivityController.java @@ -102,7 +102,7 @@ public class SeckillActivityController { @GetMapping("/list-by-ids") @Operation(summary = "获得秒杀活动列表,基于活动编号数组") @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") - public CommonResult> getCombinationActivityListByIds(@RequestParam("ids") List ids) { + public CommonResult> getSeckillActivityListByIds(@RequestParam("ids") List ids) { // 1. 获得开启的活动列表 List activityList = seckillActivityService.getSeckillActivityListByIds(ids); activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus())); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java index 18b2170e3..4694c677f 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java @@ -54,7 +54,7 @@ public class SeckillActivityRespVO extends SeckillActivityBaseVO { example = "50") private Integer marketPrice; - @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @Schema(description = "秒杀金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") private Integer seckillPrice; // 从 products 获取最小 price 读取 } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java index afe5eb2fe..303573a66 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java @@ -1,41 +1,29 @@ package cn.iocoder.yudao.module.promotion.controller.app.activity; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ObjUtil; -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.controller.app.activity.vo.AppActivityRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivityDO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; -import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; import cn.iocoder.yudao.module.promotion.service.bargain.BargainActivityService; import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService; -import cn.iocoder.yudao.module.promotion.service.discount.DiscountActivityService; -import cn.iocoder.yudao.module.promotion.service.reward.RewardActivityService; import cn.iocoder.yudao.module.promotion.service.seckill.SeckillActivityService; 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 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.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; @Tag(name = "用户 APP - 营销活动") // 用于提供跨多个活动的 HTTP 接口 @RestController @@ -49,152 +37,32 @@ public class AppActivityController { private SeckillActivityService seckillActivityService; @Resource private BargainActivityService bargainActivityService; - @Resource - private DiscountActivityService discountActivityService; - @Resource - private RewardActivityService rewardActivityService; - - @Resource - private ProductSpuApi productSpuApi; @GetMapping("/list-by-spu-id") - @Operation(summary = "获得单个商品,近期参与的每个活动") + @Operation(summary = "获得单个商品,进行中的拼团、秒杀、砍价活动信息", description = "每种活动,只返回一个") @Parameter(name = "spuId", description = "商品编号", required = true) + @PermitAll public CommonResult> getActivityListBySpuId(@RequestParam("spuId") Long spuId) { - // 每种活动,只返回一个 - return success(getAppActivityList(Collections.singletonList(spuId))); - } - - @GetMapping("/list-by-spu-ids") - @Operation(summary = "获得多个商品,近期参与的每个活动") - @Parameter(name = "spuIds", description = "商品编号数组", required = true) - public CommonResult>> getActivityListBySpuIds(@RequestParam("spuIds") List spuIds) { - if (CollUtil.isEmpty(spuIds)) { - return success(MapUtil.empty()); - } - // 每种活动,只返回一个;key 为 SPU 编号 - return success(convertMultiMap(getAppActivityList(spuIds), AppActivityRespVO::getSpuId)); - } - - private List getAppActivityList(Collection spuIds) { - if (CollUtil.isEmpty(spuIds)) { - return new ArrayList<>(); - } - // 获取开启的且开始的且没有结束的活动 - List activityList = new ArrayList<>(); - LocalDateTime now = LocalDateTime.now(); + List activityVOList = new ArrayList<>(); // 1. 拼团活动 - getCombinationActivities(spuIds, now, activityList); + CombinationActivityDO combinationActivity = combinationActivityService.getMatchCombinationActivityBySpuId(spuId); + if (combinationActivity != null) { + activityVOList.add(new AppActivityRespVO(combinationActivity.getId(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(), + combinationActivity.getName(), combinationActivity.getSpuId(), combinationActivity.getStartTime(), combinationActivity.getEndTime())); + } // 2. 秒杀活动 - getSeckillActivities(spuIds, now, activityList); + SeckillActivityDO seckillActivity = seckillActivityService.getMatchSeckillActivityBySpuId(spuId); + if (seckillActivity != null) { + activityVOList.add(new AppActivityRespVO(seckillActivity.getId(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(), + seckillActivity.getName(), seckillActivity.getSpuId(), seckillActivity.getStartTime(), seckillActivity.getEndTime())); + } // 3. 砍价活动 - getBargainActivities(spuIds, now, activityList); - // 4. 限时折扣活动 - getDiscountActivities(spuIds, now, activityList); - // 5. 满减送活动 - getRewardActivityList(spuIds, now, activityList); - return activityList; - } - - private void getCombinationActivities(Collection spuIds, LocalDateTime now, List activityList) { - List combinationActivities = combinationActivityService.getCombinationActivityBySpuIdsAndStatusAndDateTimeLt( - spuIds, CommonStatusEnum.ENABLE.getStatus(), now); - if (CollUtil.isEmpty(combinationActivities)) { - return; - } - - combinationActivities.forEach(item -> { - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(), - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); - }); - } - - private void getSeckillActivities(Collection spuIds, LocalDateTime now, List activityList) { - List seckillActivities = seckillActivityService.getSeckillActivityBySpuIdsAndStatusAndDateTimeLt( - spuIds, CommonStatusEnum.ENABLE.getStatus(), now); - if (CollUtil.isEmpty(seckillActivities)) { - return; - } - - seckillActivities.forEach(item -> { - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(), - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); - }); - } - - private void getBargainActivities(Collection spuIds, LocalDateTime now, List activityList) { - List bargainActivities = bargainActivityService.getBargainActivityBySpuIdsAndStatusAndDateTimeLt( - spuIds, CommonStatusEnum.ENABLE.getStatus(), now); - if (CollUtil.isNotEmpty(bargainActivities)) { - return; - } - - bargainActivities.forEach(item -> { - activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(), - item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); - }); - } - - private void getDiscountActivities(Collection spuIds, LocalDateTime now, List activityList) { - List discountActivities = discountActivityService.getDiscountActivityBySpuIdsAndStatusAndDateTimeLt( - spuIds, CommonStatusEnum.ENABLE.getStatus(), now); - if (CollUtil.isEmpty(discountActivities)) { - return; - } - - List products = discountActivityService.getDiscountProductsByActivityId( - convertSet(discountActivities, DiscountActivityDO::getId)); - Map productMap = convertMap(products, DiscountProductDO::getActivityId, DiscountProductDO::getSpuId); - discountActivities.forEach(item -> activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType(), - item.getName(), productMap.get(item.getId()), item.getStartTime(), item.getEndTime()))); - } - - private void getRewardActivityList(Collection spuIds, LocalDateTime now, List activityList) { - // 1.1 获得所有的活动 - List rewardActivityList = rewardActivityService.getRewardActivityListByStatusAndDateTimeLt( - CommonStatusEnum.ENABLE.getStatus(), now); - if (CollUtil.isEmpty(rewardActivityList)) { - return; - } - // 1.2 获得所有的商品信息 - List spuList = productSpuApi.getSpuList(spuIds).getCheckedData(); - if (CollUtil.isEmpty(spuList)) { - return; - } - - // 2. 构建活动 - for (RewardActivityDO rewardActivity : rewardActivityList) { - // 情况一:所有商品都能参加 - if (PromotionProductScopeEnum.isAll(rewardActivity.getProductScope())) { - buildAppActivityRespVO(rewardActivity, spuIds, activityList); - } - // 情况二:指定商品参加 - if (PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope())) { - List fSpuIds = spuList.stream().map(ProductSpuRespDTO::getId).filter(id -> - rewardActivity.getProductScopeValues().contains(id)).toList(); - buildAppActivityRespVO(rewardActivity, fSpuIds, activityList); - } - // 情况三:指定商品类型参加 - if (PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) { - List fSpuIds = spuList.stream().filter(spuItem -> rewardActivity.getProductScopeValues() - .contains(spuItem.getCategoryId())).map(ProductSpuRespDTO::getId).toList(); - buildAppActivityRespVO(rewardActivity, fSpuIds, activityList); - } - } - } - - private static void buildAppActivityRespVO(RewardActivityDO rewardActivity, Collection spuIds, - List activityList) { - for (Long spuId : spuIds) { - // 校验商品是否已经加入过活动 - if (anyMatch(activityList, appActivity -> ObjUtil.equal(appActivity.getId(), rewardActivity.getId()) && - ObjUtil.equal(appActivity.getSpuId(), spuId))) { - continue; - } - activityList.add(new AppActivityRespVO(rewardActivity.getId(), - PromotionTypeEnum.REWARD_ACTIVITY.getType(), rewardActivity.getName(), spuId, - rewardActivity.getStartTime(), rewardActivity.getEndTime())); + BargainActivityDO bargainActivity = bargainActivityService.getMatchBargainActivityBySpuId(spuId); + if (bargainActivity != null) { + activityVOList.add(new AppActivityRespVO(bargainActivity.getId(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(), + bargainActivity.getName(), bargainActivity.getSpuId(), bargainActivity.getStartTime(), bargainActivity.getEndTime())); } + return success(activityVOList); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/AppArticleController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/AppArticleController.java index fc561a313..b58fc77f2 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/AppArticleController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/AppArticleController.java @@ -12,13 +12,14 @@ 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.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PutMapping; 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 cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -38,6 +39,7 @@ public class AppArticleController { @Parameter(name = "recommendHot", description = "是否热门", example = "false"), // 场景一:查看指定的文章 @Parameter(name = "recommendBanner", description = "是否轮播图", example = "false") // 场景二:查看指定的文章 }) + @PermitAll public CommonResult> getArticleList( @RequestParam(value = "recommendHot", required = false) Boolean recommendHot, @RequestParam(value = "recommendBanner", required = false) Boolean recommendBanner) { @@ -47,6 +49,7 @@ public class AppArticleController { @RequestMapping("/page") @Operation(summary = "获得文章详情分页") + @PermitAll public CommonResult> getArticlePage(AppArticlePageReqVO pageReqVO) { return success(ArticleConvert.INSTANCE.convertPage02(articleService.getArticlePage(pageReqVO))); } @@ -57,6 +60,7 @@ public class AppArticleController { @Parameter(name = "id", description = "文章编号", example = "1024"), @Parameter(name = "title", description = "文章标题", example = "1024"), }) + @PermitAll public CommonResult getArticle(@RequestParam(value = "id", required = false) Long id, @RequestParam(value = "title", required = false) String title) { ArticleDO article = id != null ? articleService.getArticle(id) @@ -67,6 +71,7 @@ public class AppArticleController { @PutMapping("/add-browse-count") @Operation(summary = "增加文章浏览量") @Parameter(name = "id", description = "文章编号", example = "1024") + @PermitAll public CommonResult addBrowseCount(@RequestParam("id") Long id) { articleService.addArticleBrowseCount(id); return success(true); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/banner/AppBannerController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/banner/AppBannerController.java index 843747618..8e2562dc9 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/banner/AppBannerController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/banner/AppBannerController.java @@ -8,10 +8,11 @@ import cn.iocoder.yudao.module.promotion.service.banner.BannerService; 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -28,6 +29,7 @@ public class AppBannerController { @GetMapping("/list") @Operation(summary = "获得 banner 列表") @Parameter(name = "position", description = "Banner position", example = "1") + @PermitAll public CommonResult> getBannerList(@RequestParam("position") Integer position) { List bannerList = bannerService.getBannerListByPosition(position); return success(BannerConvert.INSTANCE.convertList01(bannerList)); @@ -36,6 +38,7 @@ public class AppBannerController { @PutMapping("/add-browse-count") @Operation(summary = "增加 Banner 点击量") @Parameter(name = "id", description = "Banner 编号", example = "1024") + @PermitAll public CommonResult addBrowseCount(@RequestParam("id") Long id) { bannerService.addBannerBrowseCount(id); return success(true); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java index 1a4386a17..54f2cdb8e 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java @@ -19,6 +19,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -31,7 +32,6 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; -import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildCache; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @Tag(name = "用户 App - 砍价活动") @@ -43,7 +43,7 @@ public class AppBargainActivityController { /** * {@link AppBargainActivityRespVO} 缓存,通过它异步刷新 {@link #getBargainActivityList0(Integer)} 所要的首页数据 */ - private final LoadingCache> bargainActivityListCache = buildCache(Duration.ofSeconds(10L), + private final LoadingCache> bargainActivityListCache = buildAsyncReloadingCache(Duration.ofSeconds(10L), new CacheLoader>() { @Override @@ -64,6 +64,7 @@ public class AppBargainActivityController { @GetMapping("/list") @Operation(summary = "获得砍价活动列表", description = "用于小程序首页") @Parameter(name = "count", description = "需要展示的数量", example = "6") + @PermitAll public CommonResult> getBargainActivityList( @RequestParam(name = "count", defaultValue = "6") Integer count) { return success(bargainActivityListCache.getUnchecked(count)); @@ -81,6 +82,7 @@ public class AppBargainActivityController { @GetMapping("/page") @Operation(summary = "获得砍价活动分页") + @PermitAll public CommonResult> getBargainActivityPage(PageParam pageReqVO) { PageResult result = bargainActivityService.getBargainActivityPage(pageReqVO); if (CollUtil.isEmpty(result.getList())) { @@ -94,6 +96,7 @@ public class AppBargainActivityController { @GetMapping("/get-detail") @Operation(summary = "获得砍价活动详情") @Parameter(name = "id", description = "活动编号", example = "1") + @PermitAll public CommonResult getBargainActivityDetail(@RequestParam("id") Long id) { BargainActivityDO activity = bargainActivityService.getBargainActivity(id); if (activity == null) { diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.java index b85be03f9..8c99df0ff 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.java @@ -5,7 +5,6 @@ import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; @@ -28,6 +27,7 @@ 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.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -61,6 +61,7 @@ public class AppBargainRecordController { @GetMapping("/get-summary") @Operation(summary = "获得砍价记录的概要信息", description = "用于小程序首页") + @PermitAll public CommonResult getBargainRecordSummary() { // 砍价成功的用户数量 Integer successUserCount = bargainRecordService.getBargainRecordUserCount( @@ -86,6 +87,7 @@ public class AppBargainRecordController { @Parameter(name = "id", description = "砍价记录编号", example = "111"), // 场景一:查看指定的砍价记录 @Parameter(name = "activityId", description = "砍价活动编号", example = "222") // 场景二:查看指定的砍价活动 }) + @PermitAll public CommonResult getBargainRecordDetail( @RequestParam(value = "id", required = false) Long id, @RequestParam(value = "activityId", required = false) Long activityId) { @@ -153,7 +155,6 @@ public class AppBargainRecordController { @PostMapping("/create") @Operation(summary = "创建砍价记录", description = "参与砍价活动") - @PreAuthenticated public CommonResult createBargainRecord(@RequestBody AppBargainRecordCreateReqVO reqVO) { Long recordId = bargainRecordService.createBargainRecord(getLoginUserId(), reqVO); return success(recordId); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java index 3518bd7a4..8cd6e208e 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java @@ -18,6 +18,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -44,6 +45,7 @@ public class AppCombinationActivityController { @GetMapping("/page") @Operation(summary = "获得拼团活动分页") + @PermitAll public CommonResult> getCombinationActivityPage(PageParam pageParam) { PageResult pageResult = activityService.getCombinationActivityPage(pageParam); if (CollUtil.isEmpty(pageResult.getList())) { @@ -59,6 +61,7 @@ public class AppCombinationActivityController { @GetMapping("/list-by-ids") @Operation(summary = "获得拼团活动列表,基于活动编号数组") @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") + @PermitAll public CommonResult> getCombinationActivityListByIds(@RequestParam("ids") List ids) { // 1. 获得开启的活动列表 List activityList = activityService.getCombinationActivityListByIds(ids); @@ -76,6 +79,7 @@ public class AppCombinationActivityController { @GetMapping("/get-detail") @Operation(summary = "获得拼团活动明细") @Parameter(name = "id", description = "活动编号", required = true, example = "1024") + @PermitAll public CommonResult getCombinationActivityDetail(@RequestParam("id") Long id) { // 1. 获取活动 CombinationActivityDO activity = activityService.getCombinationActivity(id); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationRecordController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationRecordController.java index 8a3ea838e..ecefcd149 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationRecordController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationRecordController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.controller.app.combination; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordDetailRespVO; import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordPageReqVO; import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordRespVO; @@ -16,6 +15,7 @@ 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.annotation.security.PermitAll; import jakarta.validation.Valid; import jakarta.validation.constraints.Max; import org.springframework.validation.annotation.Validated; @@ -43,6 +43,7 @@ public class AppCombinationRecordController { @GetMapping("/get-summary") @Operation(summary = "获得拼团记录的概要信息", description = "用于小程序首页") + @PermitAll public CommonResult getCombinationRecordSummary() { AppCombinationRecordSummaryRespVO summary = new AppCombinationRecordSummaryRespVO(); // 1. 获得拼团参与用户数量 @@ -68,6 +69,7 @@ public class AppCombinationRecordController { @Parameter(name = "status", description = "拼团状态"), // 对应 CombinationRecordStatusEnum 枚举 @Parameter(name = "count", description = "数量") }) + @PermitAll public CommonResult> getHeadCombinationRecordList( @RequestParam(value = "activityId", required = false) Long activityId, @RequestParam("status") Integer status, @@ -78,7 +80,6 @@ public class AppCombinationRecordController { @GetMapping("/page") @Operation(summary = "获得我的拼团记录分页") - @PreAuthenticated public CommonResult> getCombinationRecordPage( @Valid AppCombinationRecordPageReqVO pageReqVO) { PageResult pageResult = combinationRecordService.getCombinationRecordPage( @@ -89,6 +90,7 @@ public class AppCombinationRecordController { @GetMapping("/get-detail") @Operation(summary = "获得拼团记录明细") @Parameter(name = "id", description = "拼团记录编号", required = true, example = "1024") + @PermitAll public CommonResult getCombinationRecordDetail(@RequestParam("id") Long id) { // 1. 查找这条拼团记录 CombinationRecordDO record = combinationRecordService.getCombinationRecordById(id); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponController.java index bde2d8f91..802196e38 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponController.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponPageReqVO; import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponRespVO; import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponTakeReqVO; @@ -41,7 +40,6 @@ public class AppCouponController { @PostMapping("/take") @Operation(summary = "领取优惠劵") @Parameter(name = "templateId", description = "优惠券模板编号", required = true, example = "1024") - @PreAuthenticated public CommonResult takeCoupon(@Valid @RequestBody AppCouponTakeReqVO reqVO) { // 1. 领取优惠劵 Long userId = getLoginUserId(); @@ -59,7 +57,6 @@ public class AppCouponController { @GetMapping("/page") @Operation(summary = "我的优惠劵列表") - @PreAuthenticated public CommonResult> getCouponPage(AppCouponPageReqVO pageReqVO) { PageResult pageResult = couponService.getCouponPage( CouponConvert.INSTANCE.convert(pageReqVO, Collections.singleton(getLoginUserId()))); @@ -69,7 +66,6 @@ public class AppCouponController { @GetMapping("/get") @Operation(summary = "获得优惠劵") @Parameter(name = "id", description = "优惠劵编号", required = true, example = "1024") - @PreAuthenticated public CommonResult getCoupon(@RequestParam("id") Long id) { CouponDO coupon = couponService.getCoupon(getLoginUserId(), id); return success(BeanUtils.toBean(coupon, AppCouponRespVO.class)); @@ -77,7 +73,6 @@ public class AppCouponController { @GetMapping(value = "/get-unused-count") @Operation(summary = "获得未使用的优惠劵数量") - @PreAuthenticated public CommonResult getUnusedCouponCount() { return success(couponService.getUnusedCouponCount(getLoginUserId())); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java index 4f5229c4e..75a93a575 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/AppCouponTemplateController.java @@ -19,6 +19,7 @@ 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.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -51,6 +52,7 @@ public class AppCouponTemplateController { @GetMapping("/get") @Operation(summary = "获得优惠劵模版") @Parameter(name = "id", description = "优惠券模板编号", required = true, example = "1024") + @PermitAll public CommonResult getCouponTemplate(Long id) { CouponTemplateDO template = couponTemplateService.getCouponTemplate(id); if (template == null) { @@ -69,6 +71,7 @@ public class AppCouponTemplateController { @Parameter(name = "productScope", description = "使用类型"), @Parameter(name = "count", description = "数量", required = true) }) + @PermitAll public CommonResult> getCouponTemplateList( @RequestParam(value = "spuId", required = false) Long spuId, @RequestParam(value = "productScope", required = false) Integer productScope, @@ -76,7 +79,7 @@ public class AppCouponTemplateController { // 1.1 处理查询条件:商品范围编号 Long productScopeValue = getProductScopeValue(productScope, spuId); // 1.2 处理查询条件:领取方式 = 直接领取 - List canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getValue()); + List canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getType()); // 2. 查询 List list = couponTemplateService.getCouponTemplateList(canTakeTypes, productScope, @@ -91,6 +94,7 @@ public class AppCouponTemplateController { @GetMapping("/list-by-ids") @Operation(summary = "获得优惠劵模版列表") @Parameter(name = "ids", description = "优惠券模板编号列表") + @PermitAll public CommonResult> getCouponTemplateList( @RequestParam(value = "ids", required = false) Set ids) { // 1. 查询 @@ -104,11 +108,12 @@ public class AppCouponTemplateController { @GetMapping("/page") @Operation(summary = "获得优惠劵模版分页") + @PermitAll public CommonResult> getCouponTemplatePage(AppCouponTemplatePageReqVO pageReqVO) { // 1.1 处理查询条件:商品范围编号 Long productScopeValue = getProductScopeValue(pageReqVO.getProductScope(), pageReqVO.getSpuId()); // 1.2 处理查询条件:领取方式 = 直接领取 - List canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getValue()); + List canTakeTypes = singletonList(CouponTakeTypeEnum.USER.getType()); // 2. 分页查询 PageResult pageResult = couponTemplateService.getCouponTemplatePage( diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyPageController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyPageController.java index 6469432c8..d52b243fa 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyPageController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyPageController.java @@ -9,6 +9,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,6 +30,7 @@ public class AppDiyPageController { @GetMapping("/get") @Operation(summary = "获得装修页面") @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PermitAll public CommonResult getDiyPage(@RequestParam("id") Long id) { DiyPageDO diyPage = diyPageService.getDiyPage(id); return success(BeanUtils.toBean(diyPage, AppDiyPagePropertyRespVO.class)); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java index e8babd15d..2146024e8 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/diy/AppDiyTemplateController.java @@ -12,6 +12,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -37,6 +38,7 @@ public class AppDiyTemplateController { // TODO @疯狂:要不要把 used 和 get 接口合并哈;不传递 id,直接拿默认; @GetMapping("/used") @Operation(summary = "使用中的装修模板") + @PermitAll public CommonResult getUsedDiyTemplate() { DiyTemplateDO diyTemplate = diyTemplateService.getUsedDiyTemplate(); return success(buildVo(diyTemplate)); @@ -45,6 +47,7 @@ public class AppDiyTemplateController { @GetMapping("/get") @Operation(summary = "获得装修模板") @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PermitAll public CommonResult getDiyTemplate(@RequestParam("id") Long id) { DiyTemplateDO diyTemplate = diyTemplateService.getDiyTemplate(id); return success(buildVo(diyTemplate)); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/AppKeFuMessageController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/AppKeFuMessageController.java index 2c99c75cb..852a583f7 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/AppKeFuMessageController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/AppKeFuMessageController.java @@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageRespVO; import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO; import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO; @@ -32,7 +31,6 @@ public class AppKeFuMessageController { @PostMapping("/send") @Operation(summary = "发送客服消息") - @PreAuthenticated public CommonResult sendKefuMessage(@Valid @RequestBody AppKeFuMessageSendReqVO sendReqVO) { sendReqVO.setSenderId(getLoginUserId()).setSenderType(UserTypeEnum.MEMBER.getValue()); // 设置用户编号和类型 return success(kefuMessageService.sendKefuMessage(sendReqVO)); @@ -41,7 +39,6 @@ public class AppKeFuMessageController { @PutMapping("/update-read-status") @Operation(summary = "更新客服消息已读状态") @Parameter(name = "conversationId", description = "会话编号", required = true) - @PreAuthenticated public CommonResult updateKefuMessageReadStatus(@RequestParam("conversationId") Long conversationId) { kefuMessageService.updateKeFuMessageReadStatus(conversationId, getLoginUserId(), UserTypeEnum.MEMBER.getValue()); return success(true); @@ -49,7 +46,6 @@ public class AppKeFuMessageController { @GetMapping("/page") @Operation(summary = "获得客服消息分页") - @PreAuthenticated public CommonResult> getKefuMessagePage(@Valid AppKeFuMessagePageReqVO pageReqVO) { PageResult pageResult = kefuMessageService.getKeFuMessagePage(pageReqVO, getLoginUserId()); return success(BeanUtils.toBean(pageResult, KeFuMessageRespVO.class)); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/AppPointActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/AppPointActivityController.java new file mode 100644 index 000000000..533ac8ede --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/AppPointActivityController.java @@ -0,0 +1,118 @@ +package cn.iocoder.yudao.module.promotion.controller.app.point; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.app.point.vo.AppPointActivityDetailRespVO; +import cn.iocoder.yudao.module.promotion.controller.app.point.vo.AppPointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.app.point.vo.AppPointActivityRespVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointActivityDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointProductDO; +import cn.iocoder.yudao.module.promotion.service.point.PointActivityService; +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 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 cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; + +@Tag(name = "用户 App - 积分商城活动") +@RestController +@RequestMapping("/promotion/point-activity") +@Validated +public class AppPointActivityController { + + @Resource + private PointActivityService pointActivityService; + + @Resource + private ProductSpuApi productSpuApi; + + @GetMapping("/page") + @Operation(summary = "获得积分商城活动分页") + @PermitAll + public CommonResult> getPointActivityPage(AppPointActivityPageReqVO pageReqVO) { + // 1. 查询满足当前阶段的活动 + PageResult pageResult = pointActivityService.getPointActivityPage( + BeanUtils.toBean(pageReqVO, PointActivityPageReqVO.class)); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 2. 拼接数据 + List resultList = buildAppPointActivityRespVOList(pageResult.getList()); + return success(new PageResult<>(resultList, pageResult.getTotal())); + } + + @GetMapping("/get-detail") + @Operation(summary = "获得积分商城活动明细") + @Parameter(name = "id", description = "活动编号", required = true, example = "1024") + @PermitAll + public CommonResult getPointActivity(@RequestParam("id") Long id) { + // 1. 获取活动 + PointActivityDO activity = pointActivityService.getPointActivity(id); + if (activity == null + || ObjUtil.equal(activity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { + return success(null); + } + + // 2. 拼接数据 + List products = pointActivityService.getPointProductListByActivityIds(Collections.singletonList(id)); + AppPointActivityDetailRespVO respVO = BeanUtils.toBean(activity, AppPointActivityDetailRespVO.class); + respVO.setProducts(BeanUtils.toBean(products, AppPointActivityDetailRespVO.Product.class)); + return success(respVO); + } + + @GetMapping("/list-by-ids") + @Operation(summary = "获得积分商城活动列表,基于活动编号数组") + @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") + @PermitAll + public CommonResult> getCombinationActivityListByIds(@RequestParam("ids") List ids) { + // 1. 获得开启的活动列表 + List activityList = pointActivityService.getPointActivityListByIds(ids); + activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus())); + if (CollUtil.isEmpty(activityList)) { + return success(Collections.emptyList()); + } + // 2. 拼接返回 + List result = buildAppPointActivityRespVOList(activityList); + return success(result); + } + + private List buildAppPointActivityRespVOList(List activityList) { + List products = pointActivityService.getPointProductListByActivityIds( + convertSet(activityList, PointActivityDO::getId)); + Map> productsMap = convertMultiMap(products, PointProductDO::getActivityId); + Map spuMap = productSpuApi.getSpusMap( + convertSet(activityList, PointActivityDO::getSpuId)); + List result = BeanUtils.toBean(activityList, AppPointActivityRespVO.class); + result.forEach(activity -> { + // 设置 product 信息 + PointProductDO minProduct = getMinObject(productsMap.get(activity.getId()), PointProductDO::getPoint); + assert minProduct != null; + activity.setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice()); + findAndThen(spuMap, activity.getSpuId(), + spu -> activity.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice())); + }); + return result; + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityDetailRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityDetailRespVO.java new file mode 100644 index 000000000..8253e4fe2 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityDetailRespVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.promotion.controller.app.point.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "用户 App - 积分商城活动的详细 Response VO") +@Data +public class AppPointActivityDetailRespVO { + + @Schema(description = "积分商城活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11373") + private Long id; + + @Schema(description = "积分商城活动商品", requiredMode = Schema.RequiredMode.REQUIRED, example = "19509") + private Long spuId; + + @Schema(description = "活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer status; + + @Schema(description = "积分商城活动库存(剩余库存积分兑换时扣减)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer stock; + + @Schema(description = "积分商城活动总库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer totalStock; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "商品信息数组", requiredMode = Schema.RequiredMode.REQUIRED) + private List products; + + @Schema(description = "商品信息") + @Data + public static class Product { + + @Schema(description = "积分商城商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31718") + private Long id; + + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2736") + private Long skuId; + + @Schema(description = "可兑换数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3926") + private Integer count; + + @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer point; + + @Schema(description = "兑换金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "15860") + private Integer price; + + @Schema(description = "积分商城商品库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer stock; + + } + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityPageReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityPageReqVO.java new file mode 100644 index 000000000..6a4119563 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityPageReqVO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.promotion.controller.app.point.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "用户 App - 积分商城活动分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AppPointActivityPageReqVO extends PageParam { + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityRespVO.java new file mode 100644 index 000000000..29f4f97c1 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/point/vo/AppPointActivityRespVO.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.promotion.controller.app.point.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "用户 App - 积分商城活动 Response VO") +@Data +public class AppPointActivityRespVO { + + @Schema(description = "积分商城活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11373") + @ExcelProperty("积分商城活动编号") + private Long id; + + @Schema(description = "积分商城活动商品", requiredMode = Schema.RequiredMode.REQUIRED, example = "19509") + @ExcelProperty("积分商城活动商品") + private Long spuId; + + @Schema(description = "活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("活动状态") + private Integer status; + + @Schema(description = "积分商城活动库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("积分商城活动库存") + private Integer stock; // 剩余库存积分兑换时扣减 + + @Schema(description = "积分商城活动总库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("积分商城活动总库存") + private Integer totalStock; + + // TODO @puhui999:只返回必要的字段,例如说 remark、sort、createTime 应该是不需要的呢。也可以看看别的也不需要哈。 + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("排序") + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + // ========== 商品字段 ========== + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 name 读取 + example = "618大促") + private String spuName; + @Schema(description = "商品主图", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 picUrl 读取 + example = "https://www.iocoder.cn/xx.png") + private String picUrl; + @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 marketPrice 读取 + example = "50") + private Integer marketPrice; + + //======================= 显示所需兑换积分最少的 sku 信息 ======================= + + @Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer point; + + @Schema(description = "兑换金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "15860") + private Integer price; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/AppRewardActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/AppRewardActivityController.java index 88cdcd8af..77444e988 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/AppRewardActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/AppRewardActivityController.java @@ -9,6 +9,7 @@ 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 org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,9 +30,20 @@ public class AppRewardActivityController { @GetMapping("/get") @Operation(summary = "获得满减送活动") @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PermitAll public CommonResult getRewardActivity(@RequestParam("id") Long id) { - RewardActivityDO rewardActivity = rewardActivityService.getRewardActivity(id); - return success(BeanUtils.toBean(rewardActivity, AppRewardActivityRespVO.class)); + RewardActivityDO activity = rewardActivityService.getRewardActivity(id); + if (activity == null) { + return success(null); + } + // 拼接 Rule 描述 + AppRewardActivityRespVO activityVO = BeanUtils.toBean(activity, AppRewardActivityRespVO.class); + for (int i = 0; i < activityVO.getRules().size(); i++) { + AppRewardActivityRespVO.Rule ruleVO = activityVO.getRules().get(i); + RewardActivityDO.Rule rule = activity.getRules().get(i); + ruleVO.setDescription(rewardActivityService.getRewardActivityRuleDescription(activity.getConditionType(), rule)); + } + return success(activityVO); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/vo/AppRewardActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/vo/AppRewardActivityRespVO.java index acaa5225d..063d159f5 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/vo/AppRewardActivityRespVO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/reward/vo/AppRewardActivityRespVO.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivi import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; import java.util.List; @Schema(description = "用户 App - 满减送活动 Response VO") @@ -19,6 +20,12 @@ public class AppRewardActivityRespVO { @Schema(description = "活动标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "满啦满啦") private String name; + @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + @Schema(description = "条件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer conditionType; @@ -26,9 +33,18 @@ public class AppRewardActivityRespVO { private Integer productScope; @Schema(description = "商品 SPU 编号的数组", example = "1,2,3") - private List productSpuIds; + private List productScopeValues; @Schema(description = "优惠规则的数组") - private List rules; + private List rules; + + @Schema(description = "优惠规则") + @Data + public static class Rule extends RewardActivityBaseVO.Rule { + + @Schema(description = "规则描述") + private String description; // 通过 {@link #limit}、{@link #discountPrice} 等字段进行拼接 + + } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java index fd506ab91..07332efc1 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java @@ -24,6 +24,7 @@ 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 org.springframework.context.annotation.Lazy; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -74,6 +75,7 @@ public class AppSeckillActivityController { @GetMapping("/get-now") @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用") + @PermitAll public CommonResult getNowSeckillActivity() { return success(nowSeckillActivityCache.getUnchecked("")); // 缓存 } @@ -96,6 +98,7 @@ public class AppSeckillActivityController { @GetMapping("/page") @Operation(summary = "获得秒杀活动分页") + @PermitAll public CommonResult> getSeckillActivityPage(AppSeckillActivityPageReqVO pageReqVO) { // 1. 查询满足当前阶段的活动 PageResult pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO); @@ -113,6 +116,7 @@ public class AppSeckillActivityController { @GetMapping("/get-detail") @Operation(summary = "获得秒杀活动明细") @Parameter(name = "id", description = "活动编号", required = true, example = "1024") + @PermitAll public CommonResult getSeckillActivity(@RequestParam("id") Long id) { // 1. 获取活动 SeckillActivityDO activity = activityService.getSeckillActivity(id); @@ -151,8 +155,9 @@ public class AppSeckillActivityController { } @GetMapping("/list-by-ids") - @Operation(summary = "获得拼团活动列表,基于活动编号数组") + @Operation(summary = "获得秒杀活动列表,基于活动编号数组") @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") + @PermitAll public CommonResult> getCombinationActivityListByIds(@RequestParam("ids") List ids) { // 1. 获得开启的活动列表 List activityList = activityService.getSeckillActivityListByIds(ids); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java index 6b6489fd4..7a7ae7151 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.promotion.service.seckill.SeckillConfigService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,6 +29,7 @@ public class AppSeckillConfigController { @GetMapping("/list") @Operation(summary = "获得秒杀时间段列表") + @PermitAll public CommonResult> getSeckillConfigList() { List list = configService.getSeckillConfigListByStatus(CommonStatusEnum.ENABLE.getStatus()); return success(SeckillConfigConvert.INSTANCE.convertList2(list)); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/discount/DiscountActivityConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/discount/DiscountActivityConvert.java index 0ecbd92ef..67434249a 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/discount/DiscountActivityConvert.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/discount/DiscountActivityConvert.java @@ -1,20 +1,17 @@ package cn.iocoder.yudao.module.promotion.convert.discount; -import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.collection.MapUtils; -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; -import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; -import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.*; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityBaseVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityCreateReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityUpdateReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; -import java.util.Map; /** * 限时折扣活动 Convert @@ -33,105 +30,22 @@ public interface DiscountActivityConvert { DiscountActivityRespVO convert(DiscountActivityDO bean); List convertList(List list); - List convertList2(List list); - List convertList02(List list); + List convertList2(List list); PageResult convertPage(PageResult page); default PageResult convertPage(PageResult page, - List discountProductDOList, - List spuList) { + List discountProductDOList) { PageResult pageResult = convertPage(page); - - // 拼接商品 TODO @zhangshuai:类似空行的问题,也可以看看 - Map discountActivityMap = CollectionUtils.convertMap(discountProductDOList, DiscountProductDO::getActivityId); - Map spuMap = CollectionUtils.convertMap(spuList, ProductSpuRespDTO::getId); - pageResult.getList().forEach(item -> { - item.setProducts(convertList2(discountProductDOList)); - item.setSpuId(discountActivityMap.get(item.getId())==null?null: discountActivityMap.get(item.getId()).getSpuId()); - if (item.getSpuId() != null) { - MapUtils.findAndThen(spuMap, item.getSpuId(), - spu -> item.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice())); - } - - }); + pageResult.getList().forEach(item -> item.setProducts(convertList2(discountProductDOList))); return pageResult; } DiscountProductDO convert(DiscountActivityBaseVO.Product bean); - default DiscountActivityDetailRespVO convert(DiscountActivityDO activity, List products){ - if ( activity == null && products == null ) { - return null; - } - - DiscountActivityDetailRespVO discountActivityDetailRespVO = new DiscountActivityDetailRespVO(); - - if ( activity != null ) { - discountActivityDetailRespVO.setName( activity.getName() ); - discountActivityDetailRespVO.setStartTime( activity.getStartTime() ); - discountActivityDetailRespVO.setEndTime( activity.getEndTime() ); - discountActivityDetailRespVO.setRemark( activity.getRemark() ); - discountActivityDetailRespVO.setId( activity.getId() ); - discountActivityDetailRespVO.setStatus( activity.getStatus() ); - discountActivityDetailRespVO.setCreateTime( activity.getCreateTime() ); - } - if (!products.isEmpty()) { - discountActivityDetailRespVO.setSpuId(products.get(0).getSpuId()); - } - discountActivityDetailRespVO.setProducts( convertList2( products ) ); - - return discountActivityDetailRespVO; + default DiscountActivityRespVO convert(DiscountActivityDO activity, List products) { + return BeanUtils.toBean(activity, DiscountActivityRespVO.class).setProducts(convertList2(products)); } - // =========== 比较是否相等 ========== - /** - * 比较两个限时折扣商品是否相等 - * - * @param productDO 数据库中的商品 - * @param productVO 前端传入的商品 - * @return 是否匹配 - */ - @SuppressWarnings("DuplicatedCode") - default boolean isEquals(DiscountProductDO productDO, DiscountActivityBaseVO.Product productVO) { - if (ObjectUtil.notEqual(productDO.getSpuId(), productVO.getSpuId()) - || ObjectUtil.notEqual(productDO.getSkuId(), productVO.getSkuId()) - || ObjectUtil.notEqual(productDO.getDiscountType(), productVO.getDiscountType())) { - return false; - } - if (productDO.getDiscountType().equals(PromotionDiscountTypeEnum.PRICE.getType())) { - return ObjectUtil.equal(productDO.getDiscountPrice(), productVO.getDiscountPrice()); - } - if (productDO.getDiscountType().equals(PromotionDiscountTypeEnum.PERCENT.getType())) { - return ObjectUtil.equal(productDO.getDiscountPercent(), productVO.getDiscountPercent()); - } - return true; - } - - /** - * 比较两个限时折扣商品是否相等 - * 注意,比较时忽略 id 编号 - * - * @param productDO 商品 1 - * @param productVO 商品 2 - * @return 是否匹配 - */ - @SuppressWarnings("DuplicatedCode") - default boolean isEquals(DiscountProductDO productDO, DiscountProductDO productVO) { - if (ObjectUtil.notEqual(productDO.getSpuId(), productVO.getSpuId()) - || ObjectUtil.notEqual(productDO.getSkuId(), productVO.getSkuId()) - || ObjectUtil.notEqual(productDO.getDiscountType(), productVO.getDiscountType())) { - return false; - } - if (productDO.getDiscountType().equals(PromotionDiscountTypeEnum.PRICE.getType())) { - return ObjectUtil.equal(productDO.getDiscountPrice(), productVO.getDiscountPrice()); - } - if (productDO.getDiscountType().equals(PromotionDiscountTypeEnum.PERCENT.getType())) { - return ObjectUtil.equal(productDO.getDiscountPercent(), productVO.getDiscountPercent()); - } - return true; - } - - -} +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/discount/DiscountProductDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/discount/DiscountProductDO.java index 12b6822d6..b4baab40a 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/discount/DiscountProductDO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/discount/DiscountProductDO.java @@ -66,10 +66,16 @@ public class DiscountProductDO extends BaseDO { */ private Integer discountPrice; + /** + * 活动标题 + * + * 冗余 {@link DiscountActivityDO#getName()} + */ + private String activityName; /** * 活动状态 * - * 关联 {@link DiscountActivityDO#getStatus()} + * 冗余 {@link DiscountActivityDO#getStatus()} */ private Integer activityStatus; /** diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointActivityDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointActivityDO.java new file mode 100644 index 000000000..c3345be88 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointActivityDO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.promotion.dal.dataobject.point; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.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 lombok.ToString; + +/** + * 积分商城活动 DO + * + * @author HUIHUI + */ +@TableName(value = "promotion_point_activity", autoResultMap = true) +@KeySequence("promotion_point_activity_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PointActivityDO extends BaseDO { + + /** + * 积分商城活动编号 + */ + @TableId + private Long id; + /** + * 积分商城活动商品 + */ + private Long spuId; + /** + * 活动状态 + * + * 枚举 {@link CommonStatusEnum 对应的类} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + + /** + * 积分商城活动库存(剩余库存积分兑换时扣减) + */ + private Integer stock; + /** + * 积分商城活动总库存 + */ + private Integer totalStock; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointProductDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointProductDO.java new file mode 100644 index 000000000..041ac5a03 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/point/PointProductDO.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.promotion.dal.dataobject.point; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.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 HUIHUI + */ +@TableName("promotion_point_product") +@KeySequence("promotion_point_product_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointProductDO extends BaseDO { + + /** + * 积分商城商品编号 + */ + @TableId + private Long id; + /** + * 积分商城活动 id + * + * 关联 {@link PointActivityDO#getId()} + */ + private Long activityId; + /** + * 商品 SPU 编号 + */ + private Long spuId; + /** + * 商品 SKU 编号 + */ + private Long skuId; + /** + * 可兑换次数 + */ + private Integer count; + /** + * 所需兑换积分 + */ + private Integer point; + /** + * 所需兑换金额,单位:分 + */ + private Integer price; + /** + * 积分商城商品库存 + */ + private Integer stock; + /** + * 积分商城商品状态 + * + * 枚举 {@link CommonStatusEnum 对应的类} + */ + private Integer activityStatus; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java index 72d604e77..08783bd34 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java @@ -6,14 +6,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; -import java.util.Collection; import java.util.List; -import java.util.Map; /** * 砍价活动 Mapper @@ -86,35 +83,13 @@ public interface BargainActivityMapper extends BaseMapperX { .last("LIMIT " + count)); } - /** - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - * - * @param spuIds spu 编号 - * @param status 状态 - * @return 包含 spuId 和 activityId 的 map 对象列表 - */ - default List> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(Collection spuIds, Integer status) { - return selectMaps(new QueryWrapper() - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id - .in("spu_id", spuIds) - .eq("status", status) - .groupBy("spu_id")); - } - - /** - * 获取指定活动编号的活动列表且 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表 - * - * @param ids 活动编号 - * @param dateTime 指定日期 - * @return 活动列表 - */ - default List selectListByIdsAndDateTimeLt(Collection ids, LocalDateTime dateTime) { - return selectList(new LambdaQueryWrapperX() - .in(BargainActivityDO::getId, ids) - .lt(BargainActivityDO::getStartTime, dateTime) - .gt(BargainActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 - .orderByDesc(BargainActivityDO::getCreateTime)); + default BargainActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) { + LocalDateTime now = LocalDateTime.now(); + return selectOne(new LambdaQueryWrapperX() + .eq(BargainActivityDO::getSpuId, spuId) + .eq(BargainActivityDO::getStatus, status) + .lt(BargainActivityDO::getStartTime, now) + .gt(BargainActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动 } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java index 55e975c45..df909a67c 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java @@ -6,14 +6,10 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; -import java.util.Collection; import java.util.List; -import java.util.Map; /** * 拼团活动 Mapper @@ -39,40 +35,13 @@ public interface CombinationActivityMapper extends BaseMapperX selectListByStatus(Integer status, Integer count) { - return selectList(new LambdaQueryWrapperX() + default CombinationActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) { + LocalDateTime now = LocalDateTime.now(); + return selectOne(new LambdaQueryWrapperX() + .eq(CombinationActivityDO::getSpuId, spuId) .eq(CombinationActivityDO::getStatus, status) - .last("LIMIT " + count)); + .lt(CombinationActivityDO::getStartTime, now) + .gt(CombinationActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动 } - /** - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - * @param spuIds spu 编号 - * @param status 状态 - * @return 包含 spuId 和 activityId 的 map 对象列表 - */ - default List> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(@Param("spuIds") Collection spuIds, @Param("status") Integer status) { - return selectMaps(new QueryWrapper() - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id - .in("spu_id", spuIds) - .eq("status", status) - .groupBy("spu_id")); - } - - /** - * 获取指定活动编号的活动列表且 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表 - * - * @param ids 活动编号 - * @param dateTime 指定日期 - * @return 活动列表 - */ - default List selectListByIdsAndDateTimeLt(Collection ids, LocalDateTime dateTime) { - return selectList(new LambdaQueryWrapperX() - .in(CombinationActivityDO::getId, ids) - .lt(CombinationActivityDO::getStartTime, dateTime) - .gt(CombinationActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 - .orderByDesc(CombinationActivityDO::getCreateTime)); - } - -} +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java index 50e3c0315..29b771126 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/coupon/CouponTemplateMapper.java @@ -70,7 +70,7 @@ public interface CouponTemplateMapper extends BaseMapperX { .in(CouponTemplateDO::getTakeType, canTakeTypes) // 2. 领取方式一致 .and(ww -> ww.gt(CouponTemplateDO::getValidEndTime, LocalDateTime.now()) // 3.1 未过期 .or().eq(CouponTemplateDO::getValidityType, CouponTemplateValidityTypeEnum.TERM.getType())) // 3.2 领取之后 - .apply(" (take_count < total_count OR total_count = -1 )"); // 4. 剩余数量大于 0,或者无限领取 + .apply(" (take_count < total_count OR total_count = -1)"); // 4. 剩余数量大于 0,或者无限领取 } return canTakeConsumer; } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/discount/DiscountProductMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/discount/DiscountProductMapper.java index 5257b836d..90edc1b5d 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/discount/DiscountProductMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/discount/DiscountProductMapper.java @@ -1,14 +1,14 @@ package cn.iocoder.yudao.module.promotion.dal.mysql.discount; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; -import java.util.Map; /** * 限时折扣商城 Mapper @@ -18,10 +18,6 @@ import java.util.Map; @Mapper public interface DiscountProductMapper extends BaseMapperX { - default List selectListBySkuId(Collection skuIds) { - return selectList(DiscountProductDO::getSkuId, skuIds); - } - default List selectListByActivityId(Long activityId) { return selectList(DiscountProductDO::getActivityId, activityId); } @@ -30,22 +26,28 @@ public interface DiscountProductMapper extends BaseMapperX { return selectList(DiscountProductDO::getActivityId, activityIds); } - // TODO @zhangshuai:逻辑里,尽量避免写 join 语句哈,你可以看看这个查询,有什么办法优化?目前的一个思路,是分 2 次查询,性能也是 ok 的 - List getMatchDiscountProductList(@Param("skuIds") Collection skuIds); + default List selectListBySpuIdsAndStatus(Collection spuIds, Integer status) { + return selectList(new LambdaQueryWrapperX() + .in(DiscountProductDO::getSpuId, spuIds) + .eq(DiscountProductDO::getActivityStatus, status)); + } - /** - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - * - * @param spuIds spu 编号 - * @param status 状态 - * @return 包含 spuId 和 activityId 的 map 对象列表 - */ - default List> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(Collection spuIds, Integer status) { - return selectMaps(new QueryWrapper() - .select("spu_id AS spuId, MAX(DISTINCT(activity_id)) AS activityId") - .in("spu_id", spuIds) - .eq("activity_status", status) - .groupBy("spu_id")); + default void updateByActivityId(DiscountProductDO discountProductDO) { + update(discountProductDO, new LambdaUpdateWrapper() + .eq(DiscountProductDO::getActivityId, discountProductDO.getActivityId())); + } + + default void deleteByActivityId(Long activityId) { + delete(DiscountProductDO::getActivityId, activityId); + } + + default List selectListBySkuIdsAndStatusAndNow(Collection skuIds, Integer status) { + LocalDateTime now = LocalDateTime.now(); + return selectList(new LambdaQueryWrapperX() + .in(DiscountProductDO::getSkuId, skuIds) + .eq(DiscountProductDO::getActivityStatus,status) + .lt(DiscountProductDO::getActivityStartTime, now) + .gt(DiscountProductDO::getActivityEndTime, now)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointActivityMapper.java new file mode 100644 index 000000000..46db5841e --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointActivityMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.promotion.dal.mysql.point; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointActivityDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 积分商城活动 Mapper + * + * @author HUIHUI + */ +@Mapper +public interface PointActivityMapper extends BaseMapperX { + + default PageResult selectPage(PointActivityPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PointActivityDO::getSpuId, reqVO.getSpuId()) + .eqIfPresent(PointActivityDO::getStatus, reqVO.getStatus()) + .eqIfPresent(PointActivityDO::getRemark, reqVO.getRemark()) + .eqIfPresent(PointActivityDO::getSort, reqVO.getSort()) + .betweenIfPresent(PointActivityDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PointActivityDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointProductMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointProductMapper.java new file mode 100644 index 000000000..cfa10a515 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/point/PointProductMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.promotion.dal.mysql.point; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointProductDO; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +/** + * 积分商城商品 Mapper + * + * @author HUIHUI + */ +@Mapper +public interface PointProductMapper extends BaseMapperX { + + default List selectListByActivityId(Collection activityIds) { + return selectList(PointProductDO::getActivityId, activityIds); + } + + default List selectListByActivityId(Long activityId) { + return selectList(PointProductDO::getActivityId, activityId); + } + + default void updateByActivityId(PointProductDO pointProductDO) { + update(pointProductDO, new LambdaUpdateWrapper() + .eq(PointProductDO::getActivityId, pointProductDO.getActivityId())); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/reward/RewardActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/reward/RewardActivityMapper.java index cc9010d93..6d8e9c684 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/reward/RewardActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/reward/RewardActivityMapper.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; @@ -30,29 +30,23 @@ public interface RewardActivityMapper extends BaseMapperX { .orderByDesc(RewardActivityDO::getId)); } - default List selectListBySpuIdsAndStatus(Collection spuIds, Integer status) { + default List selectListBySpuIdAndStatusAndNow(Collection spuIds, + Collection categoryIds, + Integer status) { + LocalDateTime now = LocalDateTime.now(); Function, String> productScopeValuesFindInSetFunc = ids -> ids.stream() .map(id -> StrUtil.format("FIND_IN_SET({}, product_scope_values) ", id)) .collect(Collectors.joining(" OR ")); - return selectList(new QueryWrapper() - .eq("status", status) - .apply(productScopeValuesFindInSetFunc.apply(spuIds))); - } - - /** - * 获取指定活动编号的活动列表且 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表 - * - * @param status 状态 - * @param dateTime 指定日期 - * @return 活动列表 - */ - default List selectListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) { return selectList(new LambdaQueryWrapperX() .eq(RewardActivityDO::getStatus, status) - .lt(RewardActivityDO::getStartTime, dateTime) - .gt(RewardActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 - .orderByAsc(RewardActivityDO::getStartTime) + .lt(RewardActivityDO::getStartTime, now) + .gt(RewardActivityDO::getEndTime, now) + .and(i -> i.eq(RewardActivityDO::getProductScope, PromotionProductScopeEnum.SPU.getScope()) + .and(i1 -> i1.apply(productScopeValuesFindInSetFunc.apply(spuIds))) + .or(i1 -> i1.eq(RewardActivityDO::getProductScope, PromotionProductScopeEnum.ALL.getScope())) + .or(i1 -> i1.eq(RewardActivityDO::getProductScope, PromotionProductScopeEnum.CATEGORY.getScope()) + .and(i2 -> i2.apply(productScopeValuesFindInSetFunc.apply(categoryIds))))) + .orderByDesc(RewardActivityDO::getId) ); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java index 0b68609c9..34e50f1f5 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java @@ -8,15 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityPageReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; -import java.util.Collection; import java.util.List; -import java.util.Map; /** * 秒杀活动 Mapper @@ -35,9 +31,9 @@ public interface SeckillActivityMapper extends BaseMapperX { .orderByDesc(SeckillActivityDO::getId)); } - default List selectListByStatus(Integer status) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(SeckillActivityDO::getStatus, status)); + default List selectListBySpuIdAndStatus(Long spuId, Integer status) { + return selectList(SeckillActivityDO::getSpuId, spuId, + SeckillActivityDO::getStatus, status); } /** @@ -51,7 +47,7 @@ public interface SeckillActivityMapper extends BaseMapperX { Assert.isTrue(count > 0); return update(null, new LambdaUpdateWrapper() .eq(SeckillActivityDO::getId, id) - .gt(SeckillActivityDO::getStock, count) + .ge(SeckillActivityDO::getStock, count) .setSql("stock = stock - " + count)); } @@ -69,41 +65,21 @@ public interface SeckillActivityMapper extends BaseMapperX { .setSql("stock = stock + " + count)); } - default PageResult selectPage(AppSeckillActivityPageReqVO pageReqVO, Integer status) { + default PageResult selectPage(AppSeckillActivityPageReqVO pageReqVO, Integer status, LocalDateTime dateTime) { return selectPage(pageReqVO, new LambdaQueryWrapperX() .eqIfPresent(SeckillActivityDO::getStatus, status) + .lt(SeckillActivityDO::getStartTime, dateTime) + .gt(SeckillActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 .apply(ObjectUtil.isNotNull(pageReqVO.getConfigId()), "FIND_IN_SET(" + pageReqVO.getConfigId() + ",config_ids) > 0")); } - /** - * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - * - * @param spuIds spu 编号 - * @param status 状态 - * @return 包含 spuId 和 activityId 的 map 对象列表 - */ - default List> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(@Param("spuIds") Collection spuIds, @Param("status") Integer status) { - return selectMaps(new QueryWrapper() - .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id - .in("spu_id", spuIds) - .eq("status", status) - .groupBy("spu_id")); - } - - /** - * 获取指定活动编号的活动列表且 - * 开始时间和结束时间小于给定时间 dateTime 的活动列表 - * - * @param ids 活动编号 - * @param dateTime 指定日期 - * @return 活动列表 - */ - default List selectListByIdsAndDateTimeLt(Collection ids, LocalDateTime dateTime) { - return selectList(new LambdaQueryWrapperX() - .in(SeckillActivityDO::getId, ids) - .lt(SeckillActivityDO::getStartTime, dateTime) - .gt(SeckillActivityDO::getEndTime, dateTime)// 开始时间 < 指定时间 < 结束时间,也就是说获取指定时间段的活动 - .orderByDesc(SeckillActivityDO::getCreateTime)); + default SeckillActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) { + LocalDateTime now = LocalDateTime.now(); + return selectOne(new LambdaQueryWrapperX() + .eq(SeckillActivityDO::getSpuId, spuId) + .eq(SeckillActivityDO::getStatus, status) + .lt(SeckillActivityDO::getStartTime, now) + .gt(SeckillActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动 } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java index df8f4aaea..73d13d597 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java @@ -8,8 +8,6 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity.Ba import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; import jakarta.validation.Valid; -import java.time.LocalDateTime; -import java.util.Collection; import java.util.List; import java.util.Set; @@ -108,13 +106,11 @@ public interface BargainActivityService { List getBargainActivityListByCount(Integer count); /** - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 + * 获得 SPU 进行中的砍价活动 * - * @param spuIds spu 编号 - * @param status 状态 - * @param dateTime 日期时间 - * @return 砍价活动列表 + * @param spuId SPU 编号数组 + * @return 砍价活动 */ - List getBargainActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime); + BargainActivityDO getMatchBargainActivityBySpuId(Long spuId); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java index 24615e237..3e711a248 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java @@ -1,7 +1,5 @@ package cn.iocoder.yudao.module.promotion.service.bargain; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -21,11 +19,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; -import java.util.*; +import java.util.List; +import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; @@ -194,15 +192,8 @@ public class BargainActivityServiceImpl implements BargainActivityService { } @Override - public List getBargainActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime) { - // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - List> spuIdAndActivityIdMaps = bargainActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { - return Collections.emptyList(); - } - // 2. 查询活动详情 - return bargainActivityMapper.selectListByIdsAndDateTimeLt( - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); + public BargainActivityDO getMatchBargainActivityBySpuId(Long spuId) { + return bargainActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus()); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java index 027a68ddf..759d6a589 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java @@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationA import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; import jakarta.validation.Valid; -import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -109,22 +108,20 @@ public interface CombinationActivityService { PageResult getCombinationActivityPage(PageParam pageParam); /** - * 获取指定活动、指定 sku 编号的商品 + * 获取指定活动、指定 SKU 编号的商品 * * @param activityId 活动编号 - * @param skuId sku 编号 + * @param skuId SKU 编号 * @return 活动商品信息 */ CombinationProductDO selectByActivityIdAndSkuId(Long activityId, Long skuId); /** - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 + * 获得 SPU 进行中的拼团活动 * - * @param spuIds spu 编号 - * @param status 状态 - * @param dateTime 日期时间 - * @return 拼团活动列表 + * @param spuId SPU 编号数组 + * @return 拼团活动 */ - List getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime); + CombinationActivityDO getMatchCombinationActivityBySpuId(Long spuId); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java index 97246057c..193e4d2ce 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.promotion.service.combination; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -25,14 +24,13 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import java.time.LocalDateTime; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; @@ -178,7 +176,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic combinationProductMapper.updateBatch(diffList.get(1)); } if (CollUtil.isNotEmpty(diffList.get(2))) { - combinationProductMapper.deleteBatchIds(CollectionUtils.convertList(diffList.get(2), CombinationProductDO::getId)); + combinationProductMapper.deleteByIds(CollectionUtils.convertList(diffList.get(2), CombinationProductDO::getId)); } } @@ -238,15 +236,8 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic } @Override - public List getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime) { - // 1.查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - List> spuIdAndActivityIdMaps = combinationActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { - return Collections.emptyList(); - } - // 2.查询活动详情 - return combinationActivityMapper.selectListByIdsAndDateTimeLt( - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); + public CombinationActivityDO getMatchCombinationActivityBySpuId(Long spuId) { + return combinationActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus()); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java index 6b71d6bbf..5c8e96f7c 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java @@ -279,7 +279,7 @@ public class CouponServiceImpl implements CouponService { } } // 校验领取方式 - if (ObjectUtil.notEqual(couponTemplate.getTakeType(), takeType.getValue())) { + if (ObjectUtil.notEqual(couponTemplate.getTakeType(), takeType.getType())) { throw exception(COUPON_TEMPLATE_CANNOT_TAKE); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java index 15246740a..a6d4d70cb 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java @@ -57,8 +57,10 @@ public class CouponTemplateServiceImpl implements CouponTemplateService { public void updateCouponTemplate(CouponTemplateUpdateReqVO updateReqVO) { // 校验存在 CouponTemplateDO couponTemplate = validateCouponTemplateExists(updateReqVO.getId()); - // 校验发放数量不能过小 - if (updateReqVO.getTotalCount() < couponTemplate.getTakeCount()) { + // 校验发放数量不能过小(仅在 CouponTakeTypeEnum.USER 用户领取时) + if (CouponTakeTypeEnum.isUser(couponTemplate.getTakeType()) + && updateReqVO.getTotalCount() > 0 // 大于 0 的原因,是因为 -1 不限制 + && updateReqVO.getTotalCount() < couponTemplate.getTakeCount()) { throw exception(COUPON_TEMPLATE_TOTAL_COUNT_TOO_SMALL, couponTemplate.getTakeCount()); } // 校验商品范围 @@ -118,7 +120,7 @@ public class CouponTemplateServiceImpl implements CouponTemplateService { @Override public List getCouponTemplateListByTakeType(CouponTakeTypeEnum takeType) { - return couponTemplateMapper.selectListByTakeType(takeType.getValue()); + return couponTemplateMapper.selectListByTakeType(takeType.getType()); } @Override diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java index e08c7e2b5..389a6b85f 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java @@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivit import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; import jakarta.validation.Valid; -import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -27,7 +26,7 @@ public interface DiscountActivityService { * @param skuIds SKU 编号数组 * @return 匹配的限时折扣商品 */ - List getMatchDiscountProductList(Collection skuIds); + List getMatchDiscountProductListBySkuIds(Collection skuIds); /** * 创建限时折扣活动 @@ -90,15 +89,4 @@ public interface DiscountActivityService { */ List getDiscountProductsByActivityId(Collection activityIds); - /** - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 - * - * @param spuIds spu 编号 - * @param status 状态 - * @param dateTime 当前日期时间 - * @return 折扣活动列表 - */ - List getDiscountActivityBySpuIdsAndStatusAndDateTimeLt( - Collection spuIds, Integer status, LocalDateTime dateTime); - } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java index 0c995267b..88b6f75ea 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.promotion.service.discount; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityBaseVO; import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityCreateReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.discount.vo.DiscountActivityPageReqVO; @@ -15,23 +17,20 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountActivit import cn.iocoder.yudao.module.promotion.dal.dataobject.discount.DiscountProductDO; import cn.iocoder.yudao.module.promotion.dal.mysql.discount.DiscountActivityMapper; import cn.iocoder.yudao.module.promotion.dal.mysql.discount.DiscountProductMapper; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum; -import cn.iocoder.yudao.module.promotion.util.PromotionUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import java.time.LocalDateTime; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; +import static cn.hutool.core.collection.CollUtil.intersectionDistinct; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; /** @@ -48,16 +47,16 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { @Resource private DiscountProductMapper discountProductMapper; - @Override - public List getMatchDiscountProductList(Collection skuIds) { - return discountProductMapper.getMatchDiscountProductList(skuIds); - } + @Resource + private ProductSkuApi productSkuApi; @Override @Transactional(rollbackFor = Exception.class) public Long createDiscountActivity(DiscountActivityCreateReqVO createReqVO) { // 校验商品是否冲突 validateDiscountActivityProductConflicts(null, createReqVO.getProducts()); + // 校验商品是否存在 + validateProductExists(createReqVO.getProducts()); // 插入活动 DiscountActivityDO discountActivity = DiscountActivityConvert.INSTANCE.convert(createReqVO) @@ -65,7 +64,8 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { discountActivityMapper.insert(discountActivity); // 插入商品 List discountProducts = BeanUtils.toBean(createReqVO.getProducts(), DiscountProductDO.class, - product -> product.setActivityId(discountActivity.getId()).setActivityStatus(discountActivity.getStatus()) + product -> product.setActivityId(discountActivity.getId()) + .setActivityName(discountActivity.getName()).setActivityStatus(discountActivity.getStatus()) .setActivityStartTime(createReqVO.getStartTime()).setActivityEndTime(createReqVO.getEndTime())); discountProductMapper.insertBatch(discountProducts); // 返回 @@ -82,36 +82,40 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { } // 校验商品是否冲突 validateDiscountActivityProductConflicts(updateReqVO.getId(), updateReqVO.getProducts()); + // 校验商品是否存在 + validateProductExists(updateReqVO.getProducts()); // 更新活动 - DiscountActivityDO updateObj = DiscountActivityConvert.INSTANCE.convert(updateReqVO) - .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime())); + DiscountActivityDO updateObj = DiscountActivityConvert.INSTANCE.convert(updateReqVO); discountActivityMapper.updateById(updateObj); // 更新商品 - updateDiscountProduct(updateReqVO); + updateDiscountProduct(updateObj, updateReqVO.getProducts()); } - private void updateDiscountProduct(DiscountActivityUpdateReqVO updateReqVO) { - // TODO @zhangshuai:这里的逻辑,可以优化下哈;参考 CombinationActivityServiceImpl 的 updateCombinationProduct,主要是 CollectionUtils.diffList 的使用哈; - // 然后原先是使用 DiscountActivityConvert.INSTANCE.isEquals 对比,现在看看是不是简化就基于 skuId 对比就完事了;之前写的太精细,意义不大; - List dbDiscountProducts = discountProductMapper.selectListByActivityId(updateReqVO.getId()); - // 计算要删除的记录 - List deleteIds = convertList(dbDiscountProducts, DiscountProductDO::getId, - discountProductDO -> updateReqVO.getProducts().stream() - .noneMatch(product -> DiscountActivityConvert.INSTANCE.isEquals(discountProductDO, product))); - if (CollUtil.isNotEmpty(deleteIds)) { - discountProductMapper.deleteBatchIds(deleteIds); + private void updateDiscountProduct(DiscountActivityDO activity, List products) { + // 第一步,对比新老数据,获得添加、修改、删除的列表 + List newList = BeanUtils.toBean(products, DiscountProductDO.class, + product -> product.setActivityId(activity.getId()) + .setActivityName(activity.getName()).setActivityStatus(activity.getStatus()) + .setActivityStartTime(activity.getStartTime()).setActivityEndTime(activity.getEndTime())); + List oldList = discountProductMapper.selectListByActivityId(activity.getId()); + List> diffList = CollectionUtils.diffList(oldList, newList, (oldVal, newVal) -> { + boolean same = ObjectUtil.equal(oldVal.getSkuId(), newVal.getSkuId()); + if (same) { + newVal.setId(oldVal.getId()); + } + return same; + }); + + // 第二步,批量添加、修改、删除 + if (CollUtil.isNotEmpty(diffList.get(0))) { + discountProductMapper.insertBatch(diffList.get(0)); } - // 计算新增的记录 - List newDiscountProducts = convertList(updateReqVO.getProducts(), - product -> DiscountActivityConvert.INSTANCE.convert(product) - .setActivityId(updateReqVO.getId()) - .setActivityStartTime(updateReqVO.getStartTime()) - .setActivityEndTime(updateReqVO.getEndTime())); - newDiscountProducts.removeIf(product -> dbDiscountProducts.stream().anyMatch( - dbProduct -> DiscountActivityConvert.INSTANCE.isEquals(dbProduct, product))); // 如果匹配到,说明是更新的 - if (CollectionUtil.isNotEmpty(newDiscountProducts)) { - discountProductMapper.insertBatch(newDiscountProducts); + if (CollUtil.isNotEmpty(diffList.get(1))) { + discountProductMapper.updateBatch(diffList.get(1)); + } + if (CollUtil.isNotEmpty(diffList.get(2))) { + discountProductMapper.deleteByIds(convertList(diffList.get(2), DiscountProductDO::getId)); } } @@ -122,22 +126,44 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { * @param products 商品列表 */ private void validateDiscountActivityProductConflicts(Long id, List products) { - if (CollUtil.isEmpty(products)) { - return; - } - // 查询商品参加的活动 - // TODO @zhangshuai:下面 121 这个查询,是不是不用做呀;直接 convert 出 skuId 集合就 ok 啦; - List list = discountProductMapper.selectListByActivityId(id); - // TODO @zhangshuai:一般简单的 stream 方法,建议是使用 CollectionUtils,例如说这里是 convertList 对把。 - List skuIds = list.stream().map(item -> item.getSkuId()).collect(Collectors.toList()); - List matchDiscountProductList = getMatchDiscountProductList(skuIds); - if (id != null) { // 排除自己这个活动 - matchDiscountProductList.removeIf(product -> id.equals(product.getActivityId())); - } - // 如果非空,则说明冲突 - if (CollUtil.isNotEmpty(matchDiscountProductList)) { - throw exception(DISCOUNT_ACTIVITY_SPU_CONFLICTS); + // 1.1 查询所有开启的折扣活动 + List activityList = discountActivityMapper.selectList(DiscountActivityDO::getStatus, + CommonStatusEnum.ENABLE.getStatus()); + if (id != null) { // 时排除自己 + activityList.removeIf(item -> ObjectUtil.equal(item.getId(), id)); } + // 1.2 查询活动下的所有商品 + List productList = discountProductMapper.selectListByActivityId( + convertList(activityList, DiscountActivityDO::getId)); + Map> productListMap = convertMultiMap(productList, DiscountProductDO::getActivityId); + + // 2. 校验商品是否冲突 + activityList.forEach(item -> { + findAndThen(productListMap, item.getId(), discountProducts -> { + if (!intersectionDistinct(convertList(discountProducts, DiscountProductDO::getSpuId), + convertList(products, DiscountActivityBaseVO.Product::getSpuId)).isEmpty()) { + throw exception(DISCOUNT_ACTIVITY_SPU_CONFLICTS, item.getName()); + } + }); + }); + } + + /** + * 校验活动商品是否都存在 + * + * @param products 活动商品 + */ + private void validateProductExists(List products) { + // 1.获得商品所有的 sku + List skus = productSkuApi.getSkuListBySpuId( + convertList(products, DiscountActivityBaseVO.Product::getSpuId)).getCheckedData(); + Map skuMap = convertMap(skus, ProductSkuRespDTO::getId); + // 2. 校验商品 sku 都存在 + products.forEach(product -> { + if (!skuMap.containsKey(product.getSkuId())) { + throw exception(SKU_NOT_EXISTS); + } + }); } @Override @@ -148,9 +174,11 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { throw exception(DISCOUNT_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED); } - // 更新 - DiscountActivityDO updateObj = new DiscountActivityDO().setId(id).setStatus(PromotionActivityStatusEnum.CLOSE.getStatus()); - discountActivityMapper.updateById(updateObj); + // 更新活动状态 + discountActivityMapper.updateById(new DiscountActivityDO().setId(id).setStatus(CommonStatusEnum.DISABLE.getStatus())); + // 更新活动商品状态 + discountProductMapper.updateByActivityId(new DiscountProductDO().setActivityId(id).setActivityStatus( + CommonStatusEnum.DISABLE.getStatus())); } @Override @@ -161,8 +189,10 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { throw exception(DISCOUNT_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED); } - // 删除 + // 删除活动 discountActivityMapper.deleteById(id); + // 删除活动商品 + discountProductMapper.deleteByActivityId(id); } private DiscountActivityDO validateDiscountActivityExists(Long id) { @@ -190,20 +220,12 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { @Override public List getDiscountProductsByActivityId(Collection activityIds) { - return discountProductMapper.selectList("activity_id", activityIds); + return discountProductMapper.selectList(DiscountProductDO::getActivityId, activityIds); } @Override - public List getDiscountActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime) { - // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - List> spuIdAndActivityIdMaps = discountProductMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { - return Collections.emptyList(); - } - - // 2. 查询活动详情 - return discountActivityMapper.selectListByIdsAndDateTimeLt( - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); + public List getMatchDiscountProductListBySkuIds(Collection skuIds) { + return discountProductMapper.selectListBySkuIdsAndStatusAndNow(skuIds, CommonStatusEnum.ENABLE.getStatus()); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityService.java new file mode 100644 index 000000000..24facb182 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityService.java @@ -0,0 +1,81 @@ +package cn.iocoder.yudao.module.promotion.service.point; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivitySaveReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointActivityDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointProductDO; +import jakarta.validation.Valid; + +import java.util.Collection; +import java.util.List; + +/** + * 积分商城活动 Service 接口 + * + * @author HUIHUI + */ +public interface PointActivityService { + + /** + * 创建积分商城活动 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPointActivity(@Valid PointActivitySaveReqVO createReqVO); + + /** + * 更新积分商城活动 + * + * @param updateReqVO 更新信息 + */ + void updatePointActivity(@Valid PointActivitySaveReqVO updateReqVO); + + /** + * 关闭积分商城活动 + * + * @param id 编号 + */ + void closePointActivity(Long id); + + /** + * 删除积分商城活动 + * + * @param id 编号 + */ + void deletePointActivity(Long id); + + /** + * 获得积分商城活动 + * + * @param id 编号 + * @return 积分商城活动 + */ + PointActivityDO getPointActivity(Long id); + + /** + * 获得积分商城活动分页 + * + * @param pageReqVO 分页查询 + * @return 积分商城活动分页 + */ + PageResult getPointActivityPage(PointActivityPageReqVO pageReqVO); + + /** + * 获得积分商城活动列表 + * + * @param ids 活动编号 + * @return 积分商城活动列表 + */ + List getPointActivityListByIds(Collection ids); + + /** + * 获得活动商品 + * + * @param activityIds 活动编号 + * @return 获得活动商品 + */ + List getPointProductListByActivityIds(Collection activityIds); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityServiceImpl.java new file mode 100644 index 000000000..da8d233e5 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityServiceImpl.java @@ -0,0 +1,247 @@ +package cn.iocoder.yudao.module.promotion.service.point; + +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivityPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.activity.PointActivitySaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.point.vo.product.PointProductSaveReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointActivityDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.point.PointProductDO; +import cn.iocoder.yudao.module.promotion.dal.mysql.point.PointActivityMapper; +import cn.iocoder.yudao.module.promotion.dal.mysql.point.PointProductMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static cn.hutool.core.collection.CollUtil.intersectionDistinct; +import static cn.hutool.core.collection.CollUtil.isNotEmpty; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; +import static java.util.Collections.singletonList; + +/** + * 积分商城活动 Service 实现类 + * + * @author HUIHUI + */ +@Service +@Validated +public class PointActivityServiceImpl implements PointActivityService { + + @Resource + private PointActivityMapper pointActivityMapper; + @Resource + private PointProductMapper pointProductMapper; + + @Resource + private ProductSpuApi productSpuApi; + @Resource + private ProductSkuApi productSkuApi; + + private static List buildPointProductDO(PointActivityDO pointActivity, List products) { + return BeanUtils.toBean(products, PointProductDO.class, product -> + product.setSpuId(pointActivity.getSpuId()).setActivityId(pointActivity.getId()) + .setActivityStatus(pointActivity.getStatus())); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createPointActivity(PointActivitySaveReqVO createReqVO) { + // 1.1 校验商品是否存在 + validateProductExists(createReqVO.getSpuId(), createReqVO.getProducts()); + // 1.2 校验商品是否已经参加别的活动 + validatePointActivityProductConflicts(null, createReqVO.getProducts()); + + // 2.1 插入积分商城活动 + PointActivityDO pointActivity = BeanUtils.toBean(createReqVO, PointActivityDO.class) + .setStatus(CommonStatusEnum.ENABLE.getStatus()) + .setStock(getSumValue(createReqVO.getProducts(), PointProductSaveReqVO::getStock, Integer::sum)); + pointActivity.setTotalStock(pointActivity.getStock()); + pointActivityMapper.insert(pointActivity); + // 2.2 插入积分商城活动商品 + pointProductMapper.insertBatch(buildPointProductDO(pointActivity, createReqVO.getProducts())); + return pointActivity.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePointActivity(PointActivitySaveReqVO updateReqVO) { + // 1.1 校验存在 + PointActivityDO activity = validatePointActivityExists(updateReqVO.getId()); + if (CommonStatusEnum.DISABLE.getStatus().equals(activity.getStatus())) { + throw exception(POINT_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED); + } + // 1.2 校验商品是否存在 + validateProductExists(updateReqVO.getSpuId(), updateReqVO.getProducts()); + // 1.3 校验商品是否已经参加别的活动 + validatePointActivityProductConflicts(updateReqVO.getId(), updateReqVO.getProducts()); + + // 2.1 更新积分商城活动 + PointActivityDO updateObj = BeanUtils.toBean(updateReqVO, PointActivityDO.class) + .setStock(getSumValue(updateReqVO.getProducts(), PointProductSaveReqVO::getStock, Integer::sum)); + if (updateObj.getStock() > activity.getTotalStock()) { // 如果更新的库存大于原来的库存,则更新总库存 + updateObj.setTotalStock(updateObj.getStock()); + } + pointActivityMapper.updateById(updateObj); + // 2.2 更新商品 + updateSeckillProduct(updateObj, updateReqVO.getProducts()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void closePointActivity(Long id) { + // 校验存在 + PointActivityDO pointActivity = validatePointActivityExists(id); + if (CommonStatusEnum.DISABLE.getStatus().equals(pointActivity.getStatus())) { + throw exception(POINT_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED); + } + + // 更新 + pointActivityMapper.updateById(new PointActivityDO().setId(id).setStatus(CommonStatusEnum.DISABLE.getStatus())); + // 更新活动商品状态 + pointProductMapper.updateByActivityId(new PointProductDO().setActivityId(id).setActivityStatus( + CommonStatusEnum.DISABLE.getStatus())); + } + + /** + * 更新秒杀商品 + * + * @param activity 秒杀活动 + * @param products 该活动的最新商品配置 + */ + private void updateSeckillProduct(PointActivityDO activity, List products) { + // 第一步,对比新老数据,获得添加、修改、删除的列表 + List newList = buildPointProductDO(activity, products); + List oldList = pointProductMapper.selectListByActivityId(activity.getId()); + List> diffList = diffList(oldList, newList, (oldVal, newVal) -> { + boolean same = ObjectUtil.equal(oldVal.getSkuId(), newVal.getSkuId()); + if (same) { + newVal.setId(oldVal.getId()); + } + return same; + }); + + // 第二步,批量添加、修改、删除 + if (isNotEmpty(diffList.get(0))) { + pointProductMapper.insertBatch(diffList.get(0)); + } + if (isNotEmpty(diffList.get(1))) { + pointProductMapper.updateBatch(diffList.get(1)); + } + if (isNotEmpty(diffList.get(2))) { + pointProductMapper.deleteByIds(convertList(diffList.get(2), PointProductDO::getId)); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePointActivity(Long id) { + // 校验存在 + PointActivityDO pointActivity = validatePointActivityExists(id); + if (CommonStatusEnum.ENABLE.getStatus().equals(pointActivity.getStatus())) { + throw exception(POINT_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END); + } + + // 删除商城活动 + pointActivityMapper.deleteById(id); + // 删除活动商品 + List products = pointProductMapper.selectListByActivityId(id); + pointProductMapper.deleteByIds(convertSet(products, PointProductDO::getId)); + } + + private PointActivityDO validatePointActivityExists(Long id) { + PointActivityDO pointActivityDO = pointActivityMapper.selectById(id); + if (pointActivityDO == null) { + throw exception(POINT_ACTIVITY_NOT_EXISTS); + } + return pointActivityDO; + } + + /** + * 校验秒杀商品是否都存在 + * + * @param spuId 商品 SPU 编号 + * @param products 秒杀商品 + */ + private void validateProductExists(Long spuId, List products) { + // 1. 校验商品 spu 是否存在 + ProductSpuRespDTO spu = productSpuApi.getSpu(spuId).getCheckedData(); + if (spu == null) { + throw exception(SPU_NOT_EXISTS); + } + + // 2. 校验商品 sku 都存在 + List skus = productSkuApi.getSkuListBySpuId(singletonList(spuId)).getCheckedData(); + Map skuMap = convertMap(skus, ProductSkuRespDTO::getId); + products.forEach(product -> { + if (!skuMap.containsKey(product.getSkuId())) { + throw exception(SKU_NOT_EXISTS); + } + }); + } + + /** + * 校验商品是否冲突 + * + * @param id 编号 + * @param products 商品列表 + */ + private void validatePointActivityProductConflicts(Long id, List products) { + // 1.1 查询所有开启的积分商城活动 + List activityList = pointActivityMapper.selectList(PointActivityDO::getStatus, + CommonStatusEnum.ENABLE.getStatus()); + if (id != null) { // 更新时排除自己 + activityList.removeIf(item -> ObjectUtil.equal(item.getId(), id)); + } + // 1.2 查询活动下的所有商品 + List productList = pointProductMapper.selectListByActivityId( + convertList(activityList, PointActivityDO::getId)); + Map> productListMap = convertMultiMap(productList, PointProductDO::getActivityId); + + // 2. 校验商品是否冲突 + activityList.forEach(item -> { + findAndThen(productListMap, item.getId(), discountProducts -> { + if (!intersectionDistinct(convertList(discountProducts, PointProductDO::getSpuId), + convertList(products, PointProductSaveReqVO::getSpuId)).isEmpty()) { + throw exception(POINT_ACTIVITY_SPU_CONFLICTS); + } + }); + }); + } + + @Override + public PointActivityDO getPointActivity(Long id) { + return pointActivityMapper.selectById(id); + } + + @Override + public PageResult getPointActivityPage(PointActivityPageReqVO pageReqVO) { + return pointActivityMapper.selectPage(pageReqVO); + } + + @Override + public List getPointActivityListByIds(Collection ids) { + return pointActivityMapper.selectList(PointActivityDO::getId, ids); + } + + @Override + public List getPointProductListByActivityIds(Collection activityIds) { + return pointProductMapper.selectListByActivityId(activityIds); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityService.java index 27cc86c33..896209086 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityService.java @@ -1,17 +1,23 @@ package cn.iocoder.yudao.module.promotion.service.reward; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityUpdateReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; import jakarta.validation.Valid; -import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue; + /** * 满减送活动 Service 接口 * @@ -65,20 +71,35 @@ public interface RewardActivityService { PageResult getRewardActivityPage(RewardActivityPageReqVO pageReqVO); /** - * 基于指定的 SPU 编号数组,获得它们匹配的满减送活动 + * 获得 spuId 商品匹配的的满减送活动列表 * - * @param spuIds SPU 编号数组 + * @param spuIds SPU 编号数组 * @return 满减送活动列表 */ - List getMatchRewardActivityList(Collection spuIds); + List getMatchRewardActivityListBySpuIds(Collection spuIds); - /** - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 - * - * @param status 状态 - * @param dateTime 当前日期时间 - * @return 满减送活动列表 - */ - List getRewardActivityListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime); + default String getRewardActivityRuleDescription(Integer conditionType, RewardActivityDO.Rule rule) { + String description = ""; + if (PromotionConditionTypeEnum.PRICE.getType().equals(conditionType)) { + description += StrUtil.format("满 {} 元", MoneyUtils.fenToYuanStr(rule.getLimit())); + } else { + description += StrUtil.format("满 {} 件", rule.getLimit()); + } + List tips = new ArrayList<>(10); + if (rule.getDiscountPrice() != null) { + tips.add(StrUtil.format("减 {}", MoneyUtils.fenToYuanStr(rule.getDiscountPrice()))); + } + if (Boolean.TRUE.equals(rule.getFreeDelivery())) { + tips.add("包邮"); + } + if (rule.getPoint() != null && rule.getPoint() > 0) { + tips.add(StrUtil.format("送 {} 积分", rule.getPoint())); + } + if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) { + tips.add(StrUtil.format("送 {} 张优惠券", + getSumValue(rule.getGiveCouponTemplateCounts().values(), count -> count, Integer::sum))); + } + return description + StrUtil.join("、", tips); + } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java index 0c85bda54..a4430cce8 100755 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java @@ -1,10 +1,13 @@ package cn.iocoder.yudao.module.promotion.service.reward; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.product.api.category.ProductCategoryApi; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityBaseVO; import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO; @@ -13,19 +16,15 @@ import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivi import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO; import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper; import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; -import cn.iocoder.yudao.module.promotion.util.PromotionUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import static cn.hutool.core.collection.CollUtil.intersectionDistinct; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; /** @@ -52,9 +51,9 @@ public class RewardActivityServiceImpl implements RewardActivityService { // 1.2 校验商品是否冲突 validateRewardActivitySpuConflicts(null, createReqVO); - // 2. 插入 + // 插入 RewardActivityDO rewardActivity = BeanUtils.toBean(createReqVO, RewardActivityDO.class) - .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime())); + .setStatus(CommonStatusEnum.ENABLE.getStatus()); rewardActivityMapper.insert(rewardActivity); // 返回 return rewardActivity.getId(); @@ -73,8 +72,7 @@ public class RewardActivityServiceImpl implements RewardActivityService { validateRewardActivitySpuConflicts(updateReqVO.getId(), updateReqVO); // 2. 更新 - RewardActivityDO updateObj = BeanUtils.toBean(updateReqVO, RewardActivityDO.class) - .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime())); + RewardActivityDO updateObj = BeanUtils.toBean(updateReqVO, RewardActivityDO.class); rewardActivityMapper.updateById(updateObj); } @@ -87,8 +85,7 @@ public class RewardActivityServiceImpl implements RewardActivityService { } // 更新 - RewardActivityDO updateObj = new RewardActivityDO().setId(id).setStatus(CommonStatusEnum.DISABLE.getStatus()); - rewardActivityMapper.updateById(updateObj); + rewardActivityMapper.updateById(new RewardActivityDO().setId(id).setStatus(CommonStatusEnum.DISABLE.getStatus())); } @Override @@ -118,22 +115,61 @@ public class RewardActivityServiceImpl implements RewardActivityService { * @param rewardActivity 请求 */ private void validateRewardActivitySpuConflicts(Long id, RewardActivityBaseVO rewardActivity) { - List list = rewardActivityMapper.selectList(RewardActivityDO::getProductScope, - rewardActivity.getProductScope(), RewardActivityDO::getStatus, CommonStatusEnum.ENABLE.getStatus()); + // 1. 获得开启的所有的活动 + List list = rewardActivityMapper.selectList(RewardActivityDO::getStatus, CommonStatusEnum.ENABLE.getStatus()); if (id != null) { // 排除自己这个活动 list.removeIf(activity -> id.equals(activity.getId())); } - // 情况一:全部商品参加 - if (PromotionProductScopeEnum.isAll(rewardActivity.getProductScope()) && !list.isEmpty()) { - throw exception(REWARD_ACTIVITY_SCOPE_ALL_EXISTS); - } - if (PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope()) || // 情况二:指定商品参加 - PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) { // 情况三:指定商品类型参加 - if (anyMatch(list, item -> !intersectionDistinct(item.getProductScopeValues(), - rewardActivity.getProductScopeValues()).isEmpty())) { - throw exception(PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope()) ? - REWARD_ACTIVITY_SPU_CONFLICTS : REWARD_ACTIVITY_SCOPE_CATEGORY_EXISTS); + // 2. 完全不允许重叠 + for (RewardActivityDO item : list) { + // 2.1 校验满减送活动时间是否冲突,如果时段不冲突那么不同的时间段内则可以存在相同的商品范围 + if (!LocalDateTimeUtil.isOverlap(item.getStartTime(), item.getEndTime(), + rewardActivity.getStartTime(), rewardActivity.getEndTime())) { + continue; + } + // 2.2 校验商品范围是否重叠 + // 情况一:如果与该时间段内商品范围为全部的活动冲突,或 rewardActivity 商品范围为全部,那么则直接校验不通过 + // 例如说,rewardActivity 是全部活动,结果有个 db 里的 activity 是某个分类,它也是冲突的。也就是说,当前时间段内,有且仅有只能有一个活动! + if (PromotionProductScopeEnum.isAll(item.getProductScope()) || + PromotionProductScopeEnum.isAll(rewardActivity.getProductScope())) { + throw exception(REWARD_ACTIVITY_SCOPE_EXISTS, item.getName(), + PromotionProductScopeEnum.isAll(item.getProductScope()) ? + "该活动商品范围为全部已覆盖包含本活动范围" : "本活动商品范围为全部已覆盖包含了该活动商品范围"); + } + // 情况二:如果与该时间段内商品范围为类别的活动冲突 + if (PromotionProductScopeEnum.isCategory(item.getProductScope())) { + // 校验分类是否冲突 + if (PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) { + if (!intersectionDistinct(item.getProductScopeValues(), rewardActivity.getProductScopeValues()).isEmpty()) { + throw exception(REWARD_ACTIVITY_SCOPE_EXISTS, item.getName(), "商品分类范围重叠"); + } + } + // 校验商品分类是否冲突 + if (PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope())) { + List spuList = productSpuApi.getSpuList(rewardActivity.getProductScopeValues()).getCheckedData(); + if (!intersectionDistinct(item.getProductScopeValues(), + convertSet(spuList, ProductSpuRespDTO::getCategoryId)).isEmpty()) { + throw exception(REWARD_ACTIVITY_SCOPE_EXISTS, item.getName(), "该活动商品分类范围已包含本活动所选商品"); + } + } + } + // 情况三:如果与该时间段内商品范围为商品的活动冲突 + if (PromotionProductScopeEnum.isSpu(item.getProductScope())) { + // 校验商品是否冲突 + if (PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope())) { + if (!intersectionDistinct(item.getProductScopeValues(), rewardActivity.getProductScopeValues()).isEmpty()) { + throw exception(REWARD_ACTIVITY_SCOPE_EXISTS, item.getName(), "活动商品范围所选商品重叠"); + } + } + // 校验商品分类是否冲突 + if (PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) { + List spuList = productSpuApi.getSpuList(item.getProductScopeValues()).getCheckedData(); + if (!intersectionDistinct(rewardActivity.getProductScopeValues(), + convertSet(spuList, ProductSpuRespDTO::getCategoryId)).isEmpty()) { + throw exception(REWARD_ACTIVITY_SCOPE_EXISTS, item.getName(), "本活动商品分类范围包含了该活动所选商品"); + } + } } } } @@ -157,14 +193,47 @@ public class RewardActivityServiceImpl implements RewardActivityService { } @Override - public List getMatchRewardActivityList(Collection spuIds) { - List list = rewardActivityMapper.selectListBySpuIdsAndStatus(spuIds, CommonStatusEnum.ENABLE.getStatus()); - return BeanUtils.toBean(list, RewardActivityMatchRespDTO.class); - } + public List getMatchRewardActivityListBySpuIds(Collection spuIds) { + // 1. 查询商品分类 + List spuList = productSpuApi.getSpuList(spuIds).getCheckedData(); + if (CollUtil.isEmpty(spuList)) { + return Collections.emptyList(); + } + Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); - @Override - public List getRewardActivityListByStatusAndDateTimeLt(Integer status, LocalDateTime dateTime) { - return rewardActivityMapper.selectListByStatusAndDateTimeLt(status, dateTime); + // 2. 查询出指定 spuId 的 spu 参加的活动 + List activityList = rewardActivityMapper.selectListBySpuIdAndStatusAndNow( + spuIds, convertSet(spuList, ProductSpuRespDTO::getCategoryId), CommonStatusEnum.ENABLE.getStatus()); + if (CollUtil.isEmpty(activityList)) { + return Collections.emptyList(); + } + + // 3. 转换成 Response DTO + return convertList(activityList, activity -> { + RewardActivityMatchRespDTO activityDTO = BeanUtils.toBean(activity, RewardActivityMatchRespDTO.class); + // 3.1 设置对应匹配的 spuIds + activityDTO.setSpuIds(new ArrayList<>()); + for (Long spuId : spuIds) { + if (PromotionProductScopeEnum.isAll(activityDTO.getProductScope())) { + activityDTO.getSpuIds().add(spuId); + } else if (PromotionProductScopeEnum.isSpu(activityDTO.getProductScope())) { + if (CollUtil.contains(activityDTO.getProductScopeValues(), spuId)) { + activityDTO.getSpuIds().add(spuId); + } + } else if (PromotionProductScopeEnum.isCategory(activityDTO.getProductScope())) { + ProductSpuRespDTO spu = spuMap.get(spuId); + if (spu != null && CollUtil.contains(activityDTO.getProductScopeValues(), spu.getCategoryId())) { + activityDTO.getSpuIds().add(spuId); + } + } + } + + // 3.2 设置每个 Rule 的描述 + activityDTO.setRules(convertList(activity.getRules(), rule -> + BeanUtils.toBean(rule, RewardActivityMatchRespDTO.Rule.class) + .setDescription(getRewardActivityRuleDescription(activityDTO.getConditionType(), rule)))); + return activityDTO; + }); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java index 48b2a4264..f2a353dd6 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java @@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillActivityD import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.SeckillProductDO; import jakarta.validation.Valid; -import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -110,7 +109,7 @@ public interface SeckillActivityService { List getSeckillActivityListByConfigIdAndStatus(Long configId, Integer status); /** - * 通过活动时段获取秒杀活动 + * 通过活动时段获取开始的秒杀活动 * * @param pageReqVO 请求 * @return 秒杀活动列表 @@ -130,14 +129,12 @@ public interface SeckillActivityService { SeckillValidateJoinRespDTO validateJoinSeckill(Long activityId, Long skuId, Integer count); /** - * 获取指定 spu 编号最近参加的活动,每个 spuId 只返回一条记录 + * 获得 SPU 进行中的秒杀活动 * - * @param spuIds spu 编号 - * @param status 状态 - * @param dateTime 日期时间 - * @return 秒杀活动列表 + * @param spuId SPU 编号数组 + * @return 秒杀活动 */ - List getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime); + SeckillActivityDO getMatchSeckillActivityBySpuId(Long spuId); /** * 获得拼团活动列表 diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java index 431373923..8b525e225 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java @@ -1,8 +1,6 @@ package cn.iocoder.yudao.module.promotion.service.seckill; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -30,7 +28,6 @@ import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -56,8 +53,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { private SeckillActivityMapper seckillActivityMapper; @Resource private SeckillProductMapper seckillProductMapper; + @Resource private SeckillConfigService seckillConfigService; + @Resource private ProductSpuApi productSpuApi; @Resource @@ -98,7 +97,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { seckillConfigService.validateSeckillConfigExists(configIds); // 2.1 查询所有开启的秒杀活动 - List activityList = seckillActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); + List activityList = seckillActivityMapper.selectListBySpuIdAndStatus(spuId, CommonStatusEnum.ENABLE.getStatus()); if (activityId != null) { // 排除自己 activityList.removeIf(item -> ObjectUtil.equal(item.getId(), activityId)); } @@ -219,7 +218,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { seckillProductMapper.updateBatch(diffList.get(1)); } if (isNotEmpty(diffList.get(2))) { - seckillProductMapper.deleteBatchIds(convertList(diffList.get(2), SeckillProductDO::getId)); + seckillProductMapper.deleteByIds(convertList(diffList.get(2), SeckillProductDO::getId)); } } @@ -249,7 +248,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { seckillActivityMapper.deleteById(id); // 删除活动商品 List products = seckillProductMapper.selectListByActivityId(id); - seckillProductMapper.deleteBatchIds(convertSet(products, SeckillProductDO::getId)); + seckillProductMapper.deleteByIds(convertSet(products, SeckillProductDO::getId)); } private SeckillActivityDO validateSeckillActivityExists(Long id) { @@ -289,7 +288,7 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @Override public PageResult getSeckillActivityAppPageByConfigId(AppSeckillActivityPageReqVO pageReqVO) { - return seckillActivityMapper.selectPage(pageReqVO, CommonStatusEnum.ENABLE.getStatus()); + return seckillActivityMapper.selectPage(pageReqVO, CommonStatusEnum.ENABLE.getStatus(), LocalDateTime.now()); } @Override @@ -325,15 +324,8 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { } @Override - public List getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(Collection spuIds, Integer status, LocalDateTime dateTime) { - // 1.查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 - List> spuIdAndActivityIdMaps = seckillActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); - if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { - return Collections.emptyList(); - } - // 2.查询活动详情 - return seckillActivityMapper.selectListByIdsAndDateTimeLt( - convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")), dateTime); + public SeckillActivityDO getMatchSeckillActivityBySpuId(Long spuId) { + return seckillActivityMapper.selectBySpuIdAndStatusAndNow(spuId, CommonStatusEnum.ENABLE.getStatus()); } @Override diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java deleted file mode 100644 index 2ad362fe2..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.promotion.util; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; - -import java.time.LocalDateTime; - -/** - * 活动工具类 - * - * @author 芋道源码 - */ -public class PromotionUtils { - - /** - * 根据时间,计算活动状态 - * - * @param endTime 结束时间 - * @return 活动状态 - */ - public static Integer calculateActivityStatus(LocalDateTime endTime) { - return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus(); - } - -} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/discount/DiscountProductMapper.xml b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/discount/DiscountProductMapper.xml deleted file mode 100644 index 76af37db2..000000000 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/discount/DiscountProductMapper.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleController.java index 89a805ec6..2328119d0 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.trade.controller.app.aftersale; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO; import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleRespVO; @@ -32,7 +31,6 @@ public class AppAfterSaleController { @GetMapping(value = "/page") @Operation(summary = "获得售后分页") - @PreAuthenticated public CommonResult> getAfterSalePage(PageParam pageParam) { return success(AfterSaleConvert.INSTANCE.convertPage02( afterSaleService.getAfterSalePage(getLoginUserId(), pageParam))); @@ -41,21 +39,18 @@ public class AppAfterSaleController { @GetMapping(value = "/get") @Operation(summary = "获得售后订单") @Parameter(name = "id", description = "售后编号", required = true, example = "1") - @PreAuthenticated public CommonResult getAfterSale(@RequestParam("id") Long id) { return success(AfterSaleConvert.INSTANCE.convert(afterSaleService.getAfterSale(getLoginUserId(), id))); } @PostMapping(value = "/create") @Operation(summary = "申请售后") - @PreAuthenticated public CommonResult createAfterSale(@RequestBody AppAfterSaleCreateReqVO createReqVO) { return success(afterSaleService.createAfterSale(getLoginUserId(), createReqVO)); } @PutMapping(value = "/delivery") @Operation(summary = "退回货物") - @PreAuthenticated public CommonResult deliveryAfterSale(@RequestBody AppAfterSaleDeliveryReqVO deliveryReqVO) { afterSaleService.deliveryAfterSale(getLoginUserId(), deliveryReqVO); return success(true); @@ -64,7 +59,6 @@ public class AppAfterSaleController { @DeleteMapping(value = "/cancel") @Operation(summary = "取消售后") @Parameter(name = "id", description = "售后编号", required = true, example = "1") - @PreAuthenticated public CommonResult cancelAfterSale(@RequestParam("id") Long id) { afterSaleService.cancelAfterSale(getLoginUserId(), id); return success(true); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleLogController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleLogController.java index 142e6608f..667733442 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleLogController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleLogController.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.trade.controller.app.aftersale; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.log.AppAfterSaleLogRespVO; import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleLogService; @@ -34,7 +33,6 @@ public class AppAfterSaleLogController { @GetMapping("/list") @Operation(summary = "获得售后日志列表") @Parameter(name = "afterSaleId", description = "售后编号", required = true, example = "1") - @PreAuthenticated public CommonResult> getAfterSaleLogList( @RequestParam("afterSaleId") Long afterSaleId) { List logs = afterSaleLogService.getAfterSaleLogList(afterSaleId); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageRecordController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageRecordController.java index 21302ef8a..10bea4dcc 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageRecordController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageRecordController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.trade.controller.app.brokerage; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageProductPriceRespVO; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.record.AppBrokerageRecordRespVO; @@ -37,7 +36,6 @@ public class AppBrokerageRecordController { @GetMapping("/page") @Operation(summary = "获得分销记录分页") - @PreAuthenticated public CommonResult> getBrokerageRecordPage(@Valid AppBrokerageRecordPageReqVO pageReqVO) { PageResult pageResult = brokerageRecordService.getBrokerageRecordPage( BrokerageRecordConvert.INSTANCE.convert(pageReqVO, getLoginUserId())); @@ -46,7 +44,6 @@ public class AppBrokerageRecordController { @GetMapping("/get-product-brokerage-price") @Operation(summary = "获得商品的分销金额") - @PreAuthenticated public CommonResult getProductBrokeragePrice(@RequestParam("spuId") Long spuId) { return success(brokerageRecordService.calculateProductBrokeragePrice(getLoginUserId(), spuId)); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java index 1eaed1344..1af8f7252 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.trade.controller.app.brokerage; import cn.hutool.core.date.LocalDateTimeUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*; @@ -55,7 +54,6 @@ public class AppBrokerageUserController { @GetMapping("/get") @Operation(summary = "获得个人分销信息") - @PreAuthenticated public CommonResult getBrokerageUser() { Optional user = Optional.ofNullable(brokerageUserService.getOrCreateBrokerageUser(getLoginUserId())); // 返回数据 @@ -68,14 +66,12 @@ public class AppBrokerageUserController { @PutMapping("/bind") @Operation(summary = "绑定推广员") - @PreAuthenticated public CommonResult bindBrokerageUser(@Valid @RequestBody AppBrokerageUserBindReqVO reqVO) { return success(brokerageUserService.bindBrokerageUser(getLoginUserId(), reqVO.getBindUserId())); } @GetMapping("/get-summary") @Operation(summary = "获得个人分销统计") - @PreAuthenticated public CommonResult getBrokerageUserSummary() { // 查询当前登录用户信息 Long userId = getLoginUserId(); @@ -101,7 +97,6 @@ public class AppBrokerageUserController { @GetMapping("/rank-page-by-user-count") @Operation(summary = "获得分销用户排行分页(基于用户量)") - @PreAuthenticated public CommonResult> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) { // 分页查询 PageResult pageResult = brokerageUserService.getBrokerageUserRankPageByUserCount(pageReqVO); @@ -112,7 +107,6 @@ public class AppBrokerageUserController { @GetMapping("/rank-page-by-price") @Operation(summary = "获得分销用户排行分页(基于佣金)") - @PreAuthenticated public CommonResult> getBrokerageUserChildSummaryPageByPrice(AppBrokerageUserRankPageReqVO pageReqVO) { // 分页查询 PageResult pageResult = brokerageRecordService.getBrokerageUserChildSummaryPageByPrice(pageReqVO); @@ -123,7 +117,6 @@ public class AppBrokerageUserController { @GetMapping("/child-summary-page") @Operation(summary = "获得下级分销统计分页") - @PreAuthenticated public CommonResult> getBrokerageUserChildSummaryPage( AppBrokerageUserChildSummaryPageReqVO pageReqVO) { PageResult pageResult = brokerageUserService.getBrokerageUserChildSummaryPage(pageReqVO, getLoginUserId()); @@ -133,7 +126,6 @@ public class AppBrokerageUserController { @GetMapping("/get-rank-by-price") @Operation(summary = "获得分销用户排行(基于佣金)") @Parameter(name = "times", description = "时间段", required = true) - @PreAuthenticated public CommonResult getRankByPrice( @RequestParam("times") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) LocalDateTime[] times) { return success(brokerageRecordService.getUserRankByPrice(getLoginUserId(), times)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java index e9af59440..4f18b190f 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageWithdrawController.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.trade.controller.app.brokerage; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawCreateReqVO; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawRespVO; @@ -33,7 +32,6 @@ public class AppBrokerageWithdrawController { @GetMapping("/page") @Operation(summary = "获得分销提现分页") - @PreAuthenticated public CommonResult> getBrokerageWithdrawPage(AppBrokerageWithdrawPageReqVO pageReqVO) { PageResult pageResult = brokerageWithdrawService.getBrokerageWithdrawPage( BrokerageWithdrawConvert.INSTANCE.convert(pageReqVO, getLoginUserId())); @@ -42,7 +40,6 @@ public class AppBrokerageWithdrawController { @PostMapping("/create") @Operation(summary = "创建分销提现") - @PreAuthenticated public CommonResult createBrokerageWithdraw(@RequestBody @Valid AppBrokerageWithdrawCreateReqVO createReqVO) { return success(brokerageWithdrawService.createBrokerageWithdraw(getLoginUserId(), createReqVO)); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/AppCartController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/AppCartController.java index d7f7b1799..97a033e85 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/AppCartController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/cart/AppCartController.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.trade.controller.app.cart; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.trade.controller.app.cart.vo.*; import cn.iocoder.yudao.module.trade.service.cart.CartService; import io.swagger.v3.oas.annotations.Operation; @@ -32,14 +31,12 @@ public class AppCartController { @PostMapping("/add") @Operation(summary = "添加购物车商品") - @PreAuthenticated public CommonResult addCart(@Valid @RequestBody AppCartAddReqVO addCountReqVO) { return success(cartService.addCart(getLoginUserId(), addCountReqVO)); } @PutMapping("/update-count") @Operation(summary = "更新购物车商品数量") - @PreAuthenticated public CommonResult updateCartCount(@Valid @RequestBody AppCartUpdateCountReqVO updateReqVO) { cartService.updateCartCount(getLoginUserId(), updateReqVO); return success(true); @@ -47,7 +44,6 @@ public class AppCartController { @PutMapping("/update-selected") @Operation(summary = "更新购物车商品选中") - @PreAuthenticated public CommonResult updateCartSelected(@Valid @RequestBody AppCartUpdateSelectedReqVO updateReqVO) { cartService.updateCartSelected(getLoginUserId(), updateReqVO); return success(true); @@ -55,7 +51,6 @@ public class AppCartController { @PutMapping("/reset") @Operation(summary = "重置购物车商品") - @PreAuthenticated public CommonResult resetCart(@Valid @RequestBody AppCartResetReqVO updateReqVO) { cartService.resetCart(getLoginUserId(), updateReqVO); return success(true); @@ -64,7 +59,6 @@ public class AppCartController { @DeleteMapping("/delete") @Operation(summary = "删除购物车商品") @Parameter(name = "ids", description = "购物车商品编号", required = true, example = "1024,2048") - @PreAuthenticated public CommonResult deleteCart(@RequestParam("ids") List ids) { cartService.deleteCart(getLoginUserId(), ids); return success(true); @@ -72,14 +66,12 @@ public class AppCartController { @GetMapping("get-count") @Operation(summary = "查询用户在购物车中的商品数量") - @PreAuthenticated public CommonResult getCartCount() { return success(cartService.getCartCount(getLoginUserId())); } @GetMapping("/list") @Operation(summary = "查询用户的购物车列表") - @PreAuthenticated public CommonResult getCartList() { return success(cartService.getCartList(getLoginUserId())); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/config/AppTradeConfigController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/config/AppTradeConfigController.java index 215743b5e..e582c34b3 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/config/AppTradeConfigController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/config/AppTradeConfigController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; import cn.iocoder.yudao.module.trade.service.config.TradeConfigService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.security.PermitAll; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -36,6 +37,7 @@ public class AppTradeConfigController { @GetMapping("/get") @Operation(summary = "获得交易配置") + @PermitAll public CommonResult getTradeConfig() { TradeConfigDO config = ObjUtil.defaultIfNull(tradeConfigService.getTradeConfig(), new TradeConfigDO()); return success(TradeConfigConvert.INSTANCE.convert02(config).setTencentLbsKey(tencentLbsKey)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverExpressController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverExpressController.java index 4162b962b..d6fd4ddbb 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverExpressController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverExpressController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,6 +31,7 @@ public class AppDeliverExpressController { @GetMapping("/list") @Operation(summary = "获得快递公司列表") + @PermitAll public CommonResult> getDeliveryExpressList() { List list = deliveryExpressService.getDeliveryExpressListByStatus(CommonStatusEnum.ENABLE.getStatus()); list.sort(Comparator.comparing(DeliveryExpressDO::getSort)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java index 6a923fe36..004f21c06 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java @@ -10,6 +10,7 @@ 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.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -36,6 +37,7 @@ public class AppDeliverPickUpStoreController { @Parameter(name = "latitude", description = "精度", example = "110"), @Parameter(name = "longitude", description = "纬度", example = "120") }) + @PermitAll public CommonResult> getDeliveryPickUpStoreList( @RequestParam(value = "latitude", required = false) Double latitude, @RequestParam(value = "longitude", required = false) Double longitude) { @@ -47,6 +49,7 @@ public class AppDeliverPickUpStoreController { @GetMapping("/get") @Operation(summary = "获得自提门店") @Parameter(name = "id", description = "门店编号") + @PermitAll public CommonResult getOrder(@RequestParam("id") Long id) { DeliveryPickUpStoreDO store = deliveryPickUpStoreService.getDeliveryPickUpStore(id); return success(DeliveryPickUpStoreConvert.INSTANCE.convert03(store)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http index 4a9441694..59490a773 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.http @@ -62,3 +62,8 @@ tenant-id: {{appTenentId}} GET {{appApi}}/trade/order/get-express-track-list?id=70 Authorization: Bearer {{appToken}} tenant-id: {{appTenentId}} + +### /trade-order/settlement-product 获得商品结算信息 +GET {{appApi}}/trade/order/settlement-product?spuIds=633 +Authorization: Bearer {{appToken}} +tenant-id: {{appTenentId}} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java index b1280d8c1..40342a16a 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.trade.controller.app.order; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.*; import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO; @@ -17,11 +16,14 @@ import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService; import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; +import cn.iocoder.yudao.module.trade.service.price.TradePriceService; import com.google.common.collect.Maps; 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.annotation.security.PermitAll; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -47,23 +49,30 @@ public class AppTradeOrderController { private TradeOrderQueryService tradeOrderQueryService; @Resource private DeliveryExpressService deliveryExpressService; - @Resource private AfterSaleService afterSaleService; + @Resource + private TradePriceService priceService; @Resource private TradeOrderProperties tradeOrderProperties; @GetMapping("/settlement") @Operation(summary = "获得订单结算信息") - @PreAuthenticated public CommonResult settlementOrder(@Valid AppTradeOrderSettlementReqVO settlementReqVO) { return success(tradeOrderUpdateService.settlementOrder(getLoginUserId(), settlementReqVO)); } + @GetMapping("/settlement-product") + @Operation(summary = "获得商品结算信息", description = "用于商品列表、商品详情,获得参与活动后的价格信息") + @Parameter(name = "spuIds", description = "商品 SPU 编号数组") + @PermitAll + public CommonResult> settlementProduct(@RequestParam("spuIds") List spuIds) { + return success(priceService.calculateProductPrice(getLoginUserId(), spuIds)); + } + @PostMapping("/create") @Operation(summary = "创建订单") - @PreAuthenticated public CommonResult createOrder(@Valid @RequestBody AppTradeOrderCreateReqVO createReqVO) { TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), createReqVO); return success(new AppTradeOrderCreateRespVO().setId(order.getId()).setPayOrderId(order.getPayOrderId())); @@ -79,28 +88,37 @@ public class AppTradeOrderController { @GetMapping("/get-detail") @Operation(summary = "获得交易订单") - @Parameter(name = "id", description = "交易订单编号") - @PreAuthenticated - public CommonResult getOrder(@RequestParam("id") Long id) { - // 查询订单 + @Parameters({ + @Parameter(name = "id", description = "交易订单编号"), + @Parameter(name = "sync", description = "是否同步支付状态", example = "true") + }) + public CommonResult getOrderDetail(@RequestParam("id") Long id, + @RequestParam(value = "sync", required = false) Boolean sync) { + // 1.1 查询订单 TradeOrderDO order = tradeOrderQueryService.getOrder(getLoginUserId(), id); if (order == null) { return success(null); } + // 1.2 sync 仅在等待支付 + if (Boolean.TRUE.equals(sync) + && TradeOrderStatusEnum.isUnpaid(order.getStatus()) && !order.getPayStatus()) { + tradeOrderUpdateService.syncOrderPayStatusQuietly(order.getId(), order.getPayOrderId()); + // 重新查询,因为同步后,可能会有变化 + order = tradeOrderQueryService.getOrder(id); + } - // 查询订单项 + // 2.1 查询订单项 List orderItems = tradeOrderQueryService.getOrderItemListByOrderId(order.getId()); - // 查询物流公司 + // 2.2 查询物流公司 DeliveryExpressDO express = order.getLogisticsId() != null && order.getLogisticsId() > 0 ? deliveryExpressService.getDeliveryExpress(order.getLogisticsId()) : null; - // 最终组合 + // 2.3 最终组合 return success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, tradeOrderProperties, express)); } @GetMapping("/get-express-track-list") @Operation(summary = "获得交易订单的物流轨迹") @Parameter(name = "id", description = "交易订单编号") - @PreAuthenticated public CommonResult> getOrderExpressTrackList(@RequestParam("id") Long id) { return success(TradeOrderConvert.INSTANCE.convertList02( tradeOrderQueryService.getExpressTrackList(id, getLoginUserId()))); @@ -108,7 +126,6 @@ public class AppTradeOrderController { @GetMapping("/page") @Operation(summary = "获得交易订单分页") - @PreAuthenticated public CommonResult> getOrderPage(AppTradeOrderPageReqVO reqVO) { // 查询订单 PageResult pageResult = tradeOrderQueryService.getOrderPage(getLoginUserId(), reqVO); @@ -121,7 +138,6 @@ public class AppTradeOrderController { @GetMapping("/get-count") @Operation(summary = "获得交易订单数量") - @PreAuthenticated public CommonResult> getOrderCount() { Map orderCount = Maps.newLinkedHashMapWithExpectedSize(5); // 全部 @@ -146,7 +162,6 @@ public class AppTradeOrderController { @PutMapping("/receive") @Operation(summary = "确认交易订单收货") @Parameter(name = "id", description = "交易订单编号") - @PreAuthenticated public CommonResult receiveOrder(@RequestParam("id") Long id) { tradeOrderUpdateService.receiveOrderByMember(getLoginUserId(), id); return success(true); @@ -155,7 +170,6 @@ public class AppTradeOrderController { @DeleteMapping("/cancel") @Operation(summary = "取消交易订单") @Parameter(name = "id", description = "交易订单编号") - @PreAuthenticated public CommonResult cancelOrder(@RequestParam("id") Long id) { tradeOrderUpdateService.cancelOrderByMember(getLoginUserId(), id); return success(true); @@ -164,7 +178,6 @@ public class AppTradeOrderController { @DeleteMapping("/delete") @Operation(summary = "删除交易订单") @Parameter(name = "id", description = "交易订单编号") - @PreAuthenticated public CommonResult deleteOrder(@RequestParam("id") Long id) { tradeOrderUpdateService.deleteOrder(getLoginUserId(), id); return success(true); @@ -175,7 +188,6 @@ public class AppTradeOrderController { @GetMapping("/item/get") @Operation(summary = "获得交易订单项") @Parameter(name = "id", description = "交易订单项编号") - @PreAuthenticated public CommonResult getOrderItem(@RequestParam("id") Long id) { TradeOrderItemDO item = tradeOrderQueryService.getOrderItem(getLoginUserId(), id); return success(TradeOrderConvert.INSTANCE.convert03(item)); @@ -183,7 +195,6 @@ public class AppTradeOrderController { @PostMapping("/item/create-comment") @Operation(summary = "创建交易订单项的评价") - @PreAuthenticated public CommonResult createOrderItemComment(@RequestBody AppTradeOrderItemCommentCreateReqVO createReqVO) { return success(tradeOrderUpdateService.createOrderItemCommentByMember(getLoginUserId(), createReqVO)); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java index 204e07810..8a0f2bb5b 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java @@ -2,9 +2,8 @@ package cn.iocoder.yudao.module.trade.controller.app.order.vo; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import jakarta.validation.constraints.AssertTrue; +import lombok.Data; @Schema(description = "用户 App - 交易订单创建 Request VO") @Data diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java index f846ef1d1..ea20b7b42 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java @@ -6,13 +6,13 @@ import cn.iocoder.yudao.framework.common.validation.Mobile; import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import jakarta.validation.Valid; import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.util.List; @Schema(description = "用户 App - 交易订单结算 Request VO") diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java index 42f035a10..19b659982 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.trade.controller.app.order.vo; import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO; +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -34,6 +35,13 @@ public class AppTradeOrderSettlementRespVO { @Schema(description = "总积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") private Integer totalPoint; + /** + * 营销活动数组 + * + * 只对应 {@link TradePriceCalculateRespBO.Price#items} 商品匹配的活动 + */ + private List promotions; + @Schema(description = "购物项") @Data public static class Item { diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeProductSettlementRespVO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeProductSettlementRespVO.java new file mode 100644 index 000000000..f61b432fe --- /dev/null +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeProductSettlementRespVO.java @@ -0,0 +1,81 @@ +package cn.iocoder.yudao.module.trade.controller.app.order.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Schema(description = "用户 App - 商品结算信息 Response VO") +@Data +public class AppTradeProductSettlementRespVO { + + @Schema(description = "SPU 商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long spuId; + + @Schema(description = "SKU 价格信息数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private List skus; + + @Schema(description = "满减送活动信息", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private RewardActivity rewardActivity; + + @Schema(description = "SKU 价格信息") + @Data + public static class Sku implements Serializable { + + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "优惠后价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer promotionPrice; + + @Schema(description = "营销类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "4") + private Integer promotionType; // 对应 PromotionTypeEnum 枚举,目前只有 4 和 6 两种 + + @Schema(description = "营销编号", requiredMode = Schema.RequiredMode.REQUIRED) + private Long promotionId; // 目前只有限时折扣活动的编号 + + @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime promotionEndTime; + + } + + @Schema(description = "满减送活动信息") + @Data + public static class RewardActivity { + + @Schema(description = "满减活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "条件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer conditionType; + + @Schema(description = "优惠规则的数组", requiredMode = Schema.RequiredMode.REQUIRED) + private List rules; + + } + + @Schema(description = "优惠规则") + @Data + public static class RewardActivityRule { + + @Schema(description = "优惠门槛", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") // 1. 满 N 元,单位:分; 2. 满 N 件 + private Integer limit; + + @Schema(description = "优惠价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer discountPrice; + + @Schema(description = "是否包邮", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean freeDelivery; + + @Schema(description = "赠送的积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer point; + + @Schema(description = "赠送的优惠劵编号的数组") + private Map giveCouponTemplateCounts; + + } + +} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleConvert.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleConvert.java index 086cb6370..45f6e3189 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleConvert.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleConvert.java @@ -46,8 +46,7 @@ public interface AfterSaleConvert { @Mapping(source = "afterSale.refundPrice", target = "price"), @Mapping(source = "orderProperties.payAppKey", target = "appKey") }) - PayRefundCreateReqDTO convert(String userIp, AfterSaleDO afterSale, - TradeOrderProperties orderProperties); + PayRefundCreateReqDTO convert(String userIp, AfterSaleDO afterSale, TradeOrderProperties orderProperties); MemberUserRespVO convert(MemberUserRespDTO bean); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java index a5d5fa01d..3792b9bff 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java @@ -36,6 +36,7 @@ import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -44,7 +45,6 @@ import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -386,7 +386,7 @@ public class AfterSaleServiceImpl implements AfterSaleService { public void afterCommit() { // 创建退款单 PayRefundCreateReqDTO createReqDTO = AfterSaleConvert.INSTANCE.convert(userIp, afterSale, tradeOrderProperties) - .setReason(StrUtil.format("退款【{}】", afterSale.getSpuName())); + .setReason(StrUtil.format("退款【{}】", afterSale.getSpuName()));; Long payRefundId = payRefundApi.createRefund(createReqDTO).getCheckedData(); // 更新售后单的退款单号 tradeAfterSaleMapper.updateById(new AfterSaleDO().setId(afterSale.getId()).setPayRefundId(payRefundId)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java index 52b1f8a9a..5cb73e8d4 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java @@ -23,10 +23,10 @@ import cn.iocoder.yudao.module.trade.framework.delivery.core.client.ExpressClien import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO; import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO; import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; +import jakarta.annotation.Resource; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -215,7 +215,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { * @return 物流轨迹 */ @Cacheable(cacheNames = RedisKeyConstants.EXPRESS_TRACK, key = "#code + '-' + #logisticsNo + '-' + #receiverMobile", - condition = "#result != null && #result.length() > 0") + unless = "#result == null") public List getExpressTrackList(String code, String logisticsNo, String receiverMobile) { return expressClientFactory.getDefaultExpressClient().getExpressTrackList(new ExpressTrackQueryReqDTO() .setExpressCode(code).setLogisticsNo(logisticsNo).setPhone(receiverMobile)); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java index 56b7cbc56..55a696e2a 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java @@ -49,6 +49,17 @@ public interface TradeOrderUpdateService { */ void updateOrderPaid(Long id, Long payOrderId); + /** + * 同步订单的支付状态 + * + * 1. Quietly 表示,即使同步失败,也不会抛出异常 + * 2. 什么时候回出现异常?因为是主动同步,可能和支付模块的回调通知 {@link #updateOrderPaid(Long, Long)} 存在并发冲突,导致抛出异常 + * + * @param id 订单编号 + * @param payOrderId 支付订单编号 + */ + void syncOrderPayStatusQuietly(Long id, Long payOrderId); + /** * 【管理员】发货交易订单 * diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 2e06e17d2..f99b4ebf5 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -9,7 +9,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.framework.common.core.KeyValue; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; @@ -166,7 +165,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { TradePriceCalculateReqBO calculateReqBO = TradeOrderConvert.INSTANCE.convert(userId, settlementReqVO, cartList); calculateReqBO.getItems().forEach(item -> Assert.isTrue(item.getSelected(), // 防御性编程,保证都是选中的 "商品({}) 未设置为选中", item.getSkuId())); - return tradePriceService.calculatePrice(calculateReqBO); + return tradePriceService.calculateOrderPrice(calculateReqBO); } @Override @@ -269,12 +268,24 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @Transactional(rollbackFor = Exception.class) @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_PAY) public void updateOrderPaid(Long id, Long payOrderId) { - // 1. 校验并获得交易订单(可支付) - KeyValue orderResult = validateOrderPayable(id, payOrderId); - TradeOrderDO order = orderResult.getKey(); - PayOrderRespDTO payOrder = orderResult.getValue(); + // 1.1 校验订单是否存在 + TradeOrderDO order = validateOrderExists(id); + // 1.2 校验订单已支付 + if (!TradeOrderStatusEnum.isUnpaid(order.getStatus()) || order.getPayStatus()) { + // 特殊:如果订单已支付,且支付单号相同,直接返回,说明重复回调 + if (ObjectUtil.equals(order.getPayOrderId(), payOrderId)) { + log.warn("[updateOrderPaid][order({}) 已支付,且支付单号相同({}),直接返回]", order, payOrderId); + return; + } + log.error("[updateOrderPaid][order({}) 支付单不匹配({}),请进行处理!order 数据是:{}]", + id, payOrderId, JsonUtils.toJsonString(order)); + throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); + } - // 2. 更新 TradeOrderDO 状态为已支付,等待发货 + // 2. 校验支付订单的合法性 + PayOrderRespDTO payOrder = validatePayOrderPaid(order, payOrderId); + + // 3. 更新 TradeOrderDO 状态为已支付,等待发货 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(), new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true) .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode())); @@ -282,66 +293,65 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID); } - // 3. 执行 TradeOrderHandler 的后置处理 + // 4. 执行 TradeOrderHandler 的后置处理 List orderItems = tradeOrderItemMapper.selectListByOrderId(id); tradeOrderHandlers.forEach(handler -> handler.afterPayOrder(order, orderItems)); - // 4. 记录订单日志 + // 5. 记录订单日志 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus()); TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue()); } - /** - * 校验交易订单满足被支付的条件 - *

- * 1. 交易订单未支付 - * 2. 支付单已支付 - * - * @param id 交易订单编号 - * @param payOrderId 支付订单编号 - * @return 交易订单 - */ - private KeyValue validateOrderPayable(Long id, Long payOrderId) { - // 校验订单是否存在 - TradeOrderDO order = validateOrderExists(id); - // 校验订单未支付 - if (!TradeOrderStatusEnum.isUnpaid(order.getStatus()) || order.getPayStatus()) { - log.error("[validateOrderPaid][order({}) 不处于待支付状态,请进行处理!order 数据是:{}]", - id, JsonUtils.toJsonString(order)); - throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID); - } - // 校验支付订单匹配 - if (ObjectUtil.notEqual(order.getPayOrderId(), payOrderId)) { // 支付单号 - log.error("[validateOrderPaid][order({}) 支付单不匹配({}),请进行处理!order 数据是:{}]", - id, payOrderId, JsonUtils.toJsonString(order)); - throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); - } - - // 校验支付单是否存在 + @Override + public void syncOrderPayStatusQuietly(Long id, Long payOrderId) { PayOrderRespDTO payOrder = payOrderApi.getOrder(payOrderId).getCheckedData(); if (payOrder == null) { - log.error("[validateOrderPaid][order({}) payOrder({}) 不存在,请进行处理!]", id, payOrderId); + return; + } + if (!PayOrderStatusEnum.isSuccess(payOrder.getStatus())) { + return; + } + try { + getSelf().updateOrderPaid(id, payOrderId); + } catch (Throwable e) { + log.warn("[syncOrderPayStatusQuietly][id({}) payOrderId({}) 同步支付状态失败]", id, payOrderId, e); + } + } + + /** + * 校验支付订单的合法性 + * + * @param order 交易订单 + * @param payOrderId 支付订单编号 + * @return 支付订单 + */ + private PayOrderRespDTO validatePayOrderPaid(TradeOrderDO order, Long payOrderId) { + // 1. 校验支付单是否存在 + PayOrderRespDTO payOrder = payOrderApi.getOrder(payOrderId).getCheckedData(); + if (payOrder == null) { + log.error("[validatePayOrderPaid][order({}) payOrder({}) 不存在,请进行处理!]", order.getId(), payOrderId); throw exception(ORDER_NOT_FOUND); } - // 校验支付单已支付 + + // 2.1 校验支付单已支付 if (!PayOrderStatusEnum.isSuccess(payOrder.getStatus())) { - log.error("[validateOrderPaid][order({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", - id, payOrderId, JsonUtils.toJsonString(payOrder)); + log.error("[validatePayOrderPaid][order({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", + order.getId(), payOrderId, JsonUtils.toJsonString(payOrder)); throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_STATUS_NOT_SUCCESS); } - // 校验支付金额一致 + // 2.2 校验支付金额一致 if (ObjectUtil.notEqual(payOrder.getPrice(), order.getPayPrice())) { - log.error("[validateOrderPaid][order({}) payOrder({}) 支付金额不匹配,请进行处理!order 数据是:{},payOrder 数据是:{}]", - id, payOrderId, JsonUtils.toJsonString(order), JsonUtils.toJsonString(payOrder)); + log.error("[validatePayOrderPaid][order({}) payOrder({}) 支付金额不匹配,请进行处理!order 数据是:{},payOrder 数据是:{}]", + order.getId(), payOrderId, JsonUtils.toJsonString(order), JsonUtils.toJsonString(payOrder)); throw exception(ORDER_UPDATE_PAID_FAIL_PAY_PRICE_NOT_MATCH); } - // 校验支付订单匹配(二次) - if (ObjectUtil.notEqual(payOrder.getMerchantOrderId(), id.toString())) { - log.error("[validateOrderPaid][order({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", - id, payOrderId, JsonUtils.toJsonString(payOrder)); + // 2.2 校验支付订单匹配(二次) + if (ObjectUtil.notEqual(payOrder.getMerchantOrderId(), order.getId().toString())) { + log.error("[validatePayOrderPaid][order({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", + order.getId(), payOrderId, JsonUtils.toJsonString(payOrder)); throw exception(ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); } - return new KeyValue<>(order, payOrder); + return payOrder; } @Override @@ -375,7 +385,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { // 3. 记录订单日志 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.DELIVERED.getStatus(), - MapUtil.builder().put("expressName", express != null ? express.getName() : "") + MapUtil.builder().put("deliveryName", express != null ? express.getName() : "") .put("logisticsNo", express != null ? deliveryReqVO.getLogisticsNo() : "").build()); // 4.1 发送站内信 @@ -676,7 +686,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { tradeOrderItemMapper.updateBatch(updateItems); // 4. 更新支付订单 - payOrderApi.updatePayOrderPrice(order.getPayOrderId(), newPayPrice).getCheckedData(); + payOrderApi.updatePayOrderPrice(order.getPayOrderId(), newPayPrice).checkError(); // 5. 记录订单日志 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus(), @@ -887,7 +897,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { .setAppKey(tradeOrderProperties.getPayAppKey()).setUserIp(getClientIP()) // 支付应用 .setMerchantOrderId(String.valueOf(order.getId())) // 支付单号 .setMerchantRefundId(String.valueOf(order.getId())) - .setReason(TradeOrderCancelTypeEnum.COMBINATION_CLOSE.getName()).setPrice(order.getPayPrice())).getCheckedData(); // 价格信息 + .setReason(TradeOrderCancelTypeEnum.COMBINATION_CLOSE.getName()).setPrice(order.getPayPrice())).checkError(); // 价格信息 } @Override diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java index 43f488ec1..bab6a347c 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java @@ -51,7 +51,7 @@ public class TradeCombinationOrderHandler implements TradeOrderHandler { // 1. 校验是否满足拼团活动相关限制 TradeOrderItemDO item = orderItems.get(0); combinationRecordApi.validateCombinationRecord(order.getUserId(), order.getCombinationActivityId(), - order.getCombinationHeadId(), item.getSkuId(), item.getCount()); + order.getCombinationHeadId(), item.getSkuId(), item.getCount()).checkError(); // 2. 校验该用户是否存在未支付的拼团活动订单,避免一个拼团可以下多个单子了 TradeOrderDO activityOrder = orderQueryService.getOrderByUserIdAndStatusAndCombination( diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceService.java index bb1a8bf07..8af150697 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceService.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceService.java @@ -1,10 +1,12 @@ package cn.iocoder.yudao.module.trade.service.price; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeProductSettlementRespVO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; - import jakarta.validation.Valid; +import java.util.List; + /** * 价格计算 Service 接口 * @@ -13,11 +15,20 @@ import jakarta.validation.Valid; public interface TradePriceService { /** - * 价格计算 + * 【订单】价格计算 * * @param calculateReqDTO 计算信息 * @return 计算结果 */ - TradePriceCalculateRespBO calculatePrice(@Valid TradePriceCalculateReqBO calculateReqDTO); + TradePriceCalculateRespBO calculateOrderPrice(@Valid TradePriceCalculateReqBO calculateReqDTO); + + /** + * 【商品】价格计算,用于商品列表、商品详情 + * + * @param userId 用户编号,允许为空 + * @param spuIds 商品 SPU 编号数组 + * @return 计算结果 + */ + List calculateProductPrice(Long userId, List spuIds); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java index 4d09bc271..7a496d28b 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceServiceImpl.java @@ -1,24 +1,33 @@ package cn.iocoder.yudao.module.trade.service.price; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; +import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi; +import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; +import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi; +import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; +import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeProductSettlementRespVO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; +import cn.iocoder.yudao.module.trade.service.price.calculator.TradeDiscountActivityPriceCalculator; import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculator; import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_STOCK_NOT_ENOUGH; import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_PAY_PRICE_ILLEGAL; @@ -37,12 +46,19 @@ public class TradePriceServiceImpl implements TradePriceService { private ProductSkuApi productSkuApi; @Resource private ProductSpuApi productSpuApi; + @Resource + private DiscountActivityApi discountActivityApi; + @Resource + private RewardActivityApi rewardActivityApi; @Resource private List priceCalculators; + @Resource + private TradeDiscountActivityPriceCalculator discountActivityPriceCalculator; + @Override - public TradePriceCalculateRespBO calculatePrice(TradePriceCalculateReqBO calculateReqBO) { + public TradePriceCalculateRespBO calculateOrderPrice(TradePriceCalculateReqBO calculateReqBO) { // 1.1 获得商品 SKU 数组 List skuList = checkSkuList(calculateReqBO); // 1.2 获得商品 SPU 数组 @@ -81,8 +97,58 @@ public class TradePriceServiceImpl implements TradePriceService { } private List checkSpuList(List skuList) { - // 获得商品 SPU 数组 return productSpuApi.validateSpuList(convertSet(skuList, ProductSkuRespDTO::getSpuId)).getCheckedData(); } + @Override + public List calculateProductPrice(Long userId, List spuIds) { + // 1.1 获得 SPU 与 SKU 的映射 + List allSkuList = productSkuApi.getSkuListBySpuId(spuIds).getCheckedData(); + Map> spuIdAndSkuListMap = convertMultiMap(allSkuList, ProductSkuRespDTO::getSpuId); + // 1.2 获得会员等级 + MemberLevelRespDTO level = discountActivityPriceCalculator.getMemberLevel(userId); + // 1.3 获得限时折扣活动 + Map skuIdAndDiscountMap = convertMap( + discountActivityApi.getMatchDiscountProductListBySkuIds(convertSet(allSkuList, ProductSkuRespDTO::getId)).getCheckedData(), + DiscountProductRespDTO::getSkuId); + // 1.4 获得满减送活动 + List rewardActivityMap = rewardActivityApi.getMatchRewardActivityListBySpuIds(spuIds).getCheckedData(); + + // 2. 价格计算 + return convertList(spuIds, spuId -> { + AppTradeProductSettlementRespVO spuVO = new AppTradeProductSettlementRespVO().setSpuId(spuId); + // 2.1 优惠价格 + List skuList = spuIdAndSkuListMap.get(spuId); + List skuVOList = convertList(skuList, sku -> { + AppTradeProductSettlementRespVO.Sku skuVO = new AppTradeProductSettlementRespVO.Sku() + .setId(sku.getId()).setPromotionPrice(sku.getPrice()); + TradePriceCalculateRespBO.OrderItem orderItem = new TradePriceCalculateRespBO.OrderItem() + .setPayPrice(sku.getPrice()).setCount(1); + // 计算限时折扣的优惠价格 + DiscountProductRespDTO discountProduct = skuIdAndDiscountMap.get(sku.getId()); + Integer discountPrice = discountActivityPriceCalculator.calculateActivityPrice(discountProduct, orderItem); + // 计算 VIP 优惠金额 + Integer vipPrice = discountActivityPriceCalculator.calculateVipPrice(level, orderItem); + if (discountPrice <= 0 && vipPrice <= 0) { + return skuVO; + } + // 选择一个大的优惠 + if (discountPrice > vipPrice) { + return skuVO.setPromotionPrice(sku.getPrice() - discountPrice) + .setPromotionType(PromotionTypeEnum.DISCOUNT_ACTIVITY.getType()) + .setPromotionId(discountProduct.getId()).setPromotionEndTime(discountProduct.getActivityEndTime()); + } else { + return skuVO.setPromotionPrice(sku.getPrice() - vipPrice) + .setPromotionType(PromotionTypeEnum.MEMBER_LEVEL.getType()); + } + }); + spuVO.setSkus(skuVOList); + // 2.2 满减送活动 + RewardActivityMatchRespDTO rewardActivity = CollUtil.findOne(rewardActivityMap, + activity -> CollUtil.contains(activity.getSpuIds(), spuId)); + spuVO.setRewardActivity(BeanUtils.toBean(rewardActivity, AppTradeProductSettlementRespVO.RewardActivity.class)); + return spuVO; + }); + } + } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java index 9b6f1d6bd..ce9949027 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.trade.service.price.bo; import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; -import lombok.Data; - import jakarta.validation.Valid; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.util.List; /** diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java index 0549ab5a7..98fb186a7 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java @@ -122,9 +122,9 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { */ private boolean isGlobalExpressFree(TradePriceCalculateRespBO result) { TradeConfigDO config = tradeConfigService.getTradeConfig(); - return config != null - && Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) // 开启包邮 - && result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice(); // 满足包邮的价格 + return config == null + || Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) // 开启包邮 + || result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice(); // 满足包邮的价格 } private void calculateDeliveryPrice(List selectedSkus, diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java index da0a28c60..3ba130f9a 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java @@ -1,8 +1,11 @@ package cn.iocoder.yudao.module.trade.service.price.calculator; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi; import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; @@ -10,20 +13,23 @@ import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; +import jakarta.annotation.Resource; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import jakarta.annotation.Resource; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.common.util.number.MoneyUtils.calculateRatePrice; import static cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper.formatPrice; /** * 限时折扣的 {@link TradePriceCalculator} 实现类 * + * 由于“会员折扣”和“限时折扣”是冲突,需要选择优惠金额多的,所以也放在这里计算 + * * @author 芋道源码 */ @Component @@ -32,6 +38,10 @@ public class TradeDiscountActivityPriceCalculator implements TradePriceCalculato @Resource private DiscountActivityApi discountActivityApi; + @Resource + private MemberLevelApi memberLevelApi; + @Resource + private MemberUserApi memberUserApi; @Override public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { @@ -39,51 +49,103 @@ public class TradeDiscountActivityPriceCalculator implements TradePriceCalculato if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { return; } - // 获得 SKU 对应的限时折扣活动 - List discountProducts = discountActivityApi.getMatchDiscountProductList( - convertSet(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSkuId)).getCheckedData(); - if (CollUtil.isEmpty(discountProducts)) { - return; - } - Map discountProductMap = convertMap(discountProducts, DiscountProductRespDTO::getSkuId); - // 处理每个 SKU 的限时折扣 + // 1.1 获得 SKU 对应的限时折扣活动 + List discountProducts = discountActivityApi.getMatchDiscountProductListBySkuIds( + convertSet(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSkuId)).getCheckedData(); + Map discountProductMap = convertMap(discountProducts, DiscountProductRespDTO::getSkuId); + // 1.2 获得会员等级 + MemberLevelRespDTO level = getMemberLevel(param.getUserId()); + + // 2. 计算每个 SKU 的优惠金额 result.getItems().forEach(orderItem -> { - // 1. 获取该 SKU 的优惠信息 - DiscountProductRespDTO discountProduct = discountProductMap.get(orderItem.getSkuId()); - if (discountProduct == null) { + if (!orderItem.getSelected()) { + return; + } + // 2.1 计算限时折扣的优惠金额 + DiscountProductRespDTO discountProduct = discountProductMap.get(orderItem.getSkuId()); + Integer discountPrice = calculateActivityPrice(discountProduct, orderItem); + // 2.2 计算 VIP 优惠金额 + Integer vipPrice = calculateVipPrice(level, orderItem); + if (discountPrice <= 0 && vipPrice <= 0) { return; } - // 2. 计算优惠金额 - Integer newPayPrice = calculatePayPrice(discountProduct, orderItem); - Integer newDiscountPrice = orderItem.getPayPrice() - newPayPrice; - // 3.1 记录优惠明细 - if (orderItem.getSelected()) { - // 注意,只有在选中的情况下,才会记录到优惠明细。否则仅仅是更新 SKU 优惠金额,用于展示 + // 3. 选择优惠金额多的 + if (discountPrice > vipPrice) { TradePriceCalculatorHelper.addPromotion(result, orderItem, discountProduct.getActivityId(), discountProduct.getActivityName(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType(), - StrUtil.format("限时折扣:省 {} 元", formatPrice(newDiscountPrice)), - newDiscountPrice); + StrUtil.format("限时折扣:省 {} 元", formatPrice(discountPrice)), + discountPrice); + // 更新 SKU 优惠金额 + orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice); + } else { + assert level != null; + TradePriceCalculatorHelper.addPromotion(result, orderItem, + level.getId(), level.getName(), PromotionTypeEnum.MEMBER_LEVEL.getType(), + String.format("会员等级折扣:省 %s 元", formatPrice(vipPrice)), + vipPrice); + // 更新 SKU 的优惠金额 + orderItem.setVipPrice(vipPrice); } - // 3.2 更新 SKU 优惠金额 - orderItem.setDiscountPrice(orderItem.getDiscountPrice() + newDiscountPrice); + + // 4. 分摊优惠 TradePriceCalculatorHelper.recountPayPrice(orderItem); + TradePriceCalculatorHelper.recountAllPrice(result); }); - TradePriceCalculatorHelper.recountAllPrice(result); } - private Integer calculatePayPrice(DiscountProductRespDTO discountProduct, - TradePriceCalculateRespBO.OrderItem orderItem) { - Integer price = orderItem.getPayPrice(); - if (PromotionDiscountTypeEnum.PRICE.getType().equals(discountProduct.getDiscountType())) { // 减价 - price -= discountProduct.getDiscountPrice() * orderItem.getCount(); - } else if (PromotionDiscountTypeEnum.PERCENT.getType().equals(discountProduct.getDiscountType())) { // 打折 - price = price * discountProduct.getDiscountPercent() / 100; - } else { - throw new IllegalArgumentException(String.format("优惠活动的商品(%s) 的优惠类型不正确", discountProduct)); + /** + * 获得用户的等级 + * + * @param userId 用户编号 + * @return 用户等级 + */ + public MemberLevelRespDTO getMemberLevel(Long userId) { + MemberUserRespDTO user = memberUserApi.getUser(userId).getCheckedData(); + if (user == null || user.getLevelId() == null || user.getLevelId() <= 0) { + return null; } - return price; + return memberLevelApi.getMemberLevel(user.getLevelId()).getCheckedData(); + } + + /** + * 计算优惠活动的价格 + * + * @param discount 优惠活动 + * @param orderItem 交易项 + * @return 优惠价格 + */ + public Integer calculateActivityPrice(DiscountProductRespDTO discount, + TradePriceCalculateRespBO.OrderItem orderItem) { + if (discount == null) { + return 0; + } + Integer newPrice = orderItem.getPayPrice(); + if (PromotionDiscountTypeEnum.PRICE.getType().equals(discount.getDiscountType())) { // 减价 + newPrice -= discount.getDiscountPrice() * orderItem.getCount(); + } else if (PromotionDiscountTypeEnum.PERCENT.getType().equals(discount.getDiscountType())) { // 打折 + newPrice = calculateRatePrice(orderItem.getPayPrice(), discount.getDiscountPercent() / 100.0); + } else { + throw new IllegalArgumentException(String.format("优惠活动的商品(%s) 的优惠类型不正确", discount)); + } + return orderItem.getPayPrice() - newPrice; + } + + /** + * 计算会员 VIP 的优惠价格 + * + * @param level 会员等级 + * @param orderItem 交易项 + * @return 优惠价格 + */ + public Integer calculateVipPrice(MemberLevelRespDTO level, + TradePriceCalculateRespBO.OrderItem orderItem) { + if (level == null || level.getDiscountPercent() == null) { + return 0; + } + Integer newPrice = calculateRatePrice(orderItem.getPayPrice(), level.getDiscountPercent().doubleValue()); + return orderItem.getPayPrice() - newPrice; } } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java deleted file mode 100644 index dc4fa8bbb..000000000 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.iocoder.yudao.module.trade.service.price.calculator; - -import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; -import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; -import cn.iocoder.yudao.module.member.api.user.MemberUserApi; -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import jakarta.annotation.Resource; - -import static cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper.formatPrice; - -/** - * 会员 VIP 折扣的 {@link TradePriceCalculator} 实现类 - * - * @author 芋道源码 - */ -@Component -@Order(TradePriceCalculator.ORDER_MEMBER_LEVEL) -public class TradeMemberLevelPriceCalculator implements TradePriceCalculator { - - @Resource - private MemberLevelApi memberLevelApi; - @Resource - private MemberUserApi memberUserApi; - - @Override - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { - // 0. 只有【普通】订单,才计算该优惠 - if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { - return; - } - // 1. 获得用户的会员等级 - MemberUserRespDTO user = memberUserApi.getUser(param.getUserId()).getCheckedData(); - if (user.getLevelId() == null || user.getLevelId() <= 0) { - return; - } - MemberLevelRespDTO level = memberLevelApi.getMemberLevel(user.getLevelId()).getCheckedData(); - if (level == null || level.getDiscountPercent() == null) { - return; - } - - // 2. 计算每个 SKU 的优惠金额 - result.getItems().forEach(orderItem -> { - // 2.1 计算优惠金额 - Integer vipPrice = calculateVipPrice(orderItem.getPayPrice(), level.getDiscountPercent()); - if (vipPrice <= 0) { - return; - } - - // 2.2 记录优惠明细 - if (orderItem.getSelected()) { - // 注意,只有在选中的情况下,才会记录到优惠明细。否则仅仅是更新 SKU 优惠金额,用于展示 - TradePriceCalculatorHelper.addPromotion(result, orderItem, - level.getId(), level.getName(), PromotionTypeEnum.MEMBER_LEVEL.getType(), - String.format("会员等级折扣:省 %s 元", formatPrice(vipPrice)), - vipPrice); - } - - // 2.3 更新 SKU 的优惠金额 - orderItem.setVipPrice(vipPrice); - TradePriceCalculatorHelper.recountPayPrice(orderItem); - }); - TradePriceCalculatorHelper.recountAllPrice(result); - } - - /** - * 计算会员 VIP 优惠价格 - * - * @param price 原价 - * @param discountPercent 折扣 - * @return 优惠价格 - */ - public Integer calculateVipPrice(Integer price, Integer discountPercent) { - if (discountPercent == null) { - return 0; - } - Integer newPrice = price * discountPercent / 100; - return price - newPrice; - } - -} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java index 1fc7e6915..9ed7d9a2f 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java @@ -13,8 +13,6 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; */ public interface TradePriceCalculator { - int ORDER_MEMBER_LEVEL = 5; - int ORDER_SECKILL_ACTIVITY = 8; int ORDER_BARGAIN_ACTIVITY = 8; int ORDER_COMBINATION_ACTIVITY = 8; diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java index 67b2bad06..0ebb3971f 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java @@ -1,14 +1,11 @@ package cn.iocoder.yudao.module.trade.service.price.calculator; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi; import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; -import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; @@ -17,8 +14,6 @@ import jakarta.annotation.Resource; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Comparator; import java.util.List; import java.util.Map; @@ -47,14 +42,15 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator return; } // 获得 SKU 对应的满减送活动 - List rewardActivities = rewardActivityApi.getMatchRewardActivityList( + List rewardActivities = rewardActivityApi.getMatchRewardActivityListBySpuIds( convertSet(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSpuId)).getCheckedData(); if (CollUtil.isEmpty(rewardActivities)) { return; } - - // 处理每个满减送活动 - rewardActivities.forEach(rewardActivity -> calculate(param, result, rewardActivity)); + // 处理最新的满减送活动 + if (!rewardActivities.isEmpty()) { + calculate(param, result, rewardActivities.get(0)); + } } private void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result, @@ -69,7 +65,7 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator if (rule == null) { TradePriceCalculatorHelper.addNotMatchPromotion(result, orderItems, rewardActivity.getId(), rewardActivity.getName(), PromotionTypeEnum.REWARD_ACTIVITY.getType(), - getRewardActivityNotMeetTip(rewardActivity, orderItems)); + "满减送:" + rewardActivity.getRules().get(0).getDescription()); return; } @@ -77,6 +73,10 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator Integer newDiscountPrice = rule.getDiscountPrice(); // 2.2 计算分摊的优惠金额 List divideDiscountPrices = TradePriceCalculatorHelper.dividePrice(orderItems, newDiscountPrice); + // 2.3 计算是否包邮 + if (Boolean.TRUE.equals(rule.getFreeDelivery())) { + result.setFreeDelivery(true); + } // 3.1 记录使用的优惠劵 result.setCouponId(param.getCouponId()); @@ -110,16 +110,8 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator // 4.3 记录赠送的优惠券 if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) { for (Map.Entry entry : rule.getGiveCouponTemplateCounts().entrySet()) { - Map giveCouponTemplateCounts = result.getGiveCouponTemplateCounts(); - // TODO @puhui999:是不是有一种可能性,这个 key 没有,别的 key 有哈。 - // TODO 这里还有一种简化的写法。就是下面,大概两行就可以啦 -// result.getGiveCouponTemplateCounts().put(entry.getKey(), -// result.getGiveCouponTemplateCounts().getOrDefault(entry.getKey(), 0) + entry.getValue()); - if (giveCouponTemplateCounts.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券 - result.setGiveCouponTemplateCounts(rule.getGiveCouponTemplateCounts()); - } else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量 - giveCouponTemplateCounts.put(entry.getKey(), giveCouponTemplateCounts.get(entry.getKey()) + entry.getValue()); - } + result.getGiveCouponTemplateCounts().put(entry.getKey(), + result.getGiveCouponTemplateCounts().getOrDefault(entry.getKey(), 0) + entry.getValue()); } } } @@ -133,28 +125,14 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator */ private List filterMatchActivityOrderItems(TradePriceCalculateRespBO result, RewardActivityMatchRespDTO rewardActivity) { - // 情况一:全部商品都可以参与 - if (PromotionProductScopeEnum.isAll(rewardActivity.getProductScope())) { - return result.getItems(); - } - // 情况二:指定商品参与 - if (PromotionProductScopeEnum.isSpu(rewardActivity.getProductScope())) { - return filterList(result.getItems(), - orderItem -> CollUtil.contains(rewardActivity.getProductScopeValues(), orderItem.getSpuId())); - } - // 情况三:指定商品类型参与 - if (PromotionProductScopeEnum.isCategory(rewardActivity.getProductScope())) { - return filterList(result.getItems(), - orderItem -> CollUtil.contains(rewardActivity.getProductScopeValues(), orderItem.getCategoryId())); - } - return ListUtil.of(); + return filterList(result.getItems(), orderItem -> CollUtil.contains(rewardActivity.getSpuIds(), orderItem.getSpuId())); } /** * 获得最大匹配的满减送活动的规则 * * @param rewardActivity 满减送活动 - * @param orderItems 商品项 + * @param orderItems 商品项 * @return 匹配的活动规则 */ private RewardActivityMatchRespDTO.Rule getMaxMatchRewardActivityRule(RewardActivityMatchRespDTO rewardActivity, @@ -179,31 +157,4 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator return null; } - /** - * 获得满减送活动不匹配时的提示 - * - * @param rewardActivity 满减送活动 - * @return 提示 - */ - private String getRewardActivityNotMeetTip(RewardActivityMatchRespDTO rewardActivity, - List orderItems) { - // 1. 计算数量和价格 - Integer count = TradePriceCalculatorHelper.calculateTotalCount(orderItems); - Integer price = TradePriceCalculatorHelper.calculateTotalPayPrice(orderItems); - assert count != null && price != null; - - // 2. 构建不满足时的提示信息:按最低档规则算 - String meetTip = "满减送:购满 {} {},可以减 {} 元"; - List rules = new ArrayList<>(rewardActivity.getRules()); - rules.sort(Comparator.comparing(RewardActivityMatchRespDTO.Rule::getLimit)); // 按优惠门槛升序 - RewardActivityMatchRespDTO.Rule rule = rules.get(0); - if (PromotionConditionTypeEnum.PRICE.getType().equals(rewardActivity.getConditionType())) { - return StrUtil.format(meetTip, rule.getLimit(), "元", MoneyUtils.fenToYuanStr(rule.getDiscountPrice())); - } - if (PromotionConditionTypeEnum.COUNT.getType().equals(rewardActivity.getConditionType())) { - return StrUtil.format(meetTip, rule.getLimit(), "件", MoneyUtils.fenToYuanStr(rule.getDiscountPrice())); - } - return StrUtil.EMPTY; - } - } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java index 73c9dbf5e..fe8720933 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/AppAddressController.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.member.controller.app.address; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO; import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressRespVO; import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressUpdateReqVO; @@ -32,14 +31,12 @@ public class AppAddressController { @PostMapping("/create") @Operation(summary = "创建用户收件地址") - @PreAuthenticated public CommonResult createAddress(@Valid @RequestBody AppAddressCreateReqVO createReqVO) { return success(addressService.createAddress(getLoginUserId(), createReqVO)); } @PutMapping("/update") @Operation(summary = "更新用户收件地址") - @PreAuthenticated public CommonResult updateAddress(@Valid @RequestBody AppAddressUpdateReqVO updateReqVO) { addressService.updateAddress(getLoginUserId(), updateReqVO); return success(true); @@ -48,7 +45,6 @@ public class AppAddressController { @DeleteMapping("/delete") @Operation(summary = "删除用户收件地址") @Parameter(name = "id", description = "编号", required = true) - @PreAuthenticated public CommonResult deleteAddress(@RequestParam("id") Long id) { addressService.deleteAddress(getLoginUserId(), id); return success(true); @@ -57,7 +53,6 @@ public class AppAddressController { @GetMapping("/get") @Operation(summary = "获得用户收件地址") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthenticated public CommonResult getAddress(@RequestParam("id") Long id) { MemberAddressDO address = addressService.getAddress(getLoginUserId(), id); return success(AddressConvert.INSTANCE.convert(address)); @@ -65,7 +60,6 @@ public class AppAddressController { @GetMapping("/get-default") @Operation(summary = "获得默认的用户收件地址") - @PreAuthenticated public CommonResult getDefaultUserAddress() { MemberAddressDO address = addressService.getDefaultUserAddress(getLoginUserId()); return success(AddressConvert.INSTANCE.convert(address)); @@ -73,7 +67,6 @@ public class AppAddressController { @GetMapping("/list") @Operation(summary = "获得用户收件地址列表") - @PreAuthenticated public CommonResult> getAddressList() { List list = addressService.getAddressList(getLoginUserId()); return success(AddressConvert.INSTANCE.convertList(list)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index 61c931ab2..eaf504aca 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -44,13 +44,14 @@ public class AppAuthController { @PostMapping("/login") @Operation(summary = "使用手机 + 密码登录") + @PermitAll public CommonResult login(@RequestBody @Valid AppAuthLoginReqVO reqVO) { return success(authService.login(reqVO)); } @PostMapping("/logout") - @PermitAll @Operation(summary = "登出系统") + @PermitAll public CommonResult logout(HttpServletRequest request) { String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); @@ -63,6 +64,7 @@ public class AppAuthController { @PostMapping("/refresh-token") @Operation(summary = "刷新令牌") @Parameter(name = "refreshToken", description = "刷新令牌", required = true) + @PermitAll public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { return success(authService.refreshToken(refreshToken)); } @@ -71,12 +73,14 @@ public class AppAuthController { @PostMapping("/sms-login") @Operation(summary = "使用手机 + 验证码登录") + @PermitAll public CommonResult smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) { return success(authService.smsLogin(reqVO)); } @PostMapping("/send-sms-code") @Operation(summary = "发送手机验证码") + @PermitAll public CommonResult sendSmsCode(@RequestBody @Valid AppAuthSmsSendReqVO reqVO) { authService.sendSmsCode(getLoginUserId(), reqVO); return success(true); @@ -84,6 +88,7 @@ public class AppAuthController { @PostMapping("/validate-sms-code") @Operation(summary = "校验手机验证码") + @PermitAll public CommonResult validateSmsCode(@RequestBody @Valid AppAuthSmsValidateReqVO reqVO) { authService.validateSmsCode(getLoginUserId(), reqVO); return success(true); @@ -97,6 +102,7 @@ public class AppAuthController { @Parameter(name = "type", description = "社交类型", required = true), @Parameter(name = "redirectUri", description = "回调路径") }) + @PermitAll public CommonResult socialAuthRedirect(@RequestParam("type") Integer type, @RequestParam("redirectUri") String redirectUri) { return CommonResult.success(authService.getSocialAuthorizeUrl(type, redirectUri)); @@ -104,12 +110,14 @@ public class AppAuthController { @PostMapping("/social-login") @Operation(summary = "社交快捷登录,使用 code 授权码", description = "适合未登录的用户,但是社交账号已绑定用户") + @PermitAll public CommonResult socialLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) { return success(authService.socialLogin(reqVO)); } @PostMapping("/weixin-mini-app-login") @Operation(summary = "微信小程序的一键登录") + @PermitAll public CommonResult weixinMiniAppLogin(@RequestBody @Valid AppAuthWeixinMiniAppLoginReqVO reqVO) { return success(authService.weixinMiniAppLogin(reqVO)); } @@ -117,6 +125,7 @@ public class AppAuthController { @PostMapping("/create-weixin-jsapi-signature") @Operation(summary = "创建微信 JS SDK 初始化所需的签名", description = "参考 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 文档") + @PermitAll public CommonResult createWeixinMpJsapiSignature(@RequestParam("url") String url) { SocialWxJsapiSignatureRespDTO signature = socialClientApi.createWxMpJsapiSignature( UserTypeEnum.MEMBER.getValue(), url).getCheckedData(); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java index a0eac0c7d..113f96cbb 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberExperienceRecordController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.member.controller.app.level; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.level.vo.experience.AppMemberExperienceRecordRespVO; import cn.iocoder.yudao.module.member.convert.level.MemberExperienceRecordConvert; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberExperienceRecordDO; @@ -32,7 +31,6 @@ public class AppMemberExperienceRecordController { @GetMapping("/page") @Operation(summary = "获得会员经验记录分页") - @PreAuthenticated public CommonResult> getExperienceRecordPage( @Valid PageParam pageParam) { PageResult pageResult = experienceLogService.getExperienceRecordPage( diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java index d31f57977..3bc4a6e0b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/level/AppMemberLevelController.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.service.level.MemberLevelService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,6 +29,7 @@ public class AppMemberLevelController { @GetMapping("/list") @Operation(summary = "获得会员等级列表") + @PermitAll public CommonResult> getLevelList() { List result = levelService.getEnableLevelList(); return success(MemberLevelConvert.INSTANCE.convertList02(result)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java index f6d183d5c..eb9544051 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/point/AppMemberPointRecordController.java @@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO; import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordRespVO; import cn.iocoder.yudao.module.member.convert.point.MemberPointRecordConvert; @@ -34,7 +33,6 @@ public class AppMemberPointRecordController { @GetMapping("/page") @Operation(summary = "获得用户积分记录分页") - @PreAuthenticated public CommonResult> getPointRecordPage( @Valid AppMemberPointRecordPageReqVO pageReqVO) { PageResult pageResult = pointRecordService.getPointRecordPage(getLoginUserId(), pageReqVO); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java index c55bf5197..9b6ba0193 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInConfigController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO import cn.iocoder.yudao.module.member.service.signin.MemberSignInConfigService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,6 +30,7 @@ public class AppMemberSignInConfigController { @GetMapping("/list") @Operation(summary = "获得签到规则列表") + @PermitAll public CommonResult> getSignInConfigList() { List pageResult = signInConfigService.getSignInConfigList(CommonStatusEnum.ENABLE.getStatus()); return success(MemberSignInConfigConvert.INSTANCE.convertList02(pageResult)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java index bb7292611..25bd7e8e1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/signin/AppMemberSignInRecordController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.member.controller.app.signin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO; import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO; import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert; @@ -11,14 +10,13 @@ import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO import cn.iocoder.yudao.module.member.service.signin.MemberSignInRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; 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 static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -33,14 +31,12 @@ public class AppMemberSignInRecordController { @GetMapping("/get-summary") @Operation(summary = "获得个人签到统计") - @PreAuthenticated public CommonResult getSignInRecordSummary() { return success(signInRecordService.getSignInRecordSummary(getLoginUserId())); } @PostMapping("/create") @Operation(summary = "签到") - @PreAuthenticated public CommonResult createSignInRecord() { MemberSignInRecordDO recordDO = signInRecordService.createSignRecord(getLoginUserId()); return success(MemberSignInRecordConvert.INSTANCE.coverRecordToAppRecordVo(recordDO)); @@ -48,7 +44,6 @@ public class AppMemberSignInRecordController { @GetMapping("/page") @Operation(summary = "获得签到记录分页") - @PreAuthenticated public CommonResult> getSignRecordPage(PageParam pageParam) { PageResult pageResult = signInRecordService.getSignRecordPage(getLoginUserId(), pageParam); return success(MemberSignInRecordConvert.INSTANCE.convertPage02(pageResult)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java index b0d7824df..e6d5b9361 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java @@ -4,7 +4,6 @@ import cn.hutool.core.codec.Base64; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.social.vo.*; import cn.iocoder.yudao.module.system.api.social.SocialClientApi; import cn.iocoder.yudao.module.system.api.social.SocialUserApi; @@ -13,6 +12,7 @@ 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.validation.Valid; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -35,6 +35,7 @@ public class AppSocialUserController { @PostMapping("/bind") @Operation(summary = "社交绑定,使用 code 授权码") + @PermitAll public CommonResult socialBind(@RequestBody @Valid AppSocialUserBindReqVO reqVO) { SocialUserBindReqDTO reqDTO = new SocialUserBindReqDTO(getLoginUserId(), UserTypeEnum.MEMBER.getValue(), reqVO.getType(), reqVO.getCode(), reqVO.getState()); @@ -44,18 +45,16 @@ public class AppSocialUserController { @DeleteMapping("/unbind") @Operation(summary = "取消社交绑定") - @PreAuthenticated public CommonResult socialUnbind(@RequestBody AppSocialUserUnbindReqVO reqVO) { SocialUserUnbindReqDTO reqDTO = new SocialUserUnbindReqDTO(getLoginUserId(), UserTypeEnum.MEMBER.getValue(), reqVO.getType(), reqVO.getOpenid()); - socialUserApi.unbindSocialUser(reqDTO).checkError(); + socialUserApi.unbindSocialUser(reqDTO); return success(true); } @GetMapping("/get") @Operation(summary = "获得社交用户") @Parameter(name = "type", description = "社交平台的类型,参见 SocialTypeEnum 枚举值", required = true, example = "10") - @PreAuthenticated public CommonResult getSocialUser(@RequestParam("type") Integer type) { SocialUserRespDTO socialUser = socialUserApi.getSocialUserByUserId(UserTypeEnum.MEMBER.getValue(), getLoginUserId(), type).getCheckedData(); return success(BeanUtils.toBean(socialUser, AppSocialUserRespVO.class)); @@ -63,6 +62,7 @@ public class AppSocialUserController { @PostMapping("/wxa-qrcode") @Operation(summary = "获得微信小程序码(base64 image)") + @PermitAll public CommonResult getWxaQrcode(@RequestBody @Valid AppSocialWxaQrcodeReqVO reqVO) { byte[] wxQrcode = socialClientApi.getWxaQrcode(BeanUtils.toBean(reqVO, SocialWxQrcodeReqDTO.class)).getCheckedData(); return success(Base64.encode(wxQrcode)); @@ -70,6 +70,7 @@ public class AppSocialUserController { @GetMapping("/get-subscribe-template-list") @Operation(summary = "获得微信小程订阅模板列表") + @PermitAll public CommonResult> getSubscribeTemplateList() { List template = socialClientApi.getWxaSubscribeTemplateList(UserTypeEnum.MEMBER.getValue()).getCheckedData(); return success(BeanUtils.toBean(template, AppSocialWxaSubscribeTemplateRespVO.class)); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index 91d549fa6..ddeb43949 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.member.controller.app.user; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.member.controller.app.user.vo.*; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; @@ -10,13 +9,13 @@ import cn.iocoder.yudao.module.member.service.level.MemberLevelService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.validation.Valid; - import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -34,7 +33,6 @@ public class AppMemberUserController { @GetMapping("/get") @Operation(summary = "获得基本信息") - @PreAuthenticated public CommonResult getUserInfo() { MemberUserDO user = userService.getUser(getLoginUserId()); MemberLevelDO level = levelService.getLevel(user.getLevelId()); @@ -43,7 +41,6 @@ public class AppMemberUserController { @PutMapping("/update") @Operation(summary = "修改基本信息") - @PreAuthenticated public CommonResult updateUser(@RequestBody @Valid AppMemberUserUpdateReqVO reqVO) { userService.updateUser(getLoginUserId(), reqVO); return success(true); @@ -51,7 +48,6 @@ public class AppMemberUserController { @PutMapping("/update-mobile") @Operation(summary = "修改用户手机") - @PreAuthenticated public CommonResult updateUserMobile(@RequestBody @Valid AppMemberUserUpdateMobileReqVO reqVO) { userService.updateUserMobile(getLoginUserId(), reqVO); return success(true); @@ -59,7 +55,6 @@ public class AppMemberUserController { @PutMapping("/update-mobile-by-weixin") @Operation(summary = "基于微信小程序的授权码,修改用户手机") - @PreAuthenticated public CommonResult updateUserMobileByWeixin(@RequestBody @Valid AppMemberUserUpdateMobileByWeixinReqVO reqVO) { userService.updateUserMobileByWeixin(getLoginUserId(), reqVO); return success(true); @@ -67,7 +62,6 @@ public class AppMemberUserController { @PutMapping("/update-password") @Operation(summary = "修改用户密码", description = "用户修改密码时使用") - @PreAuthenticated public CommonResult updateUserPassword(@RequestBody @Valid AppMemberUserUpdatePasswordReqVO reqVO) { userService.updateUserPassword(getLoginUserId(), reqVO); return success(true); @@ -75,10 +69,10 @@ public class AppMemberUserController { @PutMapping("/reset-password") @Operation(summary = "重置密码", description = "用户忘记密码时使用") + @PermitAll public CommonResult resetUserPassword(@RequestBody @Valid AppMemberUserResetPasswordReqVO reqVO) { userService.resetUserPassword(reqVO); return success(true); } -} - +} \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java index 86a9e1704..0d8bfe9e9 100644 --- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java @@ -30,6 +30,16 @@ public enum PayOrderStatusEnum implements IntArrayValuable { return new int[0]; } + /** + * 判断是否等待支付 + * + * @param status 状态 + * @return 是否等待支付 + */ + public static boolean isWaiting(Integer status) { + return Objects.equals(status, WAITING.getStatus()); + } + /** * 判断是否支付成功 * diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java index a5322c9eb..a3dbb9514 100755 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*; @@ -11,12 +12,14 @@ import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient; import cn.iocoder.yudao.module.pay.service.app.PayAppService; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import com.google.common.collect.Maps; 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; @@ -51,10 +54,21 @@ public class PayOrderController { @GetMapping("/get") @Operation(summary = "获得支付订单") - @Parameter(name = "id", description = "编号", required = true, example = "1024") + @Parameters({ + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "sync", description = "是否同步", example = "true") + }) @PreAuthorize("@ss.hasPermission('pay:order:query')") - public CommonResult getOrder(@RequestParam("id") Long id) { - return success(PayOrderConvert.INSTANCE.convert(orderService.getOrder(id))); + public CommonResult getOrder(@RequestParam("id") Long id, + @RequestParam(value = "sync", required = false) Boolean sync) { + PayOrderDO order = orderService.getOrder(id); + // sync 仅在等待支付 + if (Boolean.TRUE.equals(sync) && PayOrderStatusEnum.isWaiting(order.getStatus())) { + orderService.syncOrderQuietly(order.getId()); + // 重新查询,因为同步后,可能会有变化 + order = orderService.getOrder(id); + } + return success(BeanUtils.toBean(order, PayOrderRespVO.class)); } @GetMapping("/get-detail") @@ -109,7 +123,7 @@ public class PayOrderController { @PreAuthorize("@ss.hasPermission('pay:order:export')") @ApiAccessLog(operateType = EXPORT) public void exportOrderExcel(@Valid PayOrderExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { List list = orderService.getOrderList(exportReqVO); if (CollectionUtil.isEmpty(list)) { ExcelUtils.write(response, "支付订单.xls", "数据", diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java index 68d5ef2cd..7a8bb8987 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java @@ -1,17 +1,21 @@ package cn.iocoder.yudao.module.pay.controller.app.order; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO; import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitRespVO; import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO; import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO; import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.pay.framework.pay.core.WalletPayClient; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import com.google.common.collect.Maps; 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 lombok.extern.slf4j.Slf4j; @@ -36,12 +40,22 @@ public class AppPayOrderController { @Resource private PayOrderService payOrderService; - // TODO 芋艿:临时 demo,技术打样。 @GetMapping("/get") @Operation(summary = "获得支付订单") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - public CommonResult getOrder(@RequestParam("id") Long id) { - return success(PayOrderConvert.INSTANCE.convert(payOrderService.getOrder(id))); + @Parameters({ + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "sync", description = "是否同步", example = "true") + }) + public CommonResult getOrder(@RequestParam("id") Long id, + @RequestParam(value = "sync", required = false) Boolean sync) { + PayOrderDO order = payOrderService.getOrder(id); + // sync 仅在等待支付 + if (Boolean.TRUE.equals(sync) && PayOrderStatusEnum.isWaiting(order.getStatus())) { + payOrderService.syncOrderQuietly(order.getId()); + // 重新查询,因为同步后,可能会有变化 + order = payOrderService.getOrder(id); + } + return success(BeanUtils.toBean(order, PayOrderRespVO.class)); } @PostMapping("/submit") diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/package-info.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/package-info.java deleted file mode 100644 index ee2004e1a..000000000 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TODO 芋艿:占个位置,没啥用 - */ -package cn.iocoder.yudao.module.pay.controller.app.refund; diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletController.java index cb079b547..76eb95345 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletController.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.wallet.AppPayWalletRespVO; import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; @@ -34,7 +33,6 @@ public class AppPayWalletController { @GetMapping("/get") @Operation(summary = "获取钱包") - @PreAuthenticated public CommonResult getPayWallet() { PayWalletDO wallet = payWalletService.getOrCreateWallet(getLoginUserId(), UserTypeEnum.MEMBER.getValue()); return success(PayWalletConvert.INSTANCE.convert(wallet)); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java index 8513c4b31..eebcd0e09 100755 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java @@ -24,6 +24,11 @@ public interface PayOrderExtensionMapper extends BaseMapperX selectListByOrderIdAndStatus(Long orderId, Integer status) { + return selectList(PayOrderExtensionDO::getOrderId, orderId, + PayOrderExtensionDO::getStatus, status); + } + default List selectListByStatusAndCreateTimeGe(Integer status, LocalDateTime minCreateTime) { return selectList(new LambdaQueryWrapper() .eq(PayOrderExtensionDO::getStatus, status) diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java index 30081c6e8..6de0e2144 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java @@ -16,6 +16,15 @@ public interface RedisKeyConstants { */ String PAY_NOTIFY_LOCK = "pay_notify:lock:%d"; + /** + * 支付钱包的分布式锁 + * + * KEY 格式:pay_wallet:lock:%d + * VALUE 数据格式:HASH // RLock.class:Redisson 的 Lock 锁,使用 Hash 数据结构 + * 过期时间:不固定 + */ + String PAY_WALLET_LOCK = "pay_wallet:lock:%d"; + /** * 支付序号的缓存 * diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/wallet/PayWalletLockRedisDAO.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/wallet/PayWalletLockRedisDAO.java new file mode 100644 index 000000000..1c427278d --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/wallet/PayWalletLockRedisDAO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.pay.dal.redis.wallet; + +import jakarta.annotation.Resource; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Repository; + +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +import static cn.iocoder.yudao.module.pay.dal.redis.RedisKeyConstants.PAY_WALLET_LOCK; + +/** + * 支付钱包的锁 Redis DAO + * + * @author 芋道源码 + */ +@Repository +public class PayWalletLockRedisDAO { + + @Resource + private RedissonClient redissonClient; + + public V lock(Long id, Long timeoutMillis, Callable callable) throws Exception { + String lockKey = formatKey(id); + RLock lock = redissonClient.getLock(lockKey); + try { + lock.lock(timeoutMillis, TimeUnit.MILLISECONDS); + // 执行逻辑 + return callable.call(); + } catch (Exception e) { + throw e; + } finally { + lock.unlock(); + } + } + + private static String formatKey(Long id) { + return String.format(PAY_WALLET_LOCK, id); + } + +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/demo/PayDemoOrderServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/demo/PayDemoOrderServiceImpl.java index 15101d30c..22280eccd 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/demo/PayDemoOrderServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/demo/PayDemoOrderServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.pay.service.demo; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; @@ -14,11 +15,11 @@ import cn.iocoder.yudao.module.pay.dal.dataobject.demo.PayDemoOrderDO; import cn.iocoder.yudao.module.pay.dal.mysql.demo.PayDemoOrderMapper; import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import jakarta.annotation.Resource; import java.time.Duration; import java.time.LocalDateTime; import java.util.HashMap; @@ -111,10 +112,29 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService { @Override public void updateDemoOrderPaid(Long id, Long payOrderId) { - // 校验并获得支付订单(可支付) - PayOrderRespDTO payOrder = validateDemoOrderCanPaid(id, payOrderId); + // 1.1 校验订单是否存在 + PayDemoOrderDO order = payDemoOrderMapper.selectById(id); + if (order == null) { + log.error("[updateDemoOrderPaid][order({}) payOrder({}) 不存在订单,请进行处理!]", id, payOrderId); + throw exception(DEMO_ORDER_NOT_FOUND); + } + // 1.2 校验订单已支付 + if (order.getPayStatus()) { + // 特殊:如果订单已支付,且支付单号相同,直接返回,说明重复回调 + if (ObjectUtil.equals(order.getPayOrderId(), payOrderId)) { + log.warn("[updateDemoOrderPaid][order({}) 已支付,且支付单号相同({}),直接返回]", order, payOrderId); + return; + } + // 异常:支付单号不同,说明支付单号错误 + log.error("[updateDemoOrderPaid][order({}) 支付单不匹配({}),请进行处理!order 数据是:{}]", + order, payOrderId, toJsonString(order)); + throw exception(DEMO_ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); + } - // 更新 PayDemoOrderDO 状态为已支付 + // 2. 校验支付订单的合法性 + PayOrderRespDTO payOrder = validatePayOrderPaid(order, payOrderId); + + // 3. 更新 PayDemoOrderDO 状态为已支付 int updateCount = payDemoOrderMapper.updateByIdAndPayed(id, false, new PayDemoOrderDO().setPayStatus(true).setPayTime(LocalDateTime.now()) .setPayChannelCode(payOrder.getChannelCode())); @@ -124,56 +144,35 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService { } /** - * 校验交易订单满足被支付的条件 + * 校验支付订单的合法性 * - * 1. 交易订单未支付 - * 2. 支付单已支付 - * - * @param id 交易订单编号 + * @param order 交易订单 * @param payOrderId 支付订单编号 - * @return 交易订单 + * @return 支付订单 */ - private PayOrderRespDTO validateDemoOrderCanPaid(Long id, Long payOrderId) { - // 1.1 校验订单是否存在 - PayDemoOrderDO order = payDemoOrderMapper.selectById(id); - if (order == null) { - throw exception(DEMO_ORDER_NOT_FOUND); - } - // 1.2 校验订单未支付 - if (order.getPayStatus()) { - log.error("[validateDemoOrderCanPaid][order({}) 不处于待支付状态,请进行处理!order 数据是:{}]", - id, toJsonString(order)); - throw exception(DEMO_ORDER_UPDATE_PAID_STATUS_NOT_UNPAID); - } - // 1.3 校验支付订单匹配 - if (notEqual(order.getPayOrderId(), payOrderId)) { // 支付单号 - log.error("[validateDemoOrderCanPaid][order({}) 支付单不匹配({}),请进行处理!order 数据是:{}]", - id, payOrderId, toJsonString(order)); - throw exception(DEMO_ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); - } - - // 2.1 校验支付单是否存在 + private PayOrderRespDTO validatePayOrderPaid(PayDemoOrderDO order, Long payOrderId) { + // 1. 校验支付单是否存在 PayOrderRespDTO payOrder = payOrderApi.getOrder(payOrderId).getCheckedData(); if (payOrder == null) { - log.error("[validateDemoOrderCanPaid][order({}) payOrder({}) 不存在,请进行处理!]", id, payOrderId); + log.error("[validatePayOrderPaid][order({}) payOrder({}) 不存在,请进行处理!]", order.getId(), payOrderId); throw exception(PAY_ORDER_NOT_FOUND); } - // 2.2 校验支付单已支付 + // 2.1 校验支付单已支付 if (!PayOrderStatusEnum.isSuccess(payOrder.getStatus())) { - log.error("[validateDemoOrderCanPaid][order({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", - id, payOrderId, toJsonString(payOrder)); + log.error("[validatePayOrderPaid][order({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", + order.getId(), payOrderId, toJsonString(payOrder)); throw exception(DEMO_ORDER_UPDATE_PAID_FAIL_PAY_ORDER_STATUS_NOT_SUCCESS); } - // 2.3 校验支付金额一致 + // 2.1 校验支付金额一致 if (notEqual(payOrder.getPrice(), order.getPrice())) { - log.error("[validateDemoOrderCanPaid][order({}) payOrder({}) 支付金额不匹配,请进行处理!order 数据是:{},payOrder 数据是:{}]", - id, payOrderId, toJsonString(order), toJsonString(payOrder)); + log.error("[validatePayOrderPaid][order({}) payOrder({}) 支付金额不匹配,请进行处理!order 数据是:{},payOrder 数据是:{}]", + order.getId(), payOrderId, toJsonString(order), toJsonString(payOrder)); throw exception(DEMO_ORDER_UPDATE_PAID_FAIL_PAY_PRICE_NOT_MATCH); } - // 2.4 校验支付订单匹配(二次) - if (notEqual(payOrder.getMerchantOrderId(), id.toString())) { - log.error("[validateDemoOrderCanPaid][order({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", - id, payOrderId, toJsonString(payOrder)); + // 2.2 校验支付订单匹配(二次) + if (notEqual(payOrder.getMerchantOrderId(), order.getId().toString())) { + log.error("[validatePayOrderPaid][order({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", + order.getId(), payOrderId, toJsonString(payOrder)); throw exception(DEMO_ORDER_UPDATE_PAID_FAIL_PAY_ORDER_ID_ERROR); } return payOrder; diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java index 8ca043a33..b848b53e3 100755 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java @@ -139,6 +139,16 @@ public interface PayOrderService { */ int syncOrder(LocalDateTime minCreateTime); + /** + * 同步订单的支付状态 + * + * 1. Quietly 表示,即使同步失败,也不会抛出异常 + * 2. 什么时候回出现异常?因为是主动同步,可能和支付渠道的异步回调存在并发冲突,导致抛出异常 + * + * @param id 订单编号 + */ + void syncOrderQuietly(Long id); + /** * 将已过期的订单,状态修改为已关闭 * diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java index 31c1f8b55..b03d236a0 100755 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java @@ -32,12 +32,12 @@ import cn.iocoder.yudao.module.pay.service.app.PayAppService; import cn.iocoder.yudao.module.pay.service.channel.PayChannelService; import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; 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 java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; @@ -163,7 +163,14 @@ public class PayOrderServiceImpl implements PayOrderService { // 4. 如果调用直接支付成功,则直接更新支付单状态为成功。例如说:付款码支付,免密支付时,就直接验证支付成功 if (unifiedOrderResp != null) { - getSelf().notifyOrder(channel, unifiedOrderResp); + try { + getSelf().notifyOrder(channel, unifiedOrderResp); + } catch (Exception e) { + // 兼容 https://gitee.com/zhijiantianya/yudao-cloud/issues/I8SM9H 场景 + // 支付宝或微信扫码之后时,由于 PayClient 是直接返回支付成功,而支付也会有回调,导致存在并发更新问题,此时一般是可以 try catch 直接忽略 + log.warn("[submitOrder][order({}) channel({}) 支付结果({}) 通知时发生异常,可能是并发问题]", + order, channel, unifiedOrderResp, e); + } // 如有渠道错误码,则抛出业务异常,提示用户 if (StrUtil.isNotEmpty(unifiedOrderResp.getChannelErrorCode())) { throw exception(PAY_ORDER_SUBMIT_CHANNEL_ERROR, unifiedOrderResp.getChannelErrorCode(), @@ -431,9 +438,7 @@ public class PayOrderServiceImpl implements PayOrderService { return; } - // TODO 芋艿:应该 new 出来更新 - order.setPrice(payPrice); - orderMapper.updateById(order); + orderMapper.updateById(new PayOrderDO().setId(order.getId()).setPrice(payPrice)); } @Override @@ -462,6 +467,18 @@ public class PayOrderServiceImpl implements PayOrderService { return count; } + @Override + public void syncOrderQuietly(Long id) { + // 1. 查询待支付订单 + List orderExtensions = orderExtensionMapper.selectListByOrderIdAndStatus(id, + PayOrderStatusEnum.WAITING.getStatus()); + + // 2. 遍历执行 + for (PayOrderExtensionDO orderExtension : orderExtensions) { + syncOrder(orderExtension); + } + } + /** * 同步单个支付拓展单 * diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java index b448286b9..56ad4d016 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.service.wallet; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -113,16 +114,28 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { @Override @Transactional(rollbackFor = Exception.class) public void updateWalletRechargerPaid(Long id, Long payOrderId) { - // 1.1 获取钱包充值记录 - PayWalletRechargeDO walletRecharge = walletRechargeMapper.selectById(id); - if (walletRecharge == null) { - log.error("[updateWalletRechargerPaid][钱包充值记录不存在,钱包充值记录 id({})]", id); + // 1.1 校验钱包充值是否存在 + PayWalletRechargeDO recharge = walletRechargeMapper.selectById(id); + if (recharge == null) { + log.error("[updateWalletRechargerPaid][recharge({}) payOrder({}) 不存在充值订单,请进行处理!]", id, payOrderId); throw exception(WALLET_RECHARGE_NOT_FOUND); } // 1.2 校验钱包充值是否可以支付 - PayOrderDO payOrderDO = validateWalletRechargerCanPaid(walletRecharge, payOrderId); + if (recharge.getPayStatus()) { + // 特殊:如果订单已支付,且支付单号相同,直接返回,说明重复回调 + if (ObjectUtil.equals(recharge.getPayOrderId(), payOrderId)) { + log.warn("[updateWalletRechargerPaid][recharge({}) 已支付,且支付单号相同({}),直接返回]", recharge, payOrderId); + return; + } + // 异常:支付单号不同,说明支付单号错误 + log.error("[updateWalletRechargerPaid][recharge({}) 已支付,但是支付单号不同({}),请进行处理!]", recharge, payOrderId); + throw exception(WALLET_RECHARGE_UPDATE_PAID_PAY_ORDER_ID_ERROR); + } - // 2. 更新钱包充值的支付状态 + // 2. 校验支付订单的合法性 + PayOrderDO payOrderDO = validatePayOrderPaid(recharge, payOrderId); + + // 3. 更新钱包充值的支付状态 int updateCount = walletRechargeMapper.updateByIdAndPaid(id, false, new PayWalletRechargeDO().setId(id).setPayStatus(true).setPayTime(LocalDateTime.now()) .setPayChannelCode(payOrderDO.getChannelCode())); @@ -130,14 +143,14 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { throw exception(WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID); } - // 3. 更新钱包余额 + // 4. 更新钱包余额 // TODO @jason:这样的话,未来提现会不会把充值的,也提现走哈。类似先充 100,送 110;然后提现 110; // TODO 需要钱包中加个可提现余额 - payWalletService.addWalletBalance(walletRecharge.getWalletId(), String.valueOf(id), - PayWalletBizTypeEnum.RECHARGE, walletRecharge.getTotalPrice()); + payWalletService.addWalletBalance(recharge.getWalletId(), String.valueOf(id), + PayWalletBizTypeEnum.RECHARGE, recharge.getTotalPrice()); - // 4. 发送订阅消息 - getSelf().sendWalletRechargerPaidMessage(payOrderId, walletRecharge); + // 5. 发送订阅消息 + getSelf().sendWalletRechargerPaidMessage(payOrderId, recharge); } @Async @@ -180,7 +193,6 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { .setReason("想退钱").setPrice(walletRecharge.getPayPrice())); // 4. 更新充值记录退款单号 - // TODO @jaosn:一般新建这种 update 对象,建议是,第一个 set id 属性,容易知道以它为更新 walletRechargeMapper.updateById(new PayWalletRechargeDO().setPayRefundId(payRefundId) .setRefundStatus(WAITING.getStatus()).setId(walletRecharge.getId())); } @@ -267,43 +279,38 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { return wallet; } - private PayOrderDO validateWalletRechargerCanPaid(PayWalletRechargeDO walletRecharge, Long payOrderId) { - // 1.1 校验充值记录的支付状态 - if (walletRecharge.getPayStatus()) { - log.error("[validateWalletRechargerCanPaid][钱包({}) 不处于未支付状态! 钱包数据是:{}]", - walletRecharge.getId(), toJsonString(walletRecharge)); - throw exception(WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID); - } - // 1.2 校验支付订单匹配 - if (notEqual(walletRecharge.getPayOrderId(), payOrderId)) { // 支付单号 - log.error("[validateWalletRechargerCanPaid][钱包({}) 支付单不匹配({}),请进行处理! 钱包数据是:{}]", - walletRecharge.getId(), payOrderId, toJsonString(walletRecharge)); - throw exception(WALLET_RECHARGE_UPDATE_PAID_PAY_ORDER_ID_ERROR); - } - - // 2.1 校验支付单是否存在 + /** + * 校验支付订单的合法性 + * + * @param recharge 充值订单 + * @param payOrderId 支付订单编号 + * @return 支付订单 + */ + private PayOrderDO validatePayOrderPaid(PayWalletRechargeDO recharge, Long payOrderId) { + // 1. 校验支付单是否存在 PayOrderDO payOrder = payOrderService.getOrder(payOrderId); if (payOrder == null) { - log.error("[validateWalletRechargerCanPaid][钱包({}) payOrder({}) 不存在,请进行处理!]", - walletRecharge.getId(), payOrderId); + log.error("[validatePayOrderPaid][充值订单({}) payOrder({}) 不存在,请进行处理!]", + recharge.getId(), payOrderId); throw exception(PAY_ORDER_NOT_FOUND); } - // 2.2 校验支付单已支付 + + // 2.1 校验支付单已支付 if (!PayOrderStatusEnum.isSuccess(payOrder.getStatus())) { - log.error("[validateWalletRechargerCanPaid][钱包({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", - walletRecharge.getId(), payOrderId, toJsonString(payOrder)); + log.error("[validatePayOrderPaid][充值订单({}) payOrder({}) 未支付,请进行处理!payOrder 数据是:{}]", + recharge.getId(), payOrderId, toJsonString(payOrder)); throw exception(WALLET_RECHARGE_UPDATE_PAID_PAY_ORDER_STATUS_NOT_SUCCESS); } - // 2.3 校验支付金额一致 - if (notEqual(payOrder.getPrice(), walletRecharge.getPayPrice())) { - log.error("[validateDemoOrderCanPaid][钱包({}) payOrder({}) 支付金额不匹配,请进行处理!钱包 数据是:{},payOrder 数据是:{}]", - walletRecharge.getId(), payOrderId, toJsonString(walletRecharge), toJsonString(payOrder)); + // 2.2 校验支付金额一致 + if (notEqual(payOrder.getPrice(), recharge.getPayPrice())) { + log.error("[validatePayOrderPaid][充值订单({}) payOrder({}) 支付金额不匹配,请进行处理!钱包 数据是:{},payOrder 数据是:{}]", + recharge.getId(), payOrderId, toJsonString(recharge), toJsonString(payOrder)); throw exception(WALLET_RECHARGE_UPDATE_PAID_PAY_PRICE_NOT_MATCH); } - // 2.4 校验支付订单的商户订单匹配 - if (notEqual(payOrder.getMerchantOrderId(), walletRecharge.getId().toString())) { - log.error("[validateDemoOrderCanPaid][钱包({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", - walletRecharge.getId(), payOrderId, toJsonString(payOrder)); + // 2.3 校验支付订单的商户订单匹配 + if (notEqual(payOrder.getMerchantOrderId(), recharge.getId().toString())) { + log.error("[validatePayOrderPaid][充值订单({}) 支付单不匹配({}),请进行处理!payOrder 数据是:{}]", + recharge.getId(), payOrderId, toJsonString(payOrder)); throw exception(WALLET_RECHARGE_UPDATE_PAID_PAY_ORDER_ID_ERROR); } return payOrder; diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index b844e3769..cc9d570a2 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -2,17 +2,20 @@ package cn.iocoder.yudao.module.pay.service.wallet; import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO; import cn.iocoder.yudao.module.pay.dal.mysql.wallet.PayWalletMapper; +import cn.iocoder.yudao.module.pay.dal.redis.wallet.PayWalletLockRedisDAO; import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; import cn.iocoder.yudao.module.pay.service.refund.PayRefundService; import cn.iocoder.yudao.module.pay.service.wallet.bo.WalletTransactionCreateReqBO; import jakarta.annotation.Resource; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -32,10 +35,17 @@ import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYM */ @Service @Slf4j -public class PayWalletServiceImpl implements PayWalletService { +public class PayWalletServiceImpl implements PayWalletService { + + /** + * 通知超时时间,单位:毫秒 + */ + public static final long UPDATE_TIMEOUT_MILLIS = 120 * DateUtils.SECOND_MILLIS; @Resource private PayWalletMapper walletMapper; + @Resource + private PayWalletLockRedisDAO lockRedisDAO; @Resource @Lazy // 延迟加载,避免循环依赖 @@ -121,75 +131,87 @@ public class PayWalletServiceImpl implements PayWalletService { } @Override + @Transactional(rollbackFor = Exception.class) + @SneakyThrows public PayWalletTransactionDO reduceWalletBalance(Long walletId, Long bizId, PayWalletBizTypeEnum bizType, Integer price) { // 1. 获取钱包 PayWalletDO payWallet = getWallet(walletId); if (payWallet == null) { - log.error("[reduceWalletBalance],用户钱包({})不存在.", walletId); + log.error("[reduceWalletBalance][用户钱包({})不存在]", walletId); throw exception(WALLET_NOT_FOUND); } - // 2.1 扣除余额 - int updateCounts; - switch (bizType) { - case PAYMENT: { - updateCounts = walletMapper.updateWhenConsumption(payWallet.getId(), price); - break; + // 2. 加锁,更新钱包余额(目的:避免钱包流水的并发更新时,余额变化不连贯) + return lockRedisDAO.lock(walletId, UPDATE_TIMEOUT_MILLIS, () -> { + // 2. 扣除余额 + int updateCounts; + switch (bizType) { + case PAYMENT: { + updateCounts = walletMapper.updateWhenConsumption(payWallet.getId(), price); + break; + } + case RECHARGE_REFUND: { + updateCounts = walletMapper.updateWhenRechargeRefund(payWallet.getId(), price); + break; + } + default: { + // TODO 其它类型待实现 + throw new UnsupportedOperationException("待实现"); + } } - case RECHARGE_REFUND: { - updateCounts = walletMapper.updateWhenRechargeRefund(payWallet.getId(), price); - break; + if (updateCounts == 0) { + throw exception(WALLET_BALANCE_NOT_ENOUGH); } - default: { - // TODO 其它类型待实现 - throw new UnsupportedOperationException("待实现"); - } - } - if (updateCounts == 0) { - throw exception(WALLET_BALANCE_NOT_ENOUGH); - } - // 2.2 生成钱包流水 - Integer afterBalance = payWallet.getBalance() - price; - WalletTransactionCreateReqBO bo = new WalletTransactionCreateReqBO().setWalletId(payWallet.getId()) - .setPrice(-price).setBalance(afterBalance).setBizId(String.valueOf(bizId)) - .setBizType(bizType.getType()).setTitle(bizType.getDescription()); - return walletTransactionService.createWalletTransaction(bo); + + // 3. 生成钱包流水 + Integer afterBalance = payWallet.getBalance() - price; + WalletTransactionCreateReqBO bo = new WalletTransactionCreateReqBO().setWalletId(payWallet.getId()) + .setPrice(-price).setBalance(afterBalance).setBizId(String.valueOf(bizId)) + .setBizType(bizType.getType()).setTitle(bizType.getDescription()); + return walletTransactionService.createWalletTransaction(bo); + }); } @Override + @Transactional(rollbackFor = Exception.class) + @SneakyThrows public PayWalletTransactionDO addWalletBalance(Long walletId, String bizId, PayWalletBizTypeEnum bizType, Integer price) { - // 1.1 获取钱包 + // 1. 获取钱包 PayWalletDO payWallet = getWallet(walletId); if (payWallet == null) { - log.error("[addWalletBalance],用户钱包({})不存在.", walletId); + log.error("[addWalletBalance][用户钱包({})不存在]", walletId); throw exception(WALLET_NOT_FOUND); } - // 1.2 更新钱包金额 - switch (bizType) { - case PAYMENT_REFUND: { // 退款更新 - walletMapper.updateWhenConsumptionRefund(payWallet.getId(), price); - break; - } - case RECHARGE: { // 充值更新 - walletMapper.updateWhenRecharge(payWallet.getId(), price); - break; - } - case UPDATE_BALANCE: // 更新余额 - walletMapper.updateWhenRecharge(payWallet.getId(), price); - break; - default: { - // TODO 其它类型待实现 - throw new UnsupportedOperationException("待实现"); - } - } - // 2. 生成钱包流水 - WalletTransactionCreateReqBO transactionCreateReqBO = new WalletTransactionCreateReqBO() - .setWalletId(payWallet.getId()).setPrice(price).setBalance(payWallet.getBalance() + price) - .setBizId(bizId).setBizType(bizType.getType()).setTitle(bizType.getDescription()); - return walletTransactionService.createWalletTransaction(transactionCreateReqBO); + // 2. 加锁,更新钱包余额(目的:避免钱包流水的并发更新时,余额变化不连贯) + return lockRedisDAO.lock(walletId, UPDATE_TIMEOUT_MILLIS, () -> { + // 2. 更新钱包金额 + switch (bizType) { + case PAYMENT_REFUND: { // 退款更新 + walletMapper.updateWhenConsumptionRefund(payWallet.getId(), price); + break; + } + case RECHARGE: { // 充值更新 + walletMapper.updateWhenRecharge(payWallet.getId(), price); + break; + } + case UPDATE_BALANCE: // 更新余额 + walletMapper.updateWhenRecharge(payWallet.getId(), price); + break; + default: { + // TODO 其它类型待实现 + throw new UnsupportedOperationException("待实现"); + } + } + + // 3. 生成钱包流水 + WalletTransactionCreateReqBO transactionCreateReqBO = new WalletTransactionCreateReqBO() + .setWalletId(payWallet.getId()).setPrice(price).setBalance(payWallet.getBalance() + price) + .setBizId(bizId).setBizType(bizType.getType()).setTitle(bizType.getDescription()); + return walletTransactionService.createWalletTransaction(transactionCreateReqBO); + }); } @Override diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletTransactionServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletTransactionServiceImpl.java index 37b4020bd..6d163163d 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletTransactionServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletTransactionServiceImpl.java @@ -87,8 +87,6 @@ public class PayWalletTransactionServiceImpl implements PayWalletTransactionServ @Override public AppPayWalletTransactionSummaryRespVO getWalletTransactionSummary(Long userId, Integer userType, LocalDateTime[] createTime) { PayWalletDO wallet = payWalletService.getOrCreateWallet(userId, userType); - AppPayWalletTransactionSummaryRespVO summary = new AppPayWalletTransactionSummaryRespVO() - .setTotalExpense(1).setTotalIncome(100); return new AppPayWalletTransactionSummaryRespVO() .setTotalExpense(payWalletTransactionMapper.selectPriceSum(wallet.getId(), TYPE_EXPENSE, createTime)) .setTotalIncome(payWalletTransactionMapper.selectPriceSum(wallet.getId(), TYPE_INCOME, createTime)); diff --git a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java index 9ad4b260f..c81dc2e4e 100644 --- a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java +++ b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java @@ -266,7 +266,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient register(@RequestBody @Valid AuthRegisterReqVO registerReqVO) { + return success(authService.register(registerReqVO)); + } + // ========== 短信登录相关 ========== @PostMapping("/sms-login") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java index df54f5ee2..43b1ea9a4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java @@ -4,16 +4,15 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; 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 @@ -66,4 +65,4 @@ public class AuthLoginReqVO { return socialType == null || StrUtil.isNotEmpty(socialState); } -} +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java new file mode 100644 index 000000000..fb88a077e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.controller.admin.auth.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +@Schema(description = "管理后台 - Register Request VO") +@Data +public class AuthRegisterReqVO { + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") + @NotBlank(message = "用户账号不能为空") + @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 = "芋艿") + @NotBlank(message = "用户昵称不能为空") + @Size(max = 30, message = "用户昵称长度不能超过 30 个字符") + private String nickname; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @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 = AuthLoginReqVO.CodeEnableGroup.class) + private String captchaVerification; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java index e5730d285..e66ccec66 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java @@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo; import cn.iocoder.yudao.framework.common.validation.Mobile; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import jakarta.validation.constraints.NotEmpty; - @Schema(description = "管理后台 - 短信验证码的登录 Request VO") @Data @NoArgsConstructor diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java index b2c4455a0..e975e7d76 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java @@ -4,14 +4,13 @@ import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.framework.common.validation.Mobile; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; 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 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java index da2247008..b0c2dac66 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java @@ -3,14 +3,13 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo; import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; 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 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java index 67855d43e..05e000384 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.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.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,6 +33,7 @@ public class AppDictDataController { @GetMapping("/type") @Operation(summary = "根据字典类型查询字典数据信息") @Parameter(name = "type", description = "字典类型", required = true, example = "common_status") + @PermitAll public CommonResult> getDictDataListByType(@RequestParam("type") String type) { List list = dictDataService.getDictDataList( CommonStatusEnum.ENABLE.getStatus(), type); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/ip/AppAreaController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/ip/AppAreaController.java index 54b0e87db..b07add454 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/ip/AppAreaController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/ip/AppAreaController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; import cn.iocoder.yudao.module.system.controller.app.ip.vo.AppAreaNodeRespVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,6 +26,7 @@ public class AppAreaController { @GetMapping("/tree") @Operation(summary = "获得地区树") + @PermitAll public CommonResult> getAreaTree() { Area area = AreaUtils.getArea(Area.ID_CHINA); Assert.notNull(area, "获取不到中国"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 7763acba6..9e4005c46 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; - import jakarta.validation.Valid; /** @@ -70,4 +69,12 @@ public interface AdminAuthService { */ AuthLoginRespVO refreshToken(String refreshToken); + /** + * 用户注册 + * + * @param createReqVO 注册用户 + * @return 注册结果 + */ + AuthLoginRespVO register(AuthRegisterReqVO createReqVO); + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index e387c247e..45b9ee1f5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -27,12 +27,12 @@ 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 jakarta.annotation.Resource; +import jakarta.validation.Validator; 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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -116,13 +116,13 @@ public class AdminAuthServiceImpl implements AdminAuthService { throw exception(AUTH_MOBILE_NOT_EXISTS); } // 发送验证码 - smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())).checkError(); + 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(); + smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), getClientIP())).checkError(); // 获得用户信息 AdminUserDO user = userService.getUserByMobile(reqVO.getMobile()); @@ -247,4 +247,33 @@ public class AdminAuthServiceImpl implements AdminAuthService { return UserTypeEnum.ADMIN; } + @Override + public AuthLoginRespVO register(AuthRegisterReqVO registerReqVO) { + // 1. 校验验证码 + validateCaptcha(registerReqVO); + + // 2. 校验用户名是否已存在 + Long userId = userService.registerUser(registerReqVO); + + // 3. 创建 Token 令牌,记录登录日志 + return createTokenAfterLoginSuccess(userId, registerReqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); + } + + @VisibleForTesting + void validateCaptcha(AuthRegisterReqVO 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()) { + throw exception(AUTH_REGISTER_CAPTCHA_CODE_ERROR, response.getRepMsg()); + } + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java index ba86165c3..7095193ef 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java @@ -280,7 +280,8 @@ public class SocialClientServiceImpl implements SocialClientService { } @Override - @Cacheable(cacheNames = RedisKeyConstants.WXA_SUBSCRIBE_TEMPLATE, key = "#userType", condition = "#result != null") + @Cacheable(cacheNames = RedisKeyConstants.WXA_SUBSCRIBE_TEMPLATE, key = "#userType", + unless = "#result == null") public List getSubscribeTemplateList(Integer userType) { WxMaService service = getWxMaService(userType); try { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 1fd62f892..15564408d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.user; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; @@ -10,8 +11,8 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRe import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; - import jakarta.validation.Valid; + import java.io.InputStream; import java.util.Collection; import java.util.HashMap; @@ -33,6 +34,14 @@ public interface AdminUserService { */ Long createUser(@Valid UserSaveReqVO createReqVO); + /** + * 注册用户 + * + * @param registerReqVO 用户信息 + * @return 用户编号 + */ + Long registerUser(@Valid AuthRegisterReqVO registerReqVO); + /** * 修改用户 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 7b41ea995..adb458b5d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; @@ -115,6 +116,26 @@ public class AdminUserServiceImpl implements AdminUserService { return user.getId(); } + @Override + public Long registerUser(AuthRegisterReqVO registerReqVO) { + // 1.1 校验账户配合 + tenantService.handleTenantInfo(tenant -> { + long count = userMapper.selectCount(); + if (count >= tenant.getAccountCount()) { + throw exception(USER_COUNT_MAX, tenant.getAccountCount()); + } + }); + // 1.2 校验正确性 + validateUserForCreateOrUpdate(null, registerReqVO.getUsername(), null, null, null, null); + + // 2. 插入用户 + AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class); + user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 + user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码 + userMapper.insert(user); + return user.getId(); + } + @Override @Transactional(rollbackFor = Exception.class) @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}", @@ -327,7 +348,7 @@ public class AdminUserServiceImpl implements AdminUserService { } private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String mobile, String email, - Long deptId, Set postIds) { + Long deptId, Set postIds) { // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 return DataPermissionUtils.executeIgnore(() -> { // 校验用户存在 diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java index 1335068d9..79ed72166 100644 --- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImplTest.java @@ -193,7 +193,6 @@ public class AdminAuthServiceImplTest extends BaseDbUnitTest { // mock 方法(用户信息) AdminUserDO user = randomPojo(AdminUserDO.class); when(userService.getUserByMobile(eq(mobile))).thenReturn(user); - when(smsCodeApi.sendSmsCode(any())).thenReturn(success(true)); // 调用 authService.sendSmsCode(reqVO); @@ -211,13 +210,13 @@ public class AdminAuthServiceImplTest extends BaseDbUnitTest { String mobile = randomString(); String code = randomString(); AuthSmsLoginReqVO reqVO = new AuthSmsLoginReqVO(mobile, code); - // mock 方法(校验验证码) - when(smsCodeApi.useSmsCode(argThat(reqDTO -> { - assertEquals(mobile, reqDTO.getMobile()); - assertEquals(code, reqDTO.getCode()); - assertEquals(SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), reqDTO.getScene()); + // mock 方法(验证码) + when(smsCodeApi.useSmsCode(argThat(smsCodeUseReqDTO -> { + assertEquals(mobile, smsCodeUseReqDTO.getMobile()); + assertEquals(code, smsCodeUseReqDTO.getCode()); + assertEquals(SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), smsCodeUseReqDTO.getScene()); return true; - }))).thenReturn(success(true)); + }))).thenReturn(success(null)); // mock 方法(用户信息) AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L)); when(userService.getUserByMobile(eq(mobile))).thenReturn(user); diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java index 48a68e43f..30fbfe4ae 100644 --- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java @@ -3,18 +3,16 @@ package cn.iocoder.yudao.module.system.service.notify; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO; import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper; -import com.baomidou.mybatisplus.annotation.DbType; +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; -import jakarta.annotation.Resource; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -29,10 +27,10 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static org.junit.jupiter.api.Assertions.*; /** -* {@link NotifyMessageServiceImpl} 的单元测试类 -* -* @author 芋道源码 -*/ + * {@link NotifyMessageServiceImpl} 的单元测试类 + * + * @author 芋道源码 + */ @Import(NotifyMessageServiceImpl.class) public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @@ -72,40 +70,40 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @Test public void testGetNotifyMessagePage() { - // mock 数据 - NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 - o.setUserId(1L); - o.setUserType(UserTypeEnum.ADMIN.getValue()); - o.setTemplateCode("test_01"); - o.setTemplateType(10); - o.setCreateTime(buildTime(2022, 1, 2)); - o.setTemplateParams(randomTemplateParams()); - }); - notifyMessageMapper.insert(dbNotifyMessage); - // 测试 userId 不匹配 - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); - // 测试 userType 不匹配 - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); - // 测试 templateCode 不匹配 - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateCode("test_11"))); - // 测试 templateType 不匹配 - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateType(20))); - // 测试 createTime 不匹配 - notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setCreateTime(buildTime(2022, 2, 1)))); - // 准备参数 - NotifyMessagePageReqVO reqVO = new NotifyMessagePageReqVO(); - reqVO.setUserId(1L); - reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); - reqVO.setTemplateCode("est_01"); - reqVO.setTemplateType(10); - reqVO.setCreateTime(buildBetweenTime(2022, 1, 1, 2022, 1, 10)); + // mock 数据 + NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 + o.setUserId(1L); + o.setUserType(UserTypeEnum.ADMIN.getValue()); + o.setTemplateCode("test_01"); + o.setTemplateType(10); + o.setCreateTime(buildTime(2022, 1, 2)); + o.setTemplateParams(randomTemplateParams()); + }); + notifyMessageMapper.insert(dbNotifyMessage); + // 测试 userId 不匹配 + notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserId(2L))); + // 测试 userType 不匹配 + notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setUserType(UserTypeEnum.MEMBER.getValue()))); + // 测试 templateCode 不匹配 + notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateCode("test_11"))); + // 测试 templateType 不匹配 + notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setTemplateType(20))); + // 测试 createTime 不匹配 + notifyMessageMapper.insert(cloneIgnoreId(dbNotifyMessage, o -> o.setCreateTime(buildTime(2022, 2, 1)))); + // 准备参数 + NotifyMessagePageReqVO reqVO = new NotifyMessagePageReqVO(); + reqVO.setUserId(1L); + reqVO.setUserType(UserTypeEnum.ADMIN.getValue()); + reqVO.setTemplateCode("est_01"); + reqVO.setTemplateType(10); + reqVO.setCreateTime(buildBetweenTime(2022, 1, 1, 2022, 1, 10)); - // 调用 - PageResult pageResult = notifyMessageService.getNotifyMessagePage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0)); + // 调用 + PageResult pageResult = notifyMessageService.getNotifyMessagePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0)); } @Test @@ -158,7 +156,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @Test public void testGetUnreadNotifyMessageList() { - SqlConstants.init(DbType.MYSQL); // mock 数据 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 o.setUserId(1L); @@ -187,7 +184,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @Test public void testGetUnreadNotifyMessageCount() { - SqlConstants.init(DbType.MYSQL); // mock 数据 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 o.setUserId(1L); diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java index ef9d2ff23..093a5aeff 100644 --- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.system.service.sms; import cn.hutool.core.map.MapUtil; -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; @@ -10,13 +9,12 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.system.framework.sms.config.SmsCodeProperties; -import com.baomidou.mybatisplus.annotation.DbType; +import jakarta.annotation.Resource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; -import jakarta.annotation.Resource; import java.time.Duration; import java.time.LocalDateTime; @@ -61,8 +59,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); }); - // mock 方法 - SqlConstants.init(DbType.MYSQL); // 调用 smsCodeService.sendSmsCode(reqDTO); @@ -88,8 +84,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); }); - // mock 方法 - SqlConstants.init(DbType.MYSQL); // 调用,并断言异常 assertServiceException(() -> smsCodeService.sendSmsCode(reqDTO), @@ -107,8 +101,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); }); - // mock 方法 - SqlConstants.init(DbType.MYSQL); when(smsCodeProperties.getSendFrequency()).thenReturn(Duration.ofMillis(0)); // 调用,并断言异常 @@ -123,8 +115,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(randomEle(SmsSceneEnum.values()).getScene()); }); - // mock 数据 - SqlConstants.init(DbType.MYSQL); smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> { o.setMobile(reqDTO.getMobile()).setScene(reqDTO.getScene()) .setCode(reqDTO.getCode()).setUsed(false); @@ -146,8 +136,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(randomEle(SmsSceneEnum.values()).getScene()); }); - // mock 数据 - SqlConstants.init(DbType.MYSQL); smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false))); @@ -162,8 +150,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(randomEle(SmsSceneEnum.values()).getScene()); }); - // mock 数据 - SqlConstants.init(DbType.MYSQL); // 调用,并断言异常 assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO), @@ -177,8 +163,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(randomEle(SmsSceneEnum.values()).getScene()); }); - // mock 数据 - SqlConstants.init(DbType.MYSQL); smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false) .setCreateTime(LocalDateTime.now().minusMinutes(6)))); @@ -195,8 +179,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { o.setMobile("15601691300"); o.setScene(randomEle(SmsSceneEnum.values()).getScene()); }); - // mock 数据 - SqlConstants.init(DbType.MYSQL); smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(true) .setCreateTime(LocalDateTime.now())));