diff --git a/.gitignore b/.gitignore index b28673a4e..a482c7f6a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ out/ target/ build/ logs/ +# jrebel +rebel.xml diff --git a/Dockerfile b/Dockerfile index 9785b4c80..e6f9ba72c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,14 +2,20 @@ FROM registry.cn-beijing.aliyuncs.com/xxm1995/java8 # 作者信息 -MAINTAINER xxm1995@outlook.com +MAINTAINER bootx # 时区设置 ENV TZ=Asia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -# jvm启动参数, 启动内存256M,最大内存1G,使用G1垃圾回收器 -ENV JAVA_OPTS="-Xms256m -Xmx1G -XX:+UseG1GC -Djava.security.egd=file:/dev/./urandom" +# 启动命令 +ENV JAVA_COMM="-Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8" +# 启动选项配置 +ENV JAVA_OPTS="" +# Agent配置 +ENV JAVA_AGENT="" +# 参数配置 +ENV JAVA_ARGS="" # 工作目录 WORKDIR / @@ -21,4 +27,5 @@ EXPOSE 9999 ADD bootx-start/target/bootx-start.jar bootx-start.jar # 执行启动命令 -CMD java $JAVA_OPTS -jar bootx-start.jar +CMD java -jar $JAVA_OPTS $JAVA_AGENT $JAVA_COMM bootx-start.jar $JAVA_ARGS + diff --git a/README.md b/README.md index 2b8a1e094..01a801841 100644 --- a/README.md +++ b/README.md @@ -1,91 +1,82 @@ -# Bootx-Platform (v1.2.3) +# Bootx-Platform (v1.3.6-园博园)

star - Build Status + Build Status Build Status - Downloads + Downloads

## 🙏🙏🙏 求star呀,走过路过留个star吧,非常非常感谢。🙏🙏🙏 ## 🍈项目介绍 - -基于Spring Boot框架打造,针对单体式应用进行专门设计,提供整套服务模块,努力为打造全方位企业级开发解决方案, +> 基于Spring Boot框架打造,针对单体式应用进行专门设计,提供整套服务模块,努力为打造全方位企业级开发解决方案, 致力将开源版打造成超越商业版后台管理框架的项目。 - 单体版本使用Spring Boot相关技术栈 -- 分布式版本使用Spring Cloud Alibaba技术栈 -- vue2使用 [ANTD PRO VUE](https://pro.antdv.com/) 作为脚手架 - vue3使用 [Vben-Admin](https://vvbin.cn/doc-next/) 作为脚手架 - 可视化大屏使用 [Go-VIew](https://gitee.com/dromara/go-view) 作为基础框架 - 移动端使用 [Taro](https://taro.jd.com/)、[NutUI](https://nutui.jd.com/) vue3+TS为技术栈。 -## 🍒文档 +## 🍁 Bootx 项目合集 +- Bootx-Platform:单体版脚手架 [Gitee地址](https://gitee.com/bootx/bootx-platform) +- Bootx-Cloud:微服务版脚手架 [Gitee地址](https://gitee.com/bootx/bootx-cloud) +- dax-pay:开源支付系统 [Gitee地址](https://gitee.com/bootx/dax-pay) +- bpm-plus:协同办公系统 [Gitee地址](https://gitee.com/bootx/bpm-plus) +- mybatis-table-modify:数据表结构管理 [Gitee地址](https://gitee.com/bootx/mybatis-table-modify) + +## 📚资料和文档 -- 系统演示地址:[管理平台(vue2)](http://web.platform.bootx.cn/)、[管理平台(vue3)](http://v3.platform.bootx.cn/)、[可视化大屏](http://visualization.platform.bootx.cn/) -- 前端项目地址:[前端项目(vue2)](https://gitee.com/bootx/bootx-platform-ui)、[前端项目(vue3)](https://gitee.com/bootx/bootx-platform-vue3)、[可视化大屏](https://gitee.com/bootx/bootx-platform-visualization) +- 系统演示地址:[管理平台(vue3)](https://admin.platform.demo.bootx.cn/)、[可视化大屏](https://visualization.platform.demo.bootx.cn/) +- 前端项目地址:[前端项目(vue3)](https://gitee.com/bootx/bootx-platform-vue3)、[可视化大屏](https://gitee.com/bootx/bootx-platform-visualization)、[前端项目(vue2只维护不再更新)](https://gitee.com/bootx/bootx-platform-ui) - 移动端项目地址:[移动端项目(taro+vue3+ts)](https://gitee.com/xucun/bootx-platform-mobile) -- 日志收集:[ELK](http://elk.dev.bootx.cn:5601/app/discove)、[PlumeLog](http://platform.dev.bootx.cn:8080/plumelog/#/) +- 日志收集:[PlumeLog](http://139.198.29.219:8891/) - 项目文档:[项目文档(GITEE)](https://bootx.gitee.io/)、[项目文档(备用)](https://doc.bootx.cn/) - 更新日志:[更新日志](./_doc/ChangeLog.md) + +> 功能更新计划: [任务池](./_doc/Task.md) +> +> 历史更新记录: [更新日志](./_doc/ChangeLog.md) + ## 🛠️功能亮点 低代码可视化平台,基于`GoView`开发,可以通过托拉拽来生成常用的大屏,可以适用于需要快速开发各种数据看板的场景。 ![](https://oscimg.oschina.net/oscnet/up-43cd6c0ac952c938863db303d0c2e644827.png) -集成最新版本的Flowable 6.7.2 工作流,并基于Bpmn.js定制流程设计器,相较于自带modeler更贴近业务和易用,通过关联动态表单可通过托拉拽实现业务审批流的业务 -![](https://oscimg.oschina.net/oscnet/up-22b8de0f4951ee6165e2ae604ad77b0af44.png) - 支持支付宝、微信、聚合支付、现金支付、储值卡支付、钱包,对各种支付方式抽象成策略类,通过模板模式进行串通,方便扩展新的支付方式或业务 -结算台演示地址:[http://web.platform.bootx.cn/cashier](http://web.platform.bootx.cn/cashier) - ![](https://oscimg.oschina.net/oscnet/up-9f0044b76071d5a7f598ceab591c5fedb02.png) ## 🍎特色功能 - 支持单通道支付、聚合支付、组合支付、部分和全部退款等支付功能 - 支持支付宝、微信、云闪付、现金、钱包、储值卡等多种支付方式 - 基于Sa-Token定制,支持对多终端、多登录方式进行分别的管理 -- 针对各类敏感信息,可以通过添加注解实现返回时自动脱敏 -- 针对重要信息,可以通过添加注解,实现在数据库中保密存储,配合数据脱敏使用可以更好的保护系统数据的安全 -- 支持多种范围的数据权限控制,如只能查看自己、只能查询指定部门、用户、可以查询全部的数据等等 -- 支持嵌套查询的超级查询构造器,自动生成对应条件SQL语句,也支持普通查询器,免去大量重复代码的编写 -- 提供移动端开发脚手架,方便开发H5与各种小程序 -- 支持通过ELK和轻量级PlumeLog来管理项目日志,以适应不同的场景 - 支持通过微信、钉钉、企业微信等第三方开放平台进行扫码登录 - 支持站内信、微信、钉钉、企业微信、微信公众号的消息推送 - 支持微信自定义菜单、素材、消息模板等资源的管理 -- 集成Flowable+Bpmn.js工作流全家桶,方便OA相关功能的开发 - 基于GoView打造低代码可视化大屏平台,快速生成各种数据展板和大屏 -## 🚅 路线图 -- 功能 - - [x] 基于`GoView`的低代码可视化大屏平台 (90%) - - [ ] Vue3工作流功能移植除流程设计器 - - [ ] 短信通知 -## 🥂 Quick Start - -[后端](https://bootx.gitee.io/doc/overview/config/项目启动.html#后端启动) - -Vue2前端: [Vue2前端启动流程](https://bootx.gitee.io/doc/overview/config/%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8.html#环境准备) +## 🧭 项目Maven坐标 +> 项目各模块都已经发布到maven中央仓库中,进行二开时可以对不进行更改的模块,使用Maven方式进行引入,方便后续进行版本升级 -Vue3后端: [Vue3前端启动流程](https://bootx.gitee.io/doc/overview/config/%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8.html#环境准备-1) - -可视化大屏: [可视化大屏启动流程](http://) +例子: +```xml + + cn.bootx.platform + service.iam + ${latest.version} + +``` -**中间件配置** +## 🥂 Quick Start -| 组件 | 是否必须配置 | 备注 | -|----------|--------|---------------------------------------------| -| MySQL | 是 | 不设置无法启动 | -| Redis | 是 | 不设置启动后无法正常使用 | -| RabbitMQ | 否 | 支付消息通知在使用 | -| MongoDB | 否 | 默认审计日志和文件管理使用持久化方式为Mono,可在配置文件中配置切换成其他持久化方式 | -| plumelog | 是 | 默认项目自带lite版plumelog,不需要额外配置中间件,直接就可以使用 | +- Spring Boot后端: [后端启动流程](https://bootx.gitee.io/doc/overview/config/项目启动.html#后端启动) +- 后端: [Vu前端启动流程](https://bootx.gitee.io/doc/overview/config/%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8.html#环境准备-1) +- 可视化大屏: [可视化大屏启动流程]() +- 小程序移动端: [小程序启动流程]() -## 🥞项目整体结构 +## 🥞项目模块结构 ```lua bootx-platform ├── _config -- 项目相关配置 @@ -110,10 +101,8 @@ bootx-platform ├── common-header-holder -- 请求头获取工具 ├── common-idempotency -- 幂等控制组件 ├── common-jackson -- Json序列化配置 - ├── common-lock -- 分布式锁 ├── common-log -- 日志配置 ├── common-mongo -- MongoDB配置 - ├── common-mqtt -- mqtt配置(停用) ├── common-mybatis-plus -- Mybatis Plus扩展 ├── common-rabbitmq -- rabbitmq消息队列 ├── common-redis-client -- Redis客户端封装和配置 @@ -127,105 +116,23 @@ bootx-platform ├── bootx-services -- 业务服务模块 ├── service-baseapi -- 基础api功能服务 ├── service-iam -- 身份识别与访问管理 + ├── service-miniapp -- 小程序服务 ├── service-notice -- 消息通知服务 - ├── service-office -- 办公服务 ├── service-visualization -- 可视化大屏管理 - ├── service-payment -- 支付服务 ├── bootx-start -- 启动模块 ``` -## 🍇模块结构说明 - -**模块分包设计** - -以`service-iam`举例 -```lua -service-iam - ├── code -- 常量包 - ├── controller -- 控制器 - ├── core -- 功能核心 - ├── exception -- 异常 - ├── dto -- 业务对象 - ├── mq -- 消息通知处理 - ├── task -- 定时任务 - ├── param -- 请求参数包 - ├── util -- 内部工具包 - ├── IamApplication -- 启动类 -``` -**core核心包业务代码分包** - -```lua -├───core - ├── business -- 业务模块 - ├── convert -- 实体类转换 - ├── dao -- 持久化类 - ├── entity -- 数据库实体 - ├── service -- 服务类 -``` - -## 🍌项目展示 - -Vue3版本管理端 -![输入图片说明](https://oscimg.oschina.net/oscnet/up-f073982714da2b2151090f0c1cbf3680159.png) - -支付结算台 - -![简单支付](https://oscimg.oschina.net/oscnet/up-2afe305355141ae9398e3b056052596e1f8.png) - -工作流 - -![工作流](https://oscimg.oschina.net/oscnet/up-6a021b64002a32c69c9f4c12b1c047f6b5c.png) - -微信自定义菜单 - -![微信自定义菜单](https://oscimg.oschina.net/oscnet/up-09e7cf13093c4b77065829582caeb6647cd.png) - -动态表单 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-8384daeef614b3beae7641a46880273d10e.png) - -邮件发送 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-650a65461bb5123f9055e75fcdf92c83356.png) - -超级查询器 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-b888976cccac630663bf55cb7689ab39333.png) - -富文本编辑器 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-1e771f954859081e4151c8333245536b64c.png) - -PlumeLog 轻量级日志管理 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-198d0b0c09c2087e7d22506e58ae75cc536.png) - -ELK日志 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-31d6dbbccdaf8dcfc1cad8e24c7b7f80602.png) - -菜单管理 - -![输入图片说明](https://oscimg.oschina.net/oscnet/up-97b10943138e572258ac1cb1f31365f72db.png) - ## 🥪 关于我们 -微信扫码加入交流群,或添加微信号:`xxxx` 邀请进群 - - -钉钉扫码加入钉钉交流群 - - QQ扫码加入QQ交流群

- - +

## 🍻 鸣谢 感谢 JetBrains 提供的免费开源 License: -[![JetBrains](https://oscimg.oschina.net/oscnet/up-4aab9fa8bc769295b48c888d93e71320d93.png)](https://www.jetbrains.com/?from=bootx) +[![JetBrains](_doc/images/jetbrains.png)](https://www.jetbrains.com/?from=bootx) 感谢其他提供灵感和思路的开源项目 diff --git a/_config/elk/es/docker-compose.yml b/_config/elk/es/docker-compose.yml deleted file mode 100644 index b2ac9e017..000000000 --- a/_config/elk/es/docker-compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: '3.0' -services: - es: - image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2 - container_name: es - environment: - - node.name=es - - discovery.type=single-node - - "ES_JAVA_OPTS=-Xms2048m -Xmx4096m" - ulimits: - memlock: - soft: -1 - hard: -1 - volumes: - - data01:/usr/share/elasticsearch/data - - /home/ubuntu/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins - ports: - - 9200:9200 - networks: - - elastic - - kibana: - image: kibana:7.13.2 - container_name: kibana - environment: - - ELASTICSEARCH_HOSTS=http://es:9200 - # 需要将Kibana配置文件中的小写转换成大写,然后这个才能用于变量,才能被设置到 - - I18N_LOCALE=zh-CN - - xpack.monitoring.ui.container.elasticsearch.enabled=false - ports: - - "5601:5601" - networks: - - elastic - -volumes: - data01: - driver: local - -networks: - elastic: - driver: bridge \ No newline at end of file diff --git a/_config/elk/filebeat/README.md b/_config/elk/filebeat/README.md deleted file mode 100644 index e8cc4b680..000000000 --- a/_config/elk/filebeat/README.md +++ /dev/null @@ -1,51 +0,0 @@ -filebeat输出到ES配置 -```yaml -filebeat.inputs: -- type: log - enabled: true - paths: - - /data/logs/bootx-platform/*.json -# 输出到es -output.elasticsearch: - hosts: localhost:9200 - # 索引名 - index: "bootx-platform-logs" -# 设置 -setup: -# 自定义索引的话必须设置 - template: - name: "filebeat" - pattern: "filebeat-*" - ilm.enabled: false - -processors: - - decode_json_fields: - fields: ['message'] #要进行解析的字段 - target: "" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下 - - drop_fields: - fields: ["log","ecs","agent","input","@metadata","message"] #删除无用的字段 -``` - -日志索引格式 -```json -{ - "mappings": { - "properties":{ - "@timestamp":{"type":"date"}, - "log_time":{"type":"date"}, - "severity":{"type":"keyword"}, - "service":{"type":"keyword"}, - "trace":{"type":"keyword"}, - "class":{"type":"keyword"}, - "rest":{"type":"text"}, - "stack_trace":{"type":"text"}, - "thread_name":{"type":"keyword"}, - "host":{ - "properties": { - "name": {"type": "keyword"} - } - } - } - } -} -``` \ No newline at end of file diff --git a/_config/elk/filebeat/docker-compose.yml b/_config/elk/filebeat/docker-compose.yml deleted file mode 100644 index 8c8e8fd3b..000000000 --- a/_config/elk/filebeat/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: '3' -services: - # 日志收集 - filebeat: - image: docker.elastic.co/beats/filebeat:7.13.2 - restart: always - volumes: - # 挂载日志目录到容器中 - - /data/logs:/data/logs - # 启动命令 - command: filebeat /usr/share/filebeat/filebeat.yml \ No newline at end of file diff --git a/_config/elk/filebeat/filebeat.yml b/_config/elk/filebeat/filebeat.yml deleted file mode 100644 index 86a60e86c..000000000 --- a/_config/elk/filebeat/filebeat.yml +++ /dev/null @@ -1,23 +0,0 @@ -filebeat.inputs: -- type: log - enabled: true - paths: - - /data/logs/platform/*.json -# 输出到es -output.elasticsearch: - hosts: http://localhost:9200 - # index: "%{[fields.log_type]}-%{[agent.version]}-%{+yyyy.MM.dd}" - index: "bootx-platform-logs" -# 设置 -setup: -# 自定义索引的话必须设置 - template: - name: "filebeat" - pattern: "filebeat-*" - ilm.enabled: false -processors: - - decode_json_fields: - fields: ['message'] #要进行解析的字段 - target: "" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下 - - drop_fields: - fields: ["log","ecs","agent","input","@metadata","message"] #删除无用的字段 diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220604__init.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220604__init.sql deleted file mode 100644 index 6a4916d17..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220604__init.sql +++ /dev/null @@ -1,3442 +0,0 @@ -/* - Navicat Premium Data Transfer - Source Schema : bootx-platform - Target Server Type : MySQL -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for iam_role_path --- ---------------------------- -CREATE TABLE `iam_role_path` ( - `id` bigint(20) NOT NULL, - `role_id` bigint(20) NOT NULL COMMENT '角色id', - `permission_id` bigint(20) NOT NULL COMMENT '请求权限id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色请求权限表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role_path --- ---------------------------- -INSERT INTO `iam_role_path` VALUES (1533038257611128832, 1405414804771971072, 1533037132564578304); -INSERT INTO `iam_role_path` VALUES (1533038257611128840, 1405414804771971072, 1533037132585549824); -INSERT INTO `iam_role_path` VALUES (1533038257611128843, 1405414804771971072, 1533037132593938432); -INSERT INTO `iam_role_path` VALUES (1533038257611128850, 1405414804771971072, 1533037132598132736); -INSERT INTO `iam_role_path` VALUES (1533038257611128861, 1405414804771971072, 1533037132602327040); -INSERT INTO `iam_role_path` VALUES (1533038257611128869, 1405414804771971072, 1533037132606521344); -INSERT INTO `iam_role_path` VALUES (1533038257611128875, 1405414804771971072, 1533037132610715648); -INSERT INTO `iam_role_path` VALUES (1533038257611128881, 1405414804771971072, 1533037132614909952); -INSERT INTO `iam_role_path` VALUES (1533038257611128876, 1405414804771971072, 1533037132614909953); -INSERT INTO `iam_role_path` VALUES (1533038257611128890, 1405414804771971072, 1533037132619104256); -INSERT INTO `iam_role_path` VALUES (1533038257611128891, 1405414804771971072, 1533037132623298560); -INSERT INTO `iam_role_path` VALUES (1533038257611128903, 1405414804771971072, 1533037132623298561); -INSERT INTO `iam_role_path` VALUES (1533038257611128907, 1405414804771971072, 1533037132627492864); -INSERT INTO `iam_role_path` VALUES (1533038257611128915, 1405414804771971072, 1533037132627492865); -INSERT INTO `iam_role_path` VALUES (1533038257611128930, 1405414804771971072, 1533037132631687168); -INSERT INTO `iam_role_path` VALUES (1533038257611128938, 1405414804771971072, 1533037132631687169); -INSERT INTO `iam_role_path` VALUES (1533038257611128948, 1405414804771971072, 1533037132640075776); -INSERT INTO `iam_role_path` VALUES (1533038257611128959, 1405414804771971072, 1533037132640075777); -INSERT INTO `iam_role_path` VALUES (1533038257611128908, 1405414804771971072, 1533037132644270080); -INSERT INTO `iam_role_path` VALUES (1533038257611128844, 1405414804771971072, 1533037132648464384); -INSERT INTO `iam_role_path` VALUES (1533038257611128970, 1405414804771971072, 1533037132656852992); -INSERT INTO `iam_role_path` VALUES (1533038257611128892, 1405414804771971072, 1533037132661047296); -INSERT INTO `iam_role_path` VALUES (1533038257611128893, 1405414804771971072, 1533037132661047297); -INSERT INTO `iam_role_path` VALUES (1533038257611128980, 1405414804771971072, 1533037132661047298); -INSERT INTO `iam_role_path` VALUES (1533038257611128949, 1405414804771971072, 1533037132665241600); -INSERT INTO `iam_role_path` VALUES (1533038257611128845, 1405414804771971072, 1533037132665241601); -INSERT INTO `iam_role_path` VALUES (1533038257611128916, 1405414804771971072, 1533037132669435904); -INSERT INTO `iam_role_path` VALUES (1533038257611128950, 1405414804771971072, 1533037132669435905); -INSERT INTO `iam_role_path` VALUES (1533038257611128877, 1405414804771971072, 1533037132669435906); -INSERT INTO `iam_role_path` VALUES (1533038257611128931, 1405414804771971072, 1533037132673630208); -INSERT INTO `iam_role_path` VALUES (1533038257611128986, 1405414804771971072, 1533037132673630209); -INSERT INTO `iam_role_path` VALUES (1533038257611128994, 1405414804771971072, 1533037132677824512); -INSERT INTO `iam_role_path` VALUES (1533038257611129004, 1405414804771971072, 1533037132677824513); -INSERT INTO `iam_role_path` VALUES (1533038257611129005, 1405414804771971072, 1533037132682018816); -INSERT INTO `iam_role_path` VALUES (1533038257611128833, 1405414804771971072, 1533037132682018817); -INSERT INTO `iam_role_path` VALUES (1533038257611129009, 1405414804771971072, 1533037132682018818); -INSERT INTO `iam_role_path` VALUES (1533038257611128939, 1405414804771971072, 1533037132686213120); -INSERT INTO `iam_role_path` VALUES (1533038257611128851, 1405414804771971072, 1533037132686213121); -INSERT INTO `iam_role_path` VALUES (1533038257611129018, 1405414804771971072, 1533037132690407424); -INSERT INTO `iam_role_path` VALUES (1533038257611129027, 1405414804771971072, 1533037132690407425); -INSERT INTO `iam_role_path` VALUES (1533038257611129032, 1405414804771971072, 1533037132690407426); -INSERT INTO `iam_role_path` VALUES (1533038257611129035, 1405414804771971072, 1533037132694601728); -INSERT INTO `iam_role_path` VALUES (1533038257611128995, 1405414804771971072, 1533037132694601729); -INSERT INTO `iam_role_path` VALUES (1533038257611128951, 1405414804771971072, 1533037132698796032); -INSERT INTO `iam_role_path` VALUES (1533038257611129019, 1405414804771971072, 1533037132698796033); -INSERT INTO `iam_role_path` VALUES (1533038257611129038, 1405414804771971072, 1533037132702990336); -INSERT INTO `iam_role_path` VALUES (1533038257611129042, 1405414804771971072, 1533037132702990337); -INSERT INTO `iam_role_path` VALUES (1533038257611129049, 1405414804771971072, 1533037132707184640); -INSERT INTO `iam_role_path` VALUES (1533038257611128981, 1405414804771971072, 1533037132707184641); -INSERT INTO `iam_role_path` VALUES (1533038257611128852, 1405414804771971072, 1533037132707184642); -INSERT INTO `iam_role_path` VALUES (1533038257611128971, 1405414804771971072, 1533037132711378944); -INSERT INTO `iam_role_path` VALUES (1533038257611128917, 1405414804771971072, 1533037132711378945); -INSERT INTO `iam_role_path` VALUES (1533038257611128894, 1405414804771971072, 1533037132719767552); -INSERT INTO `iam_role_path` VALUES (1533038257611129050, 1405414804771971072, 1533037132723961856); -INSERT INTO `iam_role_path` VALUES (1533038257611129058, 1405414804771971072, 1533037132723961857); -INSERT INTO `iam_role_path` VALUES (1533038257611129064, 1405414804771971072, 1533037132728156160); -INSERT INTO `iam_role_path` VALUES (1533038257611128882, 1405414804771971072, 1533037132728156161); -INSERT INTO `iam_role_path` VALUES (1533038257611129043, 1405414804771971072, 1533037132732350464); -INSERT INTO `iam_role_path` VALUES (1533038257611129071, 1405414804771971072, 1533037132732350465); -INSERT INTO `iam_role_path` VALUES (1533038257611129073, 1405414804771971072, 1533037132732350466); -INSERT INTO `iam_role_path` VALUES (1533038257611129076, 1405414804771971072, 1533037132736544768); -INSERT INTO `iam_role_path` VALUES (1533038257611129080, 1405414804771971072, 1533037132736544769); -INSERT INTO `iam_role_path` VALUES (1533038257611128996, 1405414804771971072, 1533037132740739072); -INSERT INTO `iam_role_path` VALUES (1533038257611129082, 1405414804771971072, 1533037132740739073); -INSERT INTO `iam_role_path` VALUES (1533038257611129085, 1405414804771971072, 1533037132740739074); -INSERT INTO `iam_role_path` VALUES (1533038257611129059, 1405414804771971072, 1533037132744933376); -INSERT INTO `iam_role_path` VALUES (1533038257611129092, 1405414804771971072, 1533037132744933377); -INSERT INTO `iam_role_path` VALUES (1533038257611129044, 1405414804771971072, 1533037132749127680); -INSERT INTO `iam_role_path` VALUES (1533038257611129093, 1405414804771971072, 1533037132749127681); -INSERT INTO `iam_role_path` VALUES (1533038257611128878, 1405414804771971072, 1533037132753321984); -INSERT INTO `iam_role_path` VALUES (1533038257611129051, 1405414804771971072, 1533037132753321985); -INSERT INTO `iam_role_path` VALUES (1533038257611129010, 1405414804771971072, 1533037132753321986); -INSERT INTO `iam_role_path` VALUES (1533038257611129101, 1405414804771971072, 1533037132757516288); -INSERT INTO `iam_role_path` VALUES (1533038257611129107, 1405414804771971072, 1533037132757516289); -INSERT INTO `iam_role_path` VALUES (1533038257611129111, 1405414804771971072, 1533037132761710592); -INSERT INTO `iam_role_path` VALUES (1533038257611129114, 1405414804771971072, 1533037132761710593); -INSERT INTO `iam_role_path` VALUES (1533038257611128972, 1405414804771971072, 1533037132761710594); -INSERT INTO `iam_role_path` VALUES (1533038257611129118, 1405414804771971072, 1533037132765904896); -INSERT INTO `iam_role_path` VALUES (1533038257611129020, 1405414804771971072, 1533037132765904897); -INSERT INTO `iam_role_path` VALUES (1533038257611129120, 1405414804771971072, 1533037132770099200); -INSERT INTO `iam_role_path` VALUES (1533038257611129125, 1405414804771971072, 1533037132770099201); -INSERT INTO `iam_role_path` VALUES (1533038257611129028, 1405414804771971072, 1533037132770099202); -INSERT INTO `iam_role_path` VALUES (1533038257611128862, 1405414804771971072, 1533037132774293504); -INSERT INTO `iam_role_path` VALUES (1533038257611128918, 1405414804771971072, 1533037132774293505); -INSERT INTO `iam_role_path` VALUES (1533038257611129011, 1405414804771971072, 1533037132778487808); -INSERT INTO `iam_role_path` VALUES (1533038257611129086, 1405414804771971072, 1533037132778487809); -INSERT INTO `iam_role_path` VALUES (1533038257611129130, 1405414804771971072, 1533037132778487810); -INSERT INTO `iam_role_path` VALUES (1533038257611129045, 1405414804771971072, 1533037132786876416); -INSERT INTO `iam_role_path` VALUES (1533038257611128960, 1405414804771971072, 1533037132786876417); -INSERT INTO `iam_role_path` VALUES (1533038257611128982, 1405414804771971072, 1533037132791070720); -INSERT INTO `iam_role_path` VALUES (1533038257611129012, 1405414804771971072, 1533037132791070721); -INSERT INTO `iam_role_path` VALUES (1533038257611129029, 1405414804771971072, 1533037132795265024); -INSERT INTO `iam_role_path` VALUES (1533038257611128932, 1405414804771971072, 1533037132795265025); -INSERT INTO `iam_role_path` VALUES (1533038257611128961, 1405414804771971072, 1533037132799459328); -INSERT INTO `iam_role_path` VALUES (1533038257611129136, 1405414804771971072, 1533037132799459329); -INSERT INTO `iam_role_path` VALUES (1533038257611128870, 1405414804771971072, 1533037132799459330); -INSERT INTO `iam_role_path` VALUES (1533038257611128987, 1405414804771971072, 1533037132803653632); -INSERT INTO `iam_role_path` VALUES (1533038257611128962, 1405414804771971072, 1533037132803653633); -INSERT INTO `iam_role_path` VALUES (1533038257611129139, 1405414804771971072, 1533037132807847936); -INSERT INTO `iam_role_path` VALUES (1533038257611128952, 1405414804771971072, 1533037132807847937); -INSERT INTO `iam_role_path` VALUES (1533038257611128895, 1405414804771971072, 1533037132807847938); -INSERT INTO `iam_role_path` VALUES (1533038257611128909, 1405414804771971072, 1533037132812042240); -INSERT INTO `iam_role_path` VALUES (1533038257611129131, 1405414804771971072, 1533037132812042241); -INSERT INTO `iam_role_path` VALUES (1533038257611129144, 1405414804771971072, 1533037132812042242); -INSERT INTO `iam_role_path` VALUES (1533038257611129126, 1405414804771971072, 1533037132816236544); -INSERT INTO `iam_role_path` VALUES (1533038257611129147, 1405414804771971072, 1533037132816236545); -INSERT INTO `iam_role_path` VALUES (1533038257611129021, 1405414804771971072, 1533037132820430848); -INSERT INTO `iam_role_path` VALUES (1533038257611128896, 1405414804771971072, 1533037132820430849); -INSERT INTO `iam_role_path` VALUES (1533038257611128988, 1405414804771971072, 1533037132820430850); -INSERT INTO `iam_role_path` VALUES (1533038257611128910, 1405414804771971072, 1533037132824625152); -INSERT INTO `iam_role_path` VALUES (1533038257611129132, 1405414804771971072, 1533037132824625153); -INSERT INTO `iam_role_path` VALUES (1533038257611129149, 1405414804771971072, 1533037132824625154); -INSERT INTO `iam_role_path` VALUES (1533038257611129155, 1405414804771971072, 1533037132828819456); -INSERT INTO `iam_role_path` VALUES (1533038257611128933, 1405414804771971072, 1533037132828819457); -INSERT INTO `iam_role_path` VALUES (1533038257611129158, 1405414804771971072, 1533037132828819458); -INSERT INTO `iam_role_path` VALUES (1533038257611128919, 1405414804771971072, 1533037132833013760); -INSERT INTO `iam_role_path` VALUES (1533038257611129160, 1405414804771971072, 1533037132833013761); -INSERT INTO `iam_role_path` VALUES (1533038257611129083, 1405414804771971072, 1533037132833013762); -INSERT INTO `iam_role_path` VALUES (1533038257611128904, 1405414804771971072, 1533037132837208064); -INSERT INTO `iam_role_path` VALUES (1533038257611129052, 1405414804771971072, 1533037132837208065); -INSERT INTO `iam_role_path` VALUES (1533038257611129162, 1405414804771971072, 1533037132841402368); -INSERT INTO `iam_role_path` VALUES (1533038257611129036, 1405414804771971072, 1533037132841402369); -INSERT INTO `iam_role_path` VALUES (1533038257611129022, 1405414804771971072, 1533037132841402370); -INSERT INTO `iam_role_path` VALUES (1533038257611128863, 1405414804771971072, 1533037132845596672); -INSERT INTO `iam_role_path` VALUES (1533038257611128897, 1405414804771971072, 1533037132845596673); -INSERT INTO `iam_role_path` VALUES (1533038257611128963, 1405414804771971072, 1533037132849790976); -INSERT INTO `iam_role_path` VALUES (1533038257611129163, 1405414804771971072, 1533037132853985280); -INSERT INTO `iam_role_path` VALUES (1533038257611128920, 1405414804771971072, 1533037132853985281); -INSERT INTO `iam_role_path` VALUES (1533038257611128883, 1405414804771971072, 1533037132858179584); -INSERT INTO `iam_role_path` VALUES (1533038257611129094, 1405414804771971072, 1533037132858179585); -INSERT INTO `iam_role_path` VALUES (1533038257611129150, 1405414804771971072, 1533037132862373888); -INSERT INTO `iam_role_path` VALUES (1533038257611129170, 1405414804771971072, 1533037132862373889); -INSERT INTO `iam_role_path` VALUES (1533038257611128864, 1405414804771971072, 1533037132862373890); -INSERT INTO `iam_role_path` VALUES (1533038257611128997, 1405414804771971072, 1533037132866568192); -INSERT INTO `iam_role_path` VALUES (1533038257611128865, 1405414804771971072, 1533037132866568193); -INSERT INTO `iam_role_path` VALUES (1533038257611128846, 1405414804771971072, 1533037132870762496); -INSERT INTO `iam_role_path` VALUES (1533038257611129013, 1405414804771971072, 1533037132870762497); -INSERT INTO `iam_role_path` VALUES (1533038257611128921, 1405414804771971072, 1533037132870762498); -INSERT INTO `iam_role_path` VALUES (1533038257611129171, 1405414804771971072, 1533037132874956800); -INSERT INTO `iam_role_path` VALUES (1533038257611129077, 1405414804771971072, 1533037132874956801); -INSERT INTO `iam_role_path` VALUES (1533038257611128834, 1405414804771971072, 1533037132874956802); -INSERT INTO `iam_role_path` VALUES (1533038257611129053, 1405414804771971072, 1533037132874956803); -INSERT INTO `iam_role_path` VALUES (1533038257611129173, 1405414804771971072, 1533037132879151104); -INSERT INTO `iam_role_path` VALUES (1533038257611129102, 1405414804771971072, 1533037132879151105); -INSERT INTO `iam_role_path` VALUES (1533038257611129115, 1405414804771971072, 1533037132879151106); -INSERT INTO `iam_role_path` VALUES (1533038257611129151, 1405414804771971072, 1533037132883345408); -INSERT INTO `iam_role_path` VALUES (1533038257611129175, 1405414804771971072, 1533037132883345409); -INSERT INTO `iam_role_path` VALUES (1533038257611128922, 1405414804771971072, 1533037132883345410); -INSERT INTO `iam_role_path` VALUES (1533038257611129178, 1405414804771971072, 1533037132883345411); -INSERT INTO `iam_role_path` VALUES (1533038257611129014, 1405414804771971072, 1533037132887539712); -INSERT INTO `iam_role_path` VALUES (1533038257611129137, 1405414804771971072, 1533037132887539713); -INSERT INTO `iam_role_path` VALUES (1533038257611129095, 1405414804771971072, 1533037132887539714); -INSERT INTO `iam_role_path` VALUES (1533038257611129065, 1405414804771971072, 1533037132891734016); -INSERT INTO `iam_role_path` VALUES (1533038257611129184, 1405414804771971072, 1533037132891734017); -INSERT INTO `iam_role_path` VALUES (1533038257611129186, 1405414804771971072, 1533037132891734018); -INSERT INTO `iam_role_path` VALUES (1533038257611129037, 1405414804771971072, 1533037132891734019); -INSERT INTO `iam_role_path` VALUES (1533038257611129193, 1405414804771971072, 1533037132895928320); -INSERT INTO `iam_role_path` VALUES (1533038257611128871, 1405414804771971072, 1533037132895928321); -INSERT INTO `iam_role_path` VALUES (1533038257611128953, 1405414804771971072, 1533037132895928322); -INSERT INTO `iam_role_path` VALUES (1533038257611129087, 1405414804771971072, 1533037132900122624); -INSERT INTO `iam_role_path` VALUES (1533038257611128879, 1405414804771971072, 1533037132900122625); -INSERT INTO `iam_role_path` VALUES (1533038257611128853, 1405414804771971072, 1533037132900122626); -INSERT INTO `iam_role_path` VALUES (1533038257611129127, 1405414804771971072, 1533037132900122627); -INSERT INTO `iam_role_path` VALUES (1533038257611129103, 1405414804771971072, 1533037132904316928); -INSERT INTO `iam_role_path` VALUES (1533038257611129054, 1405414804771971072, 1533037132904316929); -INSERT INTO `iam_role_path` VALUES (1533038257611129104, 1405414804771971072, 1533037132904316930); -INSERT INTO `iam_role_path` VALUES (1533038257611128964, 1405414804771971072, 1533037132908511232); -INSERT INTO `iam_role_path` VALUES (1533038257611129030, 1405414804771971072, 1533037132908511233); -INSERT INTO `iam_role_path` VALUES (1533038257611129195, 1405414804771971072, 1533037132908511234); -INSERT INTO `iam_role_path` VALUES (1533038257611128954, 1405414804771971072, 1533037132908511235); -INSERT INTO `iam_role_path` VALUES (1533038257611129066, 1405414804771971072, 1533037132912705536); -INSERT INTO `iam_role_path` VALUES (1533038257611129096, 1405414804771971072, 1533037132912705537); -INSERT INTO `iam_role_path` VALUES (1533038257611128973, 1405414804771971072, 1533037132916899840); -INSERT INTO `iam_role_path` VALUES (1533038257611129196, 1405414804771971072, 1533037132916899841); -INSERT INTO `iam_role_path` VALUES (1533038257611128965, 1405414804771971072, 1533037132916899842); -INSERT INTO `iam_role_path` VALUES (1533038257611128911, 1405414804771971072, 1533037132916899843); -INSERT INTO `iam_role_path` VALUES (1533038257611128835, 1405414804771971072, 1533037132921094144); -INSERT INTO `iam_role_path` VALUES (1533038257611129179, 1405414804771971072, 1533037132921094145); -INSERT INTO `iam_role_path` VALUES (1533038257611129023, 1405414804771971072, 1533037132921094146); -INSERT INTO `iam_role_path` VALUES (1533038257611128866, 1405414804771971072, 1533037132925288448); -INSERT INTO `iam_role_path` VALUES (1533038257611129006, 1405414804771971072, 1533037132925288449); -INSERT INTO `iam_role_path` VALUES (1533038257611128847, 1405414804771971072, 1533037132925288450); -INSERT INTO `iam_role_path` VALUES (1533038257611128923, 1405414804771971072, 1533037132929482752); -INSERT INTO `iam_role_path` VALUES (1533038257611128966, 1405414804771971072, 1533037132929482753); -INSERT INTO `iam_role_path` VALUES (1533038257611129031, 1405414804771971072, 1533037132929482754); -INSERT INTO `iam_role_path` VALUES (1533038257611129112, 1405414804771971072, 1533037132933677056); -INSERT INTO `iam_role_path` VALUES (1533038257611129072, 1405414804771971072, 1533037132933677057); -INSERT INTO `iam_role_path` VALUES (1533038257611129156, 1405414804771971072, 1533037132933677058); -INSERT INTO `iam_role_path` VALUES (1533038257611128940, 1405414804771971072, 1533037132937871360); -INSERT INTO `iam_role_path` VALUES (1533038257611128841, 1405414804771971072, 1533037132937871361); -INSERT INTO `iam_role_path` VALUES (1533038257611128848, 1405414804771971072, 1533037132937871362); -INSERT INTO `iam_role_path` VALUES (1533038257611128983, 1405414804771971072, 1533037132942065664); -INSERT INTO `iam_role_path` VALUES (1533038257611129074, 1405414804771971072, 1533037132942065665); -INSERT INTO `iam_role_path` VALUES (1533038257611128984, 1405414804771971072, 1533037132942065666); -INSERT INTO `iam_role_path` VALUES (1533038257611128854, 1405414804771971072, 1533037132946259968); -INSERT INTO `iam_role_path` VALUES (1533038257611129113, 1405414804771971072, 1533037132946259969); -INSERT INTO `iam_role_path` VALUES (1533038257611128941, 1405414804771971072, 1533037132946259970); -INSERT INTO `iam_role_path` VALUES (1533038257611128934, 1405414804771971072, 1533037132950454272); -INSERT INTO `iam_role_path` VALUES (1533038257611129198, 1405414804771971072, 1533037132950454273); -INSERT INTO `iam_role_path` VALUES (1533038257611128924, 1405414804771971072, 1533037132950454274); -INSERT INTO `iam_role_path` VALUES (1533038257611129200, 1405414804771971072, 1533037132950454275); -INSERT INTO `iam_role_path` VALUES (1533038257611129075, 1405414804771971072, 1533037132954648576); -INSERT INTO `iam_role_path` VALUES (1533038257611129133, 1405414804771971072, 1533037132954648577); -INSERT INTO `iam_role_path` VALUES (1533038257611128942, 1405414804771971072, 1533037132954648578); -INSERT INTO `iam_role_path` VALUES (1533038257611128989, 1405414804771971072, 1533037132958842880); -INSERT INTO `iam_role_path` VALUES (1533038257611129055, 1405414804771971072, 1533037132958842881); -INSERT INTO `iam_role_path` VALUES (1533038257611128905, 1405414804771971072, 1533037132958842882); -INSERT INTO `iam_role_path` VALUES (1533038257611129164, 1405414804771971072, 1533037132963037184); -INSERT INTO `iam_role_path` VALUES (1533038257611128836, 1405414804771971072, 1533037132963037185); -INSERT INTO `iam_role_path` VALUES (1533038257611128974, 1405414804771971072, 1533037132963037186); -INSERT INTO `iam_role_path` VALUES (1533038257611129172, 1405414804771971072, 1533037132967231488); -INSERT INTO `iam_role_path` VALUES (1533038257611128837, 1405414804771971072, 1533037132967231489); -INSERT INTO `iam_role_path` VALUES (1533038257611129202, 1405414804771971072, 1533037132967231490); -INSERT INTO `iam_role_path` VALUES (1533038257611128935, 1405414804771971072, 1533037132967231491); -INSERT INTO `iam_role_path` VALUES (1533038257611129024, 1405414804771971072, 1533037132971425792); -INSERT INTO `iam_role_path` VALUES (1533038257611128998, 1405414804771971072, 1533037132971425793); -INSERT INTO `iam_role_path` VALUES (1533038257611128999, 1405414804771971072, 1533037132971425794); -INSERT INTO `iam_role_path` VALUES (1533038257611128975, 1405414804771971072, 1533037132975620096); -INSERT INTO `iam_role_path` VALUES (1533038257611129088, 1405414804771971072, 1533037132975620097); -INSERT INTO `iam_role_path` VALUES (1533038257611128880, 1405414804771971072, 1533037132975620098); -INSERT INTO `iam_role_path` VALUES (1533038257611129187, 1405414804771971072, 1533037132979814400); -INSERT INTO `iam_role_path` VALUES (1533038257611129089, 1405414804771971072, 1533037132979814401); -INSERT INTO `iam_role_path` VALUES (1533038257611129015, 1405414804771971072, 1533037132979814402); -INSERT INTO `iam_role_path` VALUES (1533038257611129188, 1405414804771971072, 1533037132979814403); -INSERT INTO `iam_role_path` VALUES (1533038257611129046, 1405414804771971072, 1533037132984008704); -INSERT INTO `iam_role_path` VALUES (1533038257611129205, 1405414804771971072, 1533037132984008705); -INSERT INTO `iam_role_path` VALUES (1533038257611129039, 1405414804771971072, 1533037132984008706); -INSERT INTO `iam_role_path` VALUES (1533038257611129097, 1405414804771971072, 1533037132988203008); -INSERT INTO `iam_role_path` VALUES (1533038257611129025, 1405414804771971072, 1533037132988203009); -INSERT INTO `iam_role_path` VALUES (1533038257611128936, 1405414804771971072, 1533037132988203010); -INSERT INTO `iam_role_path` VALUES (1533038257611129000, 1405414804771971072, 1533037132992397312); -INSERT INTO `iam_role_path` VALUES (1533038257611129152, 1405414804771971072, 1533037132992397313); -INSERT INTO `iam_role_path` VALUES (1533038257611129180, 1405414804771971072, 1533037132992397314); -INSERT INTO `iam_role_path` VALUES (1533038257611129056, 1405414804771971072, 1533037132992397315); -INSERT INTO `iam_role_path` VALUES (1533038257611128955, 1405414804771971072, 1533037132996591616); -INSERT INTO `iam_role_path` VALUES (1533038257611128925, 1405414804771971072, 1533037132996591617); -INSERT INTO `iam_role_path` VALUES (1533038257611129033, 1405414804771971072, 1533037132996591618); -INSERT INTO `iam_role_path` VALUES (1533038257611128985, 1405414804771971072, 1533037133000785920); -INSERT INTO `iam_role_path` VALUES (1533038257611128912, 1405414804771971072, 1533037133000785921); -INSERT INTO `iam_role_path` VALUES (1533038257611129203, 1405414804771971072, 1533037133000785922); -INSERT INTO `iam_role_path` VALUES (1533038257611129001, 1405414804771971072, 1533037133000785923); -INSERT INTO `iam_role_path` VALUES (1533038257611129026, 1405414804771971072, 1533037133004980224); -INSERT INTO `iam_role_path` VALUES (1533038257611129161, 1405414804771971072, 1533037133004980225); -INSERT INTO `iam_role_path` VALUES (1533038257611129007, 1405414804771971072, 1533037133004980226); -INSERT INTO `iam_role_path` VALUES (1533038257611128943, 1405414804771971072, 1533037133009174528); -INSERT INTO `iam_role_path` VALUES (1533038257611129140, 1405414804771971072, 1533037133009174529); -INSERT INTO `iam_role_path` VALUES (1533038257611129067, 1405414804771971072, 1533037133009174530); -INSERT INTO `iam_role_path` VALUES (1533038257611129141, 1405414804771971072, 1533037133009174531); -INSERT INTO `iam_role_path` VALUES (1533038257611128872, 1405414804771971072, 1533037133013368832); -INSERT INTO `iam_role_path` VALUES (1533038257611129153, 1405414804771971072, 1533037133013368833); -INSERT INTO `iam_role_path` VALUES (1533038257611128967, 1405414804771971072, 1533037133013368834); -INSERT INTO `iam_role_path` VALUES (1533038257611129197, 1405414804771971072, 1533037133017563136); -INSERT INTO `iam_role_path` VALUES (1533038257611129060, 1405414804771971072, 1533037133017563137); -INSERT INTO `iam_role_path` VALUES (1533038257611129116, 1405414804771971072, 1533037133021757440); -INSERT INTO `iam_role_path` VALUES (1533038257611129207, 1405414804771971072, 1533037133021757441); -INSERT INTO `iam_role_path` VALUES (1533038257611129098, 1405414804771971072, 1533037133021757442); -INSERT INTO `iam_role_path` VALUES (1533038257611128956, 1405414804771971072, 1533037133025951744); -INSERT INTO `iam_role_path` VALUES (1533038257611128926, 1405414804771971072, 1533037133025951745); -INSERT INTO `iam_role_path` VALUES (1533038257611129117, 1405414804771971072, 1533037133025951746); -INSERT INTO `iam_role_path` VALUES (1533038257611129061, 1405414804771971072, 1533037133030146048); -INSERT INTO `iam_role_path` VALUES (1533038257611129078, 1405414804771971072, 1533037133030146049); -INSERT INTO `iam_role_path` VALUES (1533038257611128855, 1405414804771971072, 1533037133030146050); -INSERT INTO `iam_role_path` VALUES (1533038257611129209, 1405414804771971072, 1533037133030146051); -INSERT INTO `iam_role_path` VALUES (1533038257611128913, 1405414804771971072, 1533037133034340352); -INSERT INTO `iam_role_path` VALUES (1533038257611129185, 1405414804771971072, 1533037133034340353); -INSERT INTO `iam_role_path` VALUES (1533038257611128976, 1405414804771971072, 1533037133034340354); -INSERT INTO `iam_role_path` VALUES (1533038257611129154, 1405414804771971072, 1533037133034340355); -INSERT INTO `iam_role_path` VALUES (1533038257611129119, 1405414804771971072, 1533037133038534656); -INSERT INTO `iam_role_path` VALUES (1533038257611128990, 1405414804771971072, 1533037133038534657); -INSERT INTO `iam_role_path` VALUES (1533038257611129057, 1405414804771971072, 1533037133042728960); -INSERT INTO `iam_role_path` VALUES (1533038257611129081, 1405414804771971072, 1533037133042728961); -INSERT INTO `iam_role_path` VALUES (1533038257611128898, 1405414804771971072, 1533037133042728962); -INSERT INTO `iam_role_path` VALUES (1533038257611128899, 1405414804771971072, 1533037133046923264); -INSERT INTO `iam_role_path` VALUES (1533038257611129206, 1405414804771971072, 1533037133046923265); -INSERT INTO `iam_role_path` VALUES (1533038257611128856, 1405414804771971072, 1533037133046923266); -INSERT INTO `iam_role_path` VALUES (1533038257611129062, 1405414804771971072, 1533037133051117568); -INSERT INTO `iam_role_path` VALUES (1533038257611129079, 1405414804771971072, 1533037133051117569); -INSERT INTO `iam_role_path` VALUES (1533038257611129142, 1405414804771971072, 1533037133051117570); -INSERT INTO `iam_role_path` VALUES (1533038257611129090, 1405414804771971072, 1533037133055311872); -INSERT INTO `iam_role_path` VALUES (1533038257611128867, 1405414804771971072, 1533037133055311873); -INSERT INTO `iam_role_path` VALUES (1533038257611129128, 1405414804771971072, 1533037133055311874); -INSERT INTO `iam_role_path` VALUES (1533038257611129181, 1405414804771971072, 1533037133055311875); -INSERT INTO `iam_role_path` VALUES (1533038257611129174, 1405414804771971072, 1533037133059506176); -INSERT INTO `iam_role_path` VALUES (1533038257611129129, 1405414804771971072, 1533037133059506177); -INSERT INTO `iam_role_path` VALUES (1533038257611129105, 1405414804771971072, 1533037133059506178); -INSERT INTO `iam_role_path` VALUES (1533038257611128906, 1405414804771971072, 1533037133063700480); -INSERT INTO `iam_role_path` VALUES (1533038257611129121, 1405414804771971072, 1533037133063700481); -INSERT INTO `iam_role_path` VALUES (1533038257611128900, 1405414804771971072, 1533037133063700482); -INSERT INTO `iam_role_path` VALUES (1533038257611129068, 1405414804771971072, 1533037133067894784); -INSERT INTO `iam_role_path` VALUES (1533038257611129040, 1405414804771971072, 1533037133067894785); -INSERT INTO `iam_role_path` VALUES (1533038257611129208, 1405414804771971072, 1533037133067894786); -INSERT INTO `iam_role_path` VALUES (1533038257611128901, 1405414804771971072, 1533037133067894787); -INSERT INTO `iam_role_path` VALUES (1533038257611129145, 1405414804771971072, 1533037133072089088); -INSERT INTO `iam_role_path` VALUES (1533038257611129099, 1405414804771971072, 1533037133072089089); -INSERT INTO `iam_role_path` VALUES (1533038257611128857, 1405414804771971072, 1533037133072089090); -INSERT INTO `iam_role_path` VALUES (1533038257611129189, 1405414804771971072, 1533037133072089091); -INSERT INTO `iam_role_path` VALUES (1533038257611129159, 1405414804771971072, 1533037133076283392); -INSERT INTO `iam_role_path` VALUES (1533038257611128884, 1405414804771971072, 1533037133076283393); -INSERT INTO `iam_role_path` VALUES (1533038257611128914, 1405414804771971072, 1533037133076283394); -INSERT INTO `iam_role_path` VALUES (1533038257611129108, 1405414804771971072, 1533037133076283395); -INSERT INTO `iam_role_path` VALUES (1533038257611129002, 1405414804771971072, 1533037133080477696); -INSERT INTO `iam_role_path` VALUES (1533038257611129165, 1405414804771971072, 1533037133080477697); -INSERT INTO `iam_role_path` VALUES (1533038257611128977, 1405414804771971072, 1533037133080477698); -INSERT INTO `iam_role_path` VALUES (1533038257611128838, 1405414804771971072, 1533037133080477699); -INSERT INTO `iam_role_path` VALUES (1533038257611129166, 1405414804771971072, 1533037133084672000); -INSERT INTO `iam_role_path` VALUES (1533038257611129122, 1405414804771971072, 1533037133084672001); -INSERT INTO `iam_role_path` VALUES (1533038257611128978, 1405414804771971072, 1533037133084672002); -INSERT INTO `iam_role_path` VALUES (1533038257611129109, 1405414804771971072, 1533037133088866304); -INSERT INTO `iam_role_path` VALUES (1533038257611128885, 1405414804771971072, 1533037133088866305); -INSERT INTO `iam_role_path` VALUES (1533038257611129063, 1405414804771971072, 1533037133088866306); -INSERT INTO `iam_role_path` VALUES (1533038257611129190, 1405414804771971072, 1533037133088866307); -INSERT INTO `iam_role_path` VALUES (1533038257611128927, 1405414804771971072, 1533037133093060608); -INSERT INTO `iam_role_path` VALUES (1533038257611129176, 1405414804771971072, 1533037133093060609); -INSERT INTO `iam_role_path` VALUES (1533038257611128944, 1405414804771971072, 1533037133093060610); -INSERT INTO `iam_role_path` VALUES (1533038257611129194, 1405414804771971072, 1533037133093060611); -INSERT INTO `iam_role_path` VALUES (1533038257611128886, 1405414804771971072, 1533037133097254912); -INSERT INTO `iam_role_path` VALUES (1533038257611129069, 1405414804771971072, 1533037133097254913); -INSERT INTO `iam_role_path` VALUES (1533038257611128887, 1405414804771971072, 1533037133097254914); -INSERT INTO `iam_role_path` VALUES (1533038257611128957, 1405414804771971072, 1533037133097254915); -INSERT INTO `iam_role_path` VALUES (1533038257611128888, 1405414804771971072, 1533037133101449216); -INSERT INTO `iam_role_path` VALUES (1533038257611129016, 1405414804771971072, 1533037133101449217); -INSERT INTO `iam_role_path` VALUES (1533038257611129041, 1405414804771971072, 1533037133101449218); -INSERT INTO `iam_role_path` VALUES (1533038257611128991, 1405414804771971072, 1533037133101449219); -INSERT INTO `iam_role_path` VALUES (1533038257611129003, 1405414804771971072, 1533037133105643520); -INSERT INTO `iam_role_path` VALUES (1533038257611128945, 1405414804771971072, 1533037133109837824); -INSERT INTO `iam_role_path` VALUES (1533038257611128928, 1405414804771971072, 1533037133109837825); -INSERT INTO `iam_role_path` VALUES (1533038257611128929, 1405414804771971072, 1533037133109837826); -INSERT INTO `iam_role_path` VALUES (1533038257611129182, 1405414804771971072, 1533037133109837827); -INSERT INTO `iam_role_path` VALUES (1533038257611129138, 1405414804771971072, 1533037133114032128); -INSERT INTO `iam_role_path` VALUES (1533038257611128902, 1405414804771971072, 1533037133114032129); -INSERT INTO `iam_role_path` VALUES (1533038257611129091, 1405414804771971072, 1533037133114032130); -INSERT INTO `iam_role_path` VALUES (1533038257611129167, 1405414804771971072, 1533037133118226432); -INSERT INTO `iam_role_path` VALUES (1533038257611129100, 1405414804771971072, 1533037133118226433); -INSERT INTO `iam_role_path` VALUES (1533038257611129199, 1405414804771971072, 1533037133118226434); -INSERT INTO `iam_role_path` VALUES (1533038257611128889, 1405414804771971072, 1533037133118226435); -INSERT INTO `iam_role_path` VALUES (1533038257611129123, 1405414804771971072, 1533037133122420736); -INSERT INTO `iam_role_path` VALUES (1533038257611128979, 1405414804771971072, 1533037133122420737); -INSERT INTO `iam_role_path` VALUES (1533038257611128992, 1405414804771971072, 1533037133122420738); -INSERT INTO `iam_role_path` VALUES (1533038257611128873, 1405414804771971072, 1533037133122420739); -INSERT INTO `iam_role_path` VALUES (1533038257611129168, 1405414804771971072, 1533037133126615040); -INSERT INTO `iam_role_path` VALUES (1533038257611129034, 1405414804771971072, 1533037133126615041); -INSERT INTO `iam_role_path` VALUES (1533038257611129169, 1405414804771971072, 1533037133126615042); -INSERT INTO `iam_role_path` VALUES (1533038257611128849, 1405414804771971072, 1533037133130809344); -INSERT INTO `iam_role_path` VALUES (1533038257611129047, 1405414804771971072, 1533037133130809345); -INSERT INTO `iam_role_path` VALUES (1533038257611128993, 1405414804771971072, 1533037133130809346); -INSERT INTO `iam_role_path` VALUES (1533038257611128946, 1405414804771971072, 1533037133135003648); -INSERT INTO `iam_role_path` VALUES (1533038257611129210, 1405414804771971072, 1533037133135003649); -INSERT INTO `iam_role_path` VALUES (1533038257611129157, 1405414804771971072, 1533037133135003650); -INSERT INTO `iam_role_path` VALUES (1533038257611128958, 1405414804771971072, 1533037133135003651); -INSERT INTO `iam_role_path` VALUES (1533038257611129110, 1405414804771971072, 1533037133139197952); -INSERT INTO `iam_role_path` VALUES (1533038257611129148, 1405414804771971072, 1533037133139197953); -INSERT INTO `iam_role_path` VALUES (1533038257611129146, 1405414804771971072, 1533037133139197954); -INSERT INTO `iam_role_path` VALUES (1533038257611129017, 1405414804771971072, 1533037133143392256); -INSERT INTO `iam_role_path` VALUES (1533038257611128868, 1405414804771971072, 1533037133143392257); -INSERT INTO `iam_role_path` VALUES (1533038257611129048, 1405414804771971072, 1533037133143392258); -INSERT INTO `iam_role_path` VALUES (1533038257611129134, 1405414804771971072, 1533037133147586560); -INSERT INTO `iam_role_path` VALUES (1533038257611128839, 1405414804771971072, 1533037133147586561); -INSERT INTO `iam_role_path` VALUES (1533038257611129124, 1405414804771971072, 1533037133147586562); -INSERT INTO `iam_role_path` VALUES (1533038257611128937, 1405414804771971072, 1533037133147586563); -INSERT INTO `iam_role_path` VALUES (1533038257611129177, 1405414804771971072, 1533037133151780864); -INSERT INTO `iam_role_path` VALUES (1533038257611128858, 1405414804771971072, 1533037133151780865); -INSERT INTO `iam_role_path` VALUES (1533038257611128968, 1405414804771971072, 1533037133151780866); -INSERT INTO `iam_role_path` VALUES (1533038257611128859, 1405414804771971072, 1533037133151780867); -INSERT INTO `iam_role_path` VALUES (1533038257611128860, 1405414804771971072, 1533037133155975168); -INSERT INTO `iam_role_path` VALUES (1533038257611129143, 1405414804771971072, 1533037133155975169); -INSERT INTO `iam_role_path` VALUES (1533038257611129201, 1405414804771971072, 1533037133155975170); -INSERT INTO `iam_role_path` VALUES (1533038257611128947, 1405414804771971072, 1533037133155975171); -INSERT INTO `iam_role_path` VALUES (1533038257611129204, 1405414804771971072, 1533037133155975172); -INSERT INTO `iam_role_path` VALUES (1533038257611129191, 1405414804771971072, 1533037133160169472); -INSERT INTO `iam_role_path` VALUES (1533038257611128842, 1405414804771971072, 1533037133160169473); -INSERT INTO `iam_role_path` VALUES (1533038257611128874, 1405414804771971072, 1533037133160169474); -INSERT INTO `iam_role_path` VALUES (1533038257611129070, 1405414804771971072, 1533037133160169475); -INSERT INTO `iam_role_path` VALUES (1533038257611129008, 1405414804771971072, 1533037133160169476); -INSERT INTO `iam_role_path` VALUES (1533038257611129106, 1405414804771971072, 1533037133164363776); -INSERT INTO `iam_role_path` VALUES (1533038257611128969, 1405414804771971072, 1533037133164363777); -INSERT INTO `iam_role_path` VALUES (1533038257611129135, 1405414804771971072, 1533037133164363778); -INSERT INTO `iam_role_path` VALUES (1533038257611129192, 1405414804771971072, 1533037133164363779); -INSERT INTO `iam_role_path` VALUES (1533038257611129084, 1405414804771971072, 1533037133168558080); -INSERT INTO `iam_role_path` VALUES (1533038257611129183, 1405414804771971072, 1533037133168558081); - --- ---------------------------- --- Table structure for iam_perm_path --- ---------------------------- -CREATE TABLE `iam_perm_path` ( - `id` bigint(20) NOT NULL, - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限标识', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限名称', - `request_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求类型', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求路径', - `group_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组名称', - `enable` bit(1) NOT NULL COMMENT '启用状态', - `generate` bit(1) NOT NULL COMMENT '是否通过系统生成的权限', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - `version` int(11) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_请求' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_perm_path --- ---------------------------- -INSERT INTO `iam_perm_path` VALUES (1533037132564578304, 'DingTalkConfigController#delete', '删除', 'DELETE', '/ding/config/delete', '钉钉配置', b'1', b'1', '钉钉配置 删除', 1399985191002447872, '2022-06-04 18:45:09.514000', 1399985191002447872, '2022-06-04 18:45:09.514000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132585549824, 'TokenEndpoint#login', '普通登录', 'POST', '/token/login', '认证相关', b'1', b'1', '认证相关 普通登录', 1399985191002447872, '2022-06-04 18:45:09.517000', 1399985191002447872, '2022-06-04 18:45:09.517000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132593938432, 'AlipayConfigController#add', '添加', 'POST', '/alipay/add', '支付宝配置', b'1', b'1', '支付宝配置 添加', 1399985191002447872, '2022-06-04 18:45:09.519000', 1399985191002447872, '2022-06-04 18:45:09.519000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132598132736, 'RoleController#add', '添加角色(返回角色对象)', 'POST', '/role/add', '角色管理', b'1', b'1', '角色管理 添加角色(返回角色对象)', 1399985191002447872, '2022-06-04 18:45:09.520000', 1399985191002447872, '2022-06-04 18:45:09.520000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132602327040, 'CategoryParameterController#findAll', '查询所有', 'GET', '/categoryParameter/findAll', '类目参数', b'1', b'1', '类目参数 查询所有', 1399985191002447872, '2022-06-04 18:45:09.521000', 1399985191002447872, '2022-06-04 18:45:09.521000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132606521344, 'DeptController#delete', '普通删除', 'DELETE', '/dept/delete', '部门管理', b'1', b'1', '部门管理 普通删除', 1399985191002447872, '2022-06-04 18:45:09.522000', 1399985191002447872, '2022-06-04 18:45:09.522000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132610715648, 'PayController#cancelByBusinessId', '取消支付(业务id)', 'POST', '/uni_pay/cancelByBusinessId', '统一支付', b'1', b'1', '统一支付 取消支付(业务id)', 1399985191002447872, '2022-06-04 18:45:09.523000', 1399985191002447872, '2022-06-04 18:45:09.523000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132614909952, 'DictionaryItemController#existsByCode', '编码是否被使用', 'GET', '/translate/item/existsByCode', '字典项', b'1', b'1', '字典项 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.524000', 1399985191002447872, '2022-06-04 18:45:09.524000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132614909953, 'PayController#refundByBusinessId', '全额退款(业务id)', 'POST', '/uni_pay/refundByBusinessId', '统一支付', b'1', b'1', '统一支付 全额退款(业务id)', 1399985191002447872, '2022-06-04 18:45:09.524000', 1399985191002447872, '2022-06-04 18:45:09.524000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132619104256, 'SwaggerWelcomeWebMvc#redirectToUi', 'redirectToUi', 'GET', '/swagger-ui.html', 'SwaggerWelcomeWebMvc', b'1', b'1', 'SwaggerWelcomeWebMvc redirectToUi', 1399985191002447872, '2022-06-04 18:45:09.525000', 1399985191002447872, '2022-06-04 18:45:09.525000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132623298560, 'CategoryController#findBindBrandIds', '根据类目id查询关联的绑定品牌id集合', 'GET', '/category/findBindBrandIds', '类目管理', b'1', b'1', '类目管理 根据类目id查询关联的绑定品牌id集合', 1399985191002447872, '2022-06-04 18:45:09.526000', 1399985191002447872, '2022-06-04 18:45:09.526000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132623298561, 'RoleMenuController#findMenuIds', '获取权限菜单id列表,不包含资源权限', 'GET', '/role/menu/findMenuIds', '角色菜单权限关系', b'1', b'1', '角色菜单权限关系 获取权限菜单id列表,不包含资源权限', 1399985191002447872, '2022-06-04 18:45:09.526000', 1399985191002447872, '2022-06-04 18:45:09.526000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132627492864, 'PaymentController#findByUser', '根据userId获取列表', 'GET', '/payment/findByUser', '支付记录', b'1', b'1', '支付记录 根据userId获取列表', 1399985191002447872, '2022-06-04 18:45:09.527000', 1399985191002447872, '2022-06-04 18:45:09.527000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132627492865, 'DataScopeController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/data/scope/existsByCodeNotId', '数据范围权限配置', b'1', b'1', '数据范围权限配置 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.527000', 1399985191002447872, '2022-06-04 18:45:09.527000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132631687168, 'SystemParamController#add', '添加', 'POST', '/system/param/add', '系统参数', b'1', b'1', '系统参数 添加', 1399985191002447872, '2022-06-04 18:45:09.528000', 1399985191002447872, '2022-06-04 18:45:09.528000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132631687169, 'QuartzJobController#delete', '删除', 'DELETE', '/quartz/delete', '定时任务', b'1', b'1', '定时任务 删除', 1399985191002447872, '2022-06-04 18:45:09.528000', 1399985191002447872, '2022-06-04 18:45:09.528000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132640075776, 'UserInfoController#existsUsername', '账号是否被使用', 'GET', '/user/existsUsername', '用户管理', b'1', b'1', '用户管理 账号是否被使用', 1399985191002447872, '2022-06-04 18:45:09.530000', 1399985191002447872, '2022-06-04 18:45:09.530000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132640075777, 'ClientController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/client/existsByCodeNotId', '终端管理', b'1', b'1', '终端管理 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.530000', 1399985191002447872, '2022-06-04 18:45:09.531000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132644270080, 'PaymentController#findPayTypeInfoById', '根据id获取订单支付方式', 'GET', '/payment/findPayTypeInfoById', '支付记录', b'1', b'1', '支付记录 根据id获取订单支付方式', 1399985191002447872, '2022-06-04 18:45:09.531000', 1399985191002447872, '2022-06-04 18:45:09.531000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132648464384, 'AlipayConfigController#update', '更新', 'POST', '/alipay/update', '支付宝配置', b'1', b'1', '支付宝配置 更新', 1399985191002447872, '2022-06-04 18:45:09.532000', 1399985191002447872, '2022-06-04 18:45:09.532000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132656852992, 'UserAdminController#getByEmail', '根据邮箱查询用户', 'GET', '/user/admin/getByEmail', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 根据邮箱查询用户', 1399985191002447872, '2022-06-04 18:45:09.534000', 1399985191002447872, '2022-06-04 18:45:09.534000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132661047296, 'CategoryController#bindSpec', '绑定规格', 'POST', '/category/bindSpec', '类目管理', b'1', b'1', '类目管理 绑定规格', 1399985191002447872, '2022-06-04 18:45:09.535000', 1399985191002447872, '2022-06-04 18:45:09.535000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132661047297, 'CategoryController#existsByName', '判断类目是否已经存在', 'GET', '/category/existsByName', '类目管理', b'1', b'1', '类目管理 判断类目是否已经存在', 1399985191002447872, '2022-06-04 18:45:09.535000', 1399985191002447872, '2022-06-04 18:45:09.535000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132661047298, 'StrategyController#add', '添加策略', 'POST', '/strategy/add', '策略定义', b'1', b'1', '策略定义 添加策略', 1399985191002447872, '2022-06-04 18:45:09.535000', 1399985191002447872, '2022-06-04 18:45:09.536000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132665241600, 'UserInfoController#existsEmail', '邮箱是否被使用(不包含自己)', 'GET', '/user/existsEmailNotId', '用户管理', b'1', b'1', '用户管理 邮箱是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.536000', 1399985191002447872, '2022-06-04 18:45:09.536000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132665241601, 'AlipayConfigController#findPayWayList', '支付宝支持支付方式', 'GET', '/alipay/findPayWayList', '支付宝配置', b'1', b'1', '支付宝配置 支付宝支持支付方式', 1399985191002447872, '2022-06-04 18:45:09.536000', 1399985191002447872, '2022-06-04 18:45:09.536000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132669435904, 'DataScopeController#add', '添加', 'POST', '/data/scope/add', '数据范围权限配置', b'1', b'1', '数据范围权限配置 添加', 1399985191002447872, '2022-06-04 18:45:09.537000', 1399985191002447872, '2022-06-04 18:45:09.537000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132669435905, 'UserInfoController#existsEmail', '邮箱是否被使用', 'GET', '/user/existsEmail', '用户管理', b'1', b'1', '用户管理 邮箱是否被使用', 1399985191002447872, '2022-06-04 18:45:09.537000', 1399985191002447872, '2022-06-04 18:45:09.537000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132669435906, 'PayController#cancelByPaymentId', '取消支付(支付id)', 'POST', '/uni_pay/cancelByPaymentId', '统一支付', b'1', b'1', '统一支付 取消支付(支付id)', 1399985191002447872, '2022-06-04 18:45:09.537000', 1399985191002447872, '2022-06-04 18:45:09.538000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132673630208, 'SystemParamController#findByParamKey', '根据键名获取键值', 'GET', '/system/param/findByParamKey', '系统参数', b'1', b'1', '系统参数 根据键名获取键值', 1399985191002447872, '2022-06-04 18:45:09.538000', 1399985191002447872, '2022-06-04 18:45:09.538000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132673630209, 'DictionaryController#delete', '根据id删除', 'DELETE', '/translate/delete', '字典', b'1', b'1', '字典 根据id删除', 1399985191002447872, '2022-06-04 18:45:09.538000', 1399985191002447872, '2022-06-04 18:45:09.538000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132677824512, 'WalletController#createWalletBatch', '批量开通用户钱包操作', 'POST', '/wallet/createWalletBatch', '钱包相关的接口', b'1', b'1', '钱包相关的接口 批量开通用户钱包操作', 1399985191002447872, '2022-06-04 18:45:09.539000', 1399985191002447872, '2022-06-04 18:45:09.539000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132677824513, 'DataEncryptDemoController#findById', '通过ID查询', 'GET', '/demo/data/encrypt/findById', '数据加密解密演示', b'1', b'1', '数据加密解密演示 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.539000', 1399985191002447872, '2022-06-04 18:45:09.539000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132682018816, 'DataEncryptDemoController#add', '添加', 'POST', '/demo/data/encrypt/add', '数据加密解密演示', b'1', b'1', '数据加密解密演示 添加', 1399985191002447872, '2022-06-04 18:45:09.540000', 1399985191002447872, '2022-06-04 18:45:09.540000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132682018817, 'DingTalkConfigController#setEnable', '设置启用的配置', 'POST', '/ding/config/setEnable', '钉钉配置', b'1', b'1', '钉钉配置 设置启用的配置', 1399985191002447872, '2022-06-04 18:45:09.540000', 1399985191002447872, '2022-06-04 18:45:09.540000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132682018818, 'PermMenuController#existsByPermCode', '编码是否被使用', 'GET', '/perm/menu/existsByPermCode', '菜单权限资源', b'1', b'1', '菜单权限资源 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.540000', 1399985191002447872, '2022-06-04 18:45:09.540000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132686213120, 'QuartzJobController#syncJobStatus', '同步定时任务状态', 'POST', '/quartz/syncJobStatus', '定时任务', b'1', b'1', '定时任务 同步定时任务状态', 1399985191002447872, '2022-06-04 18:45:09.541000', 1399985191002447872, '2022-06-04 18:45:09.541000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132686213121, 'RoleController#findAll', '查询所有的角色', 'GET', '/role/findAll', '角色管理', b'1', b'1', '角色管理 查询所有的角色', 1399985191002447872, '2022-06-04 18:45:09.541000', 1399985191002447872, '2022-06-04 18:45:09.541000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132690407424, 'InventoryController#lockInventory', '锁定库存', 'POST', '/inventory/lockInventory', '库存操作', b'1', b'1', '库存操作 锁定库存', 1399985191002447872, '2022-06-04 18:45:09.542000', 1399985191002447872, '2022-06-04 18:45:09.542000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132690407425, 'DataPermDemoController#add', '添加', 'POST', '/demo/data/perm/add', '数据权限演示', b'1', b'1', '数据权限演示 添加', 1399985191002447872, '2022-06-04 18:45:09.542000', 1399985191002447872, '2022-06-04 18:45:09.542000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132690407426, 'UserDataScopeController#saveAssign', '给用户分配权限', 'POST', '/user/data/scope/saveAssign', '用户数据权限配置', b'1', b'1', '用户数据权限配置 给用户分配权限', 1399985191002447872, '2022-06-04 18:45:09.542000', 1399985191002447872, '2022-06-04 18:45:09.542000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132694601728, 'RolePathController#save', '保存角色权限关联关系', 'POST', '/role/path/save', '角色请求权限消息关系', b'1', b'1', '角色请求权限消息关系 保存角色权限关联关系', 1399985191002447872, '2022-06-04 18:45:09.543000', 1399985191002447872, '2022-06-04 18:45:09.543000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132694601729, 'WalletController#changerBalance', '充值操作(增减余额)', 'POST', '/wallet/changerBalance', '钱包相关的接口', b'1', b'1', '钱包相关的接口 充值操作(增减余额)', 1399985191002447872, '2022-06-04 18:45:09.543000', 1399985191002447872, '2022-06-04 18:45:09.543000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132698796032, 'UserInfoController#existsPhone', '手机号是否被使用(不包含自己)', 'GET', '/user/existsPhoneNotId', '用户管理', b'1', b'1', '用户管理 手机号是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.544000', 1399985191002447872, '2022-06-04 18:45:09.544000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132698796033, 'InventoryController#reduceLockedAndCapacity', '扣减指定的 SKU 的库存', 'POST', '/inventory/reduceLockedAndCapacity', '库存操作', b'1', b'1', '库存操作 扣减指定的 SKU 的库存', 1399985191002447872, '2022-06-04 18:45:09.544000', 1399985191002447872, '2022-06-04 18:45:09.544000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132702990336, 'DatabaseTableController#findByTableName', '获取表信息', 'GET', '/gen/table/findByTableName', '数据库表信息', b'1', b'1', '数据库表信息 获取表信息', 1399985191002447872, '2022-06-04 18:45:09.545000', 1399985191002447872, '2022-06-04 18:45:09.545000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132702990337, 'PermPathController#syncSystem', '同步系统请求资源', 'POST', '/perm/path/syncSystem', '请求权限资源', b'1', b'1', '请求权限资源 同步系统请求资源', 1399985191002447872, '2022-06-04 18:45:09.545000', 1399985191002447872, '2022-06-04 18:45:09.545000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132707184640, 'AuthAssistController#sendSmsCaptcha', '发送短信验证码', 'POST', '/auth/sendSmsCaptcha', '认证支撑接口', b'1', b'1', '认证支撑接口 发送短信验证码', 1399985191002447872, '2022-06-04 18:45:09.546000', 1399985191002447872, '2022-06-04 18:45:09.546000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132707184641, 'StrategyController#findById', '获取策略及其配置项', 'GET', '/strategy/findById', '策略定义', b'1', b'1', '策略定义 获取策略及其配置项', 1399985191002447872, '2022-06-04 18:45:09.546000', 1399985191002447872, '2022-06-04 18:45:09.546000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132707184642, 'RoleController#update', '修改角色(返回角色对象)', 'POST', '/role/update', '角色管理', b'1', b'1', '角色管理 修改角色(返回角色对象)', 1399985191002447872, '2022-06-04 18:45:09.546000', 1399985191002447872, '2022-06-04 18:45:09.546000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132711378944, 'UserAdminController#getByPhone', '根据手机号查询用户', 'GET', '/user/admin/getByPhone', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 根据手机号查询用户', 1399985191002447872, '2022-06-04 18:45:09.547000', 1399985191002447872, '2022-06-04 18:45:09.547000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132711378945, 'DataScopeController#saveUserAssign', '保存关联用户权限', 'POST', '/data/scope/saveUserAssign', '数据范围权限配置', b'1', b'1', '数据范围权限配置 保存关联用户权限', 1399985191002447872, '2022-06-04 18:45:09.547000', 1399985191002447872, '2022-06-04 18:45:09.547000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132719767552, 'CategoryController#existsByName', '判断类目是否已经存在(不包含自身)', 'GET', '/category/existsByNameNotId', '类目管理', b'1', b'1', '类目管理 判断类目是否已经存在(不包含自身)', 1399985191002447872, '2022-06-04 18:45:09.549000', 1399985191002447872, '2022-06-04 18:45:09.549000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132723961856, 'DingRobotConfigController#add', '新增机器人配置', 'POST', '/ding/robot/config/add', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 新增机器人配置', 1399985191002447872, '2022-06-04 18:45:09.550000', 1399985191002447872, '2022-06-04 18:45:09.550000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132723961857, 'GoodsController#getDetails', '查询包含sku的详情', 'GET', '/goods/getDetails', '商品管理', b'1', b'1', '商品管理 查询包含sku的详情', 1399985191002447872, '2022-06-04 18:45:09.550000', 1399985191002447872, '2022-06-04 18:45:09.550000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132728156160, 'FIleUpLoadController#getFilePreviewUrl', '获取文件预览地址', 'GET', '/file/getFilePreviewUrl', '文件上传', b'0', b'0', '文件上传 获取文件预览地址', 1399985191002447872, '2022-06-04 18:45:09.551000', 1399985191002447872, '2022-06-04 18:45:56.898000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037132728156161, 'DictionaryItemController#findAll', '获取全部字典项', 'GET', '/translate/item/findAll', '字典项', b'1', b'1', '字典项 获取全部字典项', 1399985191002447872, '2022-06-04 18:45:09.551000', 1399985191002447872, '2022-06-04 18:45:09.551000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132732350464, 'PermPathController#add', '添加权限', 'POST', '/perm/path/add', '请求权限资源', b'1', b'1', '请求权限资源 添加权限', 1399985191002447872, '2022-06-04 18:45:09.552000', 1399985191002447872, '2022-06-04 18:45:09.552000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132732350465, 'OrderRecommendController#findCoupon', '查询适用的优惠券', 'POST', '/order/recommend/findCoupon', '订单优惠选择与推荐', b'1', b'1', '订单优惠选择与推荐 查询适用的优惠券', 1399985191002447872, '2022-06-04 18:45:09.552000', 1399985191002447872, '2022-06-04 18:45:09.552000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132732350466, 'UserDeptController#findIdsByUser', '根据用户ID获取到部门id集合', 'GET', '/user/dept/findIdsByUser', '用户部门关联关系', b'1', b'1', '用户部门关联关系 根据用户ID获取到部门id集合', 1399985191002447872, '2022-06-04 18:45:09.552000', 1399985191002447872, '2022-06-04 18:45:09.552000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132736544768, 'IdempotencyDemoController#lock20', '分布式锁(暂停20秒)', 'GET', '/demo/lock/lock20', '幂等控制演示', b'1', b'1', '幂等控制演示 分布式锁(暂停20秒)', 1399985191002447872, '2022-06-04 18:45:09.553000', 1399985191002447872, '2022-06-04 18:45:09.553000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132736544769, 'StrategyRegisterController#delete', '删除', 'DELETE', '/strategy/register/del/{id}', '策略注册', b'1', b'1', '策略注册 删除', 1399985191002447872, '2022-06-04 18:45:09.553000', 1399985191002447872, '2022-06-04 18:45:09.553000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132740739072, 'WalletController#findById', '根据钱包ID查询钱包', 'GET', '/wallet/findById', '钱包相关的接口', b'1', b'1', '钱包相关的接口 根据钱包ID查询钱包', 1399985191002447872, '2022-06-04 18:45:09.554000', 1399985191002447872, '2022-06-04 18:45:09.554000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132740739073, 'UserRoleController#saveAndUpdate', '给用户分配角色', 'POST', '/user/role/saveAndUpdate', '用户角色管理', b'1', b'1', '用户角色管理 给用户分配角色', 1399985191002447872, '2022-06-04 18:45:09.554000', 1399985191002447872, '2022-06-04 18:45:09.554000', b'1', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132740739074, 'TestController#redisPub', 'redis消息队列发布', 'GET', '/test/redisPub', '测试控制器', b'1', b'1', '测试控制器 redis消息队列发布', 1399985191002447872, '2022-06-04 18:45:09.554000', 1399985191002447872, '2022-06-04 18:45:09.555000', b'1', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132744933376, 'GoodsController#page', '分页', 'GET', '/goods/page', '商品管理', b'1', b'1', '商品管理 分页', 1399985191002447872, '2022-06-04 18:45:09.555000', 1399985191002447872, '2022-06-04 18:45:09.555000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132744933377, 'SwaggerConfigResource#openapiJson', 'openapiJson', 'GET', '/v3/api-docs/swagger-config', 'SwaggerConfigResource', b'0', b'0', 'SwaggerConfigResource openapiJson', 1399985191002447872, '2022-06-04 18:45:09.555000', 1399985191002447872, '2022-06-04 18:47:08.619000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037132749127680, 'PermPathController#findAll', '权限列表', 'GET', '/perm/path/findAll', '请求权限资源', b'1', b'1', '请求权限资源 权限列表', 1399985191002447872, '2022-06-04 18:45:09.556000', 1399985191002447872, '2022-06-04 18:45:09.556000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132749127681, 'CategoryParameterGroupController#findById', '通过ID查询', 'GET', '/categoryParameterGroup/findById', '类目参数组', b'1', b'1', '类目参数组 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.556000', 1399985191002447872, '2022-06-04 18:45:09.556000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132753321984, 'PayController#syncByBusinessId', '刷新指定业务id的支付单状态', 'POST', '/uni_pay/syncByBusinessId', '统一支付', b'1', b'1', '统一支付 刷新指定业务id的支付单状态', 1399985191002447872, '2022-06-04 18:45:09.557000', 1399985191002447872, '2022-06-04 18:45:09.557000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132753321985, 'DingRobotConfigController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/ding/robot/config/existsByCodeNotId', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.557000', 1399985191002447872, '2022-06-04 18:45:09.557000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132753321986, 'PermMenuController#add', '添加菜单权限', 'POST', '/perm/menu/add', '菜单权限资源', b'1', b'1', '菜单权限资源 添加菜单权限', 1399985191002447872, '2022-06-04 18:45:09.557000', 1399985191002447872, '2022-06-04 18:45:09.557000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132757516288, 'CouponController#obtainCoupon', '领取优惠券', 'POST', '/coupon/obtainCoupon', '优惠券', b'1', b'1', '优惠券 领取优惠券', 1399985191002447872, '2022-06-04 18:45:09.558000', 1399985191002447872, '2022-06-04 18:45:09.558000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132757516289, 'MessageQueueDemoController#sendRabbitMsg', '发送RabbitMQ消息', 'POST', '/demo/mq/sendRabbitMsg', '测试消息队列', b'1', b'1', '测试消息队列 发送RabbitMQ消息', 1399985191002447872, '2022-06-04 18:45:09.558000', 1399985191002447872, '2022-06-04 18:45:09.558000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132761710592, 'DingRobotSendController#sendLink', '测试发送link', 'POST', '/ding/robot/send/link', '钉钉机器人发送', b'1', b'1', '钉钉机器人发送 测试发送link', 1399985191002447872, '2022-06-04 18:45:09.559000', 1399985191002447872, '2022-06-04 18:45:09.559000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132761710593, 'GoodsSkuController#findByGoodsId', '根据goodsId查询', 'GET', '/sku/findByGoodsId', 'sku操作', b'1', b'1', 'sku操作 根据goodsId查询', 1399985191002447872, '2022-06-04 18:45:09.559000', 1399985191002447872, '2022-06-04 18:45:09.559000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132761710594, 'UserAdminController#getUserInfoWhole', '查询用户详情', 'GET', '/user/admin/getUserInfoWhole', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 查询用户详情', 1399985191002447872, '2022-06-04 18:45:09.559000', 1399985191002447872, '2022-06-04 18:45:09.559000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132765904896, 'OperateLogController#findById', '获取', 'GET', '/log/operate/findById', '操作日志', b'1', b'1', '操作日志 获取', 1399985191002447872, '2022-06-04 18:45:09.560000', 1399985191002447872, '2022-06-04 18:45:09.560000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132765904897, 'InventoryController#increaseInventory', '增补指定 SKU 的可售库存, 扣减对应售出', 'POST', '/inventory/increaseInventory', '库存操作', b'1', b'1', '库存操作 增补指定 SKU 的可售库存, 扣减对应售出', 1399985191002447872, '2022-06-04 18:45:09.560000', 1399985191002447872, '2022-06-04 18:45:09.560000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132770099200, 'OrderFindController#findByUser', '根据用户获取订单', 'GET', '/order/findByUser', '订单查询', b'1', b'1', '订单查询 根据用户获取订单', 1399985191002447872, '2022-06-04 18:45:09.561000', 1399985191002447872, '2022-06-04 18:45:09.561000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132770099201, 'DataSensitiveDemoController#delete', '删除', 'DELETE', '/demo/data/sensitive/delete', '数据脱敏演示', b'1', b'1', '数据脱敏演示 删除', 1399985191002447872, '2022-06-04 18:45:09.561000', 1399985191002447872, '2022-06-04 18:45:09.561000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132770099202, 'DataPermDemoController#update', '修改', 'POST', '/demo/data/perm/update', '数据权限演示', b'1', b'1', '数据权限演示 修改', 1399985191002447872, '2022-06-04 18:45:09.561000', 1399985191002447872, '2022-06-04 18:45:09.561000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132774293504, 'CategoryParameterController#update', '修改', 'POST', '/categoryParameter/update', '类目参数', b'1', b'1', '类目参数 修改', 1399985191002447872, '2022-06-04 18:45:09.562000', 1399985191002447872, '2022-06-04 18:45:09.562000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132774293505, 'DataScopeController#existsByCode', '编码是否被使用', 'GET', '/data/scope/existsByCode', '数据范围权限配置', b'1', b'1', '数据范围权限配置 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.562000', 1399985191002447872, '2022-06-04 18:45:09.562000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132778487808, 'PermMenuController#allTree', '获取全部树', 'GET', '/perm/menu/allTree', '菜单权限资源', b'1', b'1', '菜单权限资源 获取全部树', 1399985191002447872, '2022-06-04 18:45:09.563000', 1399985191002447872, '2022-06-04 18:45:09.563000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132778487809, 'TestController#sendWsByUserId', '发送ws消息(全部用户)', 'POST', '/test/sendWsByAll', '测试控制器', b'1', b'1', '测试控制器 发送ws消息(全部用户)', 1399985191002447872, '2022-06-04 18:45:09.563000', 1399985191002447872, '2022-06-04 18:45:09.563000', b'1', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132778487810, 'BrandController#findAll', '查询所有', 'GET', '/brand/findAll', '品牌', b'1', b'1', '品牌 查询所有', 1399985191002447872, '2022-06-04 18:45:09.563000', 1399985191002447872, '2022-06-04 18:45:09.563000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132786876416, 'PermPathController#delete', '删除权限', 'DELETE', '/perm/path/delete', '请求权限资源', b'1', b'1', '请求权限资源 删除权限', 1399985191002447872, '2022-06-04 18:45:09.565000', 1399985191002447872, '2022-06-04 18:45:09.565000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132786876417, 'ClientController#findAll', '查询所有的终端', 'GET', '/client/findAll', '终端管理', b'1', b'1', '终端管理 查询所有的终端', 1399985191002447872, '2022-06-04 18:45:09.565000', 1399985191002447872, '2022-06-04 18:45:09.565000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132791070720, 'StrategyController#findByType', '根据类型查询', 'GET', '/strategy/findByType', '策略定义', b'1', b'1', '策略定义 根据类型查询', 1399985191002447872, '2022-06-04 18:45:09.566000', 1399985191002447872, '2022-06-04 18:45:09.566000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132791070721, 'PermMenuController#update', '修改菜单权限', 'POST', '/perm/menu/update', '菜单权限资源', b'1', b'1', '菜单权限资源 修改菜单权限', 1399985191002447872, '2022-06-04 18:45:09.566000', 1399985191002447872, '2022-06-04 18:45:09.566000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132795265024, 'DataPermDemoController#findById', '通过ID查询', 'GET', '/demo/data/perm/findById', '数据权限演示', b'1', b'1', '数据权限演示 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.567000', 1399985191002447872, '2022-06-04 18:45:09.567000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132795265025, 'SystemParamController#existsByKey', '判断编码是否存在', 'GET', '/system/param/existsByKey', '系统参数', b'1', b'1', '系统参数 判断编码是否存在', 1399985191002447872, '2022-06-04 18:45:09.567000', 1399985191002447872, '2022-06-04 18:45:09.567000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132799459328, 'ClientController#findById', '通过ID查询终端', 'GET', '/client/findById', '终端管理', b'1', b'1', '终端管理 通过ID查询终端', 1399985191002447872, '2022-06-04 18:45:09.568000', 1399985191002447872, '2022-06-04 18:45:09.568000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132799459329, 'OnlineUserController#page', '分页', 'GET', '/user/online/page', '在线用户', b'1', b'1', '在线用户 分页', 1399985191002447872, '2022-06-04 18:45:09.568000', 1399985191002447872, '2022-06-04 18:45:09.568000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132799459330, 'DeptController#add', '添加', 'POST', '/dept/add', '部门管理', b'1', b'1', '部门管理 添加', 1399985191002447872, '2022-06-04 18:45:09.568000', 1399985191002447872, '2022-06-04 18:45:09.568000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132803653632, 'DictionaryController#update', '更新', 'POST', '/translate/update', '字典', b'1', b'1', '字典 更新', 1399985191002447872, '2022-06-04 18:45:09.569000', 1399985191002447872, '2022-06-04 18:45:09.569000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132803653633, 'ClientController#page', '分页查询终端', 'GET', '/client/page', '终端管理', b'1', b'1', '终端管理 分页查询终端', 1399985191002447872, '2022-06-04 18:45:09.569000', 1399985191002447872, '2022-06-04 18:45:09.569000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132807847936, 'AppVersionController#check', '检查更新', 'POST', '/app/version/check', 'app版本管理', b'1', b'1', 'app版本管理 检查更新', 1399985191002447872, '2022-06-04 18:45:09.570000', 1399985191002447872, '2022-06-04 18:45:09.570000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132807847937, 'UserInfoController#existsUsername', '账号是否被使用(不包含自己)', 'GET', '/user/existsUsernameNotId', '用户管理', b'1', b'1', '用户管理 账号是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.570000', 1399985191002447872, '2022-06-04 18:45:09.570000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132807847938, 'CategoryController#findTree', '获取类目树', 'GET', '/category/findTree', '类目管理', b'1', b'1', '类目管理 获取类目树', 1399985191002447872, '2022-06-04 18:45:09.570000', 1399985191002447872, '2022-06-04 18:45:09.570000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132812042240, 'PaymentController#findStatusByBusinessId', '根据业务ID获取支付状态', 'GET', '/payment/findStatusByBusinessId', '支付记录', b'1', b'1', '支付记录 根据业务ID获取支付状态', 1399985191002447872, '2022-06-04 18:45:09.571000', 1399985191002447872, '2022-06-04 18:45:09.571000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132812042241, 'BrandController#update', '修改', 'POST', '/brand/update', '品牌', b'1', b'1', '品牌 修改', 1399985191002447872, '2022-06-04 18:45:09.571000', 1399985191002447872, '2022-06-04 18:45:09.571000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132812042242, 'WalletLogController#page', '查询钱包日志(分页)', 'GET', '/wallet/log/page', '钱包日志相关的接口', b'1', b'1', '钱包日志相关的接口 查询钱包日志(分页)', 1399985191002447872, '2022-06-04 18:45:09.572000', 1399985191002447872, '2022-06-04 18:45:09.572000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132816236544, 'DataSensitiveDemoController#findById', '通过ID查询', 'GET', '/demo/data/sensitive/findById', '数据脱敏演示', b'1', b'1', '数据脱敏演示 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.572000', 1399985191002447872, '2022-06-04 18:45:09.572000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132816236545, 'OrderPreviewController#previewOrderPriceNoCheck', '预览价格(手动无检查)', 'POST', '/order/preview/previewOrderPriceNoCheck', '订单计算', b'1', b'1', '订单计算 预览价格(手动无检查)', 1399985191002447872, '2022-06-04 18:45:09.572000', 1399985191002447872, '2022-06-04 18:45:09.572000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132820430848, 'InventoryController#increaseAvailable', '增补指定 SKU 的可售库存', 'POST', '/inventory/increaseAvailable', '库存操作', b'1', b'1', '库存操作 增补指定 SKU 的可售库存', 1399985191002447872, '2022-06-04 18:45:09.573000', 1399985191002447872, '2022-06-04 18:45:09.573000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132820430849, 'CategoryController#add', '增加新类目', 'POST', '/category/add', '类目管理', b'1', b'1', '类目管理 增加新类目', 1399985191002447872, '2022-06-04 18:45:09.573000', 1399985191002447872, '2022-06-04 18:45:09.573000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132820430850, 'DictionaryController#page', '分页', 'GET', '/translate/page', '字典', b'1', b'1', '字典 分页', 1399985191002447872, '2022-06-04 18:45:09.573000', 1399985191002447872, '2022-06-04 18:45:09.573000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132824625152, 'PaymentController#findByBusinessId', '根据businessId获取列表', 'GET', '/payment/findByBusinessId', '支付记录', b'1', b'1', '支付记录 根据businessId获取列表', 1399985191002447872, '2022-06-04 18:45:09.574000', 1399985191002447872, '2022-06-04 18:45:09.574000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132824625153, 'BrandController#add', '添加', 'POST', '/brand/add', '品牌', b'1', b'1', '品牌 添加', 1399985191002447872, '2022-06-04 18:45:09.574000', 1399985191002447872, '2022-06-04 18:45:09.574000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132824625154, 'SuperQueryDemoController#page', '分页查询', 'GET', '/demo/super/query/page', '超级查询演示', b'1', b'1', '超级查询演示 分页查询', 1399985191002447872, '2022-06-04 18:45:09.574000', 1399985191002447872, '2022-06-04 18:45:09.574000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132828819456, 'ActivityController#add', '注册活动', 'POST', '/activity/add', '活动', b'1', b'1', '活动 注册活动', 1399985191002447872, '2022-06-04 18:45:09.575000', 1399985191002447872, '2022-06-04 18:45:09.575000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132828819457, 'SystemParamController#delete', '删除', 'DELETE', '/system/param/delete', '系统参数', b'1', b'1', '系统参数 删除', 1399985191002447872, '2022-06-04 18:45:09.575000', 1399985191002447872, '2022-06-04 18:45:09.575000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132828819458, 'UserSocialLoginController#page', '分页', 'GET', '/user/social/page', '用户三方登录管理', b'1', b'1', '用户三方登录管理 分页', 1399985191002447872, '2022-06-04 18:45:09.575000', 1399985191002447872, '2022-06-04 18:45:09.575000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132833013760, 'DataScopeController#delete', '删除', 'DELETE', '/data/scope/delete', '数据范围权限配置', b'1', b'1', '数据范围权限配置 删除', 1399985191002447872, '2022-06-04 18:45:09.576000', 1399985191002447872, '2022-06-04 18:45:09.576000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132833013761, 'MultipleOpenApiWebMvcResource#openapiJson', 'openapiJson', 'GET', '/v3/api-docs/{group}', 'MultipleOpenApiWebMvcResource', b'0', b'0', 'MultipleOpenApiWebMvcResource openapiJson', 1399985191002447872, '2022-06-04 18:45:09.576000', 1399985191002447872, '2022-06-04 18:47:14.753000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037132833013762, 'UserRoleController#findRolesByUser', '根据用户ID获取到角色集合', 'GET', '/user/role/findRolesByUser', '用户角色管理', b'1', b'1', '用户角色管理 根据用户ID获取到角色集合', 1399985191002447872, '2022-06-04 18:45:09.576000', 1399985191002447872, '2022-06-04 18:45:09.576000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132837208064, 'RoleMenuController#findPermissionIdsByRole', '根据角色id获取关联权限id集合(包含资源和菜单)', 'GET', '/role/menu/findPermissionIdsByRole', '角色菜单权限关系', b'1', b'1', '角色菜单权限关系 根据角色id获取关联权限id集合(包含资源和菜单)', 1399985191002447872, '2022-06-04 18:45:09.577000', 1399985191002447872, '2022-06-04 18:45:09.577000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132837208065, 'DingRobotConfigController#existsByCode', '编码是否被使用', 'GET', '/ding/robot/config/existsByCode', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.577000', 1399985191002447872, '2022-06-04 18:45:09.578000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132841402368, 'VoucherController#findById', '单条查询', 'GET', '/voucher/findById', '储值卡', b'1', b'1', '储值卡 单条查询', 1399985191002447872, '2022-06-04 18:45:09.578000', 1399985191002447872, '2022-06-04 18:45:09.578000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132841402369, 'RolePathController#findPathsByUser', '根据用户id获取角色授权(请求权限列表)', 'GET', '/role/path/findPathsByUser', '角色请求权限消息关系', b'1', b'1', '角色请求权限消息关系 根据用户id获取角色授权(请求权限列表)', 1399985191002447872, '2022-06-04 18:45:09.578000', 1399985191002447872, '2022-06-04 18:45:09.578000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132841402370, 'InventoryController#getAvailable', '获取指定 SKU 的可用库存', 'GET', '/inventory/getAvailable', '库存操作', b'1', b'1', '库存操作 获取指定 SKU 的可用库存', 1399985191002447872, '2022-06-04 18:45:09.578000', 1399985191002447872, '2022-06-04 18:45:09.578000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132845596672, 'CategoryParameterController#findById', '通过ID查询', 'GET', '/categoryParameter/findById', '类目参数', b'1', b'1', '类目参数 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.579000', 1399985191002447872, '2022-06-04 18:45:09.579000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132845596673, 'CategoryController#update', '更新类目', 'POST', '/category/update', '类目管理', b'1', b'1', '类目管理 更新类目', 1399985191002447872, '2022-06-04 18:45:09.579000', 1399985191002447872, '2022-06-04 18:45:09.579000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132849790976, 'ClientController#add', '添加终端', 'POST', '/client/add', '终端管理', b'1', b'1', '终端管理 添加终端', 1399985191002447872, '2022-06-04 18:45:09.580000', 1399985191002447872, '2022-06-04 18:45:09.580000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132853985280, 'VoucherController#lock', '冻结', 'POST', '/voucher/lock', '储值卡', b'1', b'1', '储值卡 冻结', 1399985191002447872, '2022-06-04 18:45:09.581000', 1399985191002447872, '2022-06-04 18:45:09.581000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132853985281, 'DataScopeController#deleteUserAssigns', '批量删除关联用户', 'DELETE', '/data/scope/deleteUserAssigns', '数据范围权限配置', b'1', b'1', '数据范围权限配置 批量删除关联用户', 1399985191002447872, '2022-06-04 18:45:09.581000', 1399985191002447872, '2022-06-04 18:45:09.581000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132858179584, 'DictionaryItemController#update', '修改字典项(返回字典项对象)', 'POST', '/translate/item/update', '字典项', b'1', b'1', '字典项 修改字典项(返回字典项对象)', 1399985191002447872, '2022-06-04 18:45:09.582000', 1399985191002447872, '2022-06-04 18:45:09.582000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132858179585, 'CategoryParameterGroupController#update', '修改', 'POST', '/categoryParameterGroup/update', '类目参数组', b'1', b'1', '类目参数组 修改', 1399985191002447872, '2022-06-04 18:45:09.582000', 1399985191002447872, '2022-06-04 18:45:09.582000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132862373888, 'SuperQueryDemoController#superQuery', '超级查询(分页)', 'POST', '/demo/super/query/superQuery', '超级查询演示', b'1', b'1', '超级查询演示 超级查询(分页)', 1399985191002447872, '2022-06-04 18:45:09.583000', 1399985191002447872, '2022-06-04 18:45:09.583000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132862373889, 'AggregateController#createAggregatePay', '创建聚合支付', 'POST', '/aggregate/createAggregatePay', '聚合支付', b'1', b'1', '聚合支付 创建聚合支付', 1399985191002447872, '2022-06-04 18:45:09.583000', 1399985191002447872, '2022-06-04 18:45:09.583000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132862373890, 'CategoryParameterController#page', '分页查询(限定类目和分组id)', 'GET', '/categoryParameter/page', '类目参数', b'1', b'1', '类目参数 分页查询(限定类目和分组id)', 1399985191002447872, '2022-06-04 18:45:09.583000', 1399985191002447872, '2022-06-04 18:45:09.583000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132866568192, 'WalletController#createWallet', '开通用户钱包操作', 'POST', '/wallet/createWallet', '钱包相关的接口', b'1', b'1', '钱包相关的接口 开通用户钱包操作', 1399985191002447872, '2022-06-04 18:45:09.584000', 1399985191002447872, '2022-06-04 18:45:09.584000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132866568193, 'CategoryParameterController#existsByName', '判断类目参数是否已经存在(不包含自身)', 'GET', '/categoryParameter/existsByNameNotId', '类目参数', b'1', b'1', '类目参数 判断类目参数是否已经存在(不包含自身)', 1399985191002447872, '2022-06-04 18:45:09.584000', 1399985191002447872, '2022-06-04 18:45:09.584000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132870762496, 'AlipayConfigController#findById', '根据Id查询', 'GET', '/alipay/findById', '支付宝配置', b'1', b'1', '支付宝配置 根据Id查询', 1399985191002447872, '2022-06-04 18:45:09.585000', 1399985191002447872, '2022-06-04 18:45:09.585000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132870762497, 'PermMenuController#menuTree', '获取菜单树', 'GET', '/perm/menu/menuTree', '菜单权限资源', b'1', b'1', '菜单权限资源 获取菜单树', 1399985191002447872, '2022-06-04 18:45:09.585000', 1399985191002447872, '2022-06-04 18:45:09.585000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132870762498, 'DataScopeController#getDeptIds', '获取关联部门id', 'GET', '/data/scope/getDeptIds', '数据范围权限配置', b'1', b'1', '数据范围权限配置 获取关联部门id', 1399985191002447872, '2022-06-04 18:45:09.585000', 1399985191002447872, '2022-06-04 18:45:09.585000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132874956800, 'QuartzJobLogController#findById', '单条', 'GET', '/quartz/log/findById', '定时任务执行日志', b'1', b'1', '定时任务执行日志 单条', 1399985191002447872, '2022-06-04 18:45:09.586000', 1399985191002447872, '2022-06-04 18:45:09.586000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132874956801, 'IdempotencyDemoController#lock5', '分布式锁(暂停5秒)', 'GET', '/demo/lock/lock5', '幂等控制演示', b'1', b'1', '幂等控制演示 分布式锁(暂停5秒)', 1399985191002447872, '2022-06-04 18:45:09.586000', 1399985191002447872, '2022-06-04 18:45:09.586000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132874956802, 'DingTalkConfigController#findAll', '查询全部', 'GET', '/ding/config/findAll', '钉钉配置', b'1', b'1', '钉钉配置 查询全部', 1399985191002447872, '2022-06-04 18:45:09.586000', 1399985191002447872, '2022-06-04 18:45:09.586000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132874956803, 'DingRobotConfigController#update', '修改机器人配置', 'POST', '/ding/robot/config/update', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 修改机器人配置', 1399985191002447872, '2022-06-04 18:45:09.586000', 1399985191002447872, '2022-06-04 18:45:09.586000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132879151104, 'PayNotifyRecordController#page', '分页', 'GET', '/pay/notify/record/page', '支付回调记录', b'1', b'1', '支付回调记录 分页', 1399985191002447872, '2022-06-04 18:45:09.587000', 1399985191002447872, '2022-06-04 18:45:09.587000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132879151105, 'CouponController#getByIds', '批量优惠券', 'GET', '/coupon/getById', '优惠券', b'1', b'1', '优惠券 批量优惠券', 1399985191002447872, '2022-06-04 18:45:09.587000', 1399985191002447872, '2022-06-04 18:45:09.587000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132879151106, 'GoodsSkuController#findBySkuIds', '获取sku集合', 'GET', '/sku/findBySkuIds', 'sku操作', b'1', b'1', 'sku操作 获取sku集合', 1399985191002447872, '2022-06-04 18:45:09.587000', 1399985191002447872, '2022-06-04 18:45:09.587000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132883345408, 'SuperQueryDemoController#findById', '通过ID查询', 'GET', '/demo/super/query/findById', '超级查询演示', b'1', b'1', '超级查询演示 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.588000', 1399985191002447872, '2022-06-04 18:45:09.588000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132883345409, 'CashierController#combinationPay', '发起支付(组合支付)', 'POST', '/cashier/combinationPay', '结算台', b'1', b'1', '结算台 发起支付(组合支付)', 1399985191002447872, '2022-06-04 18:45:09.588000', 1399985191002447872, '2022-06-04 18:45:09.588000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132883345410, 'DataScopeController#page', '分页', 'GET', '/data/scope/page', '数据范围权限配置', b'1', b'1', '数据范围权限配置 分页', 1399985191002447872, '2022-06-04 18:45:09.588000', 1399985191002447872, '2022-06-04 18:45:09.588000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132883345411, 'SpecificationController#page', '分页查询', 'GET', '/specification/page', '规格', b'1', b'1', '规格 分页查询', 1399985191002447872, '2022-06-04 18:45:09.588000', 1399985191002447872, '2022-06-04 18:45:09.588000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132887539712, 'PermMenuController#existsByPermCode', '编码是否被使用(不包含自己)', 'GET', '/perm/menu/existsByPermCodeNotId', '菜单权限资源', b'1', b'1', '菜单权限资源 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.589000', 1399985191002447872, '2022-06-04 18:45:09.589000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132887539713, 'OnlineUserController#logoutByUserId', '踢人下线', 'POST', '/user/online/logoutByUserId', '在线用户', b'1', b'1', '在线用户 踢人下线', 1399985191002447872, '2022-06-04 18:45:09.589000', 1399985191002447872, '2022-06-04 18:45:09.589000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132887539714, 'CategoryParameterGroupController#add', '添加', 'POST', '/categoryParameterGroup/add', '类目参数组', b'1', b'1', '类目参数组 添加', 1399985191002447872, '2022-06-04 18:45:09.589000', 1399985191002447872, '2022-06-04 18:45:09.589000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132891734016, 'FIleUpLoadController#page', '分页', 'GET', '/file/page', '文件上传', b'1', b'1', '文件上传 分页', 1399985191002447872, '2022-06-04 18:45:09.590000', 1399985191002447872, '2022-06-04 18:45:09.590000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132891734017, 'OpenApiWebMvcResource#openapiYaml', 'openapiYaml', 'GET', '/v3/api-docs.yaml', 'OpenApiWebMvcResource', b'0', b'0', 'OpenApiWebMvcResource openapiYaml', 1399985191002447872, '2022-06-04 18:45:09.590000', 1399985191002447872, '2022-06-04 18:47:19.608000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037132891734018, 'WeChatPayConfigController#update', '更新', 'POST', '/wechat/pay/update', '微信支付', b'1', b'1', '微信支付 更新', 1399985191002447872, '2022-06-04 18:45:09.590000', 1399985191002447872, '2022-06-04 18:45:09.590000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132891734019, 'RolePathController#findIdsByRole', '根据角色id获取关联权限id', 'GET', '/role/path/findIdsByRole', '角色请求权限消息关系', b'1', b'1', '角色请求权限消息关系 根据角色id获取关联权限id', 1399985191002447872, '2022-06-04 18:45:09.590000', 1399985191002447872, '2022-06-04 18:45:09.590000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132895928320, 'DataVersionLogController#findById', '获取', 'GET', '/log/dataVersion/findById', '数据版本日志', b'1', b'1', '数据版本日志 获取', 1399985191002447872, '2022-06-04 18:45:09.591000', 1399985191002447872, '2022-06-04 18:45:09.591000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132895928321, 'DeptController#tree', '树状展示', 'GET', '/dept/tree', '部门管理', b'1', b'1', '部门管理 树状展示', 1399985191002447872, '2022-06-04 18:45:09.591000', 1399985191002447872, '2022-06-04 18:45:09.591000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132895928322, 'UserInfoController#existsPhone', '手机号是否被使用', 'GET', '/user/existsPhone', '用户管理', b'1', b'1', '用户管理 手机号是否被使用', 1399985191002447872, '2022-06-04 18:45:09.591000', 1399985191002447872, '2022-06-04 18:45:09.591000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132900122624, 'TestController#hello', '测试', 'GET', '/test/hello', '测试控制器', b'1', b'1', '测试控制器 测试', 1399985191002447872, '2022-06-04 18:45:09.592000', 1399985191002447872, '2022-06-04 18:45:09.592000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132900122625, 'PayController#pay', '支付', 'POST', '/uni_pay/pay', '统一支付', b'1', b'1', '统一支付 支付', 1399985191002447872, '2022-06-04 18:45:09.592000', 1399985191002447872, '2022-06-04 18:45:09.592000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132900122626, 'RoleController#dropdown', '角色下拉框', 'GET', '/role/dropdown', '角色管理', b'1', b'1', '角色管理 角色下拉框', 1399985191002447872, '2022-06-04 18:45:09.592000', 1399985191002447872, '2022-06-04 18:45:09.592000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132900122627, 'DataSensitiveDemoController#page', '分页查询', 'GET', '/demo/data/sensitive/page', '数据脱敏演示', b'1', b'1', '数据脱敏演示 分页查询', 1399985191002447872, '2022-06-04 18:45:09.592000', 1399985191002447872, '2022-06-04 18:45:09.592000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132904316928, 'CouponController#findByIds', '批量查询优惠券', 'GET', '/coupon/findByIds', '优惠券', b'1', b'1', '优惠券 批量查询优惠券', 1399985191002447872, '2022-06-04 18:45:09.593000', 1399985191002447872, '2022-06-04 18:45:09.593000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132904316929, 'DingRobotConfigController#page', '分页', 'GET', '/ding/robot/config/page', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 分页', 1399985191002447872, '2022-06-04 18:45:09.593000', 1399985191002447872, '2022-06-04 18:45:09.593000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132904316930, 'CouponController#lockByIds', '批量锁定优惠券', 'POST', '/coupon/lockByIds', '优惠券', b'1', b'1', '优惠券 批量锁定优惠券', 1399985191002447872, '2022-06-04 18:45:09.593000', 1399985191002447872, '2022-06-04 18:45:09.593000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132908511232, 'ClientController#superPage', '超级查询', 'POST', '/client/superPage', '终端管理', b'1', b'1', '终端管理 超级查询', 1399985191002447872, '2022-06-04 18:45:09.594000', 1399985191002447872, '2022-06-04 18:45:09.594000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132908511233, 'DataPermDemoController#page', '分页查询', 'GET', '/demo/data/perm/page', '数据权限演示', b'1', b'1', '数据权限演示 分页查询', 1399985191002447872, '2022-06-04 18:45:09.594000', 1399985191002447872, '2022-06-04 18:45:09.594000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132908511234, 'OrderOperateController#paidOrderState', '付款成功状态变更', 'POST', '/order/paidOrderState', '订单操作', b'1', b'1', '订单操作 付款成功状态变更', 1399985191002447872, '2022-06-04 18:45:09.594000', 1399985191002447872, '2022-06-04 18:45:09.594000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132908511235, 'UserInfoController#getLoginAfterUserInfo', '登录后获取用户信息', 'GET', '/user/getLoginAfterUserInfo', '用户管理', b'1', b'1', '用户管理 登录后获取用户信息', 1399985191002447872, '2022-06-04 18:45:09.594000', 1399985191002447872, '2022-06-04 18:45:09.594000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132912705536, 'FIleUpLoadController#download', '下载文件', 'GET', '/file/download/{id}', '文件上传', b'0', b'0', '文件上传 下载文件', 1399985191002447872, '2022-06-04 18:45:09.595000', 1399985191002447872, '2022-06-04 18:46:04.706000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037132912705537, 'CategoryParameterGroupController#existsByName', '判断类目参数组是否已经存在(不包含自身)', 'GET', '/categoryParameterGroup/existsByNameNotId', '类目参数组', b'1', b'1', '类目参数组 判断类目参数组是否已经存在(不包含自身)', 1399985191002447872, '2022-06-04 18:45:09.595000', 1399985191002447872, '2022-06-04 18:45:09.595000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132916899840, 'UserAdminController#update', '修改用户', 'POST', '/user/admin/update', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 修改用户', 1399985191002447872, '2022-06-04 18:45:09.596000', 1399985191002447872, '2022-06-04 18:45:09.596000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132916899841, 'OrderOperateController#cancelOrderState', '取消订单', 'POST', '/order/cancelOrderState', '订单操作', b'1', b'1', '订单操作 取消订单', 1399985191002447872, '2022-06-04 18:45:09.596000', 1399985191002447872, '2022-06-04 18:45:09.596000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132916899842, 'ClientController#delete', '删除终端', 'DELETE', '/client/delete', '终端管理', b'1', b'1', '终端管理 删除终端', 1399985191002447872, '2022-06-04 18:45:09.596000', 1399985191002447872, '2022-06-04 18:45:09.596000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132916899843, 'PaymentController#findPayTypeInfoByBusinessId', '根据businessId获取订单支付方式', 'GET', '/payment/findPayTypeInfoByBusinessId', '支付记录', b'1', b'1', '支付记录 根据businessId获取订单支付方式', 1399985191002447872, '2022-06-04 18:45:09.596000', 1399985191002447872, '2022-06-04 18:45:09.596000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132921094144, 'DingTalkConfigController#add', '新增配置', 'POST', '/ding/config/add', '钉钉配置', b'1', b'1', '钉钉配置 新增配置', 1399985191002447872, '2022-06-04 18:45:09.597000', 1399985191002447872, '2022-06-04 18:45:09.597000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132921094145, 'SpecificationController#update', '修改', 'POST', '/specification/update', '规格', b'1', b'1', '规格 修改', 1399985191002447872, '2022-06-04 18:45:09.597000', 1399985191002447872, '2022-06-04 18:45:09.597000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132921094146, 'InventoryController#unlockInventory', '释放预占的SKU库存,需使用token', 'POST', '/inventory/unlockInventory', '库存操作', b'1', b'1', '库存操作 释放预占的SKU库存,需使用token', 1399985191002447872, '2022-06-04 18:45:09.597000', 1399985191002447872, '2022-06-04 18:45:09.597000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132925288448, 'CategoryParameterController#existsByName', '判断类目参数是否已经存在', 'GET', '/categoryParameter/existsByName', '类目参数', b'1', b'1', '类目参数 判断类目参数是否已经存在', 1399985191002447872, '2022-06-04 18:45:09.598000', 1399985191002447872, '2022-06-04 18:45:09.598000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132925288449, 'DataEncryptDemoController#delete', '删除', 'DELETE', '/demo/data/encrypt/delete', '数据加密解密演示', b'1', b'1', '数据加密解密演示 删除', 1399985191002447872, '2022-06-04 18:45:09.598000', 1399985191002447872, '2022-06-04 18:45:09.598000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132925288450, 'AlipayConfigController#setUpActivity', '启用指定的支付宝配置', 'POST', '/alipay/setUpActivity', '支付宝配置', b'1', b'1', '支付宝配置 启用指定的支付宝配置', 1399985191002447872, '2022-06-04 18:45:09.598000', 1399985191002447872, '2022-06-04 18:45:09.598000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132929482752, 'DataScopeController#findById', '获取', 'GET', '/data/scope/findById', '数据范围权限配置', b'1', b'1', '数据范围权限配置 获取', 1399985191002447872, '2022-06-04 18:45:09.599000', 1399985191002447872, '2022-06-04 18:45:09.599000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132929482753, 'ClientController#findByCode', '通过code查询终端', 'GET', '/client/findByCode', '终端管理', b'1', b'1', '终端管理 通过code查询终端', 1399985191002447872, '2022-06-04 18:45:09.599000', 1399985191002447872, '2022-06-04 18:45:09.599000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132929482754, 'DataPermDemoController#delete', '删除', 'DELETE', '/demo/data/perm/delete', '数据权限演示', b'1', b'1', '数据权限演示 删除', 1399985191002447872, '2022-06-04 18:45:09.599000', 1399985191002447872, '2022-06-04 18:45:09.599000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132933677056, 'DingRobotSendController#sendMarkdown', '测试发送Markdown', 'POST', '/ding/robot/send/markdown', '钉钉机器人发送', b'1', b'1', '钉钉机器人发送 测试发送Markdown', 1399985191002447872, '2022-06-04 18:45:09.600000', 1399985191002447872, '2022-06-04 18:45:09.600000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132933677057, 'OrderRecommendController#findActivity', '查询适用的活动', 'POST', '/order/recommend/findActivity', '订单优惠选择与推荐', b'1', b'1', '订单优惠选择与推荐 查询适用的活动', 1399985191002447872, '2022-06-04 18:45:09.600000', 1399985191002447872, '2022-06-04 18:45:09.600000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132933677058, 'ActivityController#get', '查询活动', 'GET', '/activity//get/{id}', '活动', b'1', b'1', '活动 查询活动', 1399985191002447872, '2022-06-04 18:45:09.600000', 1399985191002447872, '2022-06-04 18:45:09.600000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132937871360, 'QuartzJobController#judgeJobClass', '判断是否是定时任务类', 'GET', '/quartz/judgeJobClass', '定时任务', b'1', b'1', '定时任务 判断是否是定时任务类', 1399985191002447872, '2022-06-04 18:45:09.601000', 1399985191002447872, '2022-06-04 18:45:09.601000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132937871361, 'TokenEndpoint#loginOpenId', '三方登录登录', 'POST', '/token/loginOpenId', '认证相关', b'1', b'1', '认证相关 三方登录登录', 1399985191002447872, '2022-06-04 18:45:09.601000', 1399985191002447872, '2022-06-04 18:45:09.601000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132937871362, 'AlipayConfigController#clearActivity', '清除指定的支付宝配置', 'POST', '/alipay/clearActivity', '支付宝配置', b'1', b'1', '支付宝配置 清除指定的支付宝配置', 1399985191002447872, '2022-06-04 18:45:09.601000', 1399985191002447872, '2022-06-04 18:45:09.601000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132942065664, 'StrategyController#update', '更新策略', 'POST', '/strategy/update', '策略定义', b'1', b'1', '策略定义 更新策略', 1399985191002447872, '2022-06-04 18:45:09.602000', 1399985191002447872, '2022-06-04 18:45:09.602000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132942065665, 'UserDeptController#findAllByUser', '根据用户ID获取到部门集合', 'GET', '/user/dept/findAllByUser', '用户部门关联关系', b'1', b'1', '用户部门关联关系 根据用户ID获取到部门集合', 1399985191002447872, '2022-06-04 18:45:09.602000', 1399985191002447872, '2022-06-04 18:45:09.602000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132942065666, 'StrategyController#findConfigs', '获取参数配置', 'GET', '/strategy/findConfigs', '策略定义', b'1', b'1', '策略定义 获取参数配置', 1399985191002447872, '2022-06-04 18:45:09.602000', 1399985191002447872, '2022-06-04 18:45:09.602000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132946259968, 'RoleController#existsByCode', '编码是否被使用', 'GET', '/role/existsByCode', '角色管理', b'1', b'1', '角色管理 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.603000', 1399985191002447872, '2022-06-04 18:45:09.603000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132946259969, 'DingRobotSendController#sendText', '测试发送text', 'POST', '/ding/robot/send/text', '钉钉机器人发送', b'1', b'1', '钉钉机器人发送 测试发送text', 1399985191002447872, '2022-06-04 18:45:09.603000', 1399985191002447872, '2022-06-04 18:45:09.603000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132946259970, 'QuartzJobController#stop', '停止', 'POST', '/quartz/stop', '定时任务', b'1', b'1', '定时任务 停止', 1399985191002447872, '2022-06-04 18:45:09.603000', 1399985191002447872, '2022-06-04 18:45:09.603000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132950454272, 'SystemParamController#update', '更新', 'POST', '/system/param/update', '系统参数', b'1', b'1', '系统参数 更新', 1399985191002447872, '2022-06-04 18:45:09.604000', 1399985191002447872, '2022-06-04 18:45:09.604000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132950454273, 'CodeGeneratorController#codeGenPreview', '预览生成代码', 'POST', '/gen/code/codeGenPreview', '代码生成', b'1', b'1', '代码生成 预览生成代码', 1399985191002447872, '2022-06-04 18:45:09.604000', 1399985191002447872, '2022-06-04 18:45:09.604000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132950454274, 'DataScopeController#saveDeptAssign', '保存关联部门', 'POST', '/data/scope/saveDeptAssign', '数据范围权限配置', b'1', b'1', '数据范围权限配置 保存关联部门', 1399985191002447872, '2022-06-04 18:45:09.604000', 1399985191002447872, '2022-06-04 18:45:09.604000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132950454275, 'PayCallbackController#wechat', '微信支付回调', 'POST', '/pay/callback/wechat', '支付回调', b'1', b'1', '支付回调 微信支付回调', 1399985191002447872, '2022-06-04 18:45:09.604000', 1399985191002447872, '2022-06-04 18:45:09.604000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132954648576, 'UserDeptController#saveAndUpdate', '给用户分配部门', 'POST', '/user/dept/saveAndUpdate', '用户部门关联关系', b'1', b'1', '用户部门关联关系 给用户分配部门', 1399985191002447872, '2022-06-04 18:45:09.605000', 1399985191002447872, '2022-06-04 18:45:09.605000', b'1', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132954648577, 'BrandController#page', '分页查询', 'GET', '/brand/page', '品牌', b'1', b'1', '品牌 分页查询', 1399985191002447872, '2022-06-04 18:45:09.605000', 1399985191002447872, '2022-06-04 18:45:09.605000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132954648578, 'QuartzJobController#page', '分页', 'GET', '/quartz/page', '定时任务', b'1', b'1', '定时任务 分页', 1399985191002447872, '2022-06-04 18:45:09.605000', 1399985191002447872, '2022-06-04 18:45:09.605000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132958842880, 'DictionaryController#findAll', '查询全部', 'GET', '/translate/findAll', '字典', b'1', b'1', '字典 查询全部', 1399985191002447872, '2022-06-04 18:45:09.606000', 1399985191002447872, '2022-06-04 18:45:09.606000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132958842881, 'DingRobotConfigController#delete', '删除', 'DELETE', '/ding/robot/config/delete', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 删除', 1399985191002447872, '2022-06-04 18:45:09.606000', 1399985191002447872, '2022-06-04 18:45:09.606000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132958842882, 'RoleMenuController#getPermissions', '获取菜单和资源权限', 'GET', '/role/menu/getPermissions', '角色菜单权限关系', b'1', b'1', '角色菜单权限关系 获取菜单和资源权限', 1399985191002447872, '2022-06-04 18:45:09.606000', 1399985191002447872, '2022-06-04 18:45:09.606000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132963037184, 'VoucherController#findByCardNo', '根据卡号查询', 'GET', '/voucher/findByCardNo', '储值卡', b'1', b'1', '储值卡 根据卡号查询', 1399985191002447872, '2022-06-04 18:45:09.607000', 1399985191002447872, '2022-06-04 18:45:09.607000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132963037185, 'DingTalkConfigController#findById', '获取详情', 'GET', '/ding/config/findById', '钉钉配置', b'1', b'1', '钉钉配置 获取详情', 1399985191002447872, '2022-06-04 18:45:09.607000', 1399985191002447872, '2022-06-04 18:45:09.607000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132963037186, 'UserAdminController#findById', '根据用户id查询用户', 'GET', '/user/admin/findById', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 根据用户id查询用户', 1399985191002447872, '2022-06-04 18:45:09.607000', 1399985191002447872, '2022-06-04 18:45:09.607000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132967231488, 'QuartzJobLogController#page', '分页', 'GET', '/quartz/log/page', '定时任务执行日志', b'1', b'1', '定时任务执行日志 分页', 1399985191002447872, '2022-06-04 18:45:09.608000', 1399985191002447872, '2022-06-04 18:45:09.608000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132967231489, 'DingTalkConfigController#clearEnable', '清除启用状态', 'POST', '/ding/config/clearEnable', '钉钉配置', b'1', b'1', '钉钉配置 清除启用状态', 1399985191002447872, '2022-06-04 18:45:09.608000', 1399985191002447872, '2022-06-04 18:45:09.608000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132967231490, 'CouponTemplateController#get', '优惠券模板详情', 'POST', '/coupon/template/get/{id}', '优惠券模板', b'1', b'1', '优惠券模板 优惠券模板详情', 1399985191002447872, '2022-06-04 18:45:09.608000', 1399985191002447872, '2022-06-04 18:45:09.608000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132967231491, 'SystemParamController#page', '分页', 'GET', '/system/param/page', '系统参数', b'1', b'1', '系统参数 分页', 1399985191002447872, '2022-06-04 18:45:09.608000', 1399985191002447872, '2022-06-04 18:45:09.609000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132971425792, 'InventoryController#reduceInventory', '扣减指定 SKU 的预占库存,增加对应售出', 'POST', '/inventory/reduceInventory', '库存操作', b'1', b'1', '库存操作 扣减指定 SKU 的预占库存,增加对应售出', 1399985191002447872, '2022-06-04 18:45:09.609000', 1399985191002447872, '2022-06-04 18:45:09.609000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132971425793, 'WalletController#getWalletInfo', '获取钱包综合信息', 'GET', '/wallet/getWalletInfo', '钱包相关的接口', b'1', b'1', '钱包相关的接口 获取钱包综合信息', 1399985191002447872, '2022-06-04 18:45:09.609000', 1399985191002447872, '2022-06-04 18:45:09.609000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132971425794, 'WalletController#pageByNotWallet', '分页', 'GET', '/wallet/pageByNotWallet', '钱包相关的接口', b'1', b'1', '钱包相关的接口 分页', 1399985191002447872, '2022-06-04 18:45:09.609000', 1399985191002447872, '2022-06-04 18:45:09.609000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132975620096, 'UserAdminController#lock', '锁定用户', 'POST', '/user/admin/lock', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 锁定用户', 1399985191002447872, '2022-06-04 18:45:09.610000', 1399985191002447872, '2022-06-04 18:45:09.610000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132975620097, 'TestController#say', '测试回声', 'GET', '/test/say', '测试控制器', b'1', b'1', '测试控制器 测试回声', 1399985191002447872, '2022-06-04 18:45:09.610000', 1399985191002447872, '2022-06-04 18:45:09.610000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132975620098, 'PayController#refund', '退款', 'POST', '/uni_pay/refund', '统一支付', b'1', b'1', '统一支付 退款', 1399985191002447872, '2022-06-04 18:45:09.610000', 1399985191002447872, '2022-06-04 18:45:09.610000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132979814400, 'WeChatPayConfigController#setUpActivity', '设置启用的微信支付配置', 'POST', '/wechat/pay/setUpActivity', '微信支付', b'1', b'1', '微信支付 设置启用的微信支付配置', 1399985191002447872, '2022-06-04 18:45:09.611000', 1399985191002447872, '2022-06-04 18:45:09.611000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132979814401, 'TestController#sendWsByUserId', '发送ws消息', 'POST', '/test/sendWsByUserId', '测试控制器', b'1', b'1', '测试控制器 发送ws消息', 1399985191002447872, '2022-06-04 18:45:09.611000', 1399985191002447872, '2022-06-04 18:45:09.611000', b'1', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132979814402, 'PermMenuController#findById', '根据id查询', 'GET', '/perm/menu/findById', '菜单权限资源', b'1', b'1', '菜单权限资源 根据id查询', 1399985191002447872, '2022-06-04 18:45:09.611000', 1399985191002447872, '2022-06-04 18:45:09.611000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132979814403, 'WeChatPayConfigController#clearActivity', '清除指定的微信支付配置', 'POST', '/wechat/pay/clearActivity', '微信支付', b'1', b'1', '微信支付 清除指定的微信支付配置', 1399985191002447872, '2022-06-04 18:45:09.611000', 1399985191002447872, '2022-06-04 18:45:09.611000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132984008704, 'PermPathController#findById', '获取详情', 'GET', '/perm/path/findById', '请求权限资源', b'1', b'1', '请求权限资源 获取详情', 1399985191002447872, '2022-06-04 18:45:09.612000', 1399985191002447872, '2022-06-04 18:45:09.612000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132984008705, 'RefundRecordController#findById', '根据id查询', 'GET', '/pay/refund/findById', '退款记录', b'1', b'1', '退款记录 根据id查询', 1399985191002447872, '2022-06-04 18:45:09.612000', 1399985191002447872, '2022-06-04 18:45:09.612000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132984008706, 'DatabaseTableController#findAll', '表列表', 'GET', '/gen/table/findAll', '数据库表信息', b'1', b'1', '数据库表信息 表列表', 1399985191002447872, '2022-06-04 18:45:09.612000', 1399985191002447872, '2022-06-04 18:45:09.612000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132988203008, 'CategoryParameterGroupController#delete', '删除', 'DELETE', '/categoryParameterGroup/delete', '类目参数组', b'1', b'1', '类目参数组 删除', 1399985191002447872, '2022-06-04 18:45:09.613000', 1399985191002447872, '2022-06-04 18:45:09.613000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132988203009, 'InventoryController#unlockInventoryWithoutToken', '解锁没有令牌的库存', 'POST', '/inventory/unlockInventoryWithoutToken', '库存操作', b'1', b'1', '库存操作 解锁没有令牌的库存', 1399985191002447872, '2022-06-04 18:45:09.613000', 1399985191002447872, '2022-06-04 18:45:09.613000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132988203010, 'SystemParamController#findById', '获取单条', 'GET', '/system/param/findById', '系统参数', b'1', b'1', '系统参数 获取单条', 1399985191002447872, '2022-06-04 18:45:09.613000', 1399985191002447872, '2022-06-04 18:45:09.613000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132992397312, 'WalletController#findByUser', '根据用户查询钱包', 'GET', '/wallet/findByUser', '钱包相关的接口', b'1', b'1', '钱包相关的接口 根据用户查询钱包', 1399985191002447872, '2022-06-04 18:45:09.614000', 1399985191002447872, '2022-06-04 18:45:09.614000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132992397313, 'SuperQueryDemoController#add', '添加', 'POST', '/demo/super/query/add', '超级查询演示', b'1', b'1', '超级查询演示 添加', 1399985191002447872, '2022-06-04 18:45:09.614000', 1399985191002447872, '2022-06-04 18:45:09.614000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132992397314, 'SpecificationController#findAll', '查询所有', 'GET', '/specification/findAll', '规格', b'1', b'1', '规格 查询所有', 1399985191002447872, '2022-06-04 18:45:09.614000', 1399985191002447872, '2022-06-04 18:45:09.614000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132992397315, 'DingRobotConfigController#findById', '获取详情', 'GET', '/ding/robot/config/findById', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 获取详情', 1399985191002447872, '2022-06-04 18:45:09.614000', 1399985191002447872, '2022-06-04 18:45:09.614000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132996591616, 'UserInfoController#updateBaseInfo', '修改用户基础信息', 'POST', '/user/updateBaseInfo', '用户管理', b'1', b'1', '用户管理 修改用户基础信息', 1399985191002447872, '2022-06-04 18:45:09.615000', 1399985191002447872, '2022-06-04 18:45:09.615000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132996591617, 'DataScopeController#findAll', '查询全部', 'GET', '/data/scope/findAll', '数据范围权限配置', b'1', b'1', '数据范围权限配置 查询全部', 1399985191002447872, '2022-06-04 18:45:09.615000', 1399985191002447872, '2022-06-04 18:45:09.615000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037132996591618, 'UserDataScopeController#findAllByUser', '根据用户ID获取到部门集合', 'GET', '/user/data/scope/findAllByUser', '用户数据权限配置', b'1', b'1', '用户数据权限配置 根据用户ID获取到部门集合', 1399985191002447872, '2022-06-04 18:45:09.615000', 1399985191002447872, '2022-06-04 18:45:09.615000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133000785920, 'StrategyController#findAll', '查询全部策略', 'GET', '/strategy/findAll', '策略定义', b'1', b'1', '策略定义 查询全部策略', 1399985191002447872, '2022-06-04 18:45:09.616000', 1399985191002447872, '2022-06-04 18:45:09.616000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133000785921, 'PaymentController#findById', '根据id获取', 'GET', '/payment/findById', '支付记录', b'1', b'1', '支付记录 根据id获取', 1399985191002447872, '2022-06-04 18:45:09.616000', 1399985191002447872, '2022-06-04 18:45:09.616000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133000785922, 'CouponTemplateController#addCouponTemplate', '新建优惠券模板', 'POST', '/coupon/template/add', '优惠券模板', b'1', b'1', '优惠券模板 新建优惠券模板', 1399985191002447872, '2022-06-04 18:45:09.616000', 1399985191002447872, '2022-06-04 18:45:09.616000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133000785923, 'WalletController#page', '分页', 'GET', '/wallet/page', '钱包相关的接口', b'1', b'1', '钱包相关的接口 分页', 1399985191002447872, '2022-06-04 18:45:09.616000', 1399985191002447872, '2022-06-04 18:45:09.616000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133004980224, 'InventoryController#reduceSoldAndCapacity', '扣减指定 SKU 的售出库存并减少总库存', 'POST', '/inventory/reduceSoldAndCapacity', '库存操作', b'1', b'1', '库存操作 扣减指定 SKU 的售出库存并减少总库存', 1399985191002447872, '2022-06-04 18:45:09.617000', 1399985191002447872, '2022-06-04 18:45:09.617000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133004980225, 'MultipleOpenApiWebMvcResource#openapiYaml', 'openapiYaml', 'GET', '/v3/api-docs.yaml/{group}', 'MultipleOpenApiWebMvcResource', b'0', b'0', 'MultipleOpenApiWebMvcResource openapiYaml', 1399985191002447872, '2022-06-04 18:45:09.617000', 1399985191002447872, '2022-06-04 18:47:22.698000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133004980226, 'DataEncryptDemoController#page', '分页查询', 'GET', '/demo/data/encrypt/page', '数据加密解密演示', b'1', b'1', '数据加密解密演示 分页查询', 1399985191002447872, '2022-06-04 18:45:09.617000', 1399985191002447872, '2022-06-04 18:45:09.617000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133009174528, 'QuartzJobController#start', '启动', 'POST', '/quartz/start', '定时任务', b'1', b'1', '定时任务 启动', 1399985191002447872, '2022-06-04 18:45:09.618000', 1399985191002447872, '2022-06-04 18:45:09.618000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133009174529, 'AppVersionController#page', '分页', 'GET', '/app/version/page', 'app版本管理', b'1', b'1', 'app版本管理 分页', 1399985191002447872, '2022-06-04 18:45:09.618000', 1399985191002447872, '2022-06-04 18:45:09.618000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133009174530, 'FIleUpLoadController#local', '上传', 'POST', '/file/upload', '文件上传', b'0', b'0', '文件上传 上传', 1399985191002447872, '2022-06-04 18:45:09.618000', 1399985191002447872, '2022-06-04 18:46:08.153000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133009174531, 'AppVersionController#delete', '删除', 'DELETE', '/app/version/delete', 'app版本管理', b'1', b'1', 'app版本管理 删除', 1399985191002447872, '2022-06-04 18:45:09.618000', 1399985191002447872, '2022-06-04 18:45:09.618000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133013368832, 'DeptController#deleteAndChildren', '强制级联删除', 'DELETE', '/dept/deleteAndChildren', '部门管理', b'1', b'1', '部门管理 强制级联删除', 1399985191002447872, '2022-06-04 18:45:09.619000', 1399985191002447872, '2022-06-04 18:45:09.619000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133013368833, 'SuperQueryDemoController#delete', '删除', 'DELETE', '/demo/super/query/delete', '超级查询演示', b'1', b'1', '超级查询演示 删除', 1399985191002447872, '2022-06-04 18:45:09.619000', 1399985191002447872, '2022-06-04 18:45:09.619000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133013368834, 'ClientController#existsByCode', '编码是否被使用', 'GET', '/client/existsByCode', '终端管理', b'1', b'1', '终端管理 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.619000', 1399985191002447872, '2022-06-04 18:45:09.619000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133017563136, 'OrderOperateController#placeOrder', '传入订单和优惠, 下单', 'POST', '/order/placeOrder', '订单操作', b'1', b'1', '订单操作 传入订单和优惠, 下单', 1399985191002447872, '2022-06-04 18:45:09.620000', 1399985191002447872, '2022-06-04 18:45:09.620000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133017563137, 'GoodsController#findById', '查询包含商品信息', 'GET', '/goods/findById', '商品管理', b'1', b'1', '商品管理 查询包含商品信息', 1399985191002447872, '2022-06-04 18:45:09.620000', 1399985191002447872, '2022-06-04 18:45:09.620000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133021757440, 'GoodsSkuController#add', '添加商品sku', 'POST', '/sku/add', 'sku操作', b'1', b'1', 'sku操作 添加商品sku', 1399985191002447872, '2022-06-04 18:45:09.621000', 1399985191002447872, '2022-06-04 18:45:09.621000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133021757441, 'LoginLogController#findById', '获取', 'GET', '/log/login/findById', '登录日志', b'1', b'1', '登录日志 获取', 1399985191002447872, '2022-06-04 18:45:09.621000', 1399985191002447872, '2022-06-04 18:45:09.621000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133021757442, 'CategoryParameterGroupController#existsByName', '判断类目参数组是否已经存在', 'GET', '/categoryParameterGroup/existsByName', '类目参数组', b'1', b'1', '类目参数组 判断类目参数组是否已经存在', 1399985191002447872, '2022-06-04 18:45:09.621000', 1399985191002447872, '2022-06-04 18:45:09.621000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133025951744, 'UserInfoController#updatePassword', '修改密码', 'POST', '/user/updatePassword', '用户管理', b'1', b'1', '用户管理 修改密码', 1399985191002447872, '2022-06-04 18:45:09.622000', 1399985191002447872, '2022-06-04 18:45:09.622000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133025951745, 'DataScopeController#existsByName', '名称是否被使用', 'GET', '/data/scope/existsByName', '数据范围权限配置', b'1', b'1', '数据范围权限配置 名称是否被使用', 1399985191002447872, '2022-06-04 18:45:09.622000', 1399985191002447872, '2022-06-04 18:45:09.622000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133025951746, 'GoodsSkuController#getById', '获取sku', 'GET', '/sku/get', 'sku操作', b'1', b'1', 'sku操作 获取sku', 1399985191002447872, '2022-06-04 18:45:09.622000', 1399985191002447872, '2022-06-04 18:45:09.622000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133030146048, 'GoodsController#add', '添加商品', 'POST', '/goods/add', '商品管理', b'1', b'1', '商品管理 添加商品', 1399985191002447872, '2022-06-04 18:45:09.623000', 1399985191002447872, '2022-06-04 18:45:09.623000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133030146049, 'IdempotencyDemoController#lock0', '分布式锁(不暂停)', 'POST', '/demo/lock/lock0', '幂等控制演示', b'1', b'1', '幂等控制演示 分布式锁(不暂停)', 1399985191002447872, '2022-06-04 18:45:09.623000', 1399985191002447872, '2022-06-04 18:45:09.623000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133030146050, 'RoleController#existsByName', '名称是否被使用(不包含自己)', 'GET', '/role/existsByNameNotId', '角色管理', b'1', b'1', '角色管理 名称是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.623000', 1399985191002447872, '2022-06-04 18:45:09.623000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133030146051, 'CaptchaController#imgCaptcha', '获取图片验证码', 'POST', '/captcha/imgCaptcha', '验证码服务', b'1', b'1', '验证码服务 获取图片验证码', 1399985191002447872, '2022-06-04 18:45:09.623000', 1399985191002447872, '2022-06-04 18:45:09.623000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133034340352, 'PaymentController#page', '分页查询', 'GET', '/payment/page', '支付记录', b'1', b'1', '支付记录 分页查询', 1399985191002447872, '2022-06-04 18:45:09.624000', 1399985191002447872, '2022-06-04 18:45:09.624000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133034340353, 'OpenApiWebMvcResource#openapiJson', 'openapiJson', 'GET', '/v3/api-docs', 'OpenApiWebMvcResource', b'0', b'0', 'OpenApiWebMvcResource openapiJson', 1399985191002447872, '2022-06-04 18:45:09.624000', 1399985191002447872, '2022-06-04 18:47:25.990000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133034340354, 'UserAdminController#page', '分页', 'GET', '/user/admin/page', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 分页', 1399985191002447872, '2022-06-04 18:45:09.624000', 1399985191002447872, '2022-06-04 18:45:09.624000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133034340355, 'SuperQueryDemoController#update', '修改', 'POST', '/demo/super/query/update', '超级查询演示', b'1', b'1', '超级查询演示 修改', 1399985191002447872, '2022-06-04 18:45:09.624000', 1399985191002447872, '2022-06-04 18:45:09.625000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133038534656, 'OperateLogController#page', '分页', 'GET', '/log/operate/page', '操作日志', b'1', b'1', '操作日志 分页', 1399985191002447872, '2022-06-04 18:45:09.625000', 1399985191002447872, '2022-06-04 18:45:09.625000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133038534657, 'DictionaryController#findById', '根据id获取', 'GET', '/translate/findById', '字典', b'1', b'1', '字典 根据id获取', 1399985191002447872, '2022-06-04 18:45:09.625000', 1399985191002447872, '2022-06-04 18:45:09.625000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133042728960, 'DingRobotConfigController#findAll', '查询全部', 'GET', '/ding/robot/config/findAll', '钉钉机器人配置', b'1', b'1', '钉钉机器人配置 查询全部', 1399985191002447872, '2022-06-04 18:45:09.626000', 1399985191002447872, '2022-06-04 18:45:09.626000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133042728961, 'StrategyRegisterController#findAll', '查询全部', 'GET', '/strategy/register/findAll', '策略注册', b'1', b'1', '策略注册 查询全部', 1399985191002447872, '2022-06-04 18:45:09.626000', 1399985191002447872, '2022-06-04 18:45:09.626000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133042728962, 'CategoryController#findById', '通过 id 获取指定类目', 'GET', '/category/findById', '类目管理', b'1', b'1', '类目管理 通过 id 获取指定类目', 1399985191002447872, '2022-06-04 18:45:09.626000', 1399985191002447872, '2022-06-04 18:45:09.626000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133046923264, 'CategoryController#findBindSpecIds', '根据类目id查询关联的绑定规格id集合', 'GET', '/category/findBindSpecIds', '类目管理', b'1', b'1', '类目管理 根据类目id查询关联的绑定规格id集合', 1399985191002447872, '2022-06-04 18:45:09.627000', 1399985191002447872, '2022-06-04 18:45:09.627000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133046923265, 'RefundRecordController#page', '分页', 'GET', '/pay/refund/page', '退款记录', b'1', b'1', '退款记录 分页', 1399985191002447872, '2022-06-04 18:45:09.627000', 1399985191002447872, '2022-06-04 18:45:09.627000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133046923266, 'RoleController#delete', '删除角色', 'DELETE', '/role/delete', '角色管理', b'1', b'1', '角色管理 删除角色', 1399985191002447872, '2022-06-04 18:45:09.627000', 1399985191002447872, '2022-06-04 18:45:09.627000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133051117568, 'GoodsController#findByCategory', '按类目查询', 'GET', '/goods/findByCategory', '商品管理', b'1', b'1', '商品管理 按类目查询', 1399985191002447872, '2022-06-04 18:45:09.628000', 1399985191002447872, '2022-06-04 18:45:09.628000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133051117569, 'IdempotencyDemoController#idempotency', '幂等演示', 'POST', '/demo/lock/idempotency', '幂等控制演示', b'1', b'1', '幂等控制演示 幂等演示', 1399985191002447872, '2022-06-04 18:45:09.628000', 1399985191002447872, '2022-06-04 18:45:09.628000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133051117570, 'AppVersionController#add', '添加', 'POST', '/app/version/add', 'app版本管理', b'1', b'1', 'app版本管理 添加', 1399985191002447872, '2022-06-04 18:45:09.628000', 1399985191002447872, '2022-06-04 18:45:09.628000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133055311872, 'TestController#sequenceZdy', '序列生成器自定义', 'GET', '/test/sequenceZdy', '测试控制器', b'1', b'1', '测试控制器 发号器自定义', 1399985191002447872, '2022-06-04 18:45:09.629000', 1399985191002447872, '2022-06-04 18:45:09.629000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133055311873, 'CategoryParameterController#delete', '删除', 'DELETE', '/categoryParameter/delete', '类目参数', b'1', b'1', '类目参数 删除', 1399985191002447872, '2022-06-04 18:45:09.629000', 1399985191002447872, '2022-06-04 18:45:09.629000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133055311874, 'DataSensitiveDemoController#update', '修改', 'POST', '/demo/data/sensitive/update', '数据脱敏演示', b'1', b'1', '数据脱敏演示 修改', 1399985191002447872, '2022-06-04 18:45:09.629000', 1399985191002447872, '2022-06-04 18:45:09.629000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133055311875, 'SpecificationController#add', '添加', 'POST', '/specification/add', '规格', b'1', b'1', '规格 添加', 1399985191002447872, '2022-06-04 18:45:09.629000', 1399985191002447872, '2022-06-04 18:45:09.629000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133059506176, 'PayNotifyRecordController#findById', '根据id查询', 'GET', '/pay/notify/record/findById', '支付回调记录', b'1', b'1', '支付回调记录 根据id查询', 1399985191002447872, '2022-06-04 18:45:09.630000', 1399985191002447872, '2022-06-04 18:45:09.630000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133059506177, 'DataSensitiveDemoController#add', '添加', 'POST', '/demo/data/sensitive/add', '数据脱敏演示', b'1', b'1', '数据脱敏演示 添加', 1399985191002447872, '2022-06-04 18:45:09.630000', 1399985191002447872, '2022-06-04 18:45:09.630000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133059506178, 'CouponController#findCoupon', '个人可用的优惠券', 'GET', '/coupon/findCoupon', '优惠券', b'1', b'1', '优惠券 个人可用的优惠券', 1399985191002447872, '2022-06-04 18:45:09.630000', 1399985191002447872, '2022-06-04 18:45:09.630000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133063700480, 'RoleMenuController#save', '保存请求权限关系', 'POST', '/role/menu/save', '角色菜单权限关系', b'1', b'1', '角色菜单权限关系 保存请求权限关系', 1399985191002447872, '2022-06-04 18:45:09.631000', 1399985191002447872, '2022-06-04 18:45:09.631000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133063700481, 'OrderFindController#findOrderSkuIds', '查询订单包含的skuIds', 'GET', '/order/findOrderSkuIds', '订单查询', b'1', b'1', '订单查询 查询订单包含的skuIds', 1399985191002447872, '2022-06-04 18:45:09.631000', 1399985191002447872, '2022-06-04 18:45:09.631000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133063700482, 'CategoryController#bindBrand', '绑定品牌', 'POST', '/category/bindBrand', '类目管理', b'1', b'1', '类目管理 绑定品牌', 1399985191002447872, '2022-06-04 18:45:09.631000', 1399985191002447872, '2022-06-04 18:45:09.631000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133067894784, 'FIleUpLoadController#preview', '预览文件', 'GET', '/file/preview/{id}', '文件上传', b'0', b'0', '文件上传 预览文件', 1399985191002447872, '2022-06-04 18:45:09.632000', 1399985191002447872, '2022-06-04 18:46:13.683000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133067894785, 'DatabaseTableController#findColumnByTableName', '获取数据表行信息', 'GET', '/gen/table/findColumnByTableName', '数据库表信息', b'1', b'1', '数据库表信息 获取数据表行信息', 1399985191002447872, '2022-06-04 18:45:09.632000', 1399985191002447872, '2022-06-04 18:45:09.632000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133067894786, 'LoginLogController#page', '分页', 'GET', '/log/login/page', '登录日志', b'1', b'1', '登录日志 分页', 1399985191002447872, '2022-06-04 18:45:09.632000', 1399985191002447872, '2022-06-04 18:45:09.632000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133067894787, 'CategoryController#findAll', '获取所有类目', 'GET', '/category/findAll', '类目管理', b'1', b'1', '类目管理 获取所有类目', 1399985191002447872, '2022-06-04 18:45:09.632000', 1399985191002447872, '2022-06-04 18:45:09.632000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133072089088, 'WalletLogController#pageByWalletId', '根据钱包id查询钱包日志(分页)', 'GET', '/wallet/log/pageByWalletId', '钱包日志相关的接口', b'1', b'1', '钱包日志相关的接口 根据钱包id查询钱包日志(分页)', 1399985191002447872, '2022-06-04 18:45:09.633000', 1399985191002447872, '2022-06-04 18:45:09.633000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133072089089, 'CategoryParameterGroupController#page', '分页查询', 'GET', '/categoryParameterGroup/page', '类目参数组', b'1', b'1', '类目参数组 分页查询', 1399985191002447872, '2022-06-04 18:45:09.633000', 1399985191002447872, '2022-06-04 18:45:09.633000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133072089090, 'RoleController#page', '分页查询角色', 'GET', '/role/page', '角色管理', b'1', b'1', '角色管理 分页查询角色', 1399985191002447872, '2022-06-04 18:45:09.633000', 1399985191002447872, '2022-06-04 18:45:09.633000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133072089091, 'WeChatPayConfigController#add', '添加微信支付配置', 'POST', '/wechat/pay/add', '微信支付', b'1', b'1', '微信支付 添加微信支付配置', 1399985191002447872, '2022-06-04 18:45:09.633000', 1399985191002447872, '2022-06-04 18:45:09.633000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133076283392, 'UserSocialLoginController#findById', '获取详情', 'POST', '/user/social/findById', '用户三方登录管理', b'1', b'1', '用户三方登录管理 获取详情', 1399985191002447872, '2022-06-04 18:45:09.634000', 1399985191002447872, '2022-06-04 18:45:09.634000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133076283393, 'DictionaryItemController#add', '添加字典项(返回字典项对象)', 'POST', '/translate/item/add', '字典项', b'1', b'1', '字典项 添加字典项(返回字典项对象)', 1399985191002447872, '2022-06-04 18:45:09.634000', 1399985191002447872, '2022-06-04 18:45:09.634000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133076283394, 'PaymentController#superPage', '分页查询(超级查询)', 'POST', '/payment/superPage', '支付记录', b'1', b'1', '支付记录 分页查询(超级查询)', 1399985191002447872, '2022-06-04 18:45:09.634000', 1399985191002447872, '2022-06-04 18:45:09.634000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133076283395, 'MessageQueueDemoController#sendMqttMsg', '发送MQTT消息', 'POST', '/demo/mq/sendMqttMsg', '测试消息队列', b'1', b'1', '测试消息队列 发送MQTT消息', 1399985191002447872, '2022-06-04 18:45:09.635000', 1399985191002447872, '2022-06-04 18:45:09.635000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133080477696, 'WalletController#lock', '锁定钱包', 'POST', '/wallet/lock', '钱包相关的接口', b'1', b'1', '钱包相关的接口 锁定钱包', 1399985191002447872, '2022-06-04 18:45:09.635000', 1399985191002447872, '2022-06-04 18:45:09.635000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133080477697, 'VoucherController#page', '分页', 'GET', '/voucher/page', '储值卡', b'1', b'1', '储值卡 分页', 1399985191002447872, '2022-06-04 18:45:09.635000', 1399985191002447872, '2022-06-04 18:45:09.635000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133080477698, 'UserAdminController#restartPassword', '重置密码', 'POST', '/user/admin/restartPassword', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 重置密码', 1399985191002447872, '2022-06-04 18:45:09.635000', 1399985191002447872, '2022-06-04 18:45:09.635000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133080477699, 'DingTalkConfigController#page', '分页', 'GET', '/ding/config/page', '钉钉配置', b'1', b'1', '钉钉配置 分页', 1399985191002447872, '2022-06-04 18:45:09.635000', 1399985191002447872, '2022-06-04 18:45:09.635000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133084672000, 'VoucherController#unlock', '启用', 'POST', '/voucher/unlock', '储值卡', b'1', b'1', '储值卡 启用', 1399985191002447872, '2022-06-04 18:45:09.636000', 1399985191002447872, '2022-06-04 18:45:09.636000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133084672001, 'OrderFindController#page', '订单列表 分页', 'GET', '/order/page', '订单查询', b'1', b'1', '订单查询 订单列表 分页', 1399985191002447872, '2022-06-04 18:45:09.636000', 1399985191002447872, '2022-06-04 18:45:09.636000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133084672002, 'UserAdminController#unlock', '解锁用户', 'POST', '/user/admin/unlock', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 解锁用户', 1399985191002447872, '2022-06-04 18:45:09.636000', 1399985191002447872, '2022-06-04 18:45:09.636000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133088866304, 'MessageQueueDemoController#sendRedisMsg', '发送RedisMq消息', 'POST', '/demo/mq/sendRedisMsg', '测试消息队列', b'1', b'1', '测试消息队列 发送RedisMq消息', 1399985191002447872, '2022-06-04 18:45:09.637000', 1399985191002447872, '2022-06-04 18:45:09.637000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133088866305, 'DictionaryItemController#findById', '根据字典项ID查询', 'GET', '/translate/item/findById', '字典项', b'1', b'1', '字典项 根据字典项ID查询', 1399985191002447872, '2022-06-04 18:45:09.637000', 1399985191002447872, '2022-06-04 18:45:09.637000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133088866306, 'GoodsController#findAll', '查询全部', 'GET', '/goods/findAll', '商品管理', b'1', b'1', '商品管理 查询全部', 1399985191002447872, '2022-06-04 18:45:09.637000', 1399985191002447872, '2022-06-04 18:45:09.637000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133088866307, 'WeChatPayConfigController#findPayWayList', '微信支持支付方式', 'GET', '/wechat/pay/findPayWayList', '微信支付', b'1', b'1', '微信支付 微信支持支付方式', 1399985191002447872, '2022-06-04 18:45:09.637000', 1399985191002447872, '2022-06-04 18:45:09.637000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133093060608, 'DataScopeController#existsByName', '名称是否被使用(不包含自己)', 'GET', '/data/scope/existsByNameNotId', '数据范围权限配置', b'1', b'1', '数据范围权限配置 名称是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.638000', 1399985191002447872, '2022-06-04 18:45:09.638000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133093060609, 'CashierController#singlePay', '发起支付(单渠道)', 'POST', '/cashier/singlePay', '结算台', b'1', b'1', '结算台 发起支付(单渠道)', 1399985191002447872, '2022-06-04 18:45:09.638000', 1399985191002447872, '2022-06-04 18:45:09.638000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133093060610, 'QuartzJobController#findById', '单条', 'GET', '/quartz/findById', '定时任务', b'1', b'1', '定时任务 单条', 1399985191002447872, '2022-06-04 18:45:09.638000', 1399985191002447872, '2022-06-04 18:45:09.638000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133093060611, 'DataVersionLogController#page', '分页', 'GET', '/log/dataVersion/page', '数据版本日志', b'1', b'1', '数据版本日志 分页', 1399985191002447872, '2022-06-04 18:45:09.638000', 1399985191002447872, '2022-06-04 18:45:09.638000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133097254912, 'DictionaryItemController#pageByDictionaryId', '分页查询指定字典下的字典项', 'GET', '/translate/item/pageByDictionaryId', '字典项', b'1', b'1', '字典项 分页查询指定字典下的字典项', 1399985191002447872, '2022-06-04 18:45:09.639000', 1399985191002447872, '2022-06-04 18:45:09.639000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133097254913, 'FIleUpLoadController#getFilePreviewUrlPrefix', '获取文件预览地址前缀', 'GET', '/file/getFilePreviewUrlPrefix', '文件上传', b'0', b'0', '文件上传 获取文件预览地址前缀', 1399985191002447872, '2022-06-04 18:45:09.639000', 1399985191002447872, '2022-06-04 18:46:20.486000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133097254914, 'DictionaryItemController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/translate/item/existsByCodeNotId', '字典项', b'1', b'1', '字典项 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.639000', 1399985191002447872, '2022-06-04 18:45:09.639000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133097254915, 'UserInfoController#getUserSecurityInfo', '查询用户安全信息', 'GET', '/user/getUserSecurityInfo', '用户管理', b'1', b'1', '用户管理 查询用户安全信息', 1399985191002447872, '2022-06-04 18:45:09.639000', 1399985191002447872, '2022-06-04 18:45:09.639000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133101449216, 'DictionaryItemController#delete', '删除字典项', 'DELETE', '/translate/item/delete', '字典项', b'1', b'1', '字典项 删除字典项', 1399985191002447872, '2022-06-04 18:45:09.640000', 1399985191002447872, '2022-06-04 18:45:09.640000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133101449217, 'PermMenuController#resourceList', '资源列表', 'GET', '/perm/menu/resourceList', '菜单权限资源', b'1', b'1', '菜单权限资源 资源列表', 1399985191002447872, '2022-06-04 18:45:09.640000', 1399985191002447872, '2022-06-04 18:45:09.640000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133101449218, 'DatabaseTableController#page', '表列表分页', 'GET', '/gen/table/page', '数据库表信息', b'1', b'1', '数据库表信息 表列表分页', 1399985191002447872, '2022-06-04 18:45:09.640000', 1399985191002447872, '2022-06-04 18:45:09.640000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133101449219, 'DictionaryController#add', '添加', 'POST', '/translate/add', '字典', b'1', b'1', '字典 添加', 1399985191002447872, '2022-06-04 18:45:09.640000', 1399985191002447872, '2022-06-04 18:45:09.640000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133105643520, 'WalletController#unlock', '解锁钱包', 'POST', '/wallet/unlock', '钱包相关的接口', b'1', b'1', '钱包相关的接口 解锁钱包', 1399985191002447872, '2022-06-04 18:45:09.641000', 1399985191002447872, '2022-06-04 18:45:09.641000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133109837824, 'QuartzJobController#add', '添加', 'POST', '/quartz/add', '定时任务', b'1', b'1', '定时任务 添加', 1399985191002447872, '2022-06-04 18:45:09.642000', 1399985191002447872, '2022-06-04 18:45:09.642000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133109837825, 'DataScopeController#findUsersByDataScopeId', '获取关联的用户列表', 'GET', '/data/scope/findUsersByDataScopeId', '数据范围权限配置', b'1', b'1', '数据范围权限配置 获取关联的用户列表', 1399985191002447872, '2022-06-04 18:45:09.642000', 1399985191002447872, '2022-06-04 18:45:09.642000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133109837826, 'DataScopeController#update', '更新', 'POST', '/data/scope/update', '数据范围权限配置', b'1', b'1', '数据范围权限配置 更新', 1399985191002447872, '2022-06-04 18:45:09.642000', 1399985191002447872, '2022-06-04 18:45:09.642000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133109837827, 'SpecificationController#findById', '通过ID查询', 'GET', '/specification/findById', '规格', b'1', b'1', '规格 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.642000', 1399985191002447872, '2022-06-04 18:45:09.642000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133114032128, 'OnlineUserController#findBySessionId', '获取单条', 'GET', '/user/online/findBySessionId', '在线用户', b'1', b'1', '在线用户 获取单条', 1399985191002447872, '2022-06-04 18:45:09.643000', 1399985191002447872, '2022-06-04 18:45:09.643000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133114032129, 'CategoryController#delete', '通过 id 删除类目', 'DELETE', '/category/delete', '类目管理', b'1', b'1', '类目管理 通过 id 删除类目', 1399985191002447872, '2022-06-04 18:45:09.643000', 1399985191002447872, '2022-06-04 18:45:09.643000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133114032130, 'TestController#sequence', '序列生成器', 'GET', '/test/sequence', '测试控制器', b'1', b'1', '测试控制器 发号器', 1399985191002447872, '2022-06-04 18:45:09.643000', 1399985191002447872, '2022-06-04 18:45:09.643000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133118226432, 'VoucherController#lockBatch', '批量冻结', 'POST', '/voucher/lockBatch', '储值卡', b'1', b'1', '储值卡 批量冻结', 1399985191002447872, '2022-06-04 18:45:09.644000', 1399985191002447872, '2022-06-04 18:45:09.644000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133118226433, 'CategoryParameterGroupController#findAll', '查询所有', 'GET', '/categoryParameterGroup/findAll', '类目参数组', b'1', b'1', '类目参数组 查询所有', 1399985191002447872, '2022-06-04 18:45:09.644000', 1399985191002447872, '2022-06-04 18:45:09.644000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133118226434, 'CodeGeneratorController#genCodeZip', '下载生成代码', 'POST', '/gen/code/genCodeZip', '代码生成', b'1', b'1', '代码生成 下载生成代码', 1399985191002447872, '2022-06-04 18:45:09.644000', 1399985191002447872, '2022-06-04 18:45:09.644000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133118226435, 'DictionaryItemController#findByDictionaryId', '查询指定字典ID下的所有字典项', 'GET', '/translate/item/findByDictionaryId', '字典项', b'1', b'1', '字典项 查询指定字典ID下的所有字典项', 1399985191002447872, '2022-06-04 18:45:09.644000', 1399985191002447872, '2022-06-04 18:45:09.644000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133122420736, 'OrderFindController#findPayTimeoutOrderIdsByType', '获取指定类型超时订单的id集合', 'GET', '/order/findPayTimeoutOrderIdsByType', '订单查询', b'1', b'1', '订单查询 获取指定类型超时订单的id集合', 1399985191002447872, '2022-06-04 18:45:09.645000', 1399985191002447872, '2022-06-04 18:45:09.645000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133122420737, 'UserAdminController#add', '添加用户', 'POST', '/user/admin/add', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 添加用户', 1399985191002447872, '2022-06-04 18:45:09.645000', 1399985191002447872, '2022-06-04 18:45:09.645000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133122420738, 'DictionaryController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/translate/existsByCodeNotId', '字典', b'1', b'1', '字典 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.645000', 1399985191002447872, '2022-06-04 18:45:09.645000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133122420739, 'DeptController#findById', '获取', 'GET', '/dept/findById', '部门管理', b'1', b'1', '部门管理 获取', 1399985191002447872, '2022-06-04 18:45:09.645000', 1399985191002447872, '2022-06-04 18:45:09.645000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133126615040, 'VoucherController#generationBatch', '批量生成储值卡', 'POST', '/voucher/generationBatch', '储值卡', b'1', b'1', '储值卡 批量生成储值卡', 1399985191002447872, '2022-06-04 18:45:09.646000', 1399985191002447872, '2022-06-04 18:45:09.646000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133126615041, 'UserDataScopeController#findDataScopeIdsByUser', '根据用户ID获取到部门id集合', 'GET', '/user/data/scope/findIdsByUser', '用户数据权限配置', b'1', b'1', '用户数据权限配置 根据用户ID获取到部门id集合', 1399985191002447872, '2022-06-04 18:45:09.646000', 1399985191002447872, '2022-06-04 18:45:09.646000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133126615042, 'VoucherController#unlockBatch', '批量启用', 'POST', '/voucher/unlockBatch', '储值卡', b'1', b'1', '储值卡 批量启用', 1399985191002447872, '2022-06-04 18:45:09.646000', 1399985191002447872, '2022-06-04 18:45:09.646000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133130809344, 'AlipayConfigController#page', '分页', 'GET', '/alipay/page', '支付宝配置', b'1', b'1', '支付宝配置 分页', 1399985191002447872, '2022-06-04 18:45:09.647000', 1399985191002447872, '2022-06-04 18:45:09.647000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133130809345, 'PermPathController#page', '权限分页', 'GET', '/perm/path/page', '请求权限资源', b'1', b'1', '请求权限资源 权限分页', 1399985191002447872, '2022-06-04 18:45:09.647000', 1399985191002447872, '2022-06-04 18:45:09.647000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133130809346, 'DictionaryController#existsByCode', '编码是否被使用', 'GET', '/translate/existsByCode', '字典', b'1', b'1', '字典 编码是否被使用', 1399985191002447872, '2022-06-04 18:45:09.647000', 1399985191002447872, '2022-06-04 18:45:09.647000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133135003648, 'QuartzJobController#update', '更新', 'POST', '/quartz/update', '定时任务', b'1', b'1', '定时任务 更新', 1399985191002447872, '2022-06-04 18:45:09.648000', 1399985191002447872, '2022-06-04 18:45:09.648000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133135003649, 'DingAccessController#genThirdLoginUrl', '生成第三方登录网址', 'GET', '/ding/access/genThirdLoginUrl', '钉钉Access', b'1', b'1', '钉钉Access 生成第三方登录网址', 1399985191002447872, '2022-06-04 18:45:09.648000', 1399985191002447872, '2022-06-04 18:45:09.648000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133135003650, 'ActivityController#findAll', '查询活动', 'GET', '/activity/findAll', '活动', b'1', b'1', '活动 查询活动', 1399985191002447872, '2022-06-04 18:45:09.648000', 1399985191002447872, '2022-06-04 18:45:09.648000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133135003651, 'UserInfoController#getUserBaseInfo', '查询用户基础信息', 'GET', '/user/getUserBaseInfo', '用户管理', b'1', b'1', '用户管理 查询用户基础信息', 1399985191002447872, '2022-06-04 18:45:09.648000', 1399985191002447872, '2022-06-04 18:45:09.648000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133139197952, 'MessageQueueDemoController#sendKeyExpired', '创建15秒后过期的事件', 'POST', '/demo/mq/sendKeyExpired', '测试消息队列', b'1', b'1', '测试消息队列 创建15秒后过期的事件', 1399985191002447872, '2022-06-04 18:45:09.649000', 1399985191002447872, '2022-06-04 18:45:09.649000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133139197953, 'OrderPreviewController#previewOrderPrice', '预览价格(手动)', 'POST', '/order/preview/previewOrderPrice', '订单计算', b'1', b'1', '订单计算 预览价格(手动)', 1399985191002447872, '2022-06-04 18:45:09.649000', 1399985191002447872, '2022-06-04 18:45:09.649000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133139197954, 'WalletLogController#pageByPersonal', '个人钱包日志', 'POST', '/wallet/log/pageByPersonal', '钱包日志相关的接口', b'1', b'1', '钱包日志相关的接口 个人钱包日志', 1399985191002447872, '2022-06-04 18:45:09.649000', 1399985191002447872, '2022-06-04 18:45:09.649000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133143392256, 'PermMenuController#delete', '删除', 'DELETE', '/perm/menu/delete', '菜单权限资源', b'1', b'1', '菜单权限资源 删除', 1399985191002447872, '2022-06-04 18:45:09.650000', 1399985191002447872, '2022-06-04 18:45:09.650000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133143392257, 'CategoryParameterController#add', '添加', 'POST', '/categoryParameter/add', '类目参数', b'1', b'1', '类目参数 添加', 1399985191002447872, '2022-06-04 18:45:09.650000', 1399985191002447872, '2022-06-04 18:45:09.650000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133143392258, 'PermPathController#update', '更新权限', 'POST', '/perm/path/update', '请求权限资源', b'1', b'1', '请求权限资源 更新权限', 1399985191002447872, '2022-06-04 18:45:09.650000', 1399985191002447872, '2022-06-04 18:45:09.650000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133147586560, 'BrandController#delete', '删除', 'DELETE', '/brand/delete', '品牌', b'1', b'1', '品牌 删除', 1399985191002447872, '2022-06-04 18:45:09.651000', 1399985191002447872, '2022-06-04 18:45:09.651000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133147586561, 'DingTalkConfigController#update', '修改配置', 'POST', '/ding/config/update', '钉钉配置', b'1', b'1', '钉钉配置 修改配置', 1399985191002447872, '2022-06-04 18:45:09.651000', 1399985191002447872, '2022-06-04 18:45:09.651000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133147586562, 'OrderFindController#getWholeById', '获取完整订单详情', 'GET', '/order/getWholeById', '订单查询', b'1', b'1', '订单查询 获取完整订单详情', 1399985191002447872, '2022-06-04 18:45:09.651000', 1399985191002447872, '2022-06-04 18:45:09.651000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133147586563, 'SystemParamController#existsByKeyNotId', '判断编码是否存在(不包含自己)', 'GET', '/system/param/existsByKeyNotId', '系统参数', b'1', b'1', '系统参数 判断编码是否存在(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.651000', 1399985191002447872, '2022-06-04 18:45:09.651000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133151780864, 'CashierController#aggregatePay', '扫码聚合支付(单渠道)', 'GET', '/cashier/aggregatePay', '结算台', b'1', b'1', '结算台 扫码聚合支付(单渠道)', 1399985191002447872, '2022-06-04 18:45:09.652000', 1399985191002447872, '2022-06-04 18:45:09.652000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133151780865, 'RoleController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/role/existsByCodeNotId', '角色管理', b'1', b'1', '角色管理 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-04 18:45:09.652000', 1399985191002447872, '2022-06-04 18:45:09.652000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133151780866, 'ClientController#findAllByAlonePrem', '查询有独立菜单和权限的终端列表', 'GET', '/client/findAllByAlonePrem', '终端管理', b'1', b'1', '终端管理 查询有独立菜单和权限的终端列表', 1399985191002447872, '2022-06-04 18:45:09.652000', 1399985191002447872, '2022-06-04 18:45:09.652000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133151780867, 'RoleController#existsByName', '名称是否被使用', 'GET', '/role/existsByName', '角色管理', b'1', b'1', '角色管理 名称是否被使用', 1399985191002447872, '2022-06-04 18:45:09.652000', 1399985191002447872, '2022-06-04 18:45:09.652000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133155975168, 'RoleController#findById', '通过ID查询角色', 'GET', '/role/findById', '角色管理', b'1', b'1', '角色管理 通过ID查询角色', 1399985191002447872, '2022-06-04 18:45:09.653000', 1399985191002447872, '2022-06-04 18:45:09.653000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133155975169, 'AppVersionController#findById', '查询详情', 'POST', '/app/version/findById', 'app版本管理', b'1', b'1', 'app版本管理 查询详情', 1399985191002447872, '2022-06-04 18:45:09.653000', 1399985191002447872, '2022-06-04 18:45:09.653000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133155975170, 'PayCallbackController#aliPay', '支付宝回调', 'POST', '/pay/callback/aliPay', '支付回调', b'1', b'1', '支付回调 支付宝回调', 1399985191002447872, '2022-06-04 18:45:09.653000', 1399985191002447872, '2022-06-04 18:45:09.653000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133155975171, 'QuartzJobController#execute', '立即执行', 'POST', '/quartz/execute', '定时任务', b'1', b'1', '定时任务 立即执行', 1399985191002447872, '2022-06-04 18:45:09.653000', 1399985191002447872, '2022-06-04 18:45:09.653000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133155975172, 'CouponTemplateController#findAll', '查询优惠券模板', 'POST', '/coupon/template/findAll', '优惠券模板', b'1', b'1', '优惠券模板 查询优惠券模板', 1399985191002447872, '2022-06-04 18:45:09.653000', 1399985191002447872, '2022-06-04 18:45:09.653000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133160169472, 'WeChatPayConfigController#page', '分页', 'GET', '/wechat/pay/page', '微信支付', b'1', b'1', '微信支付 分页', 1399985191002447872, '2022-06-04 18:45:09.654000', 1399985191002447872, '2022-06-04 18:45:09.654000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133160169473, 'TokenEndpoint#logout', '退出', 'POST', '/token/logout', '认证相关', b'1', b'1', '认证相关 退出', 1399985191002447872, '2022-06-04 18:45:09.654000', 1399985191002447872, '2022-06-04 18:45:09.654000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133160169474, 'DeptController#update', '更新', 'POST', '/dept/update', '部门管理', b'1', b'1', '部门管理 更新', 1399985191002447872, '2022-06-04 18:45:09.654000', 1399985191002447872, '2022-06-04 18:45:09.654000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133160169475, 'FIleUpLoadController#getFileDownloadUrl', '获取文件下载地址', 'GET', '/file/getFileDownloadUrl', '文件上传', b'0', b'0', '文件上传 获取文件下载地址', 1399985191002447872, '2022-06-04 18:45:09.654000', 1399985191002447872, '2022-06-04 18:46:24.445000', b'0', 1); -INSERT INTO `iam_perm_path` VALUES (1533037133160169476, 'DataEncryptDemoController#update', '修改', 'POST', '/demo/data/encrypt/update', '数据加密解密演示', b'1', b'1', '数据加密解密演示 修改', 1399985191002447872, '2022-06-04 18:45:09.654000', 1399985191002447872, '2022-06-04 18:45:09.654000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133164363776, 'CouponController#lockById', '锁定优惠券', 'POST', '/coupon/lockById', '优惠券', b'1', b'1', '优惠券 锁定优惠券', 1399985191002447872, '2022-06-04 18:45:09.655000', 1399985191002447872, '2022-06-04 18:45:09.655000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133164363777, 'ClientController#update', '修改终端(返回终端对象)', 'POST', '/client/update', '终端管理', b'1', b'1', '终端管理 修改终端(返回终端对象)', 1399985191002447872, '2022-06-04 18:45:09.655000', 1399985191002447872, '2022-06-04 18:45:09.655000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133164363778, 'BrandController#findById', '通过ID查询', 'GET', '/brand/findById', '品牌', b'1', b'1', '品牌 通过ID查询', 1399985191002447872, '2022-06-04 18:45:09.655000', 1399985191002447872, '2022-06-04 18:45:09.655000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133164363779, 'WeChatPayConfigController#findById', '根据Id查询', 'GET', '/wechat/pay/findById', '微信支付', b'1', b'1', '微信支付 根据Id查询', 1399985191002447872, '2022-06-04 18:45:09.655000', 1399985191002447872, '2022-06-04 18:45:09.655000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133168558080, 'UserRoleController#findRoleIdsByUser', '根据用户ID获取到角色id集合', 'GET', '/user/role/findRoleIdsByUser', '用户角色管理', b'1', b'1', '用户角色管理 根据用户ID获取到角色id集合', 1399985191002447872, '2022-06-04 18:45:09.656000', 1399985191002447872, '2022-06-04 18:45:09.656000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1533037133168558081, 'SpecificationController#delete', '删除', 'DELETE', '/specification/delete', '规格', b'1', b'1', '规格 删除', 1399985191002447872, '2022-06-04 18:45:09.656000', 1399985191002447872, '2022-06-04 18:45:09.656000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330880, 'TestController#validation', '校验测试', 'GET', '/test/validation', '测试控制器', b'1', b'1', '测试控制器 校验测试', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330881, 'UserRoleController#saveAssign', '给用户分配角色', 'POST', '/user/role/saveAssign', '用户角色管理', b'1', b'1', '用户角色管理 给用户分配角色', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330882, 'UserAdminController#lockBatch', '批量锁定用户', 'POST', '/user/admin/lockBatch', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 批量锁定用户', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330883, 'UserDataScopeController#saveAssignBatch', '给用户分配权限(批量)', 'POST', '/user/data/scope/saveAssignBatch', '用户数据权限配置', b'1', b'1', '用户数据权限配置 给用户分配权限(批量)', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330884, 'UserDeptController#saveAssign', '给用户分配部门', 'POST', '/user/dept/saveAssign', '用户部门关联关系', b'1', b'1', '用户部门关联关系 给用户分配部门', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330885, 'PermPathController#batchUpdateEnable', '批量更新状态', 'POST', '/perm/path/batchUpdateEnable', '请求权限资源', b'1', b'1', '请求权限资源 批量更新状态', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330886, 'UserAdminController#unlockBatch', '批量解锁用户', 'POST', '/user/admin/unlockBatch', '管理用户(管理员级别)', b'1', b'1', '管理用户(管理员级别) 批量解锁用户', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330887, 'UserDeptController#saveAssignBatch', '给用户分配部门(批量)', 'POST', '/user/dept/saveAssignBatch', '用户部门关联关系', b'1', b'1', '用户部门关联关系 给用户分配部门(批量)', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330888, 'UserRoleController#saveAssignBatch', '给用户分配角色(批量)', 'POST', '/user/role/saveAssignBatch', '用户角色管理', b'1', b'1', '用户角色管理 给用户分配角色(批量)', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534396720414330889, 'PlumeLogMainController#getRunModel', 'getRunModel', 'GET', '/plumelog/getRunModel', 'PlumeLogMainController', b'1', b'1', 'PlumeLogMainController getRunModel', 1399985191002447872, '2022-06-08 12:47:40.516000', 1399985191002447872, '2022-06-08 12:47:40.516000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307008, 'MessageTemplateController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/message/template/existsByCodeNotId', '消息模板', b'1', b'1', '消息模板 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307009, 'PermPathController#deleteBatch', '批量删除', 'DELETE', '/perm/path/deleteBatch', '请求权限资源', b'1', b'1', '请求权限资源 批量删除', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307010, 'MessageTemplateController#rendering', '渲染模板', 'GET', '/message/template/rendering', '消息模板', b'1', b'1', '消息模板 渲染模板', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307011, 'SiteMessageController#send', '发送站内信', 'POST', '/site/message/send', '站内信', b'1', b'1', '站内信 发送站内信', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307012, 'SiteMessageController#read', '标为已读', 'POST', '/site/message/read', '站内信', b'1', b'1', '站内信 标为已读', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307013, 'MailSendController#sentSimpleMail', '发送简单邮件', 'POST', '/mail/send/sentSimpleMail', '邮件发送', b'1', b'1', '邮件发送 发送简单邮件', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307014, 'SiteMessageController#page', '消息分页', 'GET', '/site/message/page', '站内信', b'1', b'1', '站内信 消息分页', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307015, 'MailConfigController#existsByCode', '编码是否被使用', 'GET', '/mail/config/existsByCode', '邮箱配置', b'1', b'1', '邮箱配置 编码是否被使用', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307016, 'SiteMessageController#getSenderCount', '获取发送消息条数', 'GET', '/site/message/getSenderCount', '站内信', b'1', b'1', '站内信 获取发送消息条数', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307017, 'MailConfigController#setUpActivity', '设置启用的邮箱配置', 'POST', '/mail/config/setUpActivity', '邮箱配置', b'1', b'1', '邮箱配置 设置启用的邮箱配置', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307018, 'MessageTemplateController#add', '添加', 'POST', '/message/template/add', '消息模板', b'1', b'1', '消息模板 添加', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307019, 'MailConfigController#page', '分页', 'GET', '/mail/config/page', '邮箱配置', b'1', b'1', '邮箱配置 分页', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307020, 'MailConfigController#existsByCode', '编码是否被使用(不包含自己)', 'GET', '/mail/config/existsByCodeNotId', '邮箱配置', b'1', b'1', '邮箱配置 编码是否被使用(不包含自己)', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307021, 'MailConfigController#findAll', '获取所有邮箱配置', 'GET', '/mail/config/findAll', '邮箱配置', b'1', b'1', '邮箱配置 获取所有邮箱配置', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307022, 'MailConfigController#findById', '通过 id 获取指定邮箱配置', 'GET', '/mail/config/findById', '邮箱配置', b'1', b'1', '邮箱配置 通过 id 获取指定邮箱配置', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307023, 'MessageTemplateController#delete', '删除', 'DELETE', '/message/template/delete', '消息模板', b'1', b'1', '消息模板 删除', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307024, 'NcDemoController#sendMsg', '消息发送测试', 'GET', '/nc/test/sendMsg', 'nc测试', b'1', b'1', 'nc测试 消息发送测试', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307025, 'SiteMessageController#findById', '消息详情', 'GET', '/site/message/findById', '站内信', b'1', b'1', '站内信 消息详情', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307026, 'MailConfigController#updateMailConfig', '更新邮箱配置', 'POST', '/mail/config/update', '邮箱配置', b'1', b'1', '邮箱配置 更新邮箱配置', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307027, 'MailConfigController#add', '增加新邮箱配置', 'POST', '/mail/config/add', '邮箱配置', b'1', b'1', '邮箱配置 增加新邮箱配置', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307028, 'MailConfigController#delete', '删除', 'DELETE', '/mail/config/delete', '邮箱配置', b'1', b'1', '邮箱配置 删除', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307029, 'MessageTemplateController#existsByCode', '编码是否被使用', 'GET', '/message/template/existsByCode', '消息模板', b'1', b'1', '消息模板 编码是否被使用', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307030, 'MessageTemplateController#page', '分页', 'GET', '/message/template/page', '消息模板', b'1', b'1', '消息模板 分页', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307031, 'SiteMessageController#pageByReceive', '接收消息分页', 'GET', '/site/message/pageByReceive', '站内信', b'1', b'1', '站内信 接收消息分页', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307032, 'SiteMessageController#getReceiveCount', '获取接收消息条数', 'GET', '/site/message/getReceiveCount', '站内信', b'1', b'1', '站内信 获取接收消息条数', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307033, 'MailSendController#sendMail', '发送邮件', 'POST', '/mail/send/sendMail', '邮件发送', b'1', b'1', '邮件发送 发送邮件', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307034, 'SiteMessageController#pageBySender', '发送消息分页', 'GET', '/site/message/pageBySender', '站内信', b'1', b'1', '站内信 发送消息分页', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307035, 'MessageTemplateController#update', '更新', 'POST', '/message/template/update', '消息模板', b'1', b'1', '消息模板 更新', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534778144875307036, 'MessageTemplateController#findById', '获取详情', 'GET', '/message/template/findById', '消息模板', b'1', b'1', '消息模板 获取详情', 1399985191002447872, '2022-06-09 14:03:19.194000', 1399985191002447872, '2022-06-09 14:03:19.194000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1534816201016037376, 'TestController#userNotice', '用户全局ws消息通知测试', 'GET', '/test/userNotice', '测试控制器', b'1', b'1', '测试控制器 用户全局ws消息通知测试', 1399985191002447872, '2022-06-09 16:34:32.485000', 1399985191002447872, '2022-06-09 16:34:32.486000', b'0', 0); -INSERT INTO `iam_perm_path` VALUES (1535126126934061056, 'GlobalWebsocketDemoController#send', '发送消息', 'POST', '/demo/global/ws/send', '全局websocket通知demo', b'1', b'1', '全局websocket通知demo 发送消息', 1399985191002447872, '2022-06-10 13:06:04.582000', 1399985191002447872, '2022-06-10 13:06:04.582000', b'0', 0); --- ---------------------------- --- Table structure for iam_role_menu --- ---------------------------- -CREATE TABLE `iam_role_menu` ( - `id` bigint(20) NOT NULL, - `role_id` bigint(20) NOT NULL COMMENT '角色id', - `client_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '终端code', - `permission_id` bigint(20) NOT NULL COMMENT '菜单权限id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色菜单权限表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role_menu --- ---------------------------- -INSERT INTO `iam_role_menu` VALUES (1533038290578358272, 1405414804771971072, 'admin', 1414596052497092608); -INSERT INTO `iam_role_menu` VALUES (1533038290578358273, 1405414804771971072, 'admin', 1414596773275652096); -INSERT INTO `iam_role_menu` VALUES (1533038290578358274, 1405414804771971072, 'admin', 1431083330909208576); -INSERT INTO `iam_role_menu` VALUES (1533038290578358275, 1405414804771971072, 'admin', 1452567897717321728); -INSERT INTO `iam_role_menu` VALUES (1533038290578358276, 1405414804771971072, 'admin', 1435143678721236992); -INSERT INTO `iam_role_menu` VALUES (1533038290578358277, 1405414804771971072, 'admin', 1435476255797624832); -INSERT INTO `iam_role_menu` VALUES (1533038290578358278, 1405414804771971072, 'admin', 1480839877352476672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358279, 1405414804771971072, 'admin', 1452569339987472384); -INSERT INTO `iam_role_menu` VALUES (1533038290578358280, 1405414804771971072, 'admin', 1414596805538238464); -INSERT INTO `iam_role_menu` VALUES (1533038290578358281, 1405414804771971072, 'admin', 1431089129232498688); -INSERT INTO `iam_role_menu` VALUES (1533038290578358282, 1405414804771971072, 'admin', 1474694545336676352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358283, 1405414804771971072, 'admin', 1452569691537256448); -INSERT INTO `iam_role_menu` VALUES (1533038290578358284, 1405414804771971072, 'admin', 1414596647509446656); -INSERT INTO `iam_role_menu` VALUES (1533038290578358285, 1405414804771971072, 'admin', 1414596842322284544); -INSERT INTO `iam_role_menu` VALUES (1533038290578358286, 1405414804771971072, 'admin', 1431082258161434624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358287, 1405414804771971072, 'admin', 1450473063320526848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358288, 1405414804771971072, 'admin', 1452571269199540224); -INSERT INTO `iam_role_menu` VALUES (1533038290578358289, 1405414804771971072, 'admin', 1414596877617352704); -INSERT INTO `iam_role_menu` VALUES (1533038290578358290, 1405414804771971072, 'admin', 1450803906215886848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358291, 1405414804771971072, 'admin', 1452638905302966272); -INSERT INTO `iam_role_menu` VALUES (1533038290578358292, 1405414804771971072, 'admin', 1490984296616263680); -INSERT INTO `iam_role_menu` VALUES (1533038290578358293, 1405414804771971072, 'admin', 1495013564652429312); -INSERT INTO `iam_role_menu` VALUES (1533038290578358294, 1405414804771971072, 'admin', 1431152689832525824); -INSERT INTO `iam_role_menu` VALUES (1533038290578358295, 1405414804771971072, 'admin', 1431153358157348864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358296, 1405414804771971072, 'admin', 1438061887002759168); -INSERT INTO `iam_role_menu` VALUES (1533038290578358297, 1405414804771971072, 'admin', 1438072357281542144); -INSERT INTO `iam_role_menu` VALUES (1533038290578358298, 1405414804771971072, 'admin', 1439196893514031104); -INSERT INTO `iam_role_menu` VALUES (1533038290578358299, 1405414804771971072, 'admin', 1440216178722050048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358300, 1405414804771971072, 'admin', 1440216612211757056); -INSERT INTO `iam_role_menu` VALUES (1533038290578358301, 1405414804771971072, 'admin', 1450827660459458560); -INSERT INTO `iam_role_menu` VALUES (1533038290578358302, 1405414804771971072, 'admin', 1450819607680991232); -INSERT INTO `iam_role_menu` VALUES (1533038290578358303, 1405414804771971072, 'admin', 1450821723027881984); -INSERT INTO `iam_role_menu` VALUES (1533038290578358304, 1405414804771971072, 'admin', 1450821877831254016); -INSERT INTO `iam_role_menu` VALUES (1533038290578358305, 1405414804771971072, 'admin', 1450822511087271936); -INSERT INTO `iam_role_menu` VALUES (1533038290578358306, 1405414804771971072, 'admin', 1511266086400524288); -INSERT INTO `iam_role_menu` VALUES (1533038290578358307, 1405414804771971072, 'admin', 1450822842995130368); -INSERT INTO `iam_role_menu` VALUES (1533038290578358308, 1405414804771971072, 'admin', 1450825488577544192); -INSERT INTO `iam_role_menu` VALUES (1533038290578358309, 1405414804771971072, 'admin', 1501847310319972352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358310, 1405414804771971072, 'admin', 1450823960236081152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358311, 1405414804771971072, 'admin', 1450824117849636864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358312, 1405414804771971072, 'admin', 1450824319868289024); -INSERT INTO `iam_role_menu` VALUES (1533038290578358313, 1405414804771971072, 'admin', 1450824637876224000); -INSERT INTO `iam_role_menu` VALUES (1533038290578358314, 1405414804771971072, 'admin', 1450824875198332928); -INSERT INTO `iam_role_menu` VALUES (1533038290578358315, 1405414804771971072, 'admin', 1450825615857893376); -INSERT INTO `iam_role_menu` VALUES (1533038290578358316, 1405414804771971072, 'admin', 1450826890318135296); -INSERT INTO `iam_role_menu` VALUES (1533038290578358317, 1405414804771971072, 'admin', 1450827159626006528); -INSERT INTO `iam_role_menu` VALUES (1533038290578358318, 1405414804771971072, 'admin', 1450827308515409920); -INSERT INTO `iam_role_menu` VALUES (1533038290578358319, 1405414804771971072, 'admin', 1450825819436826624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358320, 1405414804771971072, 'admin', 1501740492360962048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358321, 1405414804771971072, 'admin', 1501742229142556672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358322, 1405414804771971072, 'admin', 1501742417378725888); -INSERT INTO `iam_role_menu` VALUES (1533038290578358323, 1405414804771971072, 'admin', 1502926397176242176); -INSERT INTO `iam_role_menu` VALUES (1533038290578358324, 1405414804771971072, 'admin', 1523860792695283712); -INSERT INTO `iam_role_menu` VALUES (1533038290578358325, 1405414804771971072, 'admin', 1523941932282114048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358326, 1405414804771971072, 'admin', 1523942130555252736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358327, 1405414804771971072, 'admin', 1524044195818278912); -INSERT INTO `iam_role_menu` VALUES (1533038290578358328, 1405414804771971072, 'admin', 1524044395823665152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358329, 1405414804771971072, 'admin', 1524044678314233856); -INSERT INTO `iam_role_menu` VALUES (1533038290578358330, 1405414804771971072, 'admin', 1525472571967860736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358331, 1405414804771971072, 'admin', 1495968302034210816); -INSERT INTO `iam_role_menu` VALUES (1533038290578358332, 1405414804771971072, 'admin', 1495969099987963904); -INSERT INTO `iam_role_menu` VALUES (1533038290578358333, 1405414804771971072, 'admin', 1506910599819165696); -INSERT INTO `iam_role_menu` VALUES (1533038290578358334, 1405414804771971072, 'admin', 1506910885463851008); -INSERT INTO `iam_role_menu` VALUES (1533038290578358335, 1405414804771971072, 'admin', 1506911113394913280); -INSERT INTO `iam_role_menu` VALUES (1533038290578358336, 1405414804771971072, 'admin', 1496020308992143360); -INSERT INTO `iam_role_menu` VALUES (1533038290578358337, 1405414804771971072, 'admin', 1507998458886197248); -INSERT INTO `iam_role_menu` VALUES (1533038290578358338, 1405414804771971072, 'admin', 1509488473583562752); -INSERT INTO `iam_role_menu` VALUES (1533038290578358339, 1405414804771971072, 'admin', 1530120084482084864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358340, 1405414804771971072, 'admin', 1414596052497092608); -INSERT INTO `iam_role_menu` VALUES (1533038290578358341, 1405414804771971072, 'admin', 1414596773275652096); -INSERT INTO `iam_role_menu` VALUES (1533038290578358342, 1405414804771971072, 'admin', 1431083330909208576); -INSERT INTO `iam_role_menu` VALUES (1533038290578358343, 1405414804771971072, 'admin', 1452567897717321728); -INSERT INTO `iam_role_menu` VALUES (1533038290578358344, 1405414804771971072, 'admin', 1435143678721236992); -INSERT INTO `iam_role_menu` VALUES (1533038290578358345, 1405414804771971072, 'admin', 1435476255797624832); -INSERT INTO `iam_role_menu` VALUES (1533038290578358346, 1405414804771971072, 'admin', 1480839877352476672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358347, 1405414804771971072, 'admin', 1452569339987472384); -INSERT INTO `iam_role_menu` VALUES (1533038290578358348, 1405414804771971072, 'admin', 1414596805538238464); -INSERT INTO `iam_role_menu` VALUES (1533038290578358349, 1405414804771971072, 'admin', 1431089129232498688); -INSERT INTO `iam_role_menu` VALUES (1533038290578358350, 1405414804771971072, 'admin', 1474694545336676352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358351, 1405414804771971072, 'admin', 1452569691537256448); -INSERT INTO `iam_role_menu` VALUES (1533038290578358352, 1405414804771971072, 'admin', 1414596647509446656); -INSERT INTO `iam_role_menu` VALUES (1533038290578358353, 1405414804771971072, 'admin', 1414596842322284544); -INSERT INTO `iam_role_menu` VALUES (1533038290578358354, 1405414804771971072, 'admin', 1431082258161434624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358355, 1405414804771971072, 'admin', 1450473063320526848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358356, 1405414804771971072, 'admin', 1452571269199540224); -INSERT INTO `iam_role_menu` VALUES (1533038290578358357, 1405414804771971072, 'admin', 1414596877617352704); -INSERT INTO `iam_role_menu` VALUES (1533038290578358358, 1405414804771971072, 'admin', 1450803906215886848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358359, 1405414804771971072, 'admin', 1452638905302966272); -INSERT INTO `iam_role_menu` VALUES (1533038290578358360, 1405414804771971072, 'admin', 1490984296616263680); -INSERT INTO `iam_role_menu` VALUES (1533038290578358361, 1405414804771971072, 'admin', 1495013564652429312); -INSERT INTO `iam_role_menu` VALUES (1533038290578358362, 1405414804771971072, 'admin', 1431152689832525824); -INSERT INTO `iam_role_menu` VALUES (1533038290578358363, 1405414804771971072, 'admin', 1431153358157348864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358364, 1405414804771971072, 'admin', 1438061887002759168); -INSERT INTO `iam_role_menu` VALUES (1533038290578358365, 1405414804771971072, 'admin', 1438072357281542144); -INSERT INTO `iam_role_menu` VALUES (1533038290578358366, 1405414804771971072, 'admin', 1439196893514031104); -INSERT INTO `iam_role_menu` VALUES (1533038290578358367, 1405414804771971072, 'admin', 1440216178722050048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358368, 1405414804771971072, 'admin', 1440216612211757056); -INSERT INTO `iam_role_menu` VALUES (1533038290578358369, 1405414804771971072, 'admin', 1450827660459458560); -INSERT INTO `iam_role_menu` VALUES (1533038290578358370, 1405414804771971072, 'admin', 1450819607680991232); -INSERT INTO `iam_role_menu` VALUES (1533038290578358371, 1405414804771971072, 'admin', 1450821723027881984); -INSERT INTO `iam_role_menu` VALUES (1533038290578358372, 1405414804771971072, 'admin', 1450821877831254016); -INSERT INTO `iam_role_menu` VALUES (1533038290578358373, 1405414804771971072, 'admin', 1450822511087271936); -INSERT INTO `iam_role_menu` VALUES (1533038290578358374, 1405414804771971072, 'admin', 1511266086400524288); -INSERT INTO `iam_role_menu` VALUES (1533038290578358375, 1405414804771971072, 'admin', 1450822842995130368); -INSERT INTO `iam_role_menu` VALUES (1533038290578358376, 1405414804771971072, 'admin', 1450825488577544192); -INSERT INTO `iam_role_menu` VALUES (1533038290578358377, 1405414804771971072, 'admin', 1501847310319972352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358378, 1405414804771971072, 'admin', 1450823960236081152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358379, 1405414804771971072, 'admin', 1450824117849636864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358380, 1405414804771971072, 'admin', 1450824319868289024); -INSERT INTO `iam_role_menu` VALUES (1533038290578358381, 1405414804771971072, 'admin', 1450824637876224000); -INSERT INTO `iam_role_menu` VALUES (1533038290578358382, 1405414804771971072, 'admin', 1450824875198332928); -INSERT INTO `iam_role_menu` VALUES (1533038290578358383, 1405414804771971072, 'admin', 1450825615857893376); -INSERT INTO `iam_role_menu` VALUES (1533038290578358384, 1405414804771971072, 'admin', 1450826890318135296); -INSERT INTO `iam_role_menu` VALUES (1533038290578358385, 1405414804771971072, 'admin', 1450827159626006528); -INSERT INTO `iam_role_menu` VALUES (1533038290578358386, 1405414804771971072, 'admin', 1450827308515409920); -INSERT INTO `iam_role_menu` VALUES (1533038290578358387, 1405414804771971072, 'admin', 1450825819436826624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358388, 1405414804771971072, 'admin', 1501740492360962048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358389, 1405414804771971072, 'admin', 1501742229142556672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358390, 1405414804771971072, 'admin', 1501742417378725888); -INSERT INTO `iam_role_menu` VALUES (1533038290578358391, 1405414804771971072, 'admin', 1502926397176242176); -INSERT INTO `iam_role_menu` VALUES (1533038290578358392, 1405414804771971072, 'admin', 1523860792695283712); -INSERT INTO `iam_role_menu` VALUES (1533038290578358393, 1405414804771971072, 'admin', 1523941932282114048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358394, 1405414804771971072, 'admin', 1523942130555252736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358395, 1405414804771971072, 'admin', 1524044195818278912); -INSERT INTO `iam_role_menu` VALUES (1533038290578358396, 1405414804771971072, 'admin', 1524044395823665152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358397, 1405414804771971072, 'admin', 1524044678314233856); -INSERT INTO `iam_role_menu` VALUES (1533038290578358398, 1405414804771971072, 'admin', 1525472571967860736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358399, 1405414804771971072, 'admin', 1495968302034210816); -INSERT INTO `iam_role_menu` VALUES (1533038290578358400, 1405414804771971072, 'admin', 1495969099987963904); -INSERT INTO `iam_role_menu` VALUES (1533038290578358401, 1405414804771971072, 'admin', 1506910599819165696); -INSERT INTO `iam_role_menu` VALUES (1533038290578358402, 1405414804771971072, 'admin', 1506910885463851008); -INSERT INTO `iam_role_menu` VALUES (1533038290578358403, 1405414804771971072, 'admin', 1506911113394913280); -INSERT INTO `iam_role_menu` VALUES (1533038290578358404, 1405414804771971072, 'admin', 1496020308992143360); -INSERT INTO `iam_role_menu` VALUES (1533038290578358405, 1405414804771971072, 'admin', 1507998458886197248); -INSERT INTO `iam_role_menu` VALUES (1533038290578358406, 1405414804771971072, 'admin', 1509488473583562752); -INSERT INTO `iam_role_menu` VALUES (1533038290578358407, 1405414804771971072, 'admin', 1530120084482084864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358408, 1405414804771971072, 'admin', 1414596052497092608); -INSERT INTO `iam_role_menu` VALUES (1533038290578358409, 1405414804771971072, 'admin', 1414596773275652096); -INSERT INTO `iam_role_menu` VALUES (1533038290578358410, 1405414804771971072, 'admin', 1431083330909208576); -INSERT INTO `iam_role_menu` VALUES (1533038290578358411, 1405414804771971072, 'admin', 1452567897717321728); -INSERT INTO `iam_role_menu` VALUES (1533038290578358412, 1405414804771971072, 'admin', 1435143678721236992); -INSERT INTO `iam_role_menu` VALUES (1533038290578358413, 1405414804771971072, 'admin', 1435476255797624832); -INSERT INTO `iam_role_menu` VALUES (1533038290578358414, 1405414804771971072, 'admin', 1480839877352476672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358415, 1405414804771971072, 'admin', 1452569339987472384); -INSERT INTO `iam_role_menu` VALUES (1533038290578358416, 1405414804771971072, 'admin', 1414596805538238464); -INSERT INTO `iam_role_menu` VALUES (1533038290578358417, 1405414804771971072, 'admin', 1431089129232498688); -INSERT INTO `iam_role_menu` VALUES (1533038290578358418, 1405414804771971072, 'admin', 1474694545336676352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358419, 1405414804771971072, 'admin', 1452569691537256448); -INSERT INTO `iam_role_menu` VALUES (1533038290578358420, 1405414804771971072, 'admin', 1414596647509446656); -INSERT INTO `iam_role_menu` VALUES (1533038290578358421, 1405414804771971072, 'admin', 1414596842322284544); -INSERT INTO `iam_role_menu` VALUES (1533038290578358422, 1405414804771971072, 'admin', 1431082258161434624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358423, 1405414804771971072, 'admin', 1450473063320526848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358424, 1405414804771971072, 'admin', 1452571269199540224); -INSERT INTO `iam_role_menu` VALUES (1533038290578358425, 1405414804771971072, 'admin', 1414596877617352704); -INSERT INTO `iam_role_menu` VALUES (1533038290578358426, 1405414804771971072, 'admin', 1450803906215886848); -INSERT INTO `iam_role_menu` VALUES (1533038290578358427, 1405414804771971072, 'admin', 1452638905302966272); -INSERT INTO `iam_role_menu` VALUES (1533038290578358428, 1405414804771971072, 'admin', 1490984296616263680); -INSERT INTO `iam_role_menu` VALUES (1533038290578358429, 1405414804771971072, 'admin', 1495013564652429312); -INSERT INTO `iam_role_menu` VALUES (1533038290578358430, 1405414804771971072, 'admin', 1431152689832525824); -INSERT INTO `iam_role_menu` VALUES (1533038290578358431, 1405414804771971072, 'admin', 1431153358157348864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358432, 1405414804771971072, 'admin', 1438061887002759168); -INSERT INTO `iam_role_menu` VALUES (1533038290578358433, 1405414804771971072, 'admin', 1438072357281542144); -INSERT INTO `iam_role_menu` VALUES (1533038290578358434, 1405414804771971072, 'admin', 1439196893514031104); -INSERT INTO `iam_role_menu` VALUES (1533038290578358435, 1405414804771971072, 'admin', 1440216178722050048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358436, 1405414804771971072, 'admin', 1440216612211757056); -INSERT INTO `iam_role_menu` VALUES (1533038290578358437, 1405414804771971072, 'admin', 1450827660459458560); -INSERT INTO `iam_role_menu` VALUES (1533038290578358438, 1405414804771971072, 'admin', 1450819607680991232); -INSERT INTO `iam_role_menu` VALUES (1533038290578358439, 1405414804771971072, 'admin', 1450821723027881984); -INSERT INTO `iam_role_menu` VALUES (1533038290578358440, 1405414804771971072, 'admin', 1450821877831254016); -INSERT INTO `iam_role_menu` VALUES (1533038290578358441, 1405414804771971072, 'admin', 1450822511087271936); -INSERT INTO `iam_role_menu` VALUES (1533038290578358442, 1405414804771971072, 'admin', 1511266086400524288); -INSERT INTO `iam_role_menu` VALUES (1533038290578358443, 1405414804771971072, 'admin', 1450822842995130368); -INSERT INTO `iam_role_menu` VALUES (1533038290578358444, 1405414804771971072, 'admin', 1450825488577544192); -INSERT INTO `iam_role_menu` VALUES (1533038290578358445, 1405414804771971072, 'admin', 1501847310319972352); -INSERT INTO `iam_role_menu` VALUES (1533038290578358446, 1405414804771971072, 'admin', 1450823960236081152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358447, 1405414804771971072, 'admin', 1450824117849636864); -INSERT INTO `iam_role_menu` VALUES (1533038290578358448, 1405414804771971072, 'admin', 1450824319868289024); -INSERT INTO `iam_role_menu` VALUES (1533038290578358449, 1405414804771971072, 'admin', 1450824637876224000); -INSERT INTO `iam_role_menu` VALUES (1533038290578358450, 1405414804771971072, 'admin', 1450824875198332928); -INSERT INTO `iam_role_menu` VALUES (1533038290578358451, 1405414804771971072, 'admin', 1450825615857893376); -INSERT INTO `iam_role_menu` VALUES (1533038290578358452, 1405414804771971072, 'admin', 1450826890318135296); -INSERT INTO `iam_role_menu` VALUES (1533038290578358453, 1405414804771971072, 'admin', 1450827159626006528); -INSERT INTO `iam_role_menu` VALUES (1533038290578358454, 1405414804771971072, 'admin', 1450827308515409920); -INSERT INTO `iam_role_menu` VALUES (1533038290578358455, 1405414804771971072, 'admin', 1450825819436826624); -INSERT INTO `iam_role_menu` VALUES (1533038290578358456, 1405414804771971072, 'admin', 1501740492360962048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358457, 1405414804771971072, 'admin', 1501742229142556672); -INSERT INTO `iam_role_menu` VALUES (1533038290578358458, 1405414804771971072, 'admin', 1501742417378725888); -INSERT INTO `iam_role_menu` VALUES (1533038290578358459, 1405414804771971072, 'admin', 1502926397176242176); -INSERT INTO `iam_role_menu` VALUES (1533038290578358460, 1405414804771971072, 'admin', 1523860792695283712); -INSERT INTO `iam_role_menu` VALUES (1533038290578358461, 1405414804771971072, 'admin', 1523941932282114048); -INSERT INTO `iam_role_menu` VALUES (1533038290578358462, 1405414804771971072, 'admin', 1523942130555252736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358463, 1405414804771971072, 'admin', 1524044195818278912); -INSERT INTO `iam_role_menu` VALUES (1533038290578358464, 1405414804771971072, 'admin', 1524044395823665152); -INSERT INTO `iam_role_menu` VALUES (1533038290578358465, 1405414804771971072, 'admin', 1524044678314233856); -INSERT INTO `iam_role_menu` VALUES (1533038290578358466, 1405414804771971072, 'admin', 1525472571967860736); -INSERT INTO `iam_role_menu` VALUES (1533038290578358467, 1405414804771971072, 'admin', 1495968302034210816); -INSERT INTO `iam_role_menu` VALUES (1533038290578358468, 1405414804771971072, 'admin', 1495969099987963904); -INSERT INTO `iam_role_menu` VALUES (1533038290578358469, 1405414804771971072, 'admin', 1506910599819165696); -INSERT INTO `iam_role_menu` VALUES (1533038290578358470, 1405414804771971072, 'admin', 1506910885463851008); -INSERT INTO `iam_role_menu` VALUES (1533038290578358471, 1405414804771971072, 'admin', 1506911113394913280); -INSERT INTO `iam_role_menu` VALUES (1533038290578358472, 1405414804771971072, 'admin', 1496020308992143360); -INSERT INTO `iam_role_menu` VALUES (1533038290578358473, 1405414804771971072, 'admin', 1507998458886197248); -INSERT INTO `iam_role_menu` VALUES (1533038290578358474, 1405414804771971072, 'admin', 1509488473583562752); -INSERT INTO `iam_role_menu` VALUES (1533038290578358475, 1405414804771971072, 'admin', 1530120084482084864); - --- ---------------------------- --- Table structure for base_dict_item --- ---------------------------- -CREATE TABLE `base_dict_item` ( - `id` bigint(20) NOT NULL, - `dict_id` bigint(20) NOT NULL COMMENT '字典id', - `dict_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典code', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项code', - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项名称', - `sort_no` double(8, 2) NOT NULL COMMENT '排序', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_dictionary_id`(`dict_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典项' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dict_item --- ---------------------------- -INSERT INTO `base_dict_item` VALUES (1422931375807242241, 1422929378374828033, 'Sex', '1', '男', 0.00, '男性', 0, '2021-08-04 22:44:11', 0, '2021-08-04 22:44:11', 0, 2); -INSERT INTO `base_dict_item` VALUES (1425729455402401794, 1422929378374828033, 'Sex', '2', '女', 0.00, '女性', 0, '2021-08-12 16:02:46', 0, '2021-08-12 16:02:46', 0, 1); -INSERT INTO `base_dict_item` VALUES (1425744258544136194, 1425744045414772737, 'MenuType', '0', '顶级菜单', 0.00, '顶级菜单', 0, '2021-08-12 17:01:35', 0, '2021-08-12 17:01:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1425744436592340993, 1425744045414772737, 'MenuType', '1', '子菜单', 0.00, '子菜单', 0, '2021-08-12 17:02:17', 0, '2021-08-12 17:02:17', 0, 0); -INSERT INTO `base_dict_item` VALUES (1425744470582980610, 1425744045414772737, 'MenuType', '2', '按钮权限', 0.00, '按钮权限', 0, '2021-08-12 17:02:26', 0, '2021-08-12 17:02:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1430094707250413568, 1422929378374828033, 'Sex', '0', '未知', 0.00, '不确定性别', 1399985191002447872, '2021-08-24 17:08:43', 1399985191002447872, '2021-08-24 17:08:43', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830086406463488, 1435829999592759296, 'UserStatusCode', '1', '正常', 0.00, 'NORMAL', 1399985191002447872, '2021-09-09 12:59:04', 1399985191002447872, '2021-09-09 12:59:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830141855162368, 1435829999592759296, 'UserStatusCode', '2', '锁定', 0.00, 'LOCK, 多次登录失败被锁定', 1399985191002447872, '2021-09-09 12:59:17', 1399985191002447872, '2021-09-09 12:59:17', 0, 1); -INSERT INTO `base_dict_item` VALUES (1435830260503633920, 1435829999592759296, 'UserStatusCode', '3', '封禁', 0.00, 'BAN', 1399985191002447872, '2021-09-09 12:59:45', 1399985191002447872, '2021-09-09 12:59:45', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838374749626368, 1435838066191458304, 'LogBusinessType', 'other', '其它', 0.00, '', 1399985191002447872, '2021-09-09 13:32:00', 1399985191002447872, '2021-09-09 13:32:00', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838414436130816, 1435838066191458304, 'LogBusinessType', 'insert', '新增', 0.00, '', 1399985191002447872, '2021-09-09 13:32:09', 1399985191002447872, '2021-09-09 13:32:09', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838467624099840, 1435838066191458304, 'LogBusinessType', 'update', '修改', 0.00, '', 1399985191002447872, '2021-09-09 13:32:22', 1399985191002447872, '2021-09-09 13:32:22', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838502755590144, 1435838066191458304, 'LogBusinessType', 'delete', '删除', 0.00, '', 1399985191002447872, '2021-09-09 13:32:30', 1399985191002447872, '2021-09-09 13:32:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838546934194176, 1435838066191458304, 'LogBusinessType', 'grant', '授权', 0.00, '', 1399985191002447872, '2021-09-09 13:32:41', 1399985191002447872, '2021-09-09 13:32:41', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838605537009664, 1435838066191458304, 'LogBusinessType', 'export', '导出', 0.00, '', 1399985191002447872, '2021-09-09 13:32:55', 1399985191002447872, '2021-09-09 13:32:55', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838705457913856, 1435838066191458304, 'LogBusinessType', 'import', '导入', 0.00, '', 1399985191002447872, '2021-09-09 13:33:19', 1399985191002447872, '2021-09-09 13:33:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838745861644288, 1435838066191458304, 'LogBusinessType', 'force', '强退', 0.00, '', 1399985191002447872, '2021-09-09 13:33:28', 1399985191002447872, '2021-09-09 13:33:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838786273763328, 1435838066191458304, 'LogBusinessType', 'clean', '清空数据', 0.00, '', 1399985191002447872, '2021-09-09 13:33:38', 1399985191002447872, '2021-09-09 13:33:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438079113630003200, 1438078864509317120, 'MailSecurityCode', '1', '普通方式', 0.00, 'SECURITY_TYPE_PLAIN', 1399985191002447872, '2021-09-15 17:55:54', 1399985191002447872, '2021-09-15 17:55:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438080323061755904, 1438078864509317120, 'MailSecurityCode', '2', 'TLS方式', 0.00, 'SECURITY_TYPE_TLS', 1399985191002447872, '2021-09-15 18:00:42', 1399985191002447872, '2021-09-15 18:00:42', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438080372231581696, 1438078864509317120, 'MailSecurityCode', '3', 'SSL方式', 0.00, 'SECURITY_TYPE_SSL', 1399985191002447872, '2021-09-15 18:00:54', 1399985191002447872, '2021-09-15 18:00:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439961603914047488, 1439961232651034624, 'MessageTemplateCode', '5', '微信', -10.00, 'WECHAT', 1399985191002447872, '2021-09-20 22:36:14', 1399985191002447872, '2021-09-20 22:36:14', 0, 1); -INSERT INTO `base_dict_item` VALUES (1439961704321490944, 1439961232651034624, 'MessageTemplateCode', '4', 'Email', 0.00, 'EMAIL', 1399985191002447872, '2021-09-20 22:36:38', 1399985191002447872, '2021-09-20 22:36:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962132744478720, 1439961232651034624, 'MessageTemplateCode', '3', '短信', 0.00, 'SMS', 1399985191002447872, '2021-09-20 22:38:20', 1399985191002447872, '2021-09-20 22:38:20', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962205578567680, 1439961232651034624, 'MessageTemplateCode', '2', '钉钉机器人', 0.00, 'DING_TALK_ROBOT', 1399985191002447872, '2021-09-20 22:38:38', 1399985191002447872, '2021-09-20 22:38:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962267511660544, 1439961232651034624, 'MessageTemplateCode', '1', '钉钉', 0.00, 'DING_TALK', 1399985191002447872, '2021-09-20 22:38:52', 1399985191002447872, '2021-09-20 22:38:52', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452836696873984000, 1452836604783845376, 'SocialType', 'WeChat', '微信', 0.00, '', 1399985191002447872, '2021-10-26 11:17:16', 1399985191002447872, '2021-10-26 11:17:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452837435482529792, 1452836604783845376, 'SocialType', 'QQ', 'QQ', 0.00, '', 1399985191002447872, '2021-10-26 11:20:12', 1399985191002447872, '2021-10-26 11:20:12', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452837523030237184, 1452836604783845376, 'SocialType', 'DingTalk', '钉钉', 0.00, '', 1399985191002447872, '2021-10-26 11:20:33', 1399985191002447872, '2021-10-26 11:20:33', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452844537911406592, 1452843488735621120, 'ParamType', '1', '系统参数', 0.00, '', 1399985191002447872, '2021-10-26 11:48:25', 1399985191002447872, '2021-10-26 11:48:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452844565031776256, 1452843488735621120, 'ParamType', '2', '用户参数', 0.00, '', 1399985191002447872, '2021-10-26 11:48:32', 1399985191002447872, '2021-10-26 11:48:32', 0, 2); -INSERT INTO `base_dict_item` VALUES (1496026946344005632, 1496024933900169216, 'Political', '1', '中共党员', 1.00, '', 1399985191002447872, '2022-02-22 15:39:54', 1399985191002447872, '2022-02-22 15:39:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027004560945152, 1496024933900169216, 'Political', '2', '中共预备党员', 2.00, '', 1399985191002447872, '2022-02-22 15:40:07', 1399985191002447872, '2022-02-22 15:40:07', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027039264616448, 1496024933900169216, 'Political', '3', '共青团员', 3.00, '', 1399985191002447872, '2022-02-22 15:40:16', 1399985191002447872, '2022-02-22 15:40:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027077550223360, 1496024933900169216, 'Political', '4', '民革党员', 4.00, '', 1399985191002447872, '2022-02-22 15:40:25', 1399985191002447872, '2022-02-22 15:40:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027123461074944, 1496024933900169216, 'Political', '5', '民盟盟员', 5.00, '', 1399985191002447872, '2022-02-22 15:40:36', 1399985191002447872, '2022-02-22 15:40:36', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027197566038016, 1496024933900169216, 'Political', '6', '民建会员', 6.00, '', 1399985191002447872, '2022-02-22 15:40:53', 1399985191002447872, '2022-02-22 15:40:53', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027234803068928, 1496024933900169216, 'Political', '7', '民进会员', 7.00, '', 1399985191002447872, '2022-02-22 15:41:02', 1399985191002447872, '2022-02-22 15:41:02', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027272941875200, 1496024933900169216, 'Political', '8', '农工党党员', 8.00, '', 1399985191002447872, '2022-02-22 15:41:11', 1399985191002447872, '2022-02-22 15:41:11', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027306634719232, 1496024933900169216, 'Political', '9', '致公党党员', 9.00, '', 1399985191002447872, '2022-02-22 15:41:19', 1399985191002447872, '2022-02-22 15:41:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027369796743168, 1496024933900169216, 'Political', '10', '九三学社社员', 10.00, '', 1399985191002447872, '2022-02-22 15:41:34', 1399985191002447872, '2022-02-22 15:41:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027408141070336, 1496024933900169216, 'Political', '11', '台盟盟员', 11.00, '', 1399985191002447872, '2022-02-22 15:41:44', 1399985191002447872, '2022-02-22 15:41:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027456849522688, 1496024933900169216, 'Political', '12', '无党派人士', 12.00, '', 1399985191002447872, '2022-02-22 15:41:55', 1399985191002447872, '2022-02-22 15:41:55', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027516639326208, 1496024933900169216, 'Political', '13', '群众', 13.00, '', 1399985191002447872, '2022-02-22 15:42:09', 1399985191002447872, '2022-02-22 15:42:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780500696539136, 1496722894707728384, 'PayChannel', '1', '支付宝', 1.00, '', 1399985191002447872, '2022-02-24 17:34:15', 1399985191002447872, '2022-03-08 11:02:59', 0, 3); -INSERT INTO `base_dict_item` VALUES (1496780576818962432, 1496722894707728384, 'PayChannel', '2', '微信', 2.00, '', 1399985191002447872, '2022-02-24 17:34:33', 1399985191002447872, '2022-03-08 11:04:00', 0, 2); -INSERT INTO `base_dict_item` VALUES (1496780712492113920, 1496723207565058048, 'PayWay', '1', 'wap支付', 0.00, '', 1399985191002447872, '2022-02-24 17:35:05', 1399985191002447872, '2022-02-24 17:35:05', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780757647990784, 1496723207565058048, 'PayWay', '2', '应用支付', 0.00, '', 1399985191002447872, '2022-02-24 17:35:16', 1399985191002447872, '2022-02-24 17:35:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780799691694080, 1496723207565058048, 'PayWay', '3', 'web支付', 0.00, '', 1399985191002447872, '2022-02-24 17:35:26', 1399985191002447872, '2022-02-24 17:35:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780838451257344, 1496723207565058048, 'PayWay', '4', '二维码扫码支付', 0.00, '', 1399985191002447872, '2022-02-24 17:35:35', 1399985191002447872, '2022-02-24 17:35:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780876388737024, 1496723207565058048, 'PayWay', '5', '付款码支付', 0.00, '', 1399985191002447872, '2022-02-24 17:35:44', 1399985191002447872, '2022-02-24 17:35:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141630803566592, 1497140849954185216, 'PayStatus', '3', '支付取消', 0.00, '', 1399985191002447872, '2022-02-25 17:29:15', 1399985191002447872, '2022-02-25 17:29:15', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141652379066368, 1497140849954185216, 'PayStatus', '2', '失败', 0.00, '', 1399985191002447872, '2022-02-25 17:29:20', 1399985191002447872, '2022-02-25 17:29:20', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141681915355136, 1497140849954185216, 'PayStatus', '1', '成功', 0.00, '', 1399985191002447872, '2022-02-25 17:29:27', 1399985191002447872, '2022-02-25 17:29:27', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141712743489536, 1497140849954185216, 'PayStatus', '0', '支付中', 0.00, '', 1399985191002447872, '2022-02-25 17:29:35', 1399985191002447872, '2022-02-25 17:29:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497506810439892992, 1497140849954185216, 'PayStatus', '4', '部分退款', 1.00, '部分退款', 1399985191002447872, '2022-02-26 17:40:21', 1399985191002447872, '2022-03-04 21:22:46', 0, 7); -INSERT INTO `base_dict_item` VALUES (1499367587857694720, 1497140849954185216, 'PayStatus', '5', '已退款', 2.00, '完全退款', 1399985191002447872, '2022-03-03 20:54:25', 1399985191002447872, '2022-03-04 21:22:49', 0, 3); -INSERT INTO `base_dict_item` VALUES (1501030031432847360, 1496722894707728384, 'PayChannel', '3', '云闪付', 3.00, '', 1399985191002447872, '2022-03-08 11:00:22', 1399985191002447872, '2022-03-08 11:04:07', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030073489133568, 1496722894707728384, 'PayChannel', '4', '现金', 4.00, '', 1399985191002447872, '2022-03-08 11:00:32', 1399985191002447872, '2022-03-08 11:04:10', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030108314439680, 1496722894707728384, 'PayChannel', '5', '钱包', 5.00, '', 1399985191002447872, '2022-03-08 11:00:40', 1399985191002447872, '2022-03-08 11:04:14', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501031490513768448, 1501031423232937984, 'AsyncPayChannel', '3', '云闪付', 0.00, '', 1399985191002447872, '2022-03-08 11:06:10', 1399985191002447872, '2022-03-08 11:06:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031518208757760, 1501031423232937984, 'AsyncPayChannel', '2', '微信', 0.00, '', 1399985191002447872, '2022-03-08 11:06:16', 1399985191002447872, '2022-03-08 11:06:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031544360243200, 1501031423232937984, 'AsyncPayChannel', '1', '支付宝', 0.00, '', 1399985191002447872, '2022-03-08 11:06:23', 1399985191002447872, '2022-03-08 11:06:23', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276841057005568, 1502276739978473472, 'WalletStatus', '2', '禁用', 0.00, '', 1399985191002447872, '2022-03-11 21:34:45', 1399985191002447872, '2022-03-11 21:34:45', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276862108217344, 1502276739978473472, 'WalletStatus', '1', '正常', 0.00, '', 1399985191002447872, '2022-03-11 21:34:50', 1399985191002447872, '2022-03-11 21:34:50', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624716257456128, 1502624515799085056, 'WalletLogType', '1', '开通', 0.00, '', 1399985191002447872, '2022-03-12 20:37:04', 1399985191002447872, '2022-03-12 20:37:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624931978899456, 1502624515799085056, 'WalletLogType', '2', '主动充值', 0.00, '', 1399985191002447872, '2022-03-12 20:37:56', 1399985191002447872, '2022-03-12 20:37:56', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624956209393664, 1502624515799085056, 'WalletLogType', '3', '自动充值', 0.00, '', 1399985191002447872, '2022-03-12 20:38:02', 1399985191002447872, '2022-03-12 20:38:02', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625014719934464, 1502624515799085056, 'WalletLogType', '4', '余额变动', 0.00, '', 1399985191002447872, '2022-03-12 20:38:16', 1399985191002447872, '2022-03-12 20:38:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625053097816064, 1502624515799085056, 'WalletLogType', '5', '支付', 0.00, '', 1399985191002447872, '2022-03-12 20:38:25', 1399985191002447872, '2022-03-12 20:38:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625091639275520, 1502624515799085056, 'WalletLogType', '6', '系统扣除余额', 0.00, '', 1399985191002447872, '2022-03-12 20:38:34', 1399985191002447872, '2022-03-12 20:38:34', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625123725701120, 1502624515799085056, 'WalletLogType', '7', '退款', 0.00, '', 1399985191002447872, '2022-03-12 20:38:42', 1399985191002447872, '2022-03-12 20:38:42', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625783145787392, 1502624632392347648, 'WalletLogOperation', '1', '系统操作', 0.00, '', 1399985191002447872, '2022-03-12 20:41:19', 1399985191002447872, '2022-03-12 20:41:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625814837948416, 1502624632392347648, 'WalletLogOperation', '2', '管理员操作', 0.00, '', 1399985191002447872, '2022-03-12 20:41:26', 1399985191002447872, '2022-03-12 20:41:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625850355314688, 1502624632392347648, 'WalletLogOperation', '3', '用户操作', 0.00, '', 1399985191002447872, '2022-03-12 20:41:35', 1399985191002447872, '2022-03-12 20:41:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340241493135360, 1503340128037212160, 'VoucherStatus', '1', '启用', 0.00, '', 1399985191002447872, '2022-03-14 20:00:19', 1399985191002447872, '2022-03-14 20:00:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340326645895168, 1503340128037212160, 'VoucherStatus', '2', '停用', 0.00, '', 1399985191002447872, '2022-03-14 20:00:39', 1399985191002447872, '2022-03-14 20:00:39', 0, 0); -INSERT INTO `base_dict_item` VALUES (1505112357976612864, 1496722894707728384, 'PayChannel', '6', '储值卡', 0.00, '', 1399985191002447872, '2022-03-19 17:22:04', 1399985191002447872, '2022-03-19 17:22:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356452720758784, 1524356376518643712, 'GoodsParamType', 'input', '手工录入', 0.00, '', 1399985191002447872, '2022-05-11 19:51:14', 1399985191002447872, '2022-05-11 19:51:14', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356510157557760, 1524356376518643712, 'GoodsParamType', 'select', '列表选择', 0.00, '', 1399985191002447872, '2022-05-11 19:51:28', 1399985191002447872, '2022-05-11 19:51:28', 0, 0); - --- ---------------------------- --- Table structure for iam_perm_menu --- ---------------------------- -CREATE TABLE `iam_perm_menu` ( - `id` bigint(20) NOT NULL, - `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '终端code', - `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由名称', - `perm_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单权限编码', - `effect` bit(1) NULL DEFAULT NULL COMMENT '是否有效', - `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', - `hidden` bit(1) NOT NULL COMMENT '是否隐藏', - `hide_children_in_menu` bit(1) NOT NULL COMMENT '是否隐藏子菜单', - `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件', - `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件名字', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路径', - `redirect` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单跳转地址(重定向)', - `sort_no` double NOT NULL COMMENT '菜单排序', - `menu_type` int(5) NOT NULL COMMENT '类型(0:一级菜单;1:子菜单 ;2:按钮权限)', - `leaf` bit(1) NULL DEFAULT NULL COMMENT '是否叶子节点', - `keep_alive` bit(1) NULL DEFAULT NULL COMMENT '是否缓存页面', - `target_outside` bit(1) NULL DEFAULT NULL COMMENT '是否外部打开方式', - `hidden_header_content` bit(1) NULL DEFAULT NULL COMMENT '隐藏的标题内容', - `admin` bit(1) NOT NULL COMMENT '系统菜单', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_菜单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_perm_menu --- ---------------------------- -INSERT INTO `iam_perm_menu` VALUES (1414596052497092608, 'admin', NULL, '系统管理', 'system', '', NULL, 'desktop', b'0', b'0', 'RouteView', '', '/system', '/system/user', 0, 0, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:02:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596647509446656, 'admin', 1452569691537256448, '用户管理', 'User', '', NULL, '', b'0', b'0', 'system/user/UserList', '', '/system/userAuth/user', '', 0, 1, b'0', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:17:40', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596773275652096, 'admin', 1414596052497092608, '菜单管理', 'Menu', '', NULL, '', b'0', b'0', 'system/menu/MenuList', '', '/system/permission/menu', '', 0, 1, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596805538238464, 'admin', 1452569339987472384, '角色管理', 'Role', '', NULL, '', b'0', b'0', 'system/role/RoleList', '', '/system/permission/role', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:04', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596842322284544, 'admin', 1452569691537256448, '部门管理', 'Dept', '', NULL, '', b'0', b'0', 'system/dept/DeptList', '', '/system/userAuth/dept', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:31', 7, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596877617352704, 'admin', 1452571269199540224, '数据字典', 'Dict', '', b'0', '', b'0', b'0', 'system/translate/DictList', '', '/system/config/translate', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2022-05-19 09:04:55', 11, 0); -INSERT INTO `iam_perm_menu` VALUES (1431082258161434624, 'admin', 1452569691537256448, '在线用户管理', 'OnlineUser', '', NULL, '', b'0', b'0', 'system/online/OnlineUserList', NULL, '/system/userAuth/online', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:32:53', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1431083330909208576, 'admin', 1414596052497092608, '终端管理', 'Client', '', b'0', '', b'0', b'0', 'system/client/ClientList', NULL, '/system/config/client', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:09', 1399985191002447872, '2022-05-19 09:04:25', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1431089129232498688, 'admin', 1452569339987472384, '请求权限管理', 'Path', '', NULL, '', b'0', b'0', 'system/path/PathList', NULL, '/system/permission/path', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 11:00:11', 1399985191002447872, '2021-08-27 11:00:11', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1431152689832525824, 'admin', NULL, '系统监控', 'monitor', '', b'0', 'radar-chart', b'0', b'0', 'RouteView', NULL, '/monitor', '', 0, 0, b'1', b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2021-08-27 15:12:45', 1399985191002447872, '2022-06-07 10:30:49', 18, 0); -INSERT INTO `iam_perm_menu` VALUES (1431153358157348864, 'admin', 1431152689832525824, '接口文档', 'ApiSwagger', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, b'1', b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 15:15:25', 1399985191002447872, '2022-06-07 11:06:52', 15, 0); -INSERT INTO `iam_perm_menu` VALUES (1435143678721236992, 'admin', 1452567897717321728, '登录日志', 'LoginLog', '', NULL, '', b'0', b'0', 'starter/log/LoginLogList', NULL, '/system/log/loginLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-07 15:31:31', 1399985191002447872, '2021-09-07 15:31:31', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1435476255797624832, 'admin', 1452567897717321728, '操作日志', 'OperateLog', '', NULL, '', b'0', b'0', 'starter/log/OperateLogList', NULL, '/system/log/OperateLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-08 13:33:04', 1399985191002447872, '2021-09-08 13:33:04', 7, 0); -INSERT INTO `iam_perm_menu` VALUES (1438061887002759168, 'admin', NULL, '通知管理', 'notice', '', NULL, 'message', b'0', b'0', 'RouteView', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 16:47:26', 1399985191002447872, '2021-09-15 16:47:26', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1438072357281542144, 'admin', 1438061887002759168, '邮件配置', 'MailConfig', '', NULL, '', b'0', b'0', 'notice/mail/MailConfigList', NULL, '/notice/mailConfig', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 17:29:03', 1399985191002447872, '2021-09-15 17:29:03', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1439196893514031104, 'admin', 1438061887002759168, '消息模板', 'MessageTemplate', '', NULL, '', b'0', b'0', 'notice/template/TemplateList', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-18 19:57:33', 1399985191002447872, '2021-09-18 19:57:33', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1440216178722050048, 'admin', 1438061887002759168, '钉钉', 'DingTalk', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/notice/dingTalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:27:50', 1399985191002447872, '2021-09-21 15:27:50', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1440216612211757056, 'admin', 1440216178722050048, '钉钉机器人', 'DingTalkRobot', '', NULL, '', b'0', b'0', 'notice/dingTalk/robot/DingRobotConfigList', NULL, '/notice/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:29:33', 1399985191002447872, '2021-09-21 15:29:33', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450473063320526848, 'admin', 1452569691537256448, '第三方登录', 'Social', '', NULL, '', b'0', b'0', 'system/social/SocialList', NULL, '/system/userAuth/social', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-19 22:45:01', 1399985191002447872, '2021-10-19 22:45:01', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450803906215886848, 'admin', 1452571269199540224, '定时任务', 'QuartzJobList', '', NULL, '', b'0', b'0', 'starter/quartz/QuartzJobList', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 20:39:41', 1399985191002447872, '2021-10-20 20:39:41', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450819607680991232, 'admin', NULL, '第三方对接', 'social', '', b'0', 'branches', b'0', b'0', 'RouteView', NULL, '/social', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:42:04', 1399985191002447872, '2022-04-05 16:53:25', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821723027881984, 'admin', 1450819607680991232, '微信', 'SocialWeChat', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/social/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:50:28', 1399985191002447872, '2021-10-20 21:50:28', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821877831254016, 'admin', 1450819607680991232, '企业微信', 'SocialWeCom', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/social/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:51:05', 1399985191002447872, '2021-10-20 21:51:05', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822511087271936, 'admin', 1450819607680991232, '钉钉', 'SocialDingTalk', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/social/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:53:36', 1399985191002447872, '2021-10-20 21:53:36', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822842995130368, 'admin', NULL, '支付管理', 'PayManager', '', NULL, 'pay-circle', b'0', b'0', 'RouteView', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:54:55', 1399985191002447872, '2021-10-20 21:54:55', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450823960236081152, 'admin', 1450822842995130368, '支付通道', 'PayChannel', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:22', 1399985191002447872, '2021-10-20 21:59:22', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824117849636864, 'admin', 1450823960236081152, '支付宝', 'AliPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/alipay/AliPayConfigList', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:59', 1399985191002447872, '2021-10-20 21:59:59', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824319868289024, 'admin', 1450823960236081152, '微信支付', 'WeChatPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/wechat/WeChatConfigList', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:00:48', 1399985191002447872, '2021-10-20 22:00:48', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824637876224000, 'admin', 1450823960236081152, '云闪付', 'UnionPayConfig', '', b'0', '', b'0', b'0', 'payment/channel/unionpay/UnionPayConfigList', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:02:03', 1399985191002447872, '2022-03-04 16:12:13', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824875198332928, 'admin', 1450823960236081152, '现金支付', 'CashPayConfig', '', b'0', '', b'1', b'0', '', NULL, '/payment/channel/cash', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:03:00', 1399985191002447872, '2022-03-04 16:12:08', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825488577544192, 'admin', 1450822842995130368, '收银台', 'PayCashier', '', NULL, '', b'0', b'0', 'payment/cashier/Cashier', NULL, '/payment/cashier', '', -1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:26', 1399985191002447872, '2021-10-20 22:05:26', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825615857893376, 'admin', 1450822842995130368, '订单管理', 'PayOrder', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:57', 1399985191002447872, '2021-10-20 22:05:57', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825819436826624, 'admin', 1450822842995130368, '回调记录', 'PayNotify', '', NULL, '', b'0', b'0', 'payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:06:45', 1399985191002447872, '2021-10-20 22:06:45', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1450826890318135296, 'admin', 1450825615857893376, '支付订单', 'PaymentOrder', '', b'0', '', b'0', b'0', 'payment/order/payment/PaymentList', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:11:00', 1399985191002447872, '2022-02-25 15:17:07', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827159626006528, 'admin', 1450825615857893376, '退款订单', 'ReturnOrder', '', b'0', '', b'0', b'0', 'payment/order/refund/RefundRecordList', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:05', 1399985191002447872, '2022-03-04 15:44:06', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827308515409920, 'admin', 1450825615857893376, '转账订单', 'TransferOrder', '', b'0', '', b'1', b'0', 'payment/order/transfer/TransferList', NULL, '/payment/order/transfer', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:40', 1399985191002447872, '2022-03-04 15:33:31', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827660459458560, 'admin', 1438061887002759168, '微信', 'NoticeWeChat', '', NULL, '', b'0', b'0', '', NULL, '/notice/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:14:04', 1399985191002447872, '2021-10-20 22:14:04', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1452567897717321728, 'admin', 1414596052497092608, '审计日志', 'auditLog', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:29:09', 1399985191002447872, '2021-10-25 17:29:09', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569339987472384, 'admin', 1414596052497092608, '权限管理', 'permission', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:34:53', 1399985191002447872, '2021-10-25 17:34:53', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569691537256448, 'admin', 1414596052497092608, '用户信息', 'userAuth', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/userAuth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:36:17', 1399985191002447872, '2021-10-25 17:36:17', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452571269199540224, 'admin', 1414596052497092608, '系统配置', 'systemConfig', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:42:33', 1399985191002447872, '2021-10-25 17:42:33', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452638905302966272, 'admin', 1452571269199540224, '系统参数', 'SystemParam', '', NULL, '', b'0', b'0', 'system/param/SystemParamList', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 22:11:18', 1399985191002447872, '2021-10-25 22:11:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1474694545336676352, 'admin', 1452569339987472384, '数据范围权限', 'DataScope', '', NULL, '', b'0', b'0', 'system/scope/DataScopeList', NULL, '/system/permission/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-12-25 18:52:33', 1399985191002447872, '2021-12-25 18:52:33', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1476489893513404416, 'admin', 1414596052497092608, '22', NULL, '22', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2021-12-30 17:46:37', 1399985191002447872, '2021-12-30 17:46:37', 4, 1); -INSERT INTO `iam_perm_menu` VALUES (1478002945936015360, 'admin', 1414596052497092608, '1', NULL, '1', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2022-01-03 21:58:57', 1399985191002447872, '2022-01-03 21:58:57', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1478004271512240128, 'admin', 1414596052497092608, '22', NULL, '22', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2022-01-03 22:04:13', 1399985191002447872, '2022-01-03 22:04:13', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1480839877352476672, 'admin', 1452567897717321728, '数据版本日志', 'DataVersionLog', NULL, b'0', '', b'0', b'0', 'starter/log/DataVersionLogList', NULL, '/system/log/DataVersionLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-01-11 17:51:54', 1399985191002447872, '2022-01-11 17:51:54', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1490984296616263680, 'admin', 1452571269199540224, '文件管理', 'FIleUpLoad', NULL, b'0', '', b'0', b'0', 'starter/file/FileUploadList', NULL, '/system/config/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-08 17:42:12', 1399985191002447872, '2022-02-08 17:42:12', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1495013564652429312, 'admin', 1452571269199540224, '代码生成', 'CodeGen', NULL, b'0', '', b'0', b'0', 'starter/codegen/CodeGenList', NULL, '/system/config/codeGen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-19 20:33:04', 1399985191002447872, '2022-02-19 20:33:05', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1495968302034210816, 'admin', NULL, '功能演示', 'Demo', NULL, b'0', 'block', b'0', b'0', 'RouteView', NULL, '/demo', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:46:52', 1399985191002447872, '2022-05-10 11:02:05', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1495969099987963904, 'admin', 1495968302034210816, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:50:02', 1399985191002447872, '2022-03-24 16:27:46', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1496020308992143360, 'admin', 1495968302034210816, '超级查询', 'SuperQueryDemo', NULL, b'0', '', b'0', b'0', 'demo/query/SuperQueryDemoList', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 15:13:31', 1399985191002447872, '2022-05-27 17:34:41', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501740492360962048, 'admin', 1450822842995130368, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:03:29', 1399985191002447872, '2022-03-10 10:04:53', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742229142556672, 'admin', 1501740492360962048, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:10:23', 1399985191002447872, '2022-03-10 17:06:19', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742417378725888, 'admin', 1501740492360962048, '个人钱包', 'PersonalWallet', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:11:08', 1399985191002447872, '2022-03-10 17:06:10', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501847310319972352, 'admin', 1450822842995130368, '组合支付', 'CombinationCashier', NULL, b'0', '', b'0', b'0', 'payment/combination/CombinationCashier', NULL, '/payment/combination', '', -0.5, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 17:07:56', 1399985191002447872, '2022-03-10 17:09:28', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1502926397176242176, 'admin', 1450822842995130368, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', 'payment/voucher/VoucherList', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-13 16:35:51', 1399985191002447872, '2022-03-14 19:39:45', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910599819165696, 'admin', 1495969099987963904, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', 'demo/data/perm/DataPermDemoList', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:27:39', 1399985191002447872, '2022-03-24 16:28:56', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910885463851008, 'admin', 1495969099987963904, '加密解密', 'DataEncryptDemo', NULL, b'0', '', b'0', b'0', 'demo/data/encrypt/DataEncryptDemoList', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:28:47', 1399985191002447872, '2022-03-24 16:28:47', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1506911113394913280, 'admin', 1495969099987963904, '数据脱敏', 'DataSensitiveDemo', NULL, b'0', '', b'0', b'0', 'demo/data/sensitive/DataSensitiveDemoList', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:29:41', 1399985191002447872, '2022-03-24 17:16:03', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1507998458886197248, 'admin', 1495968302034210816, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', 'demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-27 16:30:25', 1399985191002447872, '2022-03-27 16:30:25', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1509488473583562752, 'admin', 1495968302034210816, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', 'demo/idempotent/Idempotent', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-31 19:11:12', 1399985191002447872, '2022-05-27 17:35:00', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1511266086400524288, 'admin', 1450822511087271936, '钉钉配置', 'DingTalkConfig', NULL, b'0', '', b'0', b'0', 'social/dingtalk/config/DingTalkConfigList', NULL, '/social/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-04-05 16:54:48', 1399985191002447872, '2022-04-05 16:54:48', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1523860792695283712, 'admin', NULL, '商品管理', 'GoodsManager', NULL, b'0', 'car', b'0', b'0', 'RouteView', NULL, '/goods', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 11:01:40', 1399985191002447872, '2022-05-10 11:02:45', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1523941932282114048, 'admin', 1523860792695283712, '类目管理', 'CategoryManager', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/goods/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:05', 1399985191002447872, '2022-05-10 16:24:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1523942130555252736, 'admin', 1523941932282114048, '类目', 'Category', NULL, b'0', '', b'0', b'0', 'goods/category/CategoryList', NULL, '/goods/category/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:52', 1399985191002447872, '2022-05-10 16:25:23', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044195818278912, 'admin', 1523941932282114048, '品牌', 'Brand', NULL, b'0', '', b'0', b'0', 'goods/brand/BrandList', NULL, '/goods/category/brand', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:10:26', 1399985191002447872, '2022-05-10 23:14:20', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044395823665152, 'admin', 1523941932282114048, '规格', 'SpecificationList', NULL, b'0', '', b'0', b'0', 'goods/spec/SpecificationList', NULL, '/goods/category/spec', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:11:14', 1399985191002447872, '2022-05-10 23:13:51', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044678314233856, 'admin', 1523941932282114048, '参数组', 'ParameterGroup', NULL, b'0', '', b'1', b'0', 'goods/parameter/ParameterGroupList', NULL, '/goods/category/parameter', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:12:21', 1399985191002447872, '2022-05-12 20:30:23', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1525472571967860736, 'admin', 1523860792695283712, '商品', 'Goods', '', b'0', '', b'0', b'0', 'goods/goods/GoodsList', NULL, '/goods/goods', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-14 21:46:18', 1399985191002447872, '2022-05-14 21:46:18', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120084482084864, 'admin', 1495968302034210816, '消息中间件演示', 'MQDemo', NULL, b'0', '', b'0', b'0', 'demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:33:51', 1399985191002447872, '2022-05-31 15:12:15', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120684645044224, 'admin', 1530120084482084864, 'MQTT消息', 'MqttDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/mqtt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:14', 1399985191002447872, '2022-05-27 17:36:14', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1530120821144473600, 'admin', 1530120084482084864, 'RabbitMQ', 'RabbitDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/rabbit', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:47', 1399985191002447872, '2022-05-27 17:36:47', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1534000136370204672, 'admin', 1431152689832525824, 'ELK日志', 'ELK', '', b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 10:31:48', 1399985191002447872, '2022-06-07 10:31:48', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1534008203006652416, 'admin', 1431152689832525824, 'PlumeLog日志', 'PlumeLog', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 11:03:51', 1399985191002447872, '2022-06-07 11:06:13', 1, 0); - --- ---------------------------- --- Table structure for base_dict --- ---------------------------- -CREATE TABLE `base_dict` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编码', - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `group_tag` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '分类标签', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dict --- ---------------------------- -INSERT INTO `base_dict` VALUES (1422929378374828033, 'Sex', '性别', '基础属性', '性别', 0, '2021-08-04 22:36:15', 1399985191002447872, '2022-05-11 19:48:40', 0, 6); -INSERT INTO `base_dict` VALUES (1425744045414772737, 'MenuType', '菜单类型', '系统属性', '菜单类型', 0, '2021-08-12 17:00:44', 1399985191002447872, '2022-05-11 19:48:44', 0, 4); -INSERT INTO `base_dict` VALUES (1430063572491411456, 'loginType', '字典类型', NULL, '字典类型', 1399985191002447872, '2021-08-24 15:05:00', 1399985191002447872, '2021-08-24 15:05:00', 1, 2); -INSERT INTO `base_dict` VALUES (1435829999592759296, 'UserStatusCode', '用户状态码', '系统属性', '用户状态码', 1399985191002447872, '2021-09-09 12:58:43', 1399985191002447872, '2022-05-11 19:48:56', 0, 2); -INSERT INTO `base_dict` VALUES (1435838066191458304, 'LogBusinessType', '业务操作类型', '系统属性', '操作日志记录的业务操作类型', 1399985191002447872, '2021-09-09 13:30:46', 1399985191002447872, '2022-05-11 19:49:00', 0, 2); -INSERT INTO `base_dict` VALUES (1438078864509317120, 'MailSecurityCode', '邮箱安全方式编码', '消息服务', '邮箱安全方式编码', 1399985191002447872, '2021-09-15 17:54:54', 1399985191002447872, '2022-05-11 19:49:06', 0, 2); -INSERT INTO `base_dict` VALUES (1439961232651034624, 'MessageTemplateCode', '消息模板类型', '消息服务', '消息模板类型', 1399985191002447872, '2021-09-20 22:34:46', 1399985191002447872, '2022-05-11 19:48:34', 0, 1); -INSERT INTO `base_dict` VALUES (1452836604783845376, 'SocialType', '三方系统类型', '系统属性', '三方系统类型', 1399985191002447872, '2021-10-26 11:16:54', 1399985191002447872, '2022-05-11 19:48:28', 0, 3); -INSERT INTO `base_dict` VALUES (1452843488735621120, 'ParamType', '参数类型', '系统属性', '参数类型', 1399985191002447872, '2021-10-26 11:44:15', 1399985191002447872, '2022-05-11 19:48:21', 0, 2); -INSERT INTO `base_dict` VALUES (1496024933900169216, 'Political', '政治面貌', '基础数据', '政治面貌', 1399985191002447872, '2022-02-22 15:31:54', 1399985191002447872, '2022-05-11 19:48:04', 0, 1); -INSERT INTO `base_dict` VALUES (1496722894707728384, 'PayChannel', '支付通道', '支付服务', '支付宝, 微信, 云闪付等', 1399985191002447872, '2022-02-24 13:45:21', 1399985191002447872, '2022-05-11 19:47:51', 0, 1); -INSERT INTO `base_dict` VALUES (1496723207565058048, 'PayWay', '支付方式', '支付服务', '扫码支付、Wap、App支付等', 1399985191002447872, '2022-02-24 13:46:35', 1399985191002447872, '2022-05-11 19:47:46', 0, 1); -INSERT INTO `base_dict` VALUES (1497140849954185216, 'PayStatus', '支付状态', '支付服务', '支付中,成功,失败等', 1399985191002447872, '2022-02-25 17:26:09', 1399985191002447872, '2022-05-11 19:47:40', 0, 2); -INSERT INTO `base_dict` VALUES (1501031423232937984, 'AsyncPayChannel', '异步支付通道', '支付服务', '如微信支付宝云闪付等第三方支付', 1399985191002447872, '2022-03-08 11:05:54', 1399985191002447872, '2022-05-11 19:47:37', 0, 1); -INSERT INTO `base_dict` VALUES (1502276739978473472, 'WalletStatus', '钱包状态', '支付服务', '钱包状态', 1399985191002447872, '2022-03-11 21:34:20', 1399985191002447872, '2022-05-11 19:47:33', 0, 2); -INSERT INTO `base_dict` VALUES (1502624342339448832, 'WalletOperation', '钱包日志操作类型', NULL, '', 1399985191002447872, '2022-03-12 20:35:35', 1399985191002447872, '2022-03-12 20:35:35', 1, 0); -INSERT INTO `base_dict` VALUES (1502624515799085056, 'WalletLogType', '钱包日志类型', '支付服务', '钱包日志类型', 1399985191002447872, '2022-03-12 20:36:17', 1399985191002447872, '2022-05-11 19:47:29', 0, 1); -INSERT INTO `base_dict` VALUES (1502624632392347648, 'WalletLogOperation', '钱包日志操作类型', '支付服务', '钱包日志操作类型', 1399985191002447872, '2022-03-12 20:36:44', 1399985191002447872, '2022-05-11 19:47:21', 0, 1); -INSERT INTO `base_dict` VALUES (1503340128037212160, 'VoucherStatus', '储值卡状态', '支付服务', '储值卡状态', 1399985191002447872, '2022-03-14 19:59:52', 1399985191002447872, '2022-05-11 19:47:12', 0, 1); -INSERT INTO `base_dict` VALUES (1524356168611188736, 'input', '手工输入', '商品服务', '', 1399985191002447872, '2022-05-11 19:50:06', 1399985191002447872, '2022-05-11 19:50:06', 1, 0); -INSERT INTO `base_dict` VALUES (1524356376518643712, 'GoodsParamType', '参数类型', '商品服务', '列表/手动输入', 1399985191002447872, '2022-05-11 19:50:56', 1399985191002447872, '2022-05-14 23:05:41', 0, 1); - --- ---------------------------- --- Table structure for iam_dept --- ---------------------------- -CREATE TABLE `iam_dept` ( - `id` bigint(20) NOT NULL COMMENT 'ID', - `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父机构ID', - `dept_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构/部门名称', - `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', - `org_category` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '机构类别 1公司 2部门 3岗位', - `org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构编码', - `mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', - `fax` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '传真', - `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', - `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门组织机构表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_dept --- ---------------------------- -INSERT INTO `iam_dept` VALUES (1259382878857957377, NULL, 'Bootx Platform总公司', 0, '1', '1', '', NULL, '济南市高新区齐鲁软件园', NULL, -1, '2020-05-10 15:20:51', -1, '2020-05-10 17:52:15', 4, 0); -INSERT INTO `iam_dept` VALUES (1477976804995026944, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:15:04', 1399985191002447872, '2022-01-03 20:15:05', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977184768282624, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:16:35', 1399985191002447872, '2022-01-03 20:16:35', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977301365739520, NULL, 'Bootx Cloud总公司', 0, '1', '2', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:17:03', 1399985191002447872, '2022-01-03 20:17:03', 1, 0); -INSERT INTO `iam_dept` VALUES (1477977592291053568, 1259382878857957377, 'bp济南分公司', 0, '1', '1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:12', 1399985191002447872, '2022-01-03 20:18:12', 1, 0); -INSERT INTO `iam_dept` VALUES (1477977690928500736, 1259382878857957377, '历城分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:36', 1399985191002447872, '2022-01-03 20:18:36', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977827897692160, 1259382878857957377, 'bp潍坊分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:08', 1399985191002447872, '2022-01-03 20:19:08', 0, 0); -INSERT INTO `iam_dept` VALUES (1477977880947249152, 1477977301365739520, 'bc菏泽分公司', 0, '1', '2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:21', 1399985191002447872, '2022-01-03 20:19:21', 0, 0); -INSERT INTO `iam_dept` VALUES (1477977930175795200, 1477977301365739520, 'bc日照分公司', 0, '1', '2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:33', 1399985191002447872, '2022-01-03 20:19:33', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978464559484928, 1477977592291053568, '历城办事部', 0, '2', '1_1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:40', 1399985191002447872, '2022-01-03 20:21:40', 1, 0); -INSERT INTO `iam_dept` VALUES (1477978512177418240, 1477977592291053568, '历下办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:51', 1399985191002447872, '2022-01-03 20:21:52', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978610865197056, 1477977592291053568, '高新办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:22:15', 1399985191002447872, '2022-01-03 20:22:15', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978810526650368, 1477977827897692160, '奎文办事部', 0, '2', '1_2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:03', 1399985191002447872, '2022-01-03 20:23:03', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978883247493120, 1477977827897692160, '潍城办事部', 0, '2', '1_2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:20', 1399985191002447872, '2022-01-03 20:23:20', 0, 0); - --- ---------------------------- --- Table structure for iam_data_scope --- ---------------------------- -CREATE TABLE `iam_data_scope` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `type` int(4) NOT NULL COMMENT '类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据范围权限' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope --- ---------------------------- -INSERT INTO `iam_data_scope` VALUES (1474706893178871808, 'self', '自身数据', 1, '只能查看自身范围的数据', 1399985191002447872, '2021-12-25 19:41:37', 1399985191002447872, '2021-12-25 19:41:37', 1, 0); -INSERT INTO `iam_data_scope` VALUES (1474717084985270272, 'user', '用户数据权限', 2, '用户数据权限', 1399985191002447872, '2021-12-25 20:22:07', 1399985191002447872, '2021-12-25 20:22:07', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717160671485952, 'dept', '部门权限', 3, '', 1399985191002447872, '2021-12-25 20:22:25', 1399985191002447872, '2021-12-25 20:22:25', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717276908232704, 'userAndDept', '用户和部门权限', 4, '', 1399985191002447872, '2021-12-25 20:22:52', 1399985191002447872, '2021-12-25 20:22:52', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717344562356224, 'all', '全部数据', 5, '', 1399985191002447872, '2021-12-25 20:23:09', 1399985191002447872, '2021-12-25 20:23:09', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990268903804928, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:34', 1399985191002447872, '2022-01-03 21:08:35', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990290521247744, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:40', 1399985191002447872, '2022-01-03 21:08:40', 0, 1); -INSERT INTO `iam_data_scope` VALUES (1477990439800721408, 'belong_dept_and_sub', '所在及下级部门', 7, '', 1399985191002447872, '2022-01-03 21:09:15', 1399985191002447872, '2022-01-03 21:09:15', 0, 0); - --- ---------------------------- --- Table structure for goods_category --- ---------------------------- -CREATE TABLE `goods_category` ( - `id` bigint(20) NOT NULL, - `pid` bigint(20) NULL DEFAULT NULL COMMENT '上级类目id', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类目名称', - `image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标/图片地址', - `enable` bit(1) NOT NULL COMMENT '是否启用', - `sort_no` double(8, 2) NULL DEFAULT NULL COMMENT '排序', - `level` int(5) NULL DEFAULT NULL COMMENT '层级', - `remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '类目' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for sales_match_rule --- ---------------------------- -CREATE TABLE `sales_match_rule` ( - `id` bigint(20) NOT NULL, - `strategy_register_id` bigint(20) NOT NULL COMMENT '关联策略注册id', - `register_type` int(6) NOT NULL COMMENT '策略类型 策略/优惠券', - `feature_type` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '特征类型(sku/spu/shop)', - `feature_point` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '特征点', - `match_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '匹配类型', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '匹配检查' ROW_FORMAT = DYNAMIC; - - --- ---------------------------- --- Table structure for iam_user_info --- ---------------------------- -CREATE TABLE `iam_user_info` ( - `id` bigint(20) NOT NULL, - `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', - `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手机号', - `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱', - `client_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联终端ids', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '注册来源', - `admin` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否超级管理员', - `register_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', - `status` tinyint(4) NOT NULL COMMENT '账号状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_info --- ---------------------------- -INSERT INTO `iam_user_info` VALUES (1399985191002447872, '小小明', 'xxm', 'f52020dca765fd3943ed40a615dc2c5c', '13300000000', 'xxm1995@outlook.com', '', NULL, NULL, b'1', '2021-06-02 15:04:12', 1, 1, '2021-06-02 15:04:15', 1399985191002447872, '2022-05-18 17:16:57', 47, 0); -INSERT INTO `iam_user_info` VALUES (1414143554414059520, '小小明1995', 'xxm1995', 'f52020dca765fd3943ed40a615dc2c5c', '13000000000', 'xxm1995@foxmail.com', NULL, NULL, NULL, b'1', '2021-07-11 16:44:31', 1, 1, '2021-07-11 16:44:32', 1414143554414059520, '2022-05-27 13:57:33', 3, 0); -INSERT INTO `iam_user_info` VALUES (1435894470432456704, '管理员', 'admin', 'f52020dca765fd3943ed40a615dc2c5c', '13000001111', 'admin@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 17:14:52', 1, 1399985191002447872, '2021-09-09 17:14:54', 1399985191002447872, '2022-06-05 20:26:45', 4, 0); -INSERT INTO `iam_user_info` VALUES (1435967884114194432, '测试', 'test', 'f52020dca765fd3943ed40a615dc2c5c', '13311111111', 'test@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 22:06:37', 1, 1414143554414059520, '2021-09-09 22:06:37', 1399985191002447872, '2022-05-31 15:59:37', 9, 0); -INSERT INTO `iam_user_info` VALUES (1477990832987361280, '测试用户001', 'test001', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:10:49', 1, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-06-05 20:26:26', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997391729631232, '测试用户002', 'test002', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:36:53', 1, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-06-05 20:26:19', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997602862505984, '测试用户003', 'test003', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:37:43', 1, 1399985191002447872, '2022-01-03 21:37:43', 1399985191002447872, '2022-05-19 13:00:05', 4, 0); - --- ---------------------------- --- Table structure for iam_user_expand_info --- ---------------------------- -CREATE TABLE `iam_user_expand_info` ( - `id` bigint(20) NOT NULL, - `sex` int(4) NULL DEFAULT NULL COMMENT '性别', - `birthday` date NULL DEFAULT NULL COMMENT '生日', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '上次登录时间', - `current_login_time` datetime(0) NULL DEFAULT NULL COMMENT '本次登录时间', - `initial_password` bit(1) NOT NULL COMMENT '是否初始密码', - `last_change_password_time` datetime(0) NULL DEFAULT NULL COMMENT '上次修改密码时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户扩展信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_expand_info --- ---------------------------- -INSERT INTO `iam_user_expand_info` VALUES (1399985191002447872, 1, '1996-12-01', '1495331905770315776', '2022-06-04 17:42:28', '2022-06-04 18:35:09', b'0', '2022-01-09 11:36:05', 1, '2021-06-02 15:04:15', 0, '2022-06-04 18:35:09', 140, 0); -INSERT INTO `iam_user_expand_info` VALUES (1414143554414059520, 1, NULL, '1530065639127871488', NULL, '2022-05-27 13:56:02', b'0', NULL, 1, '2021-07-11 16:44:32', 1414143554414059520, '2022-05-27 13:57:32', 2, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435894470432456704, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2021-09-09 17:14:54', 1399985191002447872, '2021-09-09 17:14:54', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435967884114194432, 1, NULL, NULL, NULL, '2022-05-31 15:59:42', b'0', NULL, 1414143554414059520, '2021-09-09 22:06:37', 0, '2022-05-31 15:59:42', 1, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477990832987361280, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-01-03 21:10:49', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997391729631232, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-01-03 21:36:53', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997602862505984, 1, NULL, NULL, NULL, '2022-06-01 16:51:46', b'0', NULL, 1399985191002447872, '2022-01-03 21:37:43', 0, '2022-06-01 16:51:46', 1, 0); - --- ---------------------------- --- Table structure for iam_user_dept --- ---------------------------- -CREATE TABLE `iam_user_dept` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `dept_id` bigint(20) NOT NULL COMMENT '部门id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户部门关联表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_dept --- ---------------------------- -INSERT INTO `iam_user_dept` VALUES (1450088892861501440, 1399985191002447872, 1259383345604300802); -INSERT INTO `iam_user_dept` VALUES (1478741775450312704, 1435967884114194432, 1477978464559484928); -INSERT INTO `iam_user_dept` VALUES (1478741775450312705, 1435967884114194432, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1478741775446118400, 1435967884114194432, 1477978810526650368); -INSERT INTO `iam_user_dept` VALUES (1477996765012533248, 1477990832987361280, 1477977592291053568); -INSERT INTO `iam_user_dept` VALUES (1477997463997489152, 1477997391729631232, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1477997655618461696, 1477997602862505984, 1477978610865197056); - --- ---------------------------- --- Table structure for sales_check_rule --- ---------------------------- -CREATE TABLE `sales_check_rule` ( - `id` bigint(20) NOT NULL, - `strategy_register_id` bigint(20) NOT NULL COMMENT '关联策略注册id', - `register_type` int(6) NOT NULL COMMENT '策略类型 策略/优惠券', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则名称', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则code', - `rule_type` int(11) NOT NULL COMMENT '规则类型', - `strategy_id` bigint(20) NULL DEFAULT NULL COMMENT '对应策略id', - `addition` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '附加对象 json', - `priority` int(11) NULL DEFAULT NULL COMMENT '优先级', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '检查规则' ROW_FORMAT = DYNAMIC; - - --- ---------------------------- --- Table structure for starter_file_upload_info --- ---------------------------- -CREATE TABLE `starter_file_upload_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '存储位置', - `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称', - `file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件类型', - `file_suffix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件后缀', - `file_size` double(8, 0) NULL DEFAULT NULL COMMENT '文件大小', - `external_storage_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '外部关联id', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '上传文件信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_file_upload_info --- ---------------------------- -INSERT INTO `starter_file_upload_info` VALUES (1495330622946631680, NULL, 'blob', 'jpg', 'jpg', 68, '62120ac9efeec06e2275fc52', 1399985191002447872, '2022-02-20 17:32:57'); -INSERT INTO `starter_file_upload_info` VALUES (1495331213525606400, NULL, 'blob', 'jpg', 'jpg', 68, '62120b55efeec06e2275fc54', 1399985191002447872, '2022-02-20 17:35:28'); -INSERT INTO `starter_file_upload_info` VALUES (1495331812178616320, NULL, 'blob', 'jpg', 'jpg', 74, '62120be4efeec06e2275fc56', 1399985191002447872, '2022-02-20 17:37:43'); -INSERT INTO `starter_file_upload_info` VALUES (1495331905770315776, NULL, 'blob', 'jpg', 'jpg', 76, '62120bfaefeec06e2275fc58', 1399985191002447872, '2022-02-20 17:38:03'); -INSERT INTO `starter_file_upload_info` VALUES (1530065639127871488, NULL, 'blob', 'jpg', 'jpg', 83, '6290684abf0e90583f414dcf', 1414143554414059520, '2022-05-27 13:57:31'); - --- ---------------------------- --- Table structure for sales_strategy_register --- ---------------------------- -CREATE TABLE `sales_strategy_register` ( - `id` bigint(20) NOT NULL, - `strategy_id` bigint(20) NULL DEFAULT NULL COMMENT '策略id', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '策略注册名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `strategy_type` int(11) NULL DEFAULT NULL COMMENT '策略类型(1活动/2优惠券)', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '策略注册' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for pay_voucher --- ---------------------------- -CREATE TABLE `pay_voucher` ( - `id` bigint(20) NOT NULL, - `card_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '卡号', - `batch_no` bigint(20) NULL DEFAULT NULL COMMENT '批次号', - `face_value` decimal(15, 2) NULL DEFAULT NULL COMMENT '面值', - `balance` decimal(15, 2) NULL DEFAULT NULL COMMENT '余额', - `enduring` bit(1) NOT NULL COMMENT '是否长期有效', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `status` int(2) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡' ROW_FORMAT = DYNAMIC; - - --- ---------------------------- --- Table structure for iam_data_scope_user --- ---------------------------- -CREATE TABLE `iam_data_scope_user` ( - `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围用户关联配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope_user --- ---------------------------- -INSERT INTO `iam_data_scope_user` VALUES (1478738754876149760, 1474717084985270272, 1399985191002447872); -INSERT INTO `iam_data_scope_user` VALUES (1478738766460817408, 1474717084985270272, 1414143554414059520); -INSERT INTO `iam_data_scope_user` VALUES (1478738811792855040, 1474717084985270272, 1477997602862505984); -INSERT INTO `iam_data_scope_user` VALUES (1478747304583114752, 1474717084985270272, 1435894470432456704); -INSERT INTO `iam_data_scope_user` VALUES (1478747304587309056, 1474717084985270272, 1477997391729631232); - --- ---------------------------- --- Table structure for demo_super_query --- ---------------------------- -CREATE TABLE `demo_super_query` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `age` int(5) NULL DEFAULT NULL COMMENT '年龄', - `vip` bit(1) NULL DEFAULT NULL COMMENT '是否vip', - `birthday` date NULL DEFAULT NULL COMMENT '生日', - `work_time` time(0) NULL DEFAULT NULL COMMENT '上班时间', - `registration_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', - `political` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '政治面貌', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '超级查询演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_super_query --- ---------------------------- -INSERT INTO `demo_super_query` VALUES (1496046463434567680, '小小明', 18, b'1', '1998-01-23', '08:30:00', '2022-02-22 16:57:27', '13', '这是备注', 1399985191002447872, '2022-02-22 16:57:27', 1399985191002447872, '2022-02-22 17:03:34', 1, 0); -INSERT INTO `demo_super_query` VALUES (1496372341213433856, '关羽', 52, b'1', '2000-02-23', '14:31:36', '2022-02-23 14:32:22', '1', '', 1399985191002447872, '2022-02-23 14:32:22', 1399985191002447872, '2022-02-23 14:32:22', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496372489909899264, '张飞', 54, b'0', '1996-02-11', '08:00:00', '2022-02-23 14:32:58', '7', '备注', 1399985191002447872, '2022-02-23 14:32:58', 1399985191002447872, '2022-02-23 14:32:58', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496372766427779072, '梁冀', 38, b'1', '1958-02-08', '08:30:00', '2022-02-23 14:34:03', '1', '', 1399985191002447872, '2022-02-23 14:34:03', 1399985191002447872, '2022-02-23 14:34:03', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496373512871284736, '刘备', 108, b'0', '1993-11-12', '09:30:10', '2022-02-23 14:37:01', '2', '刘羽禅的粑粑', 1399985191002447872, '2022-02-23 14:37:01', 1399985191002447872, '2022-02-23 14:37:01', 0, 0); - --- ---------------------------- --- Table structure for sales_strategy --- ---------------------------- -CREATE TABLE `sales_strategy` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '唯一编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `engine_type` int(1) NOT NULL COMMENT '引擎类型, java/js/groovy', - `target_type` int(11) NOT NULL COMMENT '目标类型', - `rule_script` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '规则脚本', - `show` int(1) NULL DEFAULT NULL COMMENT '是否展示 0不展示,1展示(default)', - `state` int(1) NOT NULL COMMENT '0 可用 1 不可用', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '策略' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_strategy --- ---------------------------- -INSERT INTO `sales_strategy` VALUES (1382516141636866048, 'instantReduction', '立减策略', '立减指定的金额', 1, 1, NULL, 1, 1, 1, '2021-04-15 10:08:28.720000', 1, '2021-04-15 10:08:28.720000', 0, b'0', 10011); -INSERT INTO `sales_strategy` VALUES (1382517531398524928, 'fullReduction', '满减策略', '满减策略', 1, 1, NULL, 1, 1, 1, '2021-04-15 10:14:00.075000', 1, '2021-04-15 10:14:00.075000', 0, b'0', 10011); -INSERT INTO `sales_strategy` VALUES (1394909889247203328, 'channelCheck', '渠道检查', '渠道检查', 1, 2, NULL, 1, 1, 1, '2021-05-19 14:56:48.426000', 1, '2021-05-19 14:56:48.426000', 0, b'0', 10011); -INSERT INTO `sales_strategy` VALUES (1395320340615417856, 'obtainMultiple', '多张领取检查', '多张领取检查', 1, 3, '', NULL, 1, 1, '2021-05-20 18:07:47.642000', 1, '2021-05-20 18:07:47.642000', 0, b'0', 10011); - --- ---------------------------- --- Table structure for iam_user_data_scope --- ---------------------------- -CREATE TABLE `iam_user_data_scope` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `data_scope_id` bigint(20) NOT NULL COMMENT '数据权限ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户数据范围关系\r\n' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_data_scope --- ---------------------------- -INSERT INTO `iam_user_data_scope` VALUES (1477617820165345280, 1414143554414059520, 1474717084985270272); -INSERT INTO `iam_user_data_scope` VALUES (1477991040840290304, 1477990832987361280, 1477990439800721408); -INSERT INTO `iam_user_data_scope` VALUES (1477997504506077184, 1477997391729631232, 1477990268903804928); -INSERT INTO `iam_user_data_scope` VALUES (1477997685993611264, 1477997602862505984, 1474706893178871808); - --- ---------------------------- --- Table structure for iam_role --- ---------------------------- -CREATE TABLE `iam_role` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `internal` bit(1) NOT NULL COMMENT '是否系统内置', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role --- ---------------------------- -INSERT INTO `iam_role` VALUES (1405414804771971072, 'admin', '管理员', b'1', '管理员', 1, '2021-06-17 14:39:35', 1399985191002447872, '2021-07-18 22:31:02', 6, 0); -INSERT INTO `iam_role` VALUES (1416730722714144768, 'test', '测试', b'0', '测试角色', 1399985191002447872, '2021-07-18 20:05:01', 1399985191002447872, '2021-07-18 20:16:15', 1, 0); -INSERT INTO `iam_role` VALUES (1422832797731778562, 'user', '用户', b'0', '用户角色', 0, '2021-08-04 16:12:29', 1399985191002447872, '2021-08-04 16:15:03', 7, 1); -INSERT INTO `iam_role` VALUES (1428891259564445696, 'manager', '管理者', b'0', 'manager管理者', 1399985191002447872, '2021-08-21 09:26:38', 1399985191002447872, '2021-08-21 09:26:39', 0, 1); - --- ---------------------------- --- Table structure for goods_brand --- ---------------------------- -CREATE TABLE `goods_brand` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌名称', - `logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌图标', - `enable` bit(1) NULL DEFAULT NULL COMMENT '是否启用', - `remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '品牌' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of goods_brand --- ---------------------------- -INSERT INTO `goods_brand` VALUES (1524046765181800448, '鸭鸭', '', NULL, '', 1399985191002447872, '2022-05-10 23:20:39', 1399985191002447872, '2022-05-10 23:20:39', 0, 0); -INSERT INTO `goods_brand` VALUES (1525092807788691456, '微信', '', b'1', '', 1399985191002447872, '2022-05-13 20:37:15', 1399985191002447872, '2022-05-13 20:37:15', 0, 0); -INSERT INTO `goods_brand` VALUES (1525092835118776320, '舜泰', '', b'1', '', 1399985191002447872, '2022-05-13 20:37:21', 1399985191002447872, '2022-05-13 20:37:21', 0, 0); -INSERT INTO `goods_brand` VALUES (1525092854139944960, '绿城', '', b'1', '', 1399985191002447872, '2022-05-13 20:37:26', 1399985191002447872, '2022-05-13 20:37:26', 0, 0); - --- ---------------------------- --- Table structure for base_param --- ---------------------------- -CREATE TABLE `base_param` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数名称', - `param_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', - `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', - `type` int(4) NULL DEFAULT NULL COMMENT '参数类型', - `internal` bit(1) NOT NULL COMMENT '内置参数', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统参数配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_param --- ---------------------------- -INSERT INTO `base_param` VALUES (1452842684284891136, '测试', 'test.v1', '123', 1, b'0', NULL, 1399985191002447872, '2021-10-26 11:41:03', 1399985191002447872, '2021-10-26 11:41:03', 0, 0); -INSERT INTO `base_param` VALUES (1500338438182789120, '结算台聚合支付请求地址', 'CashierAggregateUrl', 'http://pay1.bootx.cn/cashier/aggregatePay?key=', 1, b'1', '', 1399985191002447872, '2022-03-06 13:12:13', 1399985191002447872, '2022-05-01 15:03:03', 0, 3); -INSERT INTO `base_param` VALUES (1520668030248361984, '文件服务器地址', 'FileServerUrl', 'http://127.0.0.1:9999', 1, b'1', '', 1399985191002447872, '2022-05-01 15:34:46', 1399985191002447872, '2022-05-19 12:53:21', 0, 5); -INSERT INTO `base_param` VALUES (1529281530059161600, 'websocket服务器地址', 'WebsocketServerUrl', 'ws://127.0.0.1:9999', 1, b'1', '', 1399985191002447872, '2022-05-25 10:01:44', 1399985191002447872, '2022-05-25 10:01:44', 0, 0); - --- ---------------------------- --- Table structure for sales_strategy_config --- ---------------------------- -CREATE TABLE `sales_strategy_config` ( - `id` bigint(20) NOT NULL, - `strategy_id` bigint(20) NULL DEFAULT NULL COMMENT '策略id', - `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数类型', - `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '方法参数名', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '策略参数定义' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_strategy_config --- ---------------------------- -INSERT INTO `sales_strategy_config` VALUES (1382517531788595199, 1382516141636866048, 'BigDecimal', 'amount', '立减金额', '立减金额', 1, '2021-04-15 10:08:28.873000', 1, '2021-04-15 10:08:28.873000', 0, b'0'); -INSERT INTO `sales_strategy_config` VALUES (1382517531788595200, 1382517531398524928, 'BigDecimal', 'satisfy', '满多少', '配置满多少的字段', 1, '2021-04-15 10:14:00.169000', 1, '2021-04-15 10:14:00.169000', 0, b'0'); -INSERT INTO `sales_strategy_config` VALUES (1382517531788595201, 1382517531398524928, 'BigDecimal', 'minus', '减多少', '配置减多少的字段', 1, '2021-04-15 10:14:00.169000', 1, '2021-04-15 10:14:00.169000', 0, b'0'); - --- ---------------------------- --- Table structure for sales_activity --- ---------------------------- -CREATE TABLE `sales_activity` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'name', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `strategy_id` bigint(255) NULL DEFAULT NULL COMMENT '策略id', - `strategy_register_id` bigint(20) NOT NULL COMMENT '策略注册id', - `activity_mutual` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '活动互斥', - `start_time` datetime(6) NOT NULL COMMENT '有效开始时间', - `end_time` datetime(6) NOT NULL COMMENT '有效结束时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '优惠活动' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_activity --- ---------------------------- -INSERT INTO `sales_activity` VALUES (1394892920481533952, '100-16', '100-16活动策略2', NULL, 1394892919403597824, '', '2021-05-18 17:43:59.000000', '2021-07-01 17:44:02.000000', 1, '2021-05-19 13:49:22.757000', 1, '2021-05-19 13:49:22.757000', 0, b'0'); -INSERT INTO `sales_activity` VALUES (1394918400265965568, '100-5', '100-5活动策略3', NULL, 1394918398827319296, '', '2021-05-18 17:43:59.000000', '2021-07-01 17:44:02.000000', 1, '2021-05-19 15:30:37.611000', 1, '2021-05-19 15:30:37.611000', 0, b'0'); -INSERT INTO `sales_activity` VALUES (1395308738893729792, '50-20', '50-20活动策略3', 1382517531398524928, 1395308573587820544, '', '2021-05-18 17:43:59.000000', '2021-07-01 17:44:02.000000', 1, '2021-05-20 17:21:41.592000', 1, '2021-05-20 17:21:41.592000', 0, b'0'); - --- ---------------------------- --- Table structure for pay_wallet --- ---------------------------- -CREATE TABLE `pay_wallet` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '关联用户id', - `balance` decimal(19, 2) NOT NULL COMMENT '余额', - `status` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_id`(`user_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet --- ---------------------------- -INSERT INTO `pay_wallet` VALUES (1336489524259352576, 1399985191002447872, 999982.96, 1, NULL, '2022-03-11 21:37:33', 1399985191002447872, '2022-05-03 21:24:04', 29, 0); -INSERT INTO `pay_wallet` VALUES (1502554238582968320, 1414143554414059520, 1019.00, 1, 1399985191002447872, '2022-03-12 15:57:01', 1399985191002447872, '2022-03-13 11:21:10', 2, 0); -INSERT INTO `pay_wallet` VALUES (1502848353136791552, 1435894470432456704, 100.00, 1, 1399985191002447872, '2022-03-13 11:25:44', 1399985191002447872, '2022-03-24 13:22:37', 1, 0); - --- ---------------------------- --- Table structure for iam_client --- ---------------------------- -CREATE TABLE `iam_client` ( - `id` bigint(20) NOT NULL, - `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `alone_prem` bit(1) NOT NULL COMMENT '是否有独立菜单和权限', - `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长 秒', - `captcha` bit(1) NOT NULL COMMENT '启用验证码', - `pwd_err_num` int(8) NOT NULL COMMENT '密码错误次数', - `enable` bit(1) NOT NULL COMMENT '是否可用', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '认证终端' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_client --- ---------------------------- -INSERT INTO `iam_client` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', 3600, b'0', -1, b'1', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-04-24 19:51:13', 16, 0); -INSERT INTO `iam_client` VALUES (1430478946919653376, 'miniApp', '微信小程序', b'0', b'0', 99999, b'1', 0, b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2021-08-25 18:35:33', 2, 0); -INSERT INTO `iam_client` VALUES (1435138582839009280, 'phone', '手机短信登录', b'0', b'1', 3600, b'1', 0, b'1', '', 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-05-27 11:28:42', 3, 0); - --- ---------------------------- --- Table structure for demo_data_perm --- ---------------------------- -CREATE TABLE `demo_data_perm` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者名称', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据权限演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_perm --- ---------------------------- -INSERT INTO `demo_data_perm` VALUES (1495969849707220992, '33', 'xxm', '444', 1399985191002447872, '2022-02-22 11:53:01', 1399985191002447872, '2022-02-22 11:53:01', 0, 0); -INSERT INTO `demo_data_perm` VALUES (1506921683460521984, '测试', '小小明', NULL, 1399985191002447872, '2022-03-24 17:11:41', 1399985191002447872, '2022-03-24 17:11:41', 0, 0); -INSERT INTO `demo_data_perm` VALUES (1531547191561072640, '测试', '测试', '123', 1435967884114194432, '2022-05-31 16:04:40', 1435967884114194432, '2022-05-31 16:04:40', 0, 0); - --- ---------------------------- --- Table structure for common_sequence_range --- ---------------------------- -CREATE TABLE `common_sequence_range` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `range_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '区间key', - `range_value` bigint(20) NOT NULL COMMENT '区间开始值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '序列生成器队列区间管理' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of common_sequence_range --- ---------------------------- -INSERT INTO `common_sequence_range` VALUES (1470679520373862400, 'Sequence:cs', 2006, 0, '2021-12-14 16:58:16', 0, '2021-12-14 16:58:16', 6, 0); -INSERT INTO `common_sequence_range` VALUES (1470679955230908416, 'cs', 2020, 0, '2021-12-14 17:00:00', 0, '2021-12-14 17:00:00', 13, 0); - --- ---------------------------- --- Table structure for starter_audit_data_version --- ---------------------------- -CREATE TABLE `starter_audit_data_version` ( - `id` bigint(20) NOT NULL, - `data_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据名称', - `data_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据主键', - `data_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据内容', - `version` int(10) NOT NULL COMMENT '版本', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据版本日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_data_version --- ---------------------------- -INSERT INTO `starter_audit_data_version` VALUES (1480550993828446208, 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:43:58\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', 1, 0, '2022-01-10 22:43:59'); -INSERT INTO `starter_audit_data_version` VALUES (1480551021779288064, 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:44:05\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', 2, 0, '2022-01-10 22:44:06'); - --- ---------------------------- --- Table structure for sales_coupon_template --- ---------------------------- -CREATE TABLE `sales_coupon_template` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `strategy_register_id` bigint(20) NOT NULL COMMENT '策略注册id', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `num` int(11) NOT NULL COMMENT '数量', - `channel_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '渠道', - `activity_mutual` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '活动互斥', - `coupon_mutual` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '优惠券互斥', - `effective_type` int(8) NOT NULL COMMENT '有效类型', - `time_type` int(8) NULL DEFAULT NULL COMMENT '时间类型', - `effective_time` bigint(20) NULL DEFAULT NULL COMMENT '有效时间', - `start_time` datetime(6) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(6) NULL DEFAULT NULL COMMENT '结束时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '优惠券模板' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_coupon_template --- ---------------------------- -INSERT INTO `sales_coupon_template` VALUES (1395284918623424512, '100-33', 1395284918430486528, '100-33优惠券', 999, NULL, '', '', 0, 1, NULL, NULL, NULL, 1, '2021-05-20 15:47:02.397000', 1, '2021-05-20 15:58:10.795000', 1, b'0'); -INSERT INTO `sales_coupon_template` VALUES (1395320423364841472, '100-33', 1395320422941216768, '100-33优惠券', 988, NULL, '', '', 0, 1, NULL, NULL, NULL, 1, '2021-05-20 18:08:07.387000', 1, '2021-05-20 18:28:33.743000', 12, b'0'); - --- ---------------------------- --- Table structure for qrtz_locks --- ---------------------------- -CREATE TABLE `qrtz_locks` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_locks --- ---------------------------- -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'STATE_ACCESS'); -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); - --- ---------------------------- --- Table structure for iam_data_scope_dept --- ---------------------------- -CREATE TABLE `iam_data_scope_dept` ( - `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', - `dept_id` bigint(20) NOT NULL COMMENT '部门id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围部门关联配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope_dept --- ---------------------------- -INSERT INTO `iam_data_scope_dept` VALUES (1478742690014101504, 1474717160671485952, 1477978464559484928); -INSERT INTO `iam_data_scope_dept` VALUES (1478742920071675904, 1474717160671485952, 1477977592291053568); - --- ---------------------------- --- Table structure for goods_category_specification --- ---------------------------- -CREATE TABLE `goods_category_specification` ( - `id` bigint(20) NOT NULL, - `category_id` bigint(20) NOT NULL COMMENT '分类id', - `specification_id` bigint(20) NOT NULL COMMENT '规格id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '类目规格关联' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of goods_category_specification --- ---------------------------- -INSERT INTO `goods_category_specification` VALUES (1525131071690076160, 1523994966466924544, 1524258633343254528); -INSERT INTO `goods_category_specification` VALUES (1525131071694270464, 1523994966466924544, 1524360756764590080); - --- ---------------------------- --- Table structure for ding_robot_config --- ---------------------------- -CREATE TABLE `ding_robot_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', - `access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人访问token', - `enable_signature_check` bit(1) NOT NULL COMMENT '是否开启验签', - `sign_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人私钥', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉机器人配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of ding_robot_config --- ---------------------------- -INSERT INTO `ding_robot_config` VALUES (1333022277138264064, 'bootx机器人', 'bootx', '4a6212971d64208f45d647190ebc69986d6e9b67faf6aa7f1c8fc332f6652060', b'1', 'SECb6f9f872847caec745fcf10a46f4250b36c0337bade670d2f1f4756682b8cad2', 'bootx群机器人', -1, '2020-11-29 20:17:31.875000', -1, '2020-11-29 20:17:31.875000', 1, b'0'); -INSERT INTO `ding_robot_config` VALUES (1454001517812203520, '33', '12', '111111111111111111', b'1', '', '', 1399985191002447872, '2021-10-29 16:25:50.547000', 1399985191002447872, '2021-10-29 16:25:50.597000', 2, b'1'); - --- ---------------------------- --- Table structure for ding_config --- ---------------------------- -CREATE TABLE `ding_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `app_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, - `app_secret` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, - `enable` bit(1) NOT NULL COMMENT '是否启用', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉配置' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of ding_config --- ---------------------------- -INSERT INTO `ding_config` VALUES (1511265279181553664, '测试钉钉小程序配置', 'dingg4kj0ymmvbrvrg5a', 'Ushk8RuIT694Y7qhPQs2PHa0MFHa4PjHVUv1Th4AYW8W5kuDRcwnV3irpnAupAJK', b'0', '备注', 0, '2022-04-05 16:51:35.166000', 1399985191002447872, '2022-04-05 18:02:13.542000', 3, b'0'); -INSERT INTO `ding_config` VALUES (1511283139236810752, '测试钉钉h5配置', 'dingcksft7waezipjcjq', 'WCc3q4-iOFxSmPG_OyKIKL1l0DvM-HX0B2_jsbOrOxxsYuy0iBCXKTyFbv2RZ3jX', b'1', NULL, 1399985191002447872, '2022-04-05 18:02:33.334000', 1399985191002447872, '2022-04-05 18:04:25.936000', 3, b'0'); - --- ---------------------------- --- Table structure for demo_data_sensitive --- ---------------------------- -CREATE TABLE `demo_data_sensitive` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `chinese_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '中文名字', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', - `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号', - `mobile_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', - `car_license` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '车牌号', - `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮件', - `other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其他', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据脱敏演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_sensitive --- ---------------------------- -INSERT INTO `demo_data_sensitive` VALUES (1506942377435037696, '刘向东', '123456', '372921199302021125', '13324591123', '鲁A8S8866', 'bootx123@outlook.com', '测试测试测试测试测试测试测试问题', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:36:09', 2, 0); -INSERT INTO `demo_data_sensitive` VALUES (1506943326094352384, '成是非', '99885511', '101278112512107721', '18855446622', '汉S123456', 'chengshifei@foxmail.com', '这个就是就是就是就是就是就是这样的', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:35:00', 1, 0); - --- ---------------------------- --- Table structure for demo_data_encrypt --- ---------------------------- -CREATE TABLE `demo_data_encrypt` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据加密解密演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_encrypt --- ---------------------------- -INSERT INTO `demo_data_encrypt` VALUES (1506922411881103360, '测试加密效果', 'eI2RIrRLG+QUna3jMK+kejyJTTKdPFhaYWP4EhktJ2lkGTEsIxZesetNTzcqUA934ZN/OUdw4aj4t5Q+u1sH7A==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); -INSERT INTO `demo_data_encrypt` VALUES (1506943412354408448, '测试下', 'Dgv5OSNiXuknceoZzeOUOQ==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); - --- ---------------------------- --- Table structure for iam_user_role --- ---------------------------- -CREATE TABLE `iam_user_role` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `role_id` bigint(20) NOT NULL COMMENT '角色ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系\r\n' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_role --- ---------------------------- -INSERT INTO `iam_user_role` VALUES (1533038443724980224, 1435894470432456704, 1405414804771971072); - --- ---------------------------- --- Table structure for goods_category_brand --- ---------------------------- -CREATE TABLE `goods_category_brand` ( - `id` bigint(20) NOT NULL, - `category_id` bigint(20) NOT NULL COMMENT '分类id', - `brand_id` bigint(20) NOT NULL COMMENT '品牌id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '类目品牌关联' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Table structure for base_key_value --- ---------------------------- -CREATE TABLE `base_key_value` ( - `id` bigint(20) NOT NULL, - `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', - `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'kv存储' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_key_value --- ---------------------------- - --- ---------------------------- --- Table structure for starter_quartz_job_log --- ---------------------------- -CREATE TABLE `starter_quartz_job_log` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `handler_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器名称', - `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器全限定名', - `success` bit(1) NOT NULL COMMENT '是否执行成功', - `error_message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `duration` bigint(255) NULL DEFAULT NULL COMMENT '执行时长', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务执行日志' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of starter_quartz_job_log --- ---------------------------- - --- ---------------------------- --- Table structure for starter_quartz_job --- ---------------------------- -CREATE TABLE `starter_quartz_job` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称', - `job_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务类名', - `cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'cron表达式', - `parameter` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数', - `state` int(4) NULL DEFAULT NULL COMMENT '状态', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_quartz_job --- ---------------------------- -INSERT INTO `starter_quartz_job` VALUES (1456579473573867520, '测试任务', 'cn.bootx.starter.quartz.task.TestTask', '* * * * * ?', '{\"aaa\":\"5255\"}', 0, '测试任务', 1399985191002447872, '2021-11-05 19:09:43', 1399985191002447872, '2022-05-26 15:37:35', 22, 0); - --- ---------------------------- --- Table structure for starter_audit_operate_log --- ---------------------------- -CREATE TABLE `starter_audit_operate_log` ( - `id` bigint(20) NOT NULL, - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作模块', - `operate_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人员id', - `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作人员账号', - `business_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务类型', - `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方法', - `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', - `operate_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求url', - `operate_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作ip', - `operate_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作地点', - `operate_param` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求参数', - `operate_return` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回参数', - `success` bit(1) NULL DEFAULT NULL COMMENT '是否成功', - `error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误提示', - `operate_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_operate_log --- ---------------------------- - --- ---------------------------- --- Table structure for starter_audit_login_log --- ---------------------------- -CREATE TABLE `starter_audit_login_log` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(11) NULL DEFAULT NULL COMMENT '用户id', - `account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名称', - `login` bit(1) NULL DEFAULT NULL COMMENT '登录成功状态', - `client` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '终端', - `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录IP地址', - `login_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录地点', - `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', - `browser` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器类型', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示消息', - `login_time` datetime(0) NULL DEFAULT NULL COMMENT '访问时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登陆日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_login_log --- ---------------------------- - --- ---------------------------- --- Table structure for sales_strategy_config_value --- ---------------------------- -CREATE TABLE `sales_strategy_config_value` ( - `id` bigint(20) NOT NULL, - `strategy_id` bigint(20) NULL DEFAULT NULL COMMENT '策略id', - `strategy_register_id` bigint(20) NULL DEFAULT NULL COMMENT '策略注册id', - `strategy_config_id` bigint(20) NULL DEFAULT NULL COMMENT '策略定义id', - `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '策略参数key', - `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数值', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '策略配置参数' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_strategy_config_value --- ---------------------------- - --- ---------------------------- --- Table structure for sales_strategy_check_rule --- ---------------------------- -CREATE TABLE `sales_strategy_check_rule` ( - `id` bigint(20) NOT NULL, - `register_id` bigint(20) NULL DEFAULT NULL COMMENT '模板id', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则名称', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则code', - `type` int(11) NOT NULL COMMENT '类型', - `addition` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附加参数 json', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '策略规则检查' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_strategy_check_rule --- ---------------------------- - --- ---------------------------- --- Table structure for sales_coupon --- ---------------------------- -CREATE TABLE `sales_coupon` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `template_id` bigint(20) NULL DEFAULT NULL COMMENT '模板id', - `strategy_register_id` bigint(20) NULL DEFAULT NULL COMMENT '策略注册id', - `start_time` datetime(6) NULL DEFAULT NULL COMMENT '有效开始时间', - `end_time` datetime(6) NULL DEFAULT NULL COMMENT '有效结束时间', - `status` int(6) NOT NULL COMMENT '状态', - `obtain_time` datetime(6) NULL DEFAULT NULL COMMENT '领取时间', - `used_time` datetime(6) NULL DEFAULT NULL COMMENT '使用时间', - `order_id` bigint(20) NULL DEFAULT NULL COMMENT '所用订单Id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `creator` bigint(20) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '优惠券' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of sales_coupon --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_triggers --- ---------------------------- -CREATE TABLE `qrtz_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL, - `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL, - `PRIORITY` int(11) NULL DEFAULT NULL, - `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `START_TIME` bigint(13) NOT NULL, - `END_TIME` bigint(13) NULL DEFAULT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_simprop_triggers --- ---------------------------- -CREATE TABLE `qrtz_simprop_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `INT_PROP_1` int(11) NULL DEFAULT NULL, - `INT_PROP_2` int(11) NULL DEFAULT NULL, - `LONG_PROP_1` bigint(20) NULL DEFAULT NULL, - `LONG_PROP_2` bigint(20) NULL DEFAULT NULL, - `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, - `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, - `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_simprop_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_simple_triggers --- ---------------------------- -CREATE TABLE `qrtz_simple_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REPEAT_COUNT` bigint(7) NOT NULL, - `REPEAT_INTERVAL` bigint(12) NOT NULL, - `TIMES_TRIGGERED` bigint(10) NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_simple_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_scheduler_state --- ---------------------------- -CREATE TABLE `qrtz_scheduler_state` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `LAST_CHECKIN_TIME` bigint(13) NOT NULL, - `CHECKIN_INTERVAL` bigint(13) NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_scheduler_state --- ---------------------------- -INSERT INTO `qrtz_scheduler_state` VALUES ('quartzScheduler', 'xxm1638448483700', 1638451157328, 10000); - --- ---------------------------- --- Table structure for qrtz_paused_trigger_grps --- ---------------------------- -CREATE TABLE `qrtz_paused_trigger_grps` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_paused_trigger_grps --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_job_details --- ---------------------------- -CREATE TABLE `qrtz_job_details` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_job_details --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_fired_triggers --- ---------------------------- -CREATE TABLE `qrtz_fired_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `FIRED_TIME` bigint(13) NOT NULL, - `SCHED_TIME` bigint(13) NOT NULL, - `PRIORITY` int(11) NOT NULL, - `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, - INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, - INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, - INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_fired_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_cron_triggers --- ---------------------------- -CREATE TABLE `qrtz_cron_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_cron_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_calendars --- ---------------------------- -CREATE TABLE `qrtz_calendars` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR` blob NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_calendars --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_blob_triggers --- ---------------------------- -CREATE TABLE `qrtz_blob_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `BLOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_blob_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_payment --- ---------------------------- -CREATE TABLE `pay_wechat_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `trade_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信交易号', - `amount` decimal(19, 2) NOT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wechat_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_pay_config --- ---------------------------- -CREATE TABLE `pay_wechat_pay_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信应用AppId', - `sl_app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务商应用编号', - `api_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 API 密钥', - `api_key3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv3 密钥', - `mch_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户号', - `sl_mch_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务商商户号', - `auth_type` int(3) NULL DEFAULT NULL COMMENT '认证方式', - `cert_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'API 证书中的 p12', - `cert_pem_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'API 证书中的 key.pem', - `key_pem_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'API 证书中的 cert.pem', - `domain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '应用域名,回调中会使用此参数', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `partner_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '同 apiKey 后续版本会舍弃', - `is_default` bit(1) NULL DEFAULT NULL COMMENT '是否默认', - `pay_ways` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支持的支付类型', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NULL DEFAULT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付配置' ROW_FORMAT = DYNAMIC; - --- Table structure for pay_wallet_payment --- ---------------------------- -CREATE TABLE `pay_wallet_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `wallet_id` bigint(20) NULL DEFAULT NULL COMMENT '钱包ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包交易记录表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wallet_log --- ---------------------------- -CREATE TABLE `pay_wallet_log` ( - `id` bigint(20) NOT NULL, - `wallet_id` bigint(20) NOT NULL COMMENT '钱包id', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `type` int(11) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作终端ip', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `operation_source` int(11) NOT NULL COMMENT '操作源', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_payment --- ---------------------------- -CREATE TABLE `pay_voucher_payment` ( - `id` bigint(20) NOT NULL, - `voucher_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '储值卡id列表', - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_log --- ---------------------------- -CREATE TABLE `pay_voucher_log` ( - `id` bigint(20) NOT NULL, - `voucher_id` bigint(20) NOT NULL, - `voucher_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `amount` decimal(19, 2) NULL DEFAULT NULL, - `type` int(5) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_refund_record --- ---------------------------- -CREATE TABLE `pay_refund_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付记录id', - `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联业务id', - `refund_request_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '异步方式关联退款请求号', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '剩余可退款金额', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `refund_status` int(2) NULL DEFAULT NULL COMMENT '退款状态', - `refund_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '退款记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_refund_record --- ---------------------------- - --- ---------------------------- --- Table structure for pay_payment --- ---------------------------- -CREATE TABLE `pay_payment` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `pay_type_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付信息', - `async_pay_mode` bit(1) NOT NULL COMMENT '是否是异步支付', - `async_pay_channel` int(11) NULL DEFAULT NULL COMMENT '异步支付方式', - `pay_channel_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付通道信息列表', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `expired_time` datetime(6) NULL DEFAULT NULL COMMENT '过期时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_order_log --- ---------------------------- -CREATE TABLE `pay_pay_order_log` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_pay_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单扩展业务参数', - `pay_order_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单参数', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付关联订单信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_order_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_notify_record --- ---------------------------- -CREATE TABLE `pay_pay_notify_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付号', - `notify_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知消息', - `pay_channel` int(11) NOT NULL COMMENT '支付通道', - `status` int(2) NOT NULL COMMENT '处理状态', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示信息', - `notify_time` datetime(6) NULL DEFAULT NULL COMMENT '回调时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付回调记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_notify_record --- ---------------------------- - --- ---------------------------- --- Table structure for order_order_item_billing --- ---------------------------- -CREATE TABLE `order_order_item_billing` ( - `id` bigint(20) NOT NULL, - `order_billing_id` bigint(20) NULL DEFAULT NULL COMMENT '账单id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `order_id` bigint(20) NULL DEFAULT NULL COMMENT '订单id', - `order_item_id` bigint(20) NULL DEFAULT NULL COMMENT '订单项id', - `sku_id` bigint(20) NULL DEFAULT NULL COMMENT '订单项目skuId', - `transaction_purpose` int(11) NOT NULL COMMENT '交易目的', - `transaction_type` int(11) NOT NULL COMMENT '交易类型(名目)', - `pay_type` int(11) NOT NULL COMMENT '支付类型', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '支付金额', - `count` int(11) NULL DEFAULT NULL COMMENT '使用数量', - `bookkeeping_time` bigint(20) NULL DEFAULT NULL COMMENT '入账时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - `business_type` int(11) NULL DEFAULT NULL, - `source_item_billing_id` bigint(20) NULL DEFAULT NULL, - `source_order_item_id` bigint(20) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单明细账单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of order_order_item_billing --- ---------------------------- - --- ---------------------------- --- Table structure for order_order_billing --- ---------------------------- -CREATE TABLE `order_order_billing` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `channel_id` bigint(20) NULL DEFAULT NULL COMMENT '渠道id', - `order_id` bigint(20) NULL DEFAULT NULL COMMENT '订单id', - `pay_type` int(11) NOT NULL COMMENT '交易目的', - `transaction_purpose` int(11) NOT NULL COMMENT '交易类型', - `transaction_type` int(11) NOT NULL COMMENT '支付类型', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `count` int(11) NULL DEFAULT NULL COMMENT '交易数量', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单账单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of order_order_billing --- ---------------------------- - --- ---------------------------- --- Table structure for pay_cash_payment --- ---------------------------- -CREATE TABLE `pay_cash_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '现金交易记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_cash_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_alipay_config --- ---------------------------- -CREATE TABLE `pay_alipay_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', - `app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付宝商户appId', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `server_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求网关地址', - `auth_type` int(4) NOT NULL COMMENT '认证方式', - `sign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '签名类型', - `alipay_public_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥', - `private_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '私钥', - `app_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '应用公钥', - `alipay_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥证书', - `alipay_root_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝CA根证书', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `expire_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '超时配置', - `pay_ways` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支持的支付类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for pay_ali_payment --- ---------------------------- -CREATE TABLE `pay_ali_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `trade_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付宝关联流水号', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NULL DEFAULT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_ali_payment --- ---------------------------- - --- ---------------------------- --- Table structure for order_order_strategy_mapping --- ---------------------------- -CREATE TABLE `order_order_strategy_mapping` ( - `id` bigint(20) NOT NULL, - `order_id` bigint(20) NULL DEFAULT NULL COMMENT '订单id', - `order_detail_id` bigint(20) NULL DEFAULT NULL COMMENT '明细id', - `strategy_id` bigint(20) NULL DEFAULT NULL COMMENT '策略ID', - `strategy_type` int(11) NULL DEFAULT NULL COMMENT '策略类型(普通/优惠券ID)', - `strategy_register_id` bigint(20) NULL DEFAULT NULL COMMENT '策略注册ID', - `price_change` decimal(19, 2) NULL DEFAULT NULL COMMENT '价格变动', - `desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注信息', - `coupon_id` bigint(20) NULL DEFAULT NULL, - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单策略映射' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of order_order_strategy_mapping --- ---------------------------- - --- ---------------------------- --- Table structure for order_order_detail --- ---------------------------- -CREATE TABLE `order_order_detail` ( - `id` bigint(20) NOT NULL, - `active_id` bigint(20) NULL DEFAULT NULL COMMENT '活动id', - `shop_id` bigint(20) NULL DEFAULT NULL COMMENT '店铺id', - `order_id` bigint(20) NULL DEFAULT NULL COMMENT '订单id', - `category_id` bigint(20) NULL DEFAULT NULL COMMENT '类目id', - `goods_id` bigint(20) NULL DEFAULT NULL COMMENT '商品id', - `sku_id` bigint(20) NULL DEFAULT NULL COMMENT '库存id', - `goods_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商品名称', - `goods_price` decimal(19, 2) NULL DEFAULT NULL COMMENT '商品价格', - `num` int(11) NOT NULL COMMENT '数量', - `total_amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '总价', - `pay_amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '支付价', - `state` int(11) NULL DEFAULT NULL COMMENT '状态', - `addition` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附加参数', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单明细' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of order_order_detail --- ---------------------------- - --- ---------------------------- --- Table structure for order_order --- ---------------------------- -CREATE TABLE `order_order` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', - `contact_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系人', - `contact_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', - `contact_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系邮箱', - `channel_id` bigint(20) NULL DEFAULT NULL COMMENT '渠道', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '购买用户id', - `status` int(11) NOT NULL COMMENT '状态', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `type` int(11) NULL DEFAULT NULL COMMENT '类型', - `total_amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '总金额', - `pay_amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '实付金额', - `coupon_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所用优惠券ids', - `address_info` json NULL COMMENT '地址参数', - `invoice_info` json NULL COMMENT '发票参数', - `addition` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附加参数', - `device_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备id', - `source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '来源', - `business_id` bigint(20) NULL DEFAULT NULL COMMENT '业务id', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of order_order --- ---------------------------- - --- ---------------------------- --- Table structure for notice_wechat_config --- ---------------------------- -CREATE TABLE `notice_wechat_config` ( - `id` bigint(18) NOT NULL, - `tid` bigint(18) NOT NULL COMMENT '租户id', - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `corp_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `corp_secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, - `version` int(10) NULL DEFAULT NULL, - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '微信消息配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_wechat_config --- ---------------------------- -INSERT INTO `notice_wechat_config` VALUES (181361815405135421, 0, 'test01', 'test01', 'ww9d6247559117d202', '8n6A3SzN-DJNkw8wyCcJnr8-SOjFFWSOlBqZN8vypKM', 1, 1415, '2018-11-20 11:07:07', 1415, '2018-11-20 11:07:07', 0, 0); - --- ---------------------------- --- Table structure for notice_sms_config --- ---------------------------- -CREATE TABLE `notice_sms_config` ( - `id` bigint(18) NOT NULL, - `tid` bigint(18) NOT NULL COMMENT '租户id', - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `account_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `path_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送号码的唯一标识(基于twillio的命名风格)', - `auth_token` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `from_num` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, - `version` int(10) NULL DEFAULT NULL, - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `isp` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `reply_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_sms_config --- ---------------------------- - --- ---------------------------- --- Table structure for notice_site_message --- ---------------------------- -CREATE TABLE `notice_site_message` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息标题', - `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息内容', - `sender_id` bigint(20) NULL DEFAULT NULL COMMENT '发送者id', - `sender_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发送者姓名', - `receive_id` bigint(20) NULL DEFAULT NULL COMMENT '接收者id', - `receive_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接收者姓名', - `sender_time` datetime(0) NULL DEFAULT NULL COMMENT '发送时间', - `have_read` bit(1) NULL DEFAULT NULL COMMENT '是否已读', - `read_time` datetime(0) NULL DEFAULT NULL COMMENT '已读时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '站内信' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_site_message --- ---------------------------- -INSERT INTO `notice_site_message` VALUES (1424212599079161857, '测试消息', '测试测试测试', 1399985191002447872, '小小明', 1414143554414059520, 'xxm', '2021-08-08 11:34:11', b'0', NULL, 1399985191002447872, '2021-08-08 11:35:19', 1399985191002447872, '2021-08-08 11:35:19', 0, 0); - --- ---------------------------- --- Table structure for notice_message_template --- ---------------------------- -CREATE TABLE `notice_message_template` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模板数据', - `type` int(11) NULL DEFAULT NULL COMMENT '模板类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息模板' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_message_template --- ---------------------------- -INSERT INTO `notice_message_template` VALUES (1424936204932169730, 'cs', '测试', 'hello ${msg}6666666666666666666666666666', 1, '测试模板', 0, '2021-08-10 11:30:40', 0, '2021-08-10 11:30:40', 0, 0); - --- ---------------------------- --- Table structure for notice_mail_config --- ---------------------------- -CREATE TABLE `notice_mail_config` ( - `id` bigint(20) NOT NULL, - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编号', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `host` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器host', - `port` int(5) NOT NULL COMMENT '邮箱服务器 port', - `username` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 username', - `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 password', - `sender` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 sender', - `from_` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 from', - `activity` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `security_type` int(2) NULL DEFAULT NULL COMMENT '安全传输方式 1:plain 2:tls 3:ssl', - `creator` bigint(18) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(18) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for iam_user_social --- ---------------------------- -CREATE TABLE `iam_user_social` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `we_chat_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信openId', - `qq_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'qqId', - `weibo_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微博Id', - `gitee_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '码云唯一标识', - `ding_talk_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉唯一标识', - `we_com_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业微信唯一标识', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户三方登录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for goods_specification --- ---------------------------- -CREATE TABLE `goods_specification` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规格名称', - `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', - `options` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规格列表值', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态', - `remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '规格' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Table structure for goods_goods_sku_packing --- ---------------------------- -CREATE TABLE `goods_goods_sku_packing` ( - `id` bigint(20) NOT NULL, - `goods_id` bigint(20) NULL DEFAULT NULL COMMENT '打包品', - `packed_goods_id` bigint(20) NULL DEFAULT NULL COMMENT '被打包品', - `goods_sku_id` bigint(20) NULL DEFAULT NULL COMMENT '打包SKU', - `packed_sku_id` bigint(20) NULL DEFAULT NULL COMMENT '被打包SKU', - `create_time` datetime(6) NULL DEFAULT NULL, - `creator` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sku打包关系' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of goods_goods_sku_packing --- ---------------------------- - --- ---------------------------- --- Table structure for goods_goods_sku_attr --- ---------------------------- -CREATE TABLE `goods_goods_sku_attr` ( - `id` bigint(20) NOT NULL, - `cid` bigint(20) NULL DEFAULT NULL COMMENT '类目 id', - `goods_id` bigint(20) NULL DEFAULT NULL COMMENT '商品 id', - `sku_id` bigint(20) NULL DEFAULT NULL COMMENT 'SKU id', - `attr_def_id` bigint(20) NULL DEFAULT NULL COMMENT '属性定义 id', - `attr_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '属性值', - `attr_value_display` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '显示值', - `tid` bigint(20) NOT NULL, - `attr_values_display` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `attr_value_displays` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sku属性' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for goods_goods_sku --- ---------------------------- -CREATE TABLE `goods_goods_sku` ( - `id` bigint(20) NOT NULL, - `cid` bigint(20) NULL DEFAULT NULL COMMENT '所属类目id', - `goods_id` bigint(20) NULL DEFAULT NULL COMMENT '所属商品 id', - `shop_id` bigint(20) NULL DEFAULT NULL COMMENT '所属商户', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '外部编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'SKU 名称', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `packing` bit(1) NOT NULL COMMENT '是否打包品', - `addition` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附加信息', - `business_id` bigint(20) NULL DEFAULT NULL COMMENT '业务id', - `attr_def_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成此商品 SKU 的属性定义的 id 拼接串', - `attr_values` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '属性值id拼接串', - `attr_value_displays` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '示值拼接串', - `is_unlimited` bit(1) NOT NULL COMMENT '是否无限库存', - `capacity` int(11) NOT NULL COMMENT '初始库存', - `locked` int(11) NOT NULL COMMENT '预占库存', - `sold` int(11) NOT NULL COMMENT '已用库存', - `available` int(11) NOT NULL COMMENT '可用库存', - `sale_state` int(11) NULL DEFAULT NULL COMMENT '销售状态', - `sale_off_time` datetime(6) NULL DEFAULT NULL COMMENT '上架时间', - `sale_on_time` datetime(6) NULL DEFAULT NULL COMMENT '下架时间', - `price` decimal(19, 2) NULL DEFAULT NULL COMMENT '价格', - `state` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NULL DEFAULT NULL, - `out_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品sku' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of goods_goods_sku --- ---------------------------- - --- ---------------------------- --- Table structure for goods_goods_packing --- ---------------------------- -CREATE TABLE `goods_goods_packing` ( - `id` bigint(20) NOT NULL, - `goods_id` bigint(20) NULL DEFAULT NULL COMMENT '打包品', - `packed_goods_id` bigint(20) NULL DEFAULT NULL COMMENT '被打包品', - `create_time` datetime(6) NULL DEFAULT NULL, - `creator` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品打包关系' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of goods_goods_packing --- ---------------------------- - --- ---------------------------- --- Table structure for goods_goods --- ---------------------------- -CREATE TABLE `goods_goods` ( - `id` bigint(20) NOT NULL, - `cid` bigint(20) NULL DEFAULT NULL COMMENT '类目id', - `cname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类目名称', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商品名', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', - `packing` bit(1) NOT NULL COMMENT '是否是打包品', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `addition` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附加参数', - `state` int(11) NOT NULL COMMENT '状态', - `banner_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `display_price` decimal(19, 2) NULL DEFAULT NULL, - `goods_type` int(11) NULL DEFAULT NULL, - `main_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `sale_off_time` datetime(6) NULL DEFAULT NULL, - `sale_on_time` datetime(6) NULL DEFAULT NULL, - `sale_state` int(11) NULL DEFAULT NULL, - `shop_id` bigint(20) NULL DEFAULT NULL, - `attr_def_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `attr_value_displays` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `attr_values` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `display_lower_price` decimal(19, 2) NULL DEFAULT NULL, - `display_upper_price` decimal(19, 2) NULL DEFAULT NULL, - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - `out_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '商品spu' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Table structure for goods_category_parameter_group --- ---------------------------- -CREATE TABLE `goods_category_parameter_group` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `sort_no` double(8, 2) NULL DEFAULT NULL COMMENT '排序', - `category_id` bigint(20) NULL DEFAULT NULL COMMENT '类目id', - `remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '类目参数组' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Table structure for goods_category_parameter --- ---------------------------- -CREATE TABLE `goods_category_parameter` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '品牌名称', - `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型', - `options` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '选择值(列表)', - `required` bit(1) NULL DEFAULT NULL COMMENT '是否必填', - `sort_no` double(8, 2) NULL DEFAULT NULL COMMENT '排序', - `group_id` bigint(20) NULL DEFAULT NULL COMMENT '参数组id', - `category_id` bigint(20) NULL DEFAULT NULL COMMENT '类目id', - `remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '类目参数' ROW_FORMAT = Dynamic; - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220624__bate3.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220624__bate3.sql deleted file mode 100644 index 7bb5eb4c8..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220624__bate3.sql +++ /dev/null @@ -1,19 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -ALTER TABLE `base_key_value` MODIFY COLUMN `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值' AFTER `key`;INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1535451167008436224, 'admin', 1431152689832525824, '系统信息', 'SysInfo', NULL, b'0', '', b'0', b'0', 'starter/monitor/SystemInfoMonitor', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-11 10:37:40', 1399985191002447872, '2022-06-13 13:07:46', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1535965936371085312, 'admin', 1431152689832525824, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', 'starter/monitor/RedisInfoMonitor', NULL, '/monitor/redis', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-12 20:43:11', 1399985191002447872, '2022-06-13 13:07:38', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1537730140522348544, 'admin', 1438061887002759168, '站内信', 'SiteMessage', '', b'0', '', b'0', b'0', 'notice/site/SiteMessage', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:33:30', 1399985191002447872, '2022-06-17 17:33:30', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1537732440632524800, 'admin', NULL, '个人办公', 'person', '', b'0', 'user', b'0', b'0', 'RouteView', NULL, '/person', '', -99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:42:38', 1399985191002447872, '2022-06-17 17:45:24', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1537733801860333568, 'admin', 1537732440632524800, '我的消息', 'PersonSiteMessage', NULL, b'0', '', b'0', b'0', 'Dev', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:48:03', 1399985191002447872, '2022-06-21 20:52:50', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1537735851818024960, 'admin', 1537732440632524800, '待办任务', 'PersonTaskList', NULL, b'0', '', b'0', b'0', 'Dev', NULL, '/person/taskList', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:56:11', 1399985191002447872, '2022-06-21 20:52:42', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1538160478872625152, 'admin', 1495968302034210816, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', 'demo/wangeditor/WangEditorDemo', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-18 22:03:30', 1399985191002447872, '2022-06-18 22:03:31', 0, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '系统监控', `name` = 'monitor', `perm_code` = '', `effect` = b'0', `icon` = 'radar-chart', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/monitor', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2021-08-27 15:12:45', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:57:30', `version` = 21, `deleted` = 0 WHERE `id` = 1431152689832525824; -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '微信', `name` = 'NoticeWeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/notice/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:14:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:53:04', `version` = 1, `deleted` = 0 WHERE `id` = 1450827660459458560; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-06-22 00:27:07', `current_login_time` = '2022-06-22 00:51:30', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-06-22 00:51:30', `version` = 180, `deleted` = 0 WHERE `id` = 1399985191002447872; - -UPDATE `starter_quartz_job` SET `name` = '测试任务', `job_class_name` = 'cn.bootx.starter.quartz.task.TestTask', `cron` = '50 0 * * * ? *', `parameter` = '{\"aaa\":\"5255\"}', `state` = 0, `remark` = '测试任务', `creator` = 1399985191002447872, `create_time` = '2021-11-05 19:09:43', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-22 00:37:48', `version` = 25, `deleted` = 0 WHERE `id` = 1456579473573867520; - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220702__bate4.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220702__bate4.sql deleted file mode 100644 index c576614b7..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220702__bate4.sql +++ /dev/null @@ -1,165 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -CREATE TABLE `iam_application` ( - `id` bigint(20) NOT NULL, - `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `enable` bit(1) NOT NULL COMMENT '是否可用', - `client_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联终端', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '认证应用' ROW_FORMAT = DYNAMIC; - -ALTER TABLE `iam_client` DROP COLUMN `alone_prem`; - -ALTER TABLE `iam_perm_menu` ADD COLUMN `app_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '应用code' AFTER `id`; -ALTER TABLE `iam_perm_menu` DROP COLUMN `client_code`; -ALTER TABLE `iam_role_menu` ADD COLUMN `app_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '应用code' AFTER `role_id`; -ALTER TABLE `iam_role_menu` DROP COLUMN `client_code`; - -ALTER TABLE `iam_perm_path` MODIFY COLUMN `code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限标识' AFTER `id`; - -ALTER TABLE `iam_user_info` ADD COLUMN `app_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联应用ds' AFTER `email`; -ALTER TABLE `iam_user_info` DROP COLUMN `client_ids`; - -ALTER TABLE `iam_user_social` COMMENT = '用户三方登录绑定'; -ALTER TABLE `iam_user_social` ADD INDEX `pk_user_index`(`user_id`) USING BTREE COMMENT '用户id索引'; - -CREATE TABLE `iam_user_social_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '第三方终端类型', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', - `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户昵称', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户头像', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_client`(`user_id`, `client_code`) USING BTREE COMMENT '用户id和终端code' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户三方登录绑定详情' ROW_FORMAT = Dynamic; - -ALTER TABLE `starter_file_upload_info` MODIFY COLUMN `file_size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小' AFTER `file_suffix`;SET FOREIGN_KEY_CHECKS = 1; - -INSERT INTO `iam_application` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-07-02 14:55:11', 4, 0); -INSERT INTO `iam_application` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-06-29 18:31:45', 1, 0); -INSERT INTO `iam_client` VALUES (1542091599907115008, 'dingTalk', '钉钉', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, 0); -INSERT INTO `iam_client` VALUES (1542804450312122368, 'weCom', '企业微信', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, 0); - -INSERT INTO `iam_client`(`id`, `code`, `name`, `system`, `timeout`, `captcha`, `pwd_err_num`, `enable`, `description`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1543126042909016064, 'WeChat', '微信登录', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 1399985191002447872, '2022-07-02 14:54:53', 0, 0); -UPDATE `iam_client` SET `code` = 'password', `name` = '账号密码登陆', `system` = b'1', `timeout` = 3600, `captcha` = b'0', `pwd_err_num` = -1, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-25 15:21:20', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-04-24 19:51:13', `version` = 16, `deleted` = 0 WHERE `id` = 1430430071299207168; -UPDATE `iam_client` SET `code` = 'phone', `name` = '手机短信登录', `system` = b'0', `timeout` = 3600, `captcha` = b'1', `pwd_err_num` = 0, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-07 15:11:16', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-26 21:35:20', `version` = 4, `deleted` = 0 WHERE `id` = 1435138582839009280; - -INSERT INTO `iam_perm_menu` VALUES (1541355214204030976, 'admin', 1541427353886859264, '认证应用', 'AuthApplication', '', b'0', '', b'0', b'0', 'system/client/ApplicationList', NULL, '/system/config/application', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:08', 1399985191002447872, '2022-06-27 22:25:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1541427353886859264, 'admin', 1414596052497092608, '认证管理', 'Auth', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-27 22:24:54', 1399985191002447872, '2022-06-27 22:24:54', 0, 0); - -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '系统管理', `name` = 'system', `perm_code` = '', `effect` = NULL, `icon` = 'desktop', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = '', `path` = '/system', `redirect` = '/system/user', `sort_no` = 0, `menu_type` = 0, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'1', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:02:16', `version` = 2, `deleted` = 0 WHERE `id` = 1414596052497092608; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '用户管理', `name` = 'User', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/user/UserList', `component_name` = '', `path` = '/system/userAuth/user', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:17:40', `version` = 4, `deleted` = 0 WHERE `id` = 1414596647509446656; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '菜单管理', `name` = 'Menu', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/menu/MenuList', `component_name` = '', `path` = '/system/permission/menu', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'1', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:16', `version` = 2, `deleted` = 0 WHERE `id` = 1414596773275652096; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '角色管理', `name` = 'Role', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/role/RoleList', `component_name` = '', `path` = '/system/permission/role', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:04', `version` = 4, `deleted` = 0 WHERE `id` = 1414596805538238464; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '部门管理', `name` = 'Dept', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/dept/DeptList', `component_name` = '', `path` = '/system/userAuth/dept', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:31', `version` = 7, `deleted` = 0 WHERE `id` = 1414596842322284544; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '数据字典', `name` = 'Dict', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/translate/DictList', `component_name` = '', `path` = '/system/config/translate', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-19 09:04:55', `version` = 11, `deleted` = 0 WHERE `id` = 1414596877617352704; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '在线用户管理', `name` = 'OnlineUser', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/online/OnlineUserList', `component_name` = NULL, `path` = '/system/userAuth/online', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:32:53', `version` = 6, `deleted` = 0 WHERE `id` = 1431082258161434624; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1541427353886859264, `title` = '认证终端', `name` = 'Client', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/client/ClientList', `component_name` = NULL, `path` = '/system/config/client', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:37:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-27 22:25:16', `version` = 8, `deleted` = 0 WHERE `id` = 1431083330909208576; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '请求权限管理', `name` = 'Path', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/path/PathList', `component_name` = NULL, `path` = '/system/permission/path', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 11:00:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 11:00:11', `version` = 2, `deleted` = 0 WHERE `id` = 1431089129232498688; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '系统监控', `name` = 'monitor', `perm_code` = '', `effect` = b'0', `icon` = 'radar-chart', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/monitor', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2021-08-27 15:12:45', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:57:30', `version` = 21, `deleted` = 0 WHERE `id` = 1431152689832525824; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '接口文档', `name` = 'ApiSwagger', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/doc.html', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 15:15:25', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 11:06:52', `version` = 15, `deleted` = 0 WHERE `id` = 1431153358157348864; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '登录日志', `name` = 'LoginLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/LoginLogList', `component_name` = NULL, `path` = '/system/log/loginLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-07 15:31:31', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-07 15:31:31', `version` = 5, `deleted` = 0 WHERE `id` = 1435143678721236992; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '操作日志', `name` = 'OperateLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/OperateLogList', `component_name` = NULL, `path` = '/system/log/OperateLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-08 13:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-08 13:33:04', `version` = 7, `deleted` = 0 WHERE `id` = 1435476255797624832; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '通知管理', `name` = 'notice', `perm_code` = '', `effect` = NULL, `icon` = 'message', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/notice', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-15 16:47:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-15 16:47:26', `version` = 3, `deleted` = 0 WHERE `id` = 1438061887002759168; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '邮件配置', `name` = 'MailConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/mail/MailConfigList', `component_name` = NULL, `path` = '/notice/mailConfig', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-15 17:29:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-15 17:29:03', `version` = 3, `deleted` = 0 WHERE `id` = 1438072357281542144; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '消息模板', `name` = 'MessageTemplate', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/template/TemplateList', `component_name` = NULL, `path` = '/notice/template', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-18 19:57:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-18 19:57:33', `version` = 3, `deleted` = 0 WHERE `id` = 1439196893514031104; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '钉钉', `name` = 'DingTalk', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/notice/dingTalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:27:50', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-21 15:27:50', `version` = 0, `deleted` = 0 WHERE `id` = 1440216178722050048; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1440216178722050048, `title` = '钉钉机器人', `name` = 'DingTalkRobot', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/dingTalk/robot/DingRobotConfigList', `component_name` = NULL, `path` = '/notice/dingTalk/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:29:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-21 15:29:33', `version` = 3, `deleted` = 0 WHERE `id` = 1440216612211757056; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '第三方登录', `name` = 'Social', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/social/SocialList', `component_name` = NULL, `path` = '/system/userAuth/social', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-19 22:45:01', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-19 22:45:01', `version` = 4, `deleted` = 0 WHERE `id` = 1450473063320526848; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '定时任务', `name` = 'QuartzJobList', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/quartz/QuartzJobList', `component_name` = NULL, `path` = '/system/config/quartz', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 20:39:41', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 20:39:41', `version` = 5, `deleted` = 0 WHERE `id` = 1450803906215886848; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '第三方对接', `name` = 'social', `perm_code` = '', `effect` = b'0', `icon` = 'branches', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:42:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-04-05 16:53:25', `version` = 3, `deleted` = 0 WHERE `id` = 1450819607680991232; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '微信', `name` = 'SocialWeChat', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:50:28', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:50:28', `version` = 1, `deleted` = 0 WHERE `id` = 1450821723027881984; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '企业微信', `name` = 'SocialWeCom', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/wecom', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:51:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:51:05', `version` = 2, `deleted` = 0 WHERE `id` = 1450821877831254016; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '钉钉', `name` = 'SocialDingTalk', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/dingtalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:53:36', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:53:36', `version` = 1, `deleted` = 0 WHERE `id` = 1450822511087271936; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '支付管理', `name` = 'PayManager', `perm_code` = '', `effect` = NULL, `icon` = 'pay-circle', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:54:55', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:54:55', `version` = 2, `deleted` = 0 WHERE `id` = 1450822842995130368; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '支付通道', `name` = 'PayChannel', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/channel', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:59:22', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:59:22', `version` = 2, `deleted` = 0 WHERE `id` = 1450823960236081152; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '支付宝', `name` = 'AliPayConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/alipay/AliPayConfigList', `component_name` = NULL, `path` = '/payment/channel/alipay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:59:59', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:59:59', `version` = 1, `deleted` = 0 WHERE `id` = 1450824117849636864; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '微信支付', `name` = 'WeChatPayConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/wechat/WeChatConfigList', `component_name` = NULL, `path` = '/payment/channel/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:00:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:00:48', `version` = 1, `deleted` = 0 WHERE `id` = 1450824319868289024; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '云闪付', `name` = 'UnionPayConfig', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/unionpay/UnionPayConfigList', `component_name` = NULL, `path` = '/payment/channel/unionpay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:02:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 16:12:13', `version` = 3, `deleted` = 0 WHERE `id` = 1450824637876224000; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '现金支付', `name` = 'CashPayConfig', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/payment/channel/cash', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:03:00', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 16:12:08', `version` = 1, `deleted` = 0 WHERE `id` = 1450824875198332928; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '收银台', `name` = 'PayCashier', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/cashier/Cashier', `component_name` = NULL, `path` = '/payment/cashier', `redirect` = '', `sort_no` = -1, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:05:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:05:26', `version` = 2, `deleted` = 0 WHERE `id` = 1450825488577544192; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '订单管理', `name` = 'PayOrder', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/order', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:05:57', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:05:57', `version` = 2, `deleted` = 0 WHERE `id` = 1450825615857893376; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '回调记录', `name` = 'PayNotify', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/notify/PayNotifyRecordList', `component_name` = NULL, `path` = '/payment/notify', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:06:45', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:06:45', `version` = 0, `deleted` = 0 WHERE `id` = 1450825819436826624; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '支付订单', `name` = 'PaymentOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/order/payment/PaymentList', `component_name` = NULL, `path` = '/payment/order/payment', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:11:00', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-25 15:17:07', `version` = 2, `deleted` = 0 WHERE `id` = 1450826890318135296; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '退款订单', `name` = 'ReturnOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/order/refund/RefundRecordList', `component_name` = NULL, `path` = '/payment/order/return', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:12:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 15:44:06', `version` = 4, `deleted` = 0 WHERE `id` = 1450827159626006528; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '转账订单', `name` = 'TransferOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'payment/order/transfer/TransferList', `component_name` = NULL, `path` = '/payment/order/transfer', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:12:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 15:33:31', `version` = 3, `deleted` = 0 WHERE `id` = 1450827308515409920; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '微信', `name` = 'NoticeWeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/notice/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:14:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:53:04', `version` = 1, `deleted` = 0 WHERE `id` = 1450827660459458560; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '审计日志', `name` = 'auditLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/log', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:29:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:29:09', `version` = 0, `deleted` = 0 WHERE `id` = 1452567897717321728; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '权限管理', `name` = 'permission', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/permission', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:34:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:34:53', `version` = 2, `deleted` = 0 WHERE `id` = 1452569339987472384; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '用户信息', `name` = 'userAuth', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/userAuth', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:36:17', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:36:17', `version` = 2, `deleted` = 0 WHERE `id` = 1452569691537256448; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '系统配置', `name` = 'systemConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:42:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:42:33', `version` = 2, `deleted` = 0 WHERE `id` = 1452571269199540224; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '系统参数', `name` = 'SystemParam', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/param/SystemParamList', `component_name` = NULL, `path` = '/system/config/param', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 22:11:18', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 22:11:18', `version` = 1, `deleted` = 0 WHERE `id` = 1452638905302966272; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '数据范围权限', `name` = 'DataScope', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/scope/DataScopeList', `component_name` = NULL, `path` = '/system/permission/data', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-12-25 18:52:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-12-25 18:52:33', `version` = 1, `deleted` = 0 WHERE `id` = 1474694545336676352; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '22', `name` = NULL, `perm_code` = '22', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2021-12-30 17:46:37', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-12-30 17:46:37', `version` = 4, `deleted` = 1 WHERE `id` = 1476489893513404416; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '1', `name` = NULL, `perm_code` = '1', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:58:57', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-03 21:58:57', `version` = 0, `deleted` = 1 WHERE `id` = 1478002945936015360; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '22', `name` = NULL, `perm_code` = '22', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2022-01-03 22:04:13', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-03 22:04:13', `version` = 0, `deleted` = 1 WHERE `id` = 1478004271512240128; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '数据版本日志', `name` = 'DataVersionLog', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/DataVersionLogList', `component_name` = NULL, `path` = '/system/log/DataVersionLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-01-11 17:51:54', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-11 17:51:54', `version` = 0, `deleted` = 0 WHERE `id` = 1480839877352476672; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '文件管理', `name` = 'FIleUpLoad', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/file/FileUploadList', `component_name` = NULL, `path` = '/system/config/file', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-08 17:42:12', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-08 17:42:12', `version` = 0, `deleted` = 0 WHERE `id` = 1490984296616263680; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '代码生成', `name` = 'CodeGen', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/codegen/CodeGenList', `component_name` = NULL, `path` = '/system/config/codeGen', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-19 20:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-19 20:33:05', `version` = 0, `deleted` = 0 WHERE `id` = 1495013564652429312; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '功能演示', `name` = 'Demo', `perm_code` = NULL, `effect` = b'0', `icon` = 'block', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/demo', `redirect` = '', `sort_no` = 99, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 11:46:52', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 11:02:05', `version` = 3, `deleted` = 0 WHERE `id` = 1495968302034210816; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '数据相关', `name` = 'DemoData', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/demo/data', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 11:50:02', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:27:46', `version` = 4, `deleted` = 0 WHERE `id` = 1495969099987963904; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '超级查询', `name` = 'SuperQueryDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/query/SuperQueryDemoList', `component_name` = NULL, `path` = '/demo/query/super', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 15:13:31', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:34:41', `version` = 2, `deleted` = 0 WHERE `id` = 1496020308992143360; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '钱包管理', `name` = 'Wallet', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/wallet', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:03:29', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 10:04:53', `version` = 1, `deleted` = 0 WHERE `id` = 1501740492360962048; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1501740492360962048, `title` = '钱包列表', `name` = 'WalletList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/wallet/list/WalletList', `component_name` = NULL, `path` = '/payment/wallet/list', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:10:23', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:06:19', `version` = 2, `deleted` = 0 WHERE `id` = 1501742229142556672; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1501740492360962048, `title` = '个人钱包', `name` = 'PersonalWallet', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/wallet/list/WalletList', `component_name` = NULL, `path` = '/payment/wallet/personal', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:11:08', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:06:10', `version` = 2, `deleted` = 0 WHERE `id` = 1501742417378725888; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '组合支付', `name` = 'CombinationCashier', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/combination/CombinationCashier', `component_name` = NULL, `path` = '/payment/combination', `redirect` = '', `sort_no` = -0.5, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 17:07:56', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:09:28', `version` = 2, `deleted` = 0 WHERE `id` = 1501847310319972352; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '储值卡', `name` = 'Voucher', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/voucher/VoucherList', `component_name` = NULL, `path` = '/payment/voucher', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-13 16:35:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-14 19:39:45', `version` = 2, `deleted` = 0 WHERE `id` = 1502926397176242176; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '数据权限', `name` = 'DataPermDemoList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/perm/DataPermDemoList', `component_name` = NULL, `path` = '/demo/data/perm', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:27:39', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:28:56', `version` = 1, `deleted` = 0 WHERE `id` = 1506910599819165696; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '加密解密', `name` = 'DataEncryptDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/encrypt/DataEncryptDemoList', `component_name` = NULL, `path` = '/demo/data/encrypt', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:28:47', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:28:47', `version` = 0, `deleted` = 0 WHERE `id` = 1506910885463851008; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '数据脱敏', `name` = 'DataSensitiveDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/sensitive/DataSensitiveDemoList', `component_name` = NULL, `path` = '/demo/data/sensitive', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:29:41', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 17:16:03', `version` = 1, `deleted` = 0 WHERE `id` = 1506911113394913280; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = 'WS演示', `name` = 'WebsocketDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/ws/WebsocketDemo', `component_name` = NULL, `path` = '/demo/ws', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-27 16:30:25', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-27 16:30:25', `version` = 0, `deleted` = 0 WHERE `id` = 1507998458886197248; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '幂等请求演示', `name` = 'IdempotentDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/idempotent/Idempotent', `component_name` = NULL, `path` = '/demo/idempotent', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-31 19:11:12', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:35:00', `version` = 1, `deleted` = 0 WHERE `id` = 1509488473583562752; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1450822511087271936, `title` = '钉钉配置', `name` = 'DingTalkConfig', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'social/dingtalk/config/DingTalkConfigList', `component_name` = NULL, `path` = '/social/dingtalk/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-04-05 16:54:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-04-05 16:54:48', `version` = 0, `deleted` = 0 WHERE `id` = 1511266086400524288; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '商品管理', `name` = 'GoodsManager', `perm_code` = NULL, `effect` = b'0', `icon` = 'car', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/goods', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 11:01:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 11:02:45', `version` = 1, `deleted` = 0 WHERE `id` = 1523860792695283712; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523860792695283712, `title` = '类目管理', `name` = 'CategoryManager', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/goods/category', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 16:24:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 16:24:17', `version` = 1, `deleted` = 0 WHERE `id` = 1523941932282114048; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '类目', `name` = 'Category', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/category/CategoryList', `component_name` = NULL, `path` = '/goods/category/category', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 16:24:52', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 16:25:23', `version` = 1, `deleted` = 0 WHERE `id` = 1523942130555252736; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '品牌', `name` = 'Brand', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/brand/BrandList', `component_name` = NULL, `path` = '/goods/category/brand', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:10:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 23:14:20', `version` = 4, `deleted` = 0 WHERE `id` = 1524044195818278912; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '规格', `name` = 'SpecificationList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/spec/SpecificationList', `component_name` = NULL, `path` = '/goods/category/spec', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:11:14', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 23:13:51', `version` = 1, `deleted` = 0 WHERE `id` = 1524044395823665152; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '参数组', `name` = 'ParameterGroup', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'goods/parameter/ParameterGroupList', `component_name` = NULL, `path` = '/goods/category/parameter', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:12:21', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-12 20:30:23', `version` = 2, `deleted` = 0 WHERE `id` = 1524044678314233856; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1523860792695283712, `title` = '商品', `name` = 'Goods', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/goods/GoodsList', `component_name` = NULL, `path` = '/goods/goods', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-14 21:46:18', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-14 21:46:18', `version` = 0, `deleted` = 0 WHERE `id` = 1525472571967860736; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '消息中间件演示', `name` = 'MQDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/mq/MqDemo', `component_name` = NULL, `path` = '/demo/mq', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:33:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-31 15:12:15', `version` = 1, `deleted` = 0 WHERE `id` = 1530120084482084864; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1530120084482084864, `title` = 'MQTT消息', `name` = 'MqttDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/demo/mq/mqtt', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:36:14', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:36:14', `version` = 0, `deleted` = 1 WHERE `id` = 1530120684645044224; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1530120084482084864, `title` = 'RabbitMQ', `name` = 'RabbitDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/demo/mq/rabbit', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:36:47', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:36:47', `version` = 0, `deleted` = 1 WHERE `id` = 1530120821144473600; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'ELK日志', `name` = 'ELK', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://elk.dev.bootx.cn:5601/app/discover', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-07 10:31:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 10:31:48', `version` = 0, `deleted` = 0 WHERE `id` = 1534000136370204672; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'PlumeLog日志', `name` = 'PlumeLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/plumelog/#/', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-07 11:03:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 11:06:13', `version` = 1, `deleted` = 0 WHERE `id` = 1534008203006652416; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '系统信息', `name` = 'SysInfo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/monitor/SystemInfoMonitor', `component_name` = NULL, `path` = '/monitor/sysinfo', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-11 10:37:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-13 13:07:46', `version` = 1, `deleted` = 0 WHERE `id` = 1535451167008436224; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'Redis监控', `name` = 'RedisInfoMonitor', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/monitor/RedisInfoMonitor', `component_name` = NULL, `path` = '/monitor/redis', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-12 20:43:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-13 13:07:38', `version` = 1, `deleted` = 0 WHERE `id` = 1535965936371085312; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '站内信', `name` = 'SiteMessage', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/site/SiteMessage', `component_name` = NULL, `path` = '/notice/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:33:30', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:33:30', `version` = 0, `deleted` = 0 WHERE `id` = 1537730140522348544; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = NULL, `title` = '个人办公', `name` = 'person', `perm_code` = '', `effect` = b'0', `icon` = 'user', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/person', `redirect` = '', `sort_no` = -99, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:42:38', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:45:24', `version` = 2, `deleted` = 0 WHERE `id` = 1537732440632524800; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '我的消息', `name` = 'PersonSiteMessage', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/person/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:48:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:52:50', `version` = 1, `deleted` = 0 WHERE `id` = 1537733801860333568; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '待办任务', `name` = 'PersonTaskList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/person/taskList', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:56:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:52:42', `version` = 1, `deleted` = 0 WHERE `id` = 1537735851818024960; -UPDATE `iam_perm_menu` SET `app_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '富文本编辑', `name` = 'WangEditorDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/wangeditor/WangEditorDemo', `component_name` = NULL, `path` = '/demo/wangEditor', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-18 22:03:30', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-18 22:03:31', `version` = 0, `deleted` = 0 WHERE `id` = 1538160478872625152; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-07-02 16:26:31', `current_login_time` = '2022-07-02 17:21:14', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-07-02 17:21:14', `version` = 253, `deleted` = 0 WHERE `id` = 1399985191002447872; -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = NULL, `avatar` = NULL, `last_login_time` = NULL, `current_login_time` = NULL, `initial_password` = b'0', `last_change_password_time` = '2022-06-29 00:39:23', `creator` = 1399985191002447872, `create_time` = '2021-09-09 17:14:54', `last_modifier` = 0, `last_modified_time` = '2022-06-29 00:39:23', `version` = 2, `deleted` = 0 WHERE `id` = 1435894470432456704; - -UPDATE `iam_user_info` SET `name` = '小小明', `username` = 'xxm', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13333333333', `email` = 'xxm1995@outlook.com', `app_ids` = '1430430071299207168,1430430071299207169', `avatar` = NULL, `source` = NULL, `admin` = b'1', `register_time` = '2021-06-02 15:04:12', `status` = 1, `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-27 23:09:31', `version` = 50, `deleted` = 0 WHERE `id` = 1399985191002447872; -UPDATE `iam_user_info` SET `name` = '管理员', `username` = 'admin', `password` = 'c80a93d89e6590e8909a1a9f842b1615', `phone` = '13000001111', `email` = 'admin@qq.com', `app_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2021-09-09 17:14:52', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2021-09-09 17:14:54', `last_modifier` = 0, `last_modified_time` = '2022-06-29 00:39:23', `version` = 6, `deleted` = 0 WHERE `id` = 1435894470432456704; -UPDATE `iam_user_info` SET `name` = '测试', `username` = 'test', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13311111111', `email` = 'test@qq.com', `app_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2021-09-09 22:06:37', `status` = 1, `creator` = 1414143554414059520, `create_time` = '2021-09-09 22:06:37', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-31 15:59:37', `version` = 9, `deleted` = 0 WHERE `id` = 1435967884114194432; -UPDATE `iam_user_info` SET `name` = '测试用户001', `username` = 'test001', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `app_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:10:49', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:10:49', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-05 20:26:26', `version` = 1, `deleted` = 0 WHERE `id` = 1477990832987361280; -UPDATE `iam_user_info` SET `name` = '测试用户002', `username` = 'test002', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `app_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:36:53', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:36:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-05 20:26:19', `version` = 1, `deleted` = 0 WHERE `id` = 1477997391729631232; -UPDATE `iam_user_info` SET `name` = '测试用户003', `username` = 'test003', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `app_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:37:43', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:37:43', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-19 13:00:05', `version` = 4, `deleted` = 0 WHERE `id` = 1477997602862505984; - -INSERT INTO `iam_user_social` VALUES (1399985191002447872, 1399985191002447872, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-06-29 18:44:34', 1399985191002447872, '2022-07-02 14:50:16', 4, 0); - -DELETE from iam_role_path; -DELETE from iam_role_menu; -DELETE from iam_perm_path; - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220707__bate4-fix.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220707__bate4-fix.sql deleted file mode 100644 index df495e266..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220707__bate4-fix.sql +++ /dev/null @@ -1,301 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -ALTER TABLE `iam_client` ADD COLUMN `login_type_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联登录方式\r\n' AFTER `enable`; - -ALTER TABLE `iam_client` DROP COLUMN `timeout`; - -ALTER TABLE `iam_client` DROP COLUMN `captcha`; - -ALTER TABLE `iam_client` DROP COLUMN `pwd_err_num`; - -CREATE TABLE `iam_login_type` ( - `id` bigint(20) NOT NULL, - `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长 秒', - `captcha` bit(1) NOT NULL COMMENT '启用验证码', - `pwd_err_num` int(8) NOT NULL COMMENT '密码错误次数', - `enable` bit(1) NOT NULL COMMENT '是否可用', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录方式' ROW_FORMAT = DYNAMIC; - -ALTER TABLE `iam_perm_menu` ADD COLUMN `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '终端code' AFTER `id`; - -ALTER TABLE `iam_perm_menu` DROP COLUMN `app_code`; - -ALTER TABLE `iam_role_menu` ADD COLUMN `client_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '终端code' AFTER `role_id`; - -ALTER TABLE `iam_role_menu` DROP COLUMN `app_code`; - -ALTER TABLE `iam_user_info` ADD COLUMN `client_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联终端ds' AFTER `email`; - -ALTER TABLE `iam_user_info` DROP COLUMN `app_ids`; - -CREATE TABLE `iam_user_third` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `we_chat_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信openId', - `qq_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'qqId', - `weibo_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微博Id', - `gitee_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '码云唯一标识', - `ding_talk_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉唯一标识', - `we_com_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业微信唯一标识', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_index`(`user_id`) USING BTREE COMMENT '用户id索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户三方登录绑定' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `iam_user_third_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '第三方终端类型', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', - `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户昵称', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户头像', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_client`(`user_id`, `client_code`) USING BTREE COMMENT '用户id和终端code' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户三方登录绑定详情' ROW_FORMAT = DYNAMIC; - -DROP TABLE `iam_application`; - -DROP TABLE `iam_user_social`; - -DROP TABLE `iam_user_social_info`; - - -DELETE FROM `iam_client` WHERE `id` = 1430478946919653376; - -DELETE FROM `iam_client` WHERE `id` = 1435138582839009280; - -DELETE FROM `iam_client` WHERE `id` = 1542091599907115008; - -DELETE FROM `iam_client` WHERE `id` = 1542804450312122368; - -DELETE FROM `iam_client` WHERE `id` = 1543126042909016064; - -INSERT INTO `iam_client` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-06-29 18:31:45', 1, 0); - -UPDATE `iam_client` SET `code` = 'admin', `name` = 'pc管理端', `system` = b'1', `enable` = b'1', `login_type_ids` = '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', `description` = 'pc浏览器', `creator` = 1399985191002447872, `create_time` = '2021-08-25 15:21:20', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-02 14:55:11', `version` = 4, `deleted` = 0 WHERE `id` = 1430430071299207168; - -INSERT INTO `iam_login_type` VALUES (1430430071299207168, 'password', '账号密码登陆', 'password', b'1', 3600, b'0', -1, b'1', NULL, 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-04-24 19:51:13', 16, 0); - -INSERT INTO `iam_login_type` VALUES (1430478946919653376, 'miniApp', '微信小程序', 'openId', b'0', 99999, b'1', 0, b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2021-08-25 18:35:33', 2, 0); - -INSERT INTO `iam_login_type` VALUES (1435138582839009280, 'phone', '手机短信登录', 'openId', b'0', 3600, b'1', 0, b'1', NULL, 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-06-26 21:35:20', 4, 0); - -INSERT INTO `iam_login_type` VALUES (1542091599907115008, 'dingTalk', '钉钉', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, 0); - -INSERT INTO `iam_login_type` VALUES (1542804450312122368, 'weCom', '企业微信', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, 0); - -INSERT INTO `iam_login_type` VALUES (1543126042909016064, 'WeChat', '微信登录', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 1399985191002447872, '2022-07-02 14:54:53', 0, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '系统管理', `name` = 'system', `perm_code` = '', `effect` = NULL, `icon` = 'desktop', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = '', `path` = '/system', `redirect` = '/system/user', `sort_no` = 0, `menu_type` = 0, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'1', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:02:16', `version` = 2, `deleted` = 0 WHERE `id` = 1414596052497092608; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '用户管理', `name` = 'User', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/user/UserList', `component_name` = '', `path` = '/system/userAuth/user', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:17:40', `version` = 4, `deleted` = 0 WHERE `id` = 1414596647509446656; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '菜单管理', `name` = 'Menu', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/menu/MenuList', `component_name` = '', `path` = '/system/permission/menu', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'1', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:16', `version` = 2, `deleted` = 0 WHERE `id` = 1414596773275652096; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '角色管理', `name` = 'Role', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/role/RoleList', `component_name` = '', `path` = '/system/permission/role', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:04', `version` = 4, `deleted` = 0 WHERE `id` = 1414596805538238464; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '部门管理', `name` = 'Dept', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/dept/DeptList', `component_name` = '', `path` = '/system/userAuth/dept', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-26 23:56:31', `version` = 7, `deleted` = 0 WHERE `id` = 1414596842322284544; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '数据字典', `name` = 'Dict', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/translate/DictList', `component_name` = '', `path` = '/system/config/translate', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-19 09:04:55', `version` = 11, `deleted` = 0 WHERE `id` = 1414596877617352704; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '在线用户管理', `name` = 'OnlineUser', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/online/OnlineUserList', `component_name` = NULL, `path` = '/system/userAuth/online', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:32:53', `version` = 6, `deleted` = 0 WHERE `id` = 1431082258161434624; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1541427353886859264, `title` = '登录方式', `name` = 'LoginType', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/client/LoginTypeList', `component_name` = NULL, `path` = '/system/config/loginType', `redirect` = '', `sort_no` = 9, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:37:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-05 21:18:12', `version` = 11, `deleted` = 0 WHERE `id` = 1431083330909208576; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '请求权限管理', `name` = 'Path', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/path/PathList', `component_name` = NULL, `path` = '/system/permission/path', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 11:00:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 11:00:11', `version` = 2, `deleted` = 0 WHERE `id` = 1431089129232498688; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '系统监控', `name` = 'monitor', `perm_code` = '', `effect` = b'0', `icon` = 'radar-chart', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/monitor', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2021-08-27 15:12:45', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:57:30', `version` = 21, `deleted` = 0 WHERE `id` = 1431152689832525824; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '接口文档', `name` = 'ApiSwagger', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/doc.html', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 15:15:25', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 11:06:52', `version` = 15, `deleted` = 0 WHERE `id` = 1431153358157348864; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '登录日志', `name` = 'LoginLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/LoginLogList', `component_name` = NULL, `path` = '/system/log/loginLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-07 15:31:31', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-07 15:31:31', `version` = 5, `deleted` = 0 WHERE `id` = 1435143678721236992; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '操作日志', `name` = 'OperateLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/OperateLogList', `component_name` = NULL, `path` = '/system/log/OperateLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-08 13:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-08 13:33:04', `version` = 7, `deleted` = 0 WHERE `id` = 1435476255797624832; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '通知管理', `name` = 'notice', `perm_code` = '', `effect` = NULL, `icon` = 'message', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/notice', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-15 16:47:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-15 16:47:26', `version` = 3, `deleted` = 0 WHERE `id` = 1438061887002759168; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '邮件配置', `name` = 'MailConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/mail/MailConfigList', `component_name` = NULL, `path` = '/notice/mailConfig', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-15 17:29:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-15 17:29:03', `version` = 3, `deleted` = 0 WHERE `id` = 1438072357281542144; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '消息模板', `name` = 'MessageTemplate', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/template/TemplateList', `component_name` = NULL, `path` = '/notice/template', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-18 19:57:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-18 19:57:33', `version` = 3, `deleted` = 0 WHERE `id` = 1439196893514031104; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '钉钉', `name` = 'DingTalk', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/notice/dingTalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:27:50', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-21 15:27:50', `version` = 0, `deleted` = 0 WHERE `id` = 1440216178722050048; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1440216178722050048, `title` = '钉钉机器人', `name` = 'DingTalkRobot', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/dingTalk/robot/DingRobotConfigList', `component_name` = NULL, `path` = '/notice/dingTalk/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:29:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-21 15:29:33', `version` = 3, `deleted` = 0 WHERE `id` = 1440216612211757056; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '第三方登录', `name` = 'Social', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/social/SocialList', `component_name` = NULL, `path` = '/system/userAuth/social', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-19 22:45:01', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-19 22:45:01', `version` = 4, `deleted` = 0 WHERE `id` = 1450473063320526848; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '定时任务', `name` = 'QuartzJobList', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/quartz/QuartzJobList', `component_name` = NULL, `path` = '/system/config/quartz', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 20:39:41', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 20:39:41', `version` = 5, `deleted` = 0 WHERE `id` = 1450803906215886848; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '第三方对接', `name` = 'social', `perm_code` = '', `effect` = b'0', `icon` = 'branches', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:42:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-04-05 16:53:25', `version` = 3, `deleted` = 0 WHERE `id` = 1450819607680991232; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '微信', `name` = 'SocialWeChat', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:50:28', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:50:28', `version` = 1, `deleted` = 0 WHERE `id` = 1450821723027881984; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '企业微信', `name` = 'SocialWeCom', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/wecom', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:51:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:51:05', `version` = 2, `deleted` = 0 WHERE `id` = 1450821877831254016; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '钉钉', `name` = 'SocialDingTalk', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/social/dingtalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:53:36', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:53:36', `version` = 1, `deleted` = 0 WHERE `id` = 1450822511087271936; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '支付管理', `name` = 'PayManager', `perm_code` = '', `effect` = NULL, `icon` = 'pay-circle', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:54:55', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:54:55', `version` = 2, `deleted` = 0 WHERE `id` = 1450822842995130368; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '支付通道', `name` = 'PayChannel', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/channel', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:59:22', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:59:22', `version` = 2, `deleted` = 0 WHERE `id` = 1450823960236081152; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '支付宝', `name` = 'AliPayConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/alipay/AliPayConfigList', `component_name` = NULL, `path` = '/payment/channel/alipay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:59:59', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 21:59:59', `version` = 1, `deleted` = 0 WHERE `id` = 1450824117849636864; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '微信支付', `name` = 'WeChatPayConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/wechat/WeChatConfigList', `component_name` = NULL, `path` = '/payment/channel/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:00:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:00:48', `version` = 1, `deleted` = 0 WHERE `id` = 1450824319868289024; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '云闪付', `name` = 'UnionPayConfig', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/channel/unionpay/UnionPayConfigList', `component_name` = NULL, `path` = '/payment/channel/unionpay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:02:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 16:12:13', `version` = 3, `deleted` = 0 WHERE `id` = 1450824637876224000; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450823960236081152, `title` = '现金支付', `name` = 'CashPayConfig', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/payment/channel/cash', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:03:00', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 16:12:08', `version` = 1, `deleted` = 0 WHERE `id` = 1450824875198332928; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '收银台', `name` = 'PayCashier', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/cashier/Cashier', `component_name` = NULL, `path` = '/payment/cashier', `redirect` = '', `sort_no` = -1, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:05:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:05:26', `version` = 2, `deleted` = 0 WHERE `id` = 1450825488577544192; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '订单管理', `name` = 'PayOrder', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/order', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:05:57', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:05:57', `version` = 2, `deleted` = 0 WHERE `id` = 1450825615857893376; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '回调记录', `name` = 'PayNotify', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/notify/PayNotifyRecordList', `component_name` = NULL, `path` = '/payment/notify', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:06:45', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-20 22:06:45', `version` = 0, `deleted` = 0 WHERE `id` = 1450825819436826624; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '支付订单', `name` = 'PaymentOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/order/payment/PaymentList', `component_name` = NULL, `path` = '/payment/order/payment', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:11:00', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-25 15:17:07', `version` = 2, `deleted` = 0 WHERE `id` = 1450826890318135296; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '退款订单', `name` = 'ReturnOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/order/refund/RefundRecordList', `component_name` = NULL, `path` = '/payment/order/return', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:12:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 15:44:06', `version` = 4, `deleted` = 0 WHERE `id` = 1450827159626006528; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450825615857893376, `title` = '转账订单', `name` = 'TransferOrder', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'payment/order/transfer/TransferList', `component_name` = NULL, `path` = '/payment/order/transfer', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:12:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-04 15:33:31', `version` = 3, `deleted` = 0 WHERE `id` = 1450827308515409920; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '微信', `name` = 'NoticeWeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/notice/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:14:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:53:04', `version` = 1, `deleted` = 0 WHERE `id` = 1450827660459458560; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '审计日志', `name` = 'auditLog', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/log', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:29:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:29:09', `version` = 0, `deleted` = 0 WHERE `id` = 1452567897717321728; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '权限管理', `name` = 'permission', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/permission', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:34:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:34:53', `version` = 2, `deleted` = 0 WHERE `id` = 1452569339987472384; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '用户信息', `name` = 'userAuth', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/userAuth', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:36:17', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:36:17', `version` = 2, `deleted` = 0 WHERE `id` = 1452569691537256448; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '系统配置', `name` = 'systemConfig', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:42:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 17:42:33', `version` = 2, `deleted` = 0 WHERE `id` = 1452571269199540224; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '系统参数', `name` = 'SystemParam', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/param/SystemParamList', `component_name` = NULL, `path` = '/system/config/param', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 22:11:18', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-10-25 22:11:18', `version` = 1, `deleted` = 0 WHERE `id` = 1452638905302966272; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569339987472384, `title` = '数据范围权限', `name` = 'DataScope', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/scope/DataScopeList', `component_name` = NULL, `path` = '/system/permission/data', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-12-25 18:52:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-12-25 18:52:33', `version` = 1, `deleted` = 0 WHERE `id` = 1474694545336676352; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '22', `name` = NULL, `perm_code` = '22', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2021-12-30 17:46:37', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-12-30 17:46:37', `version` = 4, `deleted` = 1 WHERE `id` = 1476489893513404416; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '1', `name` = NULL, `perm_code` = '1', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:58:57', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-03 21:58:57', `version` = 0, `deleted` = 1 WHERE `id` = 1478002945936015360; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '22', `name` = NULL, `perm_code` = '22', `effect` = b'1', `icon` = NULL, `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = NULL, `component_name` = NULL, `path` = NULL, `redirect` = NULL, `sort_no` = 0, `menu_type` = 2, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = '', `creator` = 1399985191002447872, `create_time` = '2022-01-03 22:04:13', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-03 22:04:13', `version` = 0, `deleted` = 1 WHERE `id` = 1478004271512240128; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '数据版本日志', `name` = 'DataVersionLog', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/DataVersionLogList', `component_name` = NULL, `path` = '/system/log/DataVersionLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-01-11 17:51:54', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-01-11 17:51:54', `version` = 0, `deleted` = 0 WHERE `id` = 1480839877352476672; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '文件管理', `name` = 'FIleUpLoad', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/file/FileUploadList', `component_name` = NULL, `path` = '/system/config/file', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-08 17:42:12', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-08 17:42:12', `version` = 0, `deleted` = 0 WHERE `id` = 1490984296616263680; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452571269199540224, `title` = '代码生成', `name` = 'CodeGen', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/codegen/CodeGenList', `component_name` = NULL, `path` = '/system/config/codeGen', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-19 20:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-02-19 20:33:05', `version` = 0, `deleted` = 0 WHERE `id` = 1495013564652429312; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '功能演示', `name` = 'Demo', `perm_code` = NULL, `effect` = b'0', `icon` = 'block', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/demo', `redirect` = '', `sort_no` = 99, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 11:46:52', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 11:02:05', `version` = 3, `deleted` = 0 WHERE `id` = 1495968302034210816; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '数据相关', `name` = 'DemoData', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/demo/data', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 11:50:02', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:27:46', `version` = 4, `deleted` = 0 WHERE `id` = 1495969099987963904; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '超级查询', `name` = 'SuperQueryDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/query/SuperQueryDemoList', `component_name` = NULL, `path` = '/demo/query/super', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-22 15:13:31', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:34:41', `version` = 2, `deleted` = 0 WHERE `id` = 1496020308992143360; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '钱包管理', `name` = 'Wallet', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/payment/wallet', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:03:29', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 10:04:53', `version` = 1, `deleted` = 0 WHERE `id` = 1501740492360962048; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1501740492360962048, `title` = '钱包列表', `name` = 'WalletList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/wallet/list/WalletList', `component_name` = NULL, `path` = '/payment/wallet/list', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:10:23', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:06:19', `version` = 2, `deleted` = 0 WHERE `id` = 1501742229142556672; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1501740492360962048, `title` = '个人钱包', `name` = 'PersonalWallet', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/wallet/list/WalletList', `component_name` = NULL, `path` = '/payment/wallet/personal', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 10:11:08', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:06:10', `version` = 2, `deleted` = 0 WHERE `id` = 1501742417378725888; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '组合支付', `name` = 'CombinationCashier', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/combination/CombinationCashier', `component_name` = NULL, `path` = '/payment/combination', `redirect` = '', `sort_no` = -0.5, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 17:07:56', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-10 17:09:28', `version` = 2, `deleted` = 0 WHERE `id` = 1501847310319972352; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822842995130368, `title` = '储值卡', `name` = 'Voucher', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/voucher/VoucherList', `component_name` = NULL, `path` = '/payment/voucher', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-13 16:35:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-14 19:39:45', `version` = 2, `deleted` = 0 WHERE `id` = 1502926397176242176; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '数据权限', `name` = 'DataPermDemoList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/perm/DataPermDemoList', `component_name` = NULL, `path` = '/demo/data/perm', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:27:39', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:28:56', `version` = 1, `deleted` = 0 WHERE `id` = 1506910599819165696; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '加密解密', `name` = 'DataEncryptDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/encrypt/DataEncryptDemoList', `component_name` = NULL, `path` = '/demo/data/encrypt', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:28:47', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 16:28:47', `version` = 0, `deleted` = 0 WHERE `id` = 1506910885463851008; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495969099987963904, `title` = '数据脱敏', `name` = 'DataSensitiveDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/data/sensitive/DataSensitiveDemoList', `component_name` = NULL, `path` = '/demo/data/sensitive', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-24 16:29:41', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-24 17:16:03', `version` = 1, `deleted` = 0 WHERE `id` = 1506911113394913280; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = 'WS演示', `name` = 'WebsocketDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/ws/WebsocketDemo', `component_name` = NULL, `path` = '/demo/ws', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-27 16:30:25', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-03-27 16:30:25', `version` = 0, `deleted` = 0 WHERE `id` = 1507998458886197248; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '幂等请求演示', `name` = 'IdempotentDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/idempotent/Idempotent', `component_name` = NULL, `path` = '/demo/idempotent', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-31 19:11:12', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:35:00', `version` = 1, `deleted` = 0 WHERE `id` = 1509488473583562752; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822511087271936, `title` = '钉钉配置', `name` = 'DingTalkConfig', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'social/dingtalk/config/DingTalkConfigList', `component_name` = NULL, `path` = '/social/dingtalk/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-04-05 16:54:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-04-05 16:54:48', `version` = 0, `deleted` = 0 WHERE `id` = 1511266086400524288; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '商品管理', `name` = 'GoodsManager', `perm_code` = NULL, `effect` = b'0', `icon` = 'car', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/goods', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 11:01:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 11:02:45', `version` = 1, `deleted` = 0 WHERE `id` = 1523860792695283712; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523860792695283712, `title` = '类目管理', `name` = 'CategoryManager', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/goods/category', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 16:24:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 16:24:17', `version` = 1, `deleted` = 0 WHERE `id` = 1523941932282114048; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '类目', `name` = 'Category', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/category/CategoryList', `component_name` = NULL, `path` = '/goods/category/category', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 16:24:52', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 16:25:23', `version` = 1, `deleted` = 0 WHERE `id` = 1523942130555252736; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '品牌', `name` = 'Brand', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/brand/BrandList', `component_name` = NULL, `path` = '/goods/category/brand', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:10:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 23:14:20', `version` = 4, `deleted` = 0 WHERE `id` = 1524044195818278912; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '规格', `name` = 'SpecificationList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/spec/SpecificationList', `component_name` = NULL, `path` = '/goods/category/spec', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:11:14', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-10 23:13:51', `version` = 1, `deleted` = 0 WHERE `id` = 1524044395823665152; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523941932282114048, `title` = '参数组', `name` = 'ParameterGroup', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'goods/parameter/ParameterGroupList', `component_name` = NULL, `path` = '/goods/category/parameter', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 23:12:21', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-12 20:30:23', `version` = 2, `deleted` = 0 WHERE `id` = 1524044678314233856; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1523860792695283712, `title` = '商品', `name` = 'Goods', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'goods/goods/GoodsList', `component_name` = NULL, `path` = '/goods/goods', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-14 21:46:18', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-14 21:46:18', `version` = 0, `deleted` = 0 WHERE `id` = 1525472571967860736; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '消息中间件演示', `name` = 'MQDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/mq/MqDemo', `component_name` = NULL, `path` = '/demo/mq', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:33:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-31 15:12:15', `version` = 1, `deleted` = 0 WHERE `id` = 1530120084482084864; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1530120084482084864, `title` = 'MQTT消息', `name` = 'MqttDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/demo/mq/mqtt', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:36:14', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:36:14', `version` = 0, `deleted` = 1 WHERE `id` = 1530120684645044224; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1530120084482084864, `title` = 'RabbitMQ', `name` = 'RabbitDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/demo/mq/rabbit', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-27 17:36:47', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-27 17:36:47', `version` = 0, `deleted` = 1 WHERE `id` = 1530120821144473600; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'ELK日志', `name` = 'ELK', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://elk.dev.bootx.cn:5601/app/discover', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-07 10:31:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 10:31:48', `version` = 0, `deleted` = 0 WHERE `id` = 1534000136370204672; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'PlumeLog日志', `name` = 'PlumeLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/plumelog/#/', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-07 11:03:51', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-07 11:06:13', `version` = 1, `deleted` = 0 WHERE `id` = 1534008203006652416; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '系统信息', `name` = 'SysInfo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/monitor/SystemInfoMonitor', `component_name` = NULL, `path` = '/monitor/sysinfo', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-11 10:37:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-13 13:07:46', `version` = 1, `deleted` = 0 WHERE `id` = 1535451167008436224; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = 'Redis监控', `name` = 'RedisInfoMonitor', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/monitor/RedisInfoMonitor', `component_name` = NULL, `path` = '/monitor/redis', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-12 20:43:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-13 13:07:38', `version` = 1, `deleted` = 0 WHERE `id` = 1535965936371085312; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '站内信', `name` = 'SiteMessage', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/site/SiteMessage', `component_name` = NULL, `path` = '/notice/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:33:30', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-17 17:33:30', `version` = 0, `deleted` = 0 WHERE `id` = 1537730140522348544; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '个人办公', `name` = 'person', `perm_code` = '', `effect` = b'0', `icon` = 'user', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/person', `redirect` = '', `sort_no` = -99, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:42:38', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-04 22:28:06', `version` = 3, `deleted` = 0 WHERE `id` = 1537732440632524800; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '我的消息', `name` = 'PersonSiteMessage', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/person/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:48:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:52:50', `version` = 1, `deleted` = 0 WHERE `id` = 1537733801860333568; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '待办任务', `name` = 'PersonTaskList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/person/taskList', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:56:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:52:42', `version` = 1, `deleted` = 0 WHERE `id` = 1537735851818024960; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '富文本编辑', `name` = 'WangEditorDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'demo/wangeditor/WangEditorDemo', `component_name` = NULL, `path` = '/demo/wangEditor', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-18 22:03:30', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-18 22:03:31', `version` = 0, `deleted` = 0 WHERE `id` = 1538160478872625152; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1541427353886859264, `title` = '认证终端', `name` = 'Client', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'system/client/ClientList', `component_name` = NULL, `path` = '/system/config/client', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:37:08', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-05 21:17:45', `version` = 3, `deleted` = 0 WHERE `id` = 1541355214204030976; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1414596052497092608, `title` = '认证管理', `name` = 'Auth', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/auth', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-27 22:24:54', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-27 22:24:54', `version` = 0, `deleted` = 0 WHERE `id` = 1541427353886859264; - -DELETE FROM `iam_user_expand_info` WHERE `id` = 1543942206966943744; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-07-06 22:53:12', `current_login_time` = '2022-07-06 22:53:15', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-07-06 22:53:15', `version` = 264, `deleted` = 0 WHERE `id` = 1399985191002447872; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = NULL, `avatar` = '1530065639127871488', `last_login_time` = '2022-05-27 13:56:02', `current_login_time` = '2022-07-04 22:39:33', `initial_password` = b'0', `last_change_password_time` = NULL, `creator` = 1, `create_time` = '2021-07-11 16:44:32', `last_modifier` = 0, `last_modified_time` = '2022-07-04 22:39:33', `version` = 3, `deleted` = 0 WHERE `id` = 1414143554414059520; - -DELETE FROM `iam_user_info` WHERE `id` = 1543942206966943744; - -UPDATE `iam_user_info` SET `name` = '小小明', `username` = 'xxm', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13333333333', `email` = 'xxm1995@outlook.com', `client_ids` = '1430430071299207168,1430430071299207169', `avatar` = NULL, `source` = NULL, `admin` = b'1', `register_time` = '2021-06-02 15:04:12', `status` = 1, `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-27 23:09:31', `version` = 50, `deleted` = 0 WHERE `id` = 1399985191002447872; - -UPDATE `iam_user_info` SET `name` = '管理员', `username` = 'admin', `password` = 'c80a93d89e6590e8909a1a9f842b1615', `phone` = '13000001111', `email` = 'admin@qq.com', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2021-09-09 17:14:52', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2021-09-09 17:14:54', `last_modifier` = 0, `last_modified_time` = '2022-06-29 00:39:23', `version` = 6, `deleted` = 0 WHERE `id` = 1435894470432456704; - -UPDATE `iam_user_info` SET `name` = '测试', `username` = 'test', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13311111111', `email` = 'test@qq.com', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2021-09-09 22:06:37', `status` = 1, `creator` = 1414143554414059520, `create_time` = '2021-09-09 22:06:37', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-31 15:59:37', `version` = 9, `deleted` = 0 WHERE `id` = 1435967884114194432; - -UPDATE `iam_user_info` SET `name` = '测试用户001', `username` = 'test001', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:10:49', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:10:49', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-05 20:26:26', `version` = 1, `deleted` = 0 WHERE `id` = 1477990832987361280; - -UPDATE `iam_user_info` SET `name` = '测试用户002', `username` = 'test002', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:36:53', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:36:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-05 20:26:19', `version` = 1, `deleted` = 0 WHERE `id` = 1477997391729631232; - -UPDATE `iam_user_info` SET `name` = '测试用户003', `username` = 'test003', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '', `email` = '', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2022-01-03 21:37:43', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2022-01-03 21:37:43', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-05-19 13:00:05', `version` = 4, `deleted` = 0 WHERE `id` = 1477997602862505984; - - -SET FOREIGN_KEY_CHECKS=1; diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220714__bate5.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220714__bate5.sql deleted file mode 100644 index 2146d24c5..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220714__bate5.sql +++ /dev/null @@ -1,84 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `expire_time` int(10) NOT NULL COMMENT '超时配置' AFTER `sandbox`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人' AFTER `state`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间' AFTER `creator`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人' AFTER `create_time`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间' AFTER `last_modifier`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `version` int(11) NOT NULL COMMENT '版本' AFTER `last_modified_time`; -ALTER TABLE `pay_alipay_config` MODIFY COLUMN `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除' AFTER `version`; - -ALTER TABLE `pay_payment` MODIFY COLUMN `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id' AFTER `user_id`; -ALTER TABLE `pay_payment` MODIFY COLUMN `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题' AFTER `business_id`; -ALTER TABLE `pay_payment` MODIFY COLUMN `description` varchar(240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述' AFTER `title`; -ALTER TABLE `pay_payment` ADD UNIQUE INDEX `uniq_business_id`(`business_id`) USING BTREE COMMENT '业务编号id, 唯一ID'; - -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `api_version` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务商应用编号' AFTER `mch_id`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `api_key_v2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv2 密钥' AFTER `api_version`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `api_key_v3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv3 密钥' AFTER `api_key_v2`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `app_secret` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'APPID对应的接口密码,用于获取接口调用凭证access_token时使用' AFTER `api_key_v3`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `p12` bigint(20) NULL DEFAULT NULL COMMENT 'p12的文件id' AFTER `app_secret`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `cert_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 cert.pem' AFTER `p12`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `key_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 key.pem' AFTER `cert_pem`; -ALTER TABLE `pay_wechat_pay_config` ADD COLUMN `expire_time` int(10) NOT NULL COMMENT '超时配置' AFTER `sandbox`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `id` bigint(20) NOT NULL COMMENT '主键' FIRST; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称' AFTER `id`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `app_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信应用AppId' AFTER `name`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `mch_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户号' AFTER `app_id`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `pay_ways` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支持的支付类型' AFTER `return_url`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注' AFTER `state`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人' AFTER `remark`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间' AFTER `creator`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人' AFTER `create_time`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间' AFTER `last_modifier`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `version` int(11) NOT NULL COMMENT '版本' AFTER `last_modified_time`; -ALTER TABLE `pay_wechat_pay_config` MODIFY COLUMN `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除' AFTER `version`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `sl_app_id`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `api_key`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `api_key3`; - -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `sl_mch_id`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `auth_type`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `cert_path`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `cert_pem_path`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `key_pem_path`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `partner_key`; -ALTER TABLE `pay_wechat_pay_config` DROP COLUMN `is_default`; - -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人' AFTER `pay_time`; -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间' AFTER `creator`; -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人' AFTER `create_time`; -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间' AFTER `last_modifier`; -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `version` int(11) NOT NULL COMMENT '版本' AFTER `last_modified_time`; -ALTER TABLE `pay_wechat_payment` MODIFY COLUMN `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除' AFTER `version`; -ALTER TABLE `pay_wechat_payment` DROP COLUMN `tid`; - -INSERT INTO `base_dict` VALUES (1546757092010078208, 'PayNotifyProcess', '支付回调处理状态', '支付服务', '成功/忽略/失败', 1399985191002447872, '2022-07-12 15:23:23', 1399985191002447872, '2022-07-12 15:23:53', 0, 1); - -INSERT INTO `base_dict_item` VALUES (1546757293592522752, 1546757092010078208, 'PayNotifyProcess', '0', '失败', 0.00, '', 1399985191002447872, '2022-07-12 15:24:11', 1399985191002447872, '2022-07-12 15:24:11', 0, 0); -INSERT INTO `base_dict_item` VALUES (1546757327901929472, 1546757092010078208, 'PayNotifyProcess', '1', '成功', -1.00, '', 1399985191002447872, '2022-07-12 15:24:19', 1399985191002447872, '2022-07-12 15:31:38', 0, 2); -INSERT INTO `base_dict_item` VALUES (1546757375637303296, 1546757092010078208, 'PayNotifyProcess', '2', '忽略', 0.00, '', 1399985191002447872, '2022-07-12 15:24:30', 1399985191002447872, '2022-07-12 15:24:30', 0, 0); - -INSERT INTO `base_param` VALUES (1545765299880448000, '服务器地址', 'ServerUrl', 'http://127.0.0.1:9999', 1, b'1', '', 1399985191002447872, '2022-07-09 21:42:21', 1399985191002447872, '2022-07-09 21:42:21', 0, 0); -INSERT INTO `base_param` VALUES (1547511252795912192, '微信jsapi支付回调服务地址', 'JsapiRedirectUrl', 'http://127.0.0.1/api/', 1, b'1', '', 1414143554414059520, '2022-07-14 17:20:09', 1414143554414059520, '2022-07-14 17:20:09', 0, 0); -UPDATE `base_param` SET `value` = 'http://127.0.0.1/api/' WHERE `id` = 1500338438182789120; - -INSERT INTO `iam_perm_menu` VALUES (1544952211901218816, 'admin', 1546850918849249280, '支付结算台演示', 'CashierDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/cashier', '', 0, 1, NULL, b'0', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-07-07 15:51:26', 1399985191002447872, '2022-07-12 21:36:34', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1546850918849249280, 'admin', 1495968302034210816, '支付演示', 'DemoPay', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/pay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-12 21:36:13', 1399985191002447872, '2022-07-12 21:36:13', 0, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1546850918849249280, `title` = '收银台', `name` = 'PayCashier', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/cashier/Cashier', `component_name` = NULL, `path` = '/demo/pay/cashier', `redirect` = '', `sort_no` = -1, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:05:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-12 21:37:22', `version` = 3, `deleted` = 0 WHERE `id` = 1450825488577544192; -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1546850918849249280, `title` = '组合支付', `name` = 'CombinationCashier', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'payment/combination/CombinationCashier', `component_name` = NULL, `path` = '/demo/pay/combination', `redirect` = '', `sort_no` = -0.5, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-03-10 17:07:56', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-12 21:37:59', `version` = 4, `deleted` = 0 WHERE `id` = 1501847310319972352; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-07-12 15:20:44', `current_login_time` = '2022-07-12 21:35:26', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-07-12 21:35:26', `version` = 273, `deleted` = 0 WHERE `id` = 1399985191002447872; - -INSERT INTO `qrtz_cron_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '0/5 * * * * ? *', 'Asia/Shanghai'); - -INSERT INTO `qrtz_fired_triggers` VALUES ('quartzScheduler', 'NON_CLUSTERED1657763850994', '1546857070483939328', 'DEFAULT', 'NON_CLUSTERED', 1657767410672, 1657767415000, 5, 'ACQUIRED', NULL, NULL, '0', '0'); - -INSERT INTO `qrtz_job_details` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', NULL, 'cn.bootx.payment.task.PayExpiredTimeTask', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800); - -INSERT INTO `qrtz_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '1546857070483939328', 'DEFAULT', NULL, 1657767415000, 1657767410000, 5, 'ACQUIRED', 'CRON', 1657634445000, 0, NULL, 0, ''); - -INSERT INTO `starter_quartz_job` VALUES (1546857070483939328, '支付单超时检测', 'cn.bootx.payment.task.PayExpiredTimeTask', '0/5 * * * * ? *', NULL, 1, '检测超时的支付单, 超时后发送超时事件', 1399985191002447872, '2022-07-12 22:00:39', 1399985191002447872, '2022-07-12 22:00:45', 1, 0); - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220728__bate6.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220728__bate6.sql deleted file mode 100644 index dbd61cd3b..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220728__bate6.sql +++ /dev/null @@ -1,132 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -ALTER TABLE `iam_user_third_info` ADD COLUMN `third_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '关联第三方平台的用户id' AFTER `avatar`; - -ALTER TABLE `iam_user_third_info` DROP COLUMN `deleted`; - -CREATE TABLE `starter_ding_media_md5` ( - `id` bigint(20) NOT NULL, - `media_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '媒体id', - `md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'md5值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉媒体文件MD5值关联关系' ROW_FORMAT = Dynamic; - -CREATE TABLE `starter_ding_robot_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', - `access_token` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人访问token', - `enable_signature_check` bit(1) NOT NULL COMMENT '是否开启验签', - `sign_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人私钥', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉机器人配置' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `starter_wecom_robot_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', - `webhook_key` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'webhook地址的key值', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信机器人配置' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `starter_wx_fans` ( - `id` bigint(20) NOT NULL, - `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联OpenId', - `subscribe_status` bit(1) NULL DEFAULT NULL COMMENT '订阅状态', - `subscribe_time` datetime(0) NULL DEFAULT NULL COMMENT '订阅时间', - `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称', - `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别', - `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '语言', - `country` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家', - `province` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份', - `city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市', - `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像地址', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号粉丝' ROW_FORMAT = Dynamic; - -CREATE TABLE `starter_wx_template` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', - `enable` bit(1) NOT NULL COMMENT '是否启用', - `template_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板ID', - `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板标题', - `primary_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的一级行业', - `deputy_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的二级行业', - `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板内容', - `example` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '示例', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `inx_`(`template_id`) USING BTREE COMMENT '模板id' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息模板' ROW_FORMAT = Dynamic; - -DROP TABLE `ding_config`; - -DROP TABLE `ding_robot_config`; - -UPDATE `flyway_schema_history` SET `version` = '1.1.0.220604', `description` = 'init', `type` = 'SQL', `script` = 'V1.1.0_220604__init.sql', `checksum` = -474276030, `installed_by` = 'bootx', `installed_on` = '2022-07-14 17:39:59', `execution_time` = 67308, `success` = 1 WHERE `installed_rank` = 1; - -UPDATE `flyway_schema_history` SET `version` = '1.1.0.220624', `description` = 'bate3', `type` = 'SQL', `script` = 'V1.1.0_220624__bate3.sql', `checksum` = 85360861, `installed_by` = 'bootx', `installed_on` = '2022-07-14 17:40:01', `execution_time` = 724, `success` = 1 WHERE `installed_rank` = 2; - -UPDATE `flyway_schema_history` SET `version` = '1.1.0.220702', `description` = 'bate4', `type` = 'SQL', `script` = 'V1.1.0_220702__bate4.sql', `checksum` = 764266899, `installed_by` = 'bootx', `installed_on` = '2022-07-14 17:40:07', `execution_time` = 5691, `success` = 1 WHERE `installed_rank` = 3; - -UPDATE `flyway_schema_history` SET `version` = '1.1.0.220707', `description` = 'bate4-fix', `type` = 'SQL', `script` = 'V1.1.0_220707__bate4-fix.sql', `checksum` = 1727269960, `installed_by` = 'bootx', `installed_on` = '2022-07-14 17:40:13', `execution_time` = 5991, `success` = 1 WHERE `installed_rank` = 4; - -UPDATE `flyway_schema_history` SET `version` = '1.1.0.220714', `description` = 'bate5', `type` = 'SQL', `script` = 'V1.1.0_220714__bate5.sql', `checksum` = 1029462157, `installed_by` = 'bootx', `installed_on` = '2022-07-14 17:40:17', `execution_time` = 3461, `success` = 1 WHERE `installed_rank` = 5; - -UPDATE `iam_login_type` SET `code` = 'miniApp', `name` = '微信小程序', `type` = 'openId', `system` = b'0', `timeout` = 99999, `captcha` = b'0', `pwd_err_num` = 0, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-25 18:35:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-16 12:32:26', `version` = 3, `deleted` = 0 WHERE `id` = 1430478946919653376; - -UPDATE `iam_login_type` SET `code` = 'phone', `name` = '手机短信登录', `type` = 'openId', `system` = b'0', `timeout` = 3600, `captcha` = b'0', `pwd_err_num` = 0, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-07 15:11:16', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-16 12:32:19', `version` = 5, `deleted` = 0 WHERE `id` = 1435138582839009280; - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1551803592828932096, 'admin', 1450821877831254016, '企微机器人', 'WeComRobot', '', b'0', '', b'0', b'0', 'third/wecom/robot/WeComRobotConfigList', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-26 13:36:22', 1399985191002447872, '2022-07-26 15:14:26', 2, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1552207982510706688, 'admin', NULL, '开发管理', 'develop', NULL, b'0', 'gold', b'0', b'0', 'RouteView', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:23:16', 1399985191002447872, '2022-07-27 16:39:09', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1552208167664062464, 'admin', 1552207982510706688, '动态表单', 'DynamicForm', NULL, b'0', '', b'0', b'0', 'develop/dynamicform/DynamicFormList', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:24:00', 1399985191002447872, '2022-07-27 16:38:05', 2, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '钉钉', `name` = 'DingTalk', `perm_code` = '', `effect` = NULL, `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/notice/dingTalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:27:50', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-09-21 15:27:50', `version` = 0, `deleted` = 1 WHERE `id` = 1440216178722050048; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822511087271936, `title` = '钉钉机器人', `name` = 'DingTalkRobot', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'third/dingtalk/robot/DingRobotConfigList', `component_name` = NULL, `path` = '/third/dingTalk/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-21 15:29:33', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:34:35', `version` = 5, `deleted` = 0 WHERE `id` = 1440216612211757056; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452569691537256448, `title` = '第三方登录', `name` = 'Social', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'system/social/SocialList', `component_name` = NULL, `path` = '/system/userAuth/social', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-19 22:45:01', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:35:47', `version` = 5, `deleted` = 0 WHERE `id` = 1450473063320526848; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '第三方对接', `name` = 'third', `perm_code` = '', `effect` = b'0', `icon` = 'branches', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:42:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:34:02', `version` = 4, `deleted` = 0 WHERE `id` = 1450819607680991232; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '微信', `name` = 'SocialWeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:50:28', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:35:55', `version` = 2, `deleted` = 0 WHERE `id` = 1450821723027881984; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '企业微信', `name` = 'SocialWeCom', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/wecom', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:51:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:35:29', `version` = 3, `deleted` = 0 WHERE `id` = 1450821877831254016; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '钉钉', `name` = 'SocialDingTalk', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/dingtalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:53:36', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:34:11', `version` = 2, `deleted` = 0 WHERE `id` = 1450822511087271936; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '微信', `name` = 'NoticeWeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'Dev', `component_name` = NULL, `path` = '/notice/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 22:14:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-06-21 20:53:04', `version` = 1, `deleted` = 1 WHERE `id` = 1450827660459458560; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1552207982510706688, `title` = '文件管理', `name` = 'FIleUpLoad', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'develop/file/FileUploadList', `component_name` = NULL, `path` = '/develop/file', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-08 17:42:12', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-28 09:16:56', `version` = 2, `deleted` = 0 WHERE `id` = 1490984296616263680; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1552207982510706688, `title` = '代码生成', `name` = 'CodeGen', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'develop/codegen/CodeGenList', `component_name` = NULL, `path` = '/develop/codegen', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-02-19 20:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-27 16:25:05', `version` = 1, `deleted` = 0 WHERE `id` = 1495013564652429312; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450822511087271936, `title` = '钉钉配置', `name` = 'DingTalkConfig', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'third/dingtalk/config/DingTalkConfigList', `component_name` = NULL, `path` = '/third/dingtalk/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-04-05 16:54:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-07-26 13:34:44', `version` = 3, `deleted` = 0 WHERE `id` = 1511266086400524288; - -DELETE FROM `qrtz_fired_triggers` WHERE `SCHED_NAME` = 'quartzScheduler' AND `ENTRY_ID` = 'NON_CLUSTERED1658990526308'; - -UPDATE `qrtz_triggers` SET `JOB_NAME` = '1546857070483939328', `JOB_GROUP` = 'DEFAULT', `DESCRIPTION` = NULL, `NEXT_FIRE_TIME` = 1658990430000, `PREV_FIRE_TIME` = 1658990425000, `PRIORITY` = 5, `TRIGGER_STATE` = 'WAITING', `TRIGGER_TYPE` = 'CRON', `START_TIME` = 1657634445000, `END_TIME` = 0, `CALENDAR_NAME` = NULL, `MISFIRE_INSTR` = 0, `JOB_DATA` = '' WHERE `SCHED_NAME` = 'quartzScheduler' AND `TRIGGER_NAME` = '1546857070483939328' AND `TRIGGER_GROUP` = 'DEFAULT'; diff --git a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220822__release.sql b/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220822__release.sql deleted file mode 100644 index ef1bf4e32..000000000 --- a/_config/sql/1.1.x/1.1.0-bate/V1.1.0_220822__release.sql +++ /dev/null @@ -1,150 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `base_dynamic_form` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单键名', - `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '表单内容', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态表单' ROW_FORMAT = Dynamic; - -ALTER TABLE `iam_user_third` ADD COLUMN `we_chat_open_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信开放平台id' AFTER `we_chat_id`; - -ALTER TABLE `notice_site_message` ADD COLUMN `receive_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息类型' AFTER `sender_time`; - -ALTER TABLE `notice_site_message` ADD COLUMN `send_state` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布状态' AFTER `receive_type`; - -ALTER TABLE `notice_site_message` ADD COLUMN `efficient_time` datetime(0) NULL DEFAULT NULL COMMENT '截至有效期' AFTER `send_state`; - -ALTER TABLE `notice_site_message` ADD COLUMN `cancel_time` datetime(0) NULL DEFAULT NULL COMMENT '撤回时间' AFTER `efficient_time`; - -ALTER TABLE `notice_site_message` MODIFY COLUMN `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '消息内容' AFTER `title`; - -ALTER TABLE `notice_site_message` DROP COLUMN `receive_id`; - -ALTER TABLE `notice_site_message` DROP COLUMN `receive_name`; - -ALTER TABLE `notice_site_message` DROP COLUMN `have_read`; - -ALTER TABLE `notice_site_message` DROP COLUMN `read_time`; - -CREATE TABLE `notice_site_message_user` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `message_id` bigint(20) NOT NULL COMMENT '消息id', - `receive_id` bigint(20) NOT NULL COMMENT '接收者id', - `have_read` bit(1) NOT NULL COMMENT '已读/未读', - `read_time` datetime(0) NULL DEFAULT NULL COMMENT '已读时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uni_receive_message`(`receive_id`, `message_id`) USING BTREE COMMENT '接收人和消息联合索引', - INDEX `inx_message`(`message_id`) USING BTREE COMMENT '消息索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '消息用户关联' ROW_FORMAT = Dynamic; - -ALTER TABLE `starter_audit_login_log` ADD COLUMN `login_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录方式' AFTER `client`; - -CREATE TABLE `starter_wx_menu` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称', - `menu_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '菜单信息', - `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', - `publish` bit(1) NOT NULL COMMENT '是否发布', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(11) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '微信自定义菜单' ROW_FORMAT = Dynamic; - - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1556996322223968256, 'WeChatMediaType', '微信媒体类型', '微信', '微信媒体类型', 1399985191002447872, '2022-08-09 21:30:25', 1399985191002447872, '2022-08-09 21:30:26', 0, 0); - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003021674987520, 'SiteMessageReceive', '消息接收类型', '站内信', '站内信接收类型', 1399985191002447872, '2022-08-20 22:51:37', 1399985191002447872, '2022-08-20 22:51:37', 0, 0); - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003189111603200, 'SiteMessageState', '消息发布状态', '站内信', '站内信消息发布状态', 1399985191002447872, '2022-08-20 22:52:17', 1399985191002447872, '2022-08-20 22:52:17', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1556996422006460416, 1556996322223968256, 'WeChatMediaType', 'news', '新闻', 0.00, '', 1399985191002447872, '2022-08-09 21:30:49', 1399985191002447872, '2022-08-09 21:30:49', 1, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1556996472661069824, 1556996322223968256, 'WeChatMediaType', 'voice', '语音', 0.00, '', 1399985191002447872, '2022-08-09 21:31:01', 1399985191002447872, '2022-08-09 21:31:01', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1556996501417218048, 1556996322223968256, 'WeChatMediaType', 'image', '图片', 0.00, '', 1399985191002447872, '2022-08-09 21:31:08', 1399985191002447872, '2022-08-09 21:31:08', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1556996529565192192, 1556996322223968256, 'WeChatMediaType', 'video', '视频', 0.00, '', 1399985191002447872, '2022-08-09 21:31:15', 1399985191002447872, '2022-08-09 21:31:15', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003235710320640, 1561003189111603200, 'SiteMessageState', 'user', '指定用户', 0.00, '', 1399985191002447872, '2022-08-20 22:52:28', 1399985191002447872, '2022-08-20 22:52:28', 1, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003279322693632, 1561003189111603200, 'SiteMessageState', 'all', '全部用户', 0.00, '', 1399985191002447872, '2022-08-20 22:52:38', 1399985191002447872, '2022-08-20 22:52:39', 1, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003368762032128, 1561003021674987520, 'SiteMessageReceive', 'user', '指定用户', 0.00, '', 1399985191002447872, '2022-08-20 22:53:00', 1399985191002447872, '2022-08-20 22:53:00', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003399778910208, 1561003021674987520, 'SiteMessageReceive', 'all', '全部用户', 0.00, '', 1399985191002447872, '2022-08-20 22:53:07', 1399985191002447872, '2022-08-20 22:53:24', 0, 1); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003539772194816, 1561003189111603200, 'SiteMessageState', 'sent', '已发送', 0.00, '', 1399985191002447872, '2022-08-20 22:53:41', 1399985191002447872, '2022-08-20 22:53:41', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561003575608328192, 1561003189111603200, 'SiteMessageState', 'cancel', '撤销', 0.00, '', 1399985191002447872, '2022-08-20 22:53:49', 1399985191002447872, '2022-08-20 22:53:49', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1561245469535080448, 1561003189111603200, 'SiteMessageState', 'draft', '草稿', 0.00, '', 1399985191002447872, '2022-08-21 14:55:01', 1399985191002447872, '2022-08-21 14:55:01', 0, 0); - -UPDATE `iam_login_type` SET `code` = 'weChat', `name` = '微信登录', `type` = 'openId', `system` = b'0', `timeout` = 5, `captcha` = b'0', `pwd_err_num` = -1, `enable` = b'1', `description` = '', `creator` = 1399985191002447872, `create_time` = '2022-07-02 14:54:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-05 18:11:13', `version` = 1, `deleted` = 0 WHERE `id` = 1543126042909016064; - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1554720980865380352, 'admin', 1495968302034210816, '消息通知', 'NoticeDemo', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:49:02', 1399985191002447872, '2022-08-03 14:49:02', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1554721654336385024, 'admin', 1554720980865380352, '邮件发送', 'EmailDemo', NULL, b'0', '', b'0', b'0', 'demo/notice/email/EmailSender', NULL, '/demo/notice/email', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:51:42', 1399985191002447872, '2022-08-03 14:51:42', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1554850179754975232, 'admin', 1450821723027881984, '消息模板', 'WeChatTemplate', NULL, b'0', '', b'0', b'0', 'third/wechat/template/WeChatTemplateList', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 23:22:25', 1399985191002447872, '2022-08-03 23:23:18', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1555835229426368512, 'admin', 1450821723027881984, '自定义菜单', 'WeChatMenu', NULL, b'0', '', b'0', b'0', 'third/wechat/menu/WeChatMenuList', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-06 16:36:39', 1399985191002447872, '2022-08-08 12:14:14', 2, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1556997405528805376, 'admin', 1450821723027881984, '素材管理', 'WeChatMedia', NULL, b'0', '', b'0', b'0', 'third/wechat/media/WeChatMediaList', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-09 21:34:44', 1399985191002447872, '2022-08-09 21:34:44', 0, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '系统管理', `name` = 'system', `perm_code` = '', `effect` = NULL, `icon` = 'desktop', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = '', `path` = '/system', `redirect` = '/system/user', `sort_no` = -99999, `menu_type` = 0, `leaf` = b'0', `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'1', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 10:32:53', `last_modifier` = 1399985191002447872, `last_modified_time` = '2021-08-27 10:02:16', `version` = 2, `deleted` = 0 WHERE `id` = 1414596052497092608; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '微信', `name` = 'WeChat', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:50:28', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-03 23:23:10', `version` = 3, `deleted` = 0 WHERE `id` = 1450821723027881984; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '企业微信', `name` = 'WeCom', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/wecom', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:51:05', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-03 23:22:58', `version` = 4, `deleted` = 0 WHERE `id` = 1450821877831254016; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450819607680991232, `title` = '钉钉', `name` = 'DingTalk', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/third/dingtalk', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-20 21:53:36', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-03 23:23:29', `version` = 3, `deleted` = 0 WHERE `id` = 1450822511087271936; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1438061887002759168, `title` = '站内信', `name` = 'SiteMessageSender', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/site/sender/SiteMessageList', `component_name` = NULL, `path` = '/notice/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:33:30', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-20 21:12:30', `version` = 2, `deleted` = 0 WHERE `id` = 1537730140522348544; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '个人办公', `name` = 'person', `perm_code` = '', `effect` = b'0', `icon` = 'user', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/person', `redirect` = '', `sort_no` = -99, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:42:38', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-20 22:15:21', `version` = 4, `deleted` = 0 WHERE `id` = 1537732440632524800; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '我的消息', `name` = 'PersonSiteMessage', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/site/receive/SiteMessageList', `component_name` = NULL, `path` = '/person/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:48:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-17 21:35:17', `version` = 2, `deleted` = 0 WHERE `id` = 1537733801860333568; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1495968302034210816, `title` = '支付演示', `name` = 'DemoPay', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/demo/pay', `redirect` = '', `sort_no` = 9, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-07-12 21:36:13', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-03 14:49:16', `version` = 1, `deleted` = 0 WHERE `id` = 1546850918849249280; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-08-21 11:07:05', `current_login_time` = '2022-08-22 10:26:41', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-08-22 10:26:41', `version` = 306, `deleted` = 0 WHERE `id` = 1399985191002447872; - -INSERT INTO `notice_site_message`(`id`, `title`, `content`, `sender_id`, `sender_name`, `sender_time`, `receive_type`, `send_state`, `efficient_time`, `cancel_time`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1558781525200130048, '测试站内信', '
sdfsdfsdf
  1. 333
', 0, '未知', '2022-08-14 19:44:11', NULL, 'sent', NULL, NULL, 0, '2022-08-14 19:44:11', 0, '2022-08-14 19:44:11', 0, 0); - -INSERT INTO `notice_site_message`(`id`, `title`, `content`, `sender_id`, `sender_name`, `sender_time`, `receive_type`, `send_state`, `efficient_time`, `cancel_time`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1561363288741085184, '测试消息', '

三扥广丰和扥撒扥撒扥东方

', 1399985191002447872, '小小明', '2022-08-21 22:59:45', 'all', 'draft', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:43:11', 1399985191002447872, '2022-08-21 23:23:03', 4, 1); - -INSERT INTO `notice_site_message`(`id`, `title`, `content`, `sender_id`, `sender_name`, `sender_time`, `receive_type`, `send_state`, `efficient_time`, `cancel_time`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1561365894804766720, '测试数据', '

234554通扥广森

', 1399985191002447872, '小小明', '2022-08-21 23:48:55', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:53:33', 1399985191002447872, '2022-08-21 23:48:55', 1, 0); - -INSERT INTO `notice_site_message`(`id`, `title`, `content`, `sender_id`, `sender_name`, `sender_time`, `receive_type`, `send_state`, `efficient_time`, `cancel_time`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1561368170558623744, '测试数据', '

234554通扥广森

DFF

撒扥萨芬的

11
33
44
风很高
', 1399985191002447872, '小小明', '2022-08-21 23:33:01', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 23:02:35', 1399985191002447872, '2022-08-21 23:33:01', 7, 0); - -UPDATE `notice_site_message` SET `title` = '测试消息', `content` = '
55
5
5
5
5
5
5
5
5
5
5
5
6等非撒扥森速度扥三扥所
6
8
8
5撒扥森森的
5
5撒扥岁送
8
8
8
', `sender_id` = 1399985191002447872, `sender_name` = '小小明', `sender_time` = '2021-08-08 11:34:11', `receive_type` = 'all', `send_state` = 'cancel', `efficient_time` = NULL, `cancel_time` = '2022-08-21 23:01:16', `creator` = 1399985191002447872, `create_time` = '2021-08-08 11:35:19', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-21 23:01:16', `version` = 1, `deleted` = 0 WHERE `id` = 1424212599079161857; - -INSERT INTO `notice_site_message_user`(`id`, `message_id`, `receive_id`, `have_read`, `read_time`, `creator`, `create_time`, `deleted`) VALUES (1558781525422428160, 1558781525200130048, 1399985191002447872, b'1', '2022-08-14 19:47:53', 0, '2022-08-14 19:44:11', 0); - -INSERT INTO `notice_site_message_user`(`id`, `message_id`, `receive_id`, `have_read`, `read_time`, `creator`, `create_time`, `deleted`) VALUES (1559917646856540160, 1424212599079161857, 1399985191002447872, b'1', '2022-08-17 22:58:43', 1399985191002447872, '2022-08-17 22:58:44', 0); - -INSERT INTO `notice_site_message_user`(`id`, `message_id`, `receive_id`, `have_read`, `read_time`, `creator`, `create_time`, `deleted`) VALUES (1561379790089302016, 1561368170558623744, 1399985191002447872, b'1', '2022-08-21 23:48:43', 1399985191002447872, '2022-08-21 23:48:46', 0); - -INSERT INTO `notice_site_message_user`(`id`, `message_id`, `receive_id`, `have_read`, `read_time`, `creator`, `create_time`, `deleted`) VALUES (1561379841968648192, 1561365894804766720, 1399985191002447872, b'1', '2022-08-21 23:48:58', 1399985191002447872, '2022-08-21 23:48:58', 0); - -DELETE FROM `qrtz_fired_triggers` WHERE `SCHED_NAME` = 'quartzScheduler' AND `ENTRY_ID` = 'NON_CLUSTERED1661135985834'; - -UPDATE `qrtz_triggers` SET `JOB_NAME` = '1546857070483939328', `JOB_GROUP` = 'DEFAULT', `DESCRIPTION` = NULL, `NEXT_FIRE_TIME` = 1661135790000, `PREV_FIRE_TIME` = 1661135785000, `PRIORITY` = 5, `TRIGGER_STATE` = 'WAITING', `TRIGGER_TYPE` = 'CRON', `START_TIME` = 1657634445000, `END_TIME` = 0, `CALENDAR_NAME` = NULL, `MISFIRE_INSTR` = 0, `JOB_DATA` = '' WHERE `SCHED_NAME` = 'quartzScheduler' AND `TRIGGER_NAME` = '1546857070483939328' AND `TRIGGER_GROUP` = 'DEFAULT'; - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.0/1.1.0_up_1.1.1.sql b/_config/sql/1.1.x/1.1.0/1.1.0_up_1.1.1.sql deleted file mode 100644 index c74145b2d..000000000 --- a/_config/sql/1.1.x/1.1.0/1.1.0_up_1.1.1.sql +++ /dev/null @@ -1,121 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `bpm_instance` ( - `id` bigint(20) NOT NULL, - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程标题', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义ID', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程实例的状态', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程实例扩展' ROW_FORMAT = Dynamic; - -CREATE TABLE `bpm_model` ( - `id` bigint(20) NOT NULL, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `model_type` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程类型', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发布状态', - `enable` bit(1) NULL DEFAULT NULL COMMENT '启用状态', - `deploy_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '部署id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称', - `def_remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程备注', - `main_process` bit(1) NULL DEFAULT NULL COMMENT '是否主流程', - `process_version` int(8) NULL DEFAULT NULL COMMENT '流程版本号', - `model_editor_xml` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '流程xml', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程模型' ROW_FORMAT = Dynamic; - -CREATE TABLE `bpm_model_task` ( - `id` bigint(20) NOT NULL, - `model_id` bigint(20) NOT NULL COMMENT '关联模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `task_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `task_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `multi` bit(1) NOT NULL COMMENT '是否会签', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `assign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分配类型', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '分配的用户id', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分配的用户名称', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '模型任务节点配置' ROW_FORMAT = Dynamic; - -CREATE TABLE `bpm_task` ( - `id` bigint(20) NOT NULL, - `task_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '任务ID', - `execution_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务执行 ID', - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称(业务标题)', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `task_node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `task_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程任务的状态', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '当前处理人', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '当前处理人', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程任务扩展' ROW_FORMAT = Dynamic; - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1562696107020230656, 'BpmModelPublish', '工作流模型发布状态', '工作流', '工作流模型发布状态', 1399985191002447872, '2022-08-25 14:59:20', 1399985191002447872, '2022-08-25 15:27:55', 0, 1); - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1563083969989423104, 'BpmTaskAssignType', '工作流处理人分配类型', '工作流', '流程任务处理人分配类型', 1399985191002447872, '2022-08-26 16:40:34', 1399985191002447872, '2022-08-26 16:40:53', 0, 1); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1562696390043475968, 1562696107020230656, 'BpmModelPublish', 'published', '已发布', 0.00, '', 1399985191002447872, '2022-08-25 15:00:28', 1399985191002447872, '2022-08-25 15:00:28', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1562696420561231872, 1562696107020230656, 'BpmModelPublish', 'unpublished', '未发布', 0.00, '未上传xml文档', 1399985191002447872, '2022-08-25 15:00:35', 1399985191002447872, '2022-08-25 15:28:09', 0, 1); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1562703450588028928, 1562696107020230656, 'BpmModelPublish', 'unpublishedXml', '未发布(已上传BPMN)', 0.00, '有xml文档', 1399985191002447872, '2022-08-25 15:28:31', 1399985191002447872, '2022-08-25 15:34:45', 0, 1); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1563087300157747200, 1563083969989423104, 'BpmTaskAssignType', 'user', '指定用户', 0.00, '', 1399985191002447872, '2022-08-26 16:53:48', 1399985191002447872, '2022-08-26 16:53:48', 0, 0); - -INSERT INTO `base_dynamic_form`(`id`, `name`, `code`, `value`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1552656018381422592, '测试表单', 'test', '{\"list\":[{\"type\":\"input\",\"label\":\"输入框\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"aa\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"文本框\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"bb\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}],\"config\":{\"layout\":\"horizontal\",\"labelCol\":{\"xs\":4,\"sm\":4,\"md\":4,\"lg\":4,\"xl\":4,\"xxl\":4},\"labelWidth\":100,\"labelLayout\":\"flex\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1399985191002447872, '2022-07-29 09:55:22', 0, 7); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1562460770753544192, 'admin', NULL, '流程管理', 'Bpm', NULL, b'0', 'audit', b'0', b'0', 'RouteView', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:24:12', 1399985191002447872, '2022-08-24 23:25:11', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1562461289450536960, 'admin', 1562460770753544192, '流程模型', 'BpmModel', NULL, b'0', '', b'0', b'0', 'bpm/model/BpmModelList', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:26:15', 1399985191002447872, '2022-08-24 23:26:15', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1562461620766998528, 'admin', 1562460770753544192, '流程表单', 'BpmFrom', NULL, b'0', '', b'0', b'0', 'Dev', NULL, '/bpm/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:27:34', 1399985191002447872, '2022-08-24 23:27:56', 1, 1); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1563092672406859776, 'admin', 1537732440632524800, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', 'office/myapply/MyApplyList', NULL, '/person/myApply', '', 1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-26 17:15:09', 1399985191002447872, '2022-08-30 22:46:25', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1564626025579462656, 'admin', 1537732440632524800, '已办任务', 'MyDoneTaskList', NULL, b'0', '', b'0', b'0', 'office/mydone/MyDoneList', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-30 22:48:09', 1399985191002447872, '2022-08-30 22:48:29', 1, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '待办任务', `name` = 'MyTodoTaskList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'office/mytodo/MyTodoList', `component_name` = NULL, `path` = '/person/todo', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:56:11', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-08-30 22:46:47', `version` = 6, `deleted` = 0 WHERE `id` = 1537735851818024960; - - -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.1/1.1.1_up_1.1.2.sql b/_config/sql/1.1.x/1.1.1/1.1.1_up_1.1.2.sql deleted file mode 100644 index 65e1d1842..000000000 --- a/_config/sql/1.1.x/1.1.1/1.1.1_up_1.1.2.sql +++ /dev/null @@ -1,75 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `bpm_model_node` ( - `id` bigint(20) NOT NULL, - `model_id` bigint(20) NOT NULL COMMENT '关联模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `multi` bit(1) NOT NULL COMMENT '是否多任务', - `sequential` bit(1) NOT NULL COMMENT '是否串签', - `reject` bit(1) NOT NULL COMMENT '是否允许驳回', - `back` bit(1) NOT NULL COMMENT '是否允许回退', - `retrieve` bit(1) NOT NULL COMMENT '是否允许取回', - `skip` bit(1) NOT NULL COMMENT '是否跳过当前节点', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `assign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分配类型', - `assign_raw` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的原始数据', - `assign_show` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的数据的展示', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '模型任务节点配置' ROW_FORMAT = Dynamic; - -ALTER TABLE `bpm_task` ADD COLUMN `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id' AFTER `def_name`; - -ALTER TABLE `bpm_task` ADD COLUMN `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称' AFTER `node_id`; - -ALTER TABLE `bpm_task` ADD COLUMN `reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理意见' AFTER `state`; - -ALTER TABLE `bpm_task` MODIFY COLUMN `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理结果' AFTER `node_name`; - -ALTER TABLE `bpm_task` DROP COLUMN `task_node_id`; - -ALTER TABLE `bpm_task` DROP COLUMN `task_name`; - -DROP TABLE `bpm_model_task`; - -INSERT INTO `base_dict` VALUES (1567091641298386944, 'BpmTaskState', '流程任务状态', '工作流', '流程任务状态', 1399985191002447872, '2022-09-06 18:05:37', 1399985191002447872, '2022-09-06 18:05:47', 0, 1); - -INSERT INTO `base_dict_item` VALUES (1567091825981980672, 1567091641298386944, 'BpmTaskState', 'running', '处理中', 0.00, '', 1399985191002447872, '2022-09-06 18:06:21', 1399985191002447872, '2022-09-06 18:06:21', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567091863017684992, 1567091641298386944, 'BpmTaskState', 'pass', '通过', 0.00, '', 1399985191002447872, '2022-09-06 18:06:30', 1399985191002447872, '2022-09-06 18:06:30', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567091902414782464, 1567091641298386944, 'BpmTaskState', 'reject', '驳回', 0.00, '', 1399985191002447872, '2022-09-06 18:06:39', 1399985191002447872, '2022-09-06 18:06:51', 0, 1); - -INSERT INTO `base_dict_item` VALUES (1567091993569591296, 1567091641298386944, 'BpmTaskState', 'back', '退回', 0.00, '', 1399985191002447872, '2022-09-06 18:07:01', 1399985191002447872, '2022-09-06 18:07:01', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567092037261656064, 1567091641298386944, 'BpmTaskState', 'retrieve', '取回', 0.00, '', 1399985191002447872, '2022-09-06 18:07:12', 1399985191002447872, '2022-09-06 18:07:22', 0, 1); - -INSERT INTO `base_dict_item` VALUES (1567092124226355200, 1567091641298386944, 'BpmTaskState', 'skip', '跳过', 0.00, '', 1399985191002447872, '2022-09-06 18:07:32', 1399985191002447872, '2022-09-06 18:07:32', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567163310103564288, 1563083969989423104, 'BpmTaskAssignType', 'userGroup', '用户组', 0.00, '', 1399985191002447872, '2022-09-06 22:50:24', 1399985191002447872, '2022-09-06 22:50:24', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567163343288897536, 1563083969989423104, 'BpmTaskAssignType', 'role', '角色', 0.00, '', 1399985191002447872, '2022-09-06 22:50:32', 1399985191002447872, '2022-09-06 22:50:32', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567163380693700608, 1563083969989423104, 'BpmTaskAssignType', 'deptMember', '部门成员', 0.00, '', 1399985191002447872, '2022-09-06 22:50:41', 1399985191002447872, '2022-09-06 22:50:41', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567163412960481280, 1563083969989423104, 'BpmTaskAssignType', 'deptLeader', '部门的负责人', 0.00, '', 1399985191002447872, '2022-09-06 22:50:49', 1399985191002447872, '2022-09-06 22:50:49', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567175558888923136, 1563083969989423104, 'BpmTaskAssignType', 'roleGroup', '角色组', 0.00, '', 1399985191002447872, '2022-09-06 23:39:05', 1399985191002447872, '2022-09-06 23:39:05', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567178994242002944, 1563083969989423104, 'BpmTaskAssignType', 'sponsor', '发起人', 0.00, '', 1399985191002447872, '2022-09-06 23:52:44', 1399985191002447872, '2022-09-06 23:52:44', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1567179143576002560, 1563083969989423104, 'BpmTaskAssignType', 'select', '用户手动选择', 0.00, '', 1399985191002447872, '2022-09-06 23:53:19', 1399985191002447872, '2022-09-07 00:01:22', 0, 1); - -UPDATE `base_dict_item` SET `dict_id` = 1563083969989423104, `dict_code` = 'BpmTaskAssignType', `code` = 'user', `name` = '用户', `sort_no` = 0.00, `remark` = '', `creator` = 1399985191002447872, `create_time` = '2022-08-26 16:53:48', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-09-06 22:50:15', `deleted` = 0, `version` = 1 WHERE `id` = 1563087300157747200; - -INSERT INTO `base_dynamic_form` VALUES (1552656018381422593, '测试表单1', 'test1', '{\"list\":[{\"type\":\"input\",\"label\":\"申请人\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"apply_by\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"input\",\"label\":\"请假天数\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":false,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"leave_days\",\"key\":\"input_1662106166142\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"备注\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"remark\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"switch\",\"label\":\"开关\",\"options\":{\"defaultValue\":false,\"hidden\":false,\"disabled\":false},\"model\":\"switch_1662108221389\",\"key\":\"switch_1662108221389\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"table\",\"label\":\"表格布局\",\"trs\":[{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]},{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[{\"type\":\"editor\",\"label\":\"富文本\",\"icon\":\"icon-LC_icon_edit_line_1\",\"list\":[],\"options\":{\"height\":300,\"placeholder\":\"请输入\",\"defaultValue\":\"\",\"chinesization\":true,\"hidden\":false,\"disabled\":false,\"showLabel\":false,\"width\":\"100%\"},\"model\":\"editor_1662106288134\",\"key\":\"editor_1662106288134\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]}],\"options\":{\"width\":\"100%\",\"bordered\":true,\"bright\":false,\"small\":true,\"customStyle\":\"\"},\"key\":\"table_1662106283652\"}],\"config\":{\"layout\":\"vertical\",\"labelCol\":{\"xs\":6,\"sm\":6,\"md\":6,\"lg\":6,\"xl\":6,\"xxl\":6},\"labelWidth\":100,\"labelLayout\":\"Grid\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1414143554414059520, '2022-09-02 16:44:01', 0, 12); - - -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.2/1.1.2_up_1.1.3.sql b/_config/sql/1.1.x/1.1.2/1.1.2_up_1.1.3.sql deleted file mode 100644 index d9bdc27c5..000000000 --- a/_config/sql/1.1.x/1.1.2/1.1.2_up_1.1.3.sql +++ /dev/null @@ -1,55 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -ALTER TABLE `bpm_instance` ADD COLUMN `model_id` bigint(20) NULL DEFAULT NULL COMMENT '模型id' AFTER `instance_name`; - -ALTER TABLE `bpm_model_node` ADD COLUMN `or_sign` bit(1) NULL DEFAULT NULL COMMENT '是否是或签' AFTER `sequential`; - -ALTER TABLE `bpm_model_node` ADD COLUMN `ratio_pass` bit(1) NULL DEFAULT NULL COMMENT '是否比例通过' AFTER `or_sign`; - -ALTER TABLE `bpm_model_node` ADD COLUMN `pass_ratio` int(3) NULL DEFAULT NULL COMMENT '通过比例' AFTER `ratio_pass`; - -ALTER TABLE `bpm_model_node` MODIFY COLUMN `sequential` bit(1) NULL DEFAULT NULL COMMENT '是否串签' AFTER `multi`; - -ALTER TABLE `bpm_task` ADD COLUMN `multi_id` bigint(20) NULL DEFAULT NULL COMMENT '多实例关联id' AFTER `execution_id`; - -ALTER TABLE `bpm_task` ADD COLUMN `result` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理结果' AFTER `state`; - -ALTER TABLE `bpm_task` MODIFY COLUMN `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理状态' AFTER `node_name`; - -ALTER TABLE `bpm_task` MODIFY COLUMN `version` int(8) NOT NULL COMMENT '版本' AFTER `last_modified_time`; - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343684024705024, 'BpmTaskResult', '流程任务处理结果', '工作流', '', 1399985191002447872, '2022-09-15 17:28:05', 1399985191002447872, '2022-09-15 17:28:05', 0, 0); - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570764395519111168, 'BpmInstanceState', '流程实例状态', '工作流', '', 1399985191002447872, '2022-09-16 21:19:50', 1399985191002447872, '2022-09-16 21:19:50', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343731634249728, 1570343684024705024, 'BpmTaskResult', 'pass', '通过', 0.00, '', 1399985191002447872, '2022-09-15 17:28:16', 1399985191002447872, '2022-09-15 17:28:16', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343761636106240, 1570343684024705024, 'BpmTaskResult', 'notPass', '不通过', 0.00, '', 1399985191002447872, '2022-09-15 17:28:23', 1399985191002447872, '2022-09-15 17:28:23', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343788056027136, 1570343684024705024, 'BpmTaskResult', 'abstain', '弃权', 0.00, '', 1399985191002447872, '2022-09-15 17:28:29', 1399985191002447872, '2022-09-15 17:28:29', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343826018672640, 1570343684024705024, 'BpmTaskResult', 'reject', '驳回', 0.00, '', 1399985191002447872, '2022-09-15 17:28:38', 1399985191002447872, '2022-09-15 17:28:38', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343873737269248, 1570343684024705024, 'BpmTaskResult', 'back', '退回', 0.00, '', 1399985191002447872, '2022-09-15 17:28:50', 1399985191002447872, '2022-09-15 17:28:50', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570343913918701568, 1570343684024705024, 'BpmTaskResult', 'retrieve', '取回', 0.00, '', 1399985191002447872, '2022-09-15 17:28:59', 1399985191002447872, '2022-09-15 17:28:59', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570685888076120064, 1570343684024705024, 'BpmTaskResult', 'autoFinish', '自动完成', 0.00, '', 1399985191002447872, '2022-09-16 16:07:52', 1399985191002447872, '2022-09-16 16:08:02', 0, 1); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570764765255397376, 1570764395519111168, 'BpmInstanceState', 'running', '运行中', 0.00, '', 1399985191002447872, '2022-09-16 21:21:18', 1399985191002447872, '2022-09-16 21:21:18', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570764802047832064, 1570764395519111168, 'BpmInstanceState', 'finish', '已完成', 0.00, '', 1399985191002447872, '2022-09-16 21:21:27', 1399985191002447872, '2022-09-16 21:21:27', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570764836319490048, 1570764395519111168, 'BpmInstanceState', 'cancel', '取消', 0.00, '', 1399985191002447872, '2022-09-16 21:21:35', 1399985191002447872, '2022-09-16 21:21:35', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570784215744585728, 1570343684024705024, 'BpmTaskResult', 'cancel', '取消', 0.00, '', 1399985191002447872, '2022-09-16 22:38:35', 1399985191002447872, '2022-09-16 22:38:35', 0, 0); - -INSERT INTO `base_dict_item`(`id`, `dict_id`, `dict_code`, `code`, `name`, `sort_no`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1570784331511570432, 1567091641298386944, 'BpmTaskState', 'cancel', '取消', 0.00, '', 1399985191002447872, '2022-09-16 22:39:03', 1399985191002447872, '2022-09-16 22:39:03', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1571023702122766336, 'admin', 1562460770753544192, '未处理任务', 'BpmTodoTask', NULL, b'0', '', b'0', b'0', 'bpm/task/TodoTaskList', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:30:13', 1399985191002447872, '2022-09-17 14:31:23', 2, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1571023925834358784, 'admin', 1562460770753544192, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', 'bpm/task/DoneTaskList', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:31:07', 1399985191002447872, '2022-09-17 14:31:07', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1571024250171498496, 'admin', 1562460770753544192, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', 'bpm/instance/InstanceList', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:32:24', 1399985191002447872, '2022-09-17 14:32:24', 0, 0); - -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.3/1.1.3_up_1.1.4.sql b/_config/sql/1.1.x/1.1.3/1.1.3_up_1.1.4.sql deleted file mode 100644 index 2a2461980..000000000 --- a/_config/sql/1.1.x/1.1.3/1.1.3_up_1.1.4.sql +++ /dev/null @@ -1,43 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `base_dynamic_data_source` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源名称', - `database_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库类型', - `db_driver` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '驱动类', - `db_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库地址', - `db_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库名称', - `db_username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', - `db_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态数据源管理' ROW_FORMAT = Dynamic; - - - -INSERT INTO `base_dict_item` VALUES (1573665422392098816, 1439961232651034624, 'MessageTemplateCode', '0', '站内信', -11.00, 'SITE', 1399985191002447872, '2022-09-24 21:27:29', 1399985191002447872, '2022-09-24 21:27:39', 0, 1); - -INSERT INTO `iam_perm_menu` VALUES (1573669546890297344, 'admin', 1552207982510706688, '动态数据源', 'DynamicSource', NULL, b'0', '', b'0', b'0', 'develop/dynamicsource/DynamicDataSourceList', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-24 21:43:52', 1399985191002447872, '2022-09-24 21:43:52', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573951326893510656, 'BpmTaskCreated', '流程任务创建事件', '流程任务创建事件', 0, '', 1399985191002447872, '2022-09-25 16:23:34', 1399985191002447872, '2022-09-25 16:23:34', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573951515616219136, 'BpmTaskAssignCreated', '流程任务更改处理人事件(新处理人)', '流程任务更改处理人事件(新处理人)', 0, '', 1399985191002447872, '2022-09-25 16:24:19', 1399985191002447872, '2022-09-25 16:27:09', 1, 0); - -INSERT INTO `notice_message_template` VALUES (1573952505056727040, 'BpmTaskAssignCancel', '流程任务更改处理人事件(原处理人)', '流程任务更改处理人事件(原处理人)', 0, '', 1399985191002447872, '2022-09-25 16:28:14', 1399985191002447872, '2022-09-25 16:28:14', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573952568654958592, 'BpmTaskCancel', '流程任务取消事件', '流程任务取消事件', 0, '', 1399985191002447872, '2022-09-25 16:28:30', 1399985191002447872, '2022-09-25 16:28:30', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573952621826150400, 'BpmTaskReject', '流程任务驳回事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-09-25 16:28:42', 1399985191002447872, '2022-09-25 16:28:42', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573952709432578048, 'BpmInstanceCompleted', '流程完成时通知发起人', '流程完成时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:03', 1399985191002447872, '2022-09-25 16:29:03', 0, 0); - -INSERT INTO `notice_message_template` VALUES (1573952762507300864, 'BpmInstanceCancel', '流程取消时通知发起人', '流程取消时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:16', 1399985191002447872, '2022-09-25 16:29:16', 0, 0); - -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.4/1.1.4_up_1.1.5.sql b/_config/sql/1.1.x/1.1.4/1.1.4_up_1.1.5.sql deleted file mode 100644 index af13f4fb7..000000000 --- a/_config/sql/1.1.x/1.1.4/1.1.4_up_1.1.5.sql +++ /dev/null @@ -1,7 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '审计日志', `name` = 'auditLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/system/log', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:29:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-07 12:57:05', `version` = 1, `deleted` = 0 WHERE `id` = 1452567897717321728; -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = NULL, `title` = '商品管理', `name` = 'GoodsManager', `perm_code` = NULL, `effect` = b'0', `icon` = 'car', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/goods', `redirect` = '', `sort_no` = 0, `menu_type` = 0, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-05-10 11:01:40', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-07 12:38:50', `version` = 2, `deleted` = 0 WHERE `id` = 1523860792695283712; -INSERT INTO `notice_message_template` VALUES (1580083314274070528, 'BpmTaskBack', '流程任务回退事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-10-12 14:29:53', 1399985191002447872, '2022-10-12 14:30:11', 1, 0); - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.5/1.1.5_up_1.1.6.sql b/_config/sql/1.1.x/1.1.5/1.1.5_up_1.1.6.sql deleted file mode 100644 index 85c6f7831..000000000 --- a/_config/sql/1.1.x/1.1.5/1.1.5_up_1.1.6.sql +++ /dev/null @@ -1,174 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -UPDATE `base_dict` SET `code` = 'BpmTaskResult', `name` = '流程任务处理结果', `group_tag` = '工作流', `remark` = '流程任务处理结果', `creator` = 1399985191002447872, `create_time` = '2022-09-15 17:28:05', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-10-19 23:13:40', `deleted` = 0, `version` = 1 WHERE `id` = 1570343684024705024; - -UPDATE `base_dict` SET `code` = 'BpmInstanceState', `name` = '流程实例状态', `group_tag` = '工作流', `remark` = '流程实例状态', `creator` = 1399985191002447872, `create_time` = '2022-09-16 21:19:50', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-10-19 23:13:33', `deleted` = 0, `version` = 1 WHERE `id` = 1570764395519111168; - -INSERT INTO `iam_client`(`id`, `code`, `name`, `system`, `enable`, `login_type_ids`, `description`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1580487061605175296, 'adminv3', 'pc管理端(vue3版)', b'0', b'1', '1430430071299207168,1430478946919653376,1435138582839009280,1542091599907115008,1542804450312122368,1543126042909016064', 'vue3版本', 1399985191002447872, '2022-10-13 17:14:14', 1399985191002447872, '2022-10-13 17:14:25', 1, 0); - -UPDATE `iam_login_type` SET `code` = 'password', `name` = '账号密码登陆', `type` = 'password', `system` = b'1', `timeout` = 3600, `captcha` = b'1', `pwd_err_num` = -1, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-25 15:21:20', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-02 21:32:48', `version` = 19, `deleted` = 0 WHERE `id` = 1430430071299207168; - -UPDATE `iam_login_type` SET `code` = 'weChat', `name` = '微信登录', `type` = 'openId', `system` = b'0', `timeout` = 5, `captcha` = b'0', `pwd_err_num` = -1, `enable` = b'1', `description` = '', `creator` = 1399985191002447872, `create_time` = '2022-07-02 14:54:53', `last_modifier` = 0, `last_modified_time` = '2022-10-12 22:15:05', `version` = 2, `deleted` = 0 WHERE `id` = 1543126042909016064; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '1996-12-01', `avatar` = '1495331905770315776', `last_login_time` = '2022-10-29 08:44:52', `current_login_time` = '2022-11-02 09:59:06', `initial_password` = b'0', `last_change_password_time` = '2022-06-19 21:25:00', `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 0, `last_modified_time` = '2022-11-02 09:59:06', `version` = 367, `deleted` = 0 WHERE `id` = 1399985191002447872; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = '2022-10-31', `avatar` = '1586953599627546624', `last_login_time` = '2022-11-02 21:32:23', `current_login_time` = '2022-11-02 21:33:21', `initial_password` = b'0', `last_change_password_time` = NULL, `creator` = 1, `create_time` = '2021-07-11 16:44:32', `last_modifier` = 0, `last_modified_time` = '2022-11-02 21:33:21', `version` = 62, `deleted` = 0 WHERE `id` = 1414143554414059520; - -UPDATE `iam_user_expand_info` SET `sex` = 1, `birthday` = NULL, `avatar` = NULL, `last_login_time` = '2022-09-16 16:48:16', `current_login_time` = '2022-09-17 17:20:58', `initial_password` = b'0', `last_change_password_time` = '2022-06-29 00:39:23', `creator` = 1399985191002447872, `create_time` = '2021-09-09 17:14:54', `last_modifier` = 0, `last_modified_time` = '2022-09-17 17:20:58', `version` = 5, `deleted` = 0 WHERE `id` = 1435894470432456704; - -UPDATE `iam_user_info` SET `name` = '小小明1995', `username` = 'xxm1995', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13000000000', `email` = 'xxm1995@foxmail.com', `client_ids` = NULL, `avatar` = NULL, `source` = NULL, `admin` = b'1', `register_time` = '2021-07-11 16:44:31', `status` = 1, `creator` = 1, `create_time` = '2021-07-11 16:44:32', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-10-31 13:30:07', `version` = 5, `deleted` = 0 WHERE `id` = 1414143554414059520; - -UPDATE `iam_user_info` SET `name` = '管理员', `username` = 'admin', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '13000001111', `email` = 'admin@qq.com', `client_ids` = '1430430071299207168', `avatar` = '', `source` = NULL, `admin` = b'0', `register_time` = '2021-09-09 17:14:52', `status` = 1, `creator` = 1399985191002447872, `create_time` = '2021-09-09 17:14:54', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-09-16 16:41:51', `version` = 7, `deleted` = 0 WHERE `id` = 1435894470432456704; - - -INSERT INTO `iam_perm_menu` VALUES (1580740450633101312, 'adminv3', NULL, '系统管理', 'System', NULL, b'0', 'ant-design:setting-outlined', b'0', b'0', 'Layout', NULL, '/system', '/system1/client', -99999, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:07', 1414143554414059520, '2022-10-18 15:32:09', 4, 0); - -INSERT INTO `iam_perm_menu` VALUES (1580740637841666048, 'adminv3', 1582253306356649984, '终端管理', 'ClientList', NULL, b'0', '', b'0', b'0', '/modules/system/client/ClientList.vue', NULL, '/system/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:51', 1414143554414059520, '2022-10-18 14:13:27', 5, 0); - -INSERT INTO `iam_perm_menu` VALUES (1580740758629232640, 'adminv3', 1582253306356649984, '登录方式', 'LoginTypeList', NULL, b'0', '', b'0', b'0', '/modules/system/loginType/LoginTypeList.vue', NULL, '/system/loginType', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:02:20', 1414143554414059520, '2022-10-18 14:13:40', 5, 0); - -INSERT INTO `iam_perm_menu` VALUES (1580858583654051840, 'adminv3', 1580740450633101312, '测试Iframe', 'Iframe', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/system/Iframe', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 17:50:32', 1414143554414059520, '2022-10-17 17:46:19', 5, 1); - -INSERT INTO `iam_perm_menu` VALUES (1580917438227075072, 'adminv3', 1580740450633101312, '三极目录', 'hello', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system1/a', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:24', 1399985191002447872, '2022-10-14 23:38:16', 2, 1); - -INSERT INTO `iam_perm_menu` VALUES (1580917571069071360, 'adminv3', 1580917438227075072, '百度', 'baidu', NULL, b'0', '', b'0', b'0', '', NULL, 'https://www.baidu.com/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:56', 1399985191002447872, '2022-10-14 23:37:44', 3, 1); - -INSERT INTO `iam_perm_menu` VALUES (1580928436300337152, 'adminv3', 1580740450633101312, '菜单管理', 'MenuList', NULL, b'0', '', b'0', b'0', '/modules/system/menu/MenuList.vue', NULL, '/system/menu', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 22:28:06', 1399985191002447872, '2022-10-14 22:28:32', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582249924602580992, 'adminv3', 1580740450633101312, '权限管理', 'Permission', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 13:59:13', 1414143554414059520, '2022-10-18 13:59:13', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582253011803262976, 'adminv3', 1580740450633101312, '用户信息', 'UserAuth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/user', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:11:30', 1414143554414059520, '2022-10-18 14:11:30', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582253152903843840, 'adminv3', 1580740450633101312, '系统配置', 'SystemConfig', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:03', 1414143554414059520, '2022-10-18 14:12:03', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582253306356649984, 'adminv3', 1580740450633101312, '认证管理', 'Auth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:40', 1414143554414059520, '2022-10-18 14:13:13', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582274981055909888, 'adminv3', NULL, '个人办公', 'Person', NULL, b'0', 'ant-design:align-right-outlined', b'0', b'0', 'Layout', NULL, '/person', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:38:47', 1414143554414059520, '2022-10-18 15:38:47', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582275875424129024, 'adminv3', NULL, '系统监控', 'Monitor', NULL, b'0', 'ant-design:monitor-outlined', b'0', b'0', 'Layout', NULL, '/monitor', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:21', 1414143554414059520, '2022-10-19 17:29:29', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582275984849326080, 'adminv3', NULL, '通知管理', 'Notice', NULL, b'0', 'ant-design:message-outlined', b'0', b'0', 'Layout', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:47', 1414143554414059520, '2022-10-19 17:30:06', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582276092038959104, 'adminv3', NULL, '第三方对接', 'Third', NULL, b'0', 'ant-design:api-twotone', b'0', b'0', 'Layout', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:12', 1414143554414059520, '2022-10-19 17:32:04', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582276184120709120, 'adminv3', NULL, '支付管理', 'PayManager', NULL, b'0', 'ant-design:pay-circle-outlined', b'0', b'0', 'Layout', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:34', 1414143554414059520, '2022-10-19 17:31:46', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582276341792985088, 'adminv3', NULL, '开发管理', 'Develop', NULL, b'0', 'ant-design:apartment-outlined', b'0', b'0', 'Layout', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:12', 1414143554414059520, '2022-10-19 15:24:22', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582276447602692096, 'adminv3', NULL, '流程管理', 'Bpm', NULL, b'0', 'ant-design:file-protect-outlined', b'0', b'0', 'Layout', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:37', 1414143554414059520, '2022-10-19 17:34:11', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582276516905177088, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', 'ant-design:appstore-twotone', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:54', 1414143554414059520, '2022-10-19 17:34:26', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582277076421136384, 'adminv3', 1582249924602580992, '角色管理', 'RoleList', NULL, b'0', '', b'0', b'0', '/modules/system/role/RoleList.vue', NULL, '/system/permission/role', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:47:07', 1414143554414059520, '2022-10-18 15:59:37', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582301940364308480, 'adminv3', 1582249924602580992, '请求权限管理', 'PermPathList', NULL, b'0', '', b'0', b'0', '/modules/system/path/PermPathList.vue', NULL, '/system/permission/path', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:25:55', 1414143554414059520, '2022-10-18 20:41:22', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582302180999917568, 'adminv3', 1582249924602580992, '数据范围权限', 'DataScopeList', NULL, b'0', '', b'0', b'0', '/modules/system/scope/DataScopeList.vue', NULL, '/system/permission/scope', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:26:52', 1414143554414059520, '2022-10-18 17:26:52', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582302542955769856, 'adminv3', 1582253011803262976, '用户管理', 'UserList', NULL, b'0', '', b'0', b'0', '/modules/system/user/UserList.vue', NULL, '/system/user/info', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:28:19', 1414143554414059520, '2022-10-18 17:28:19', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582302764129808384, 'adminv3', 1582253011803262976, '部门管理', 'DeptList', NULL, b'0', '', b'0', b'0', '/modules/system/dept/DeptList.vue', NULL, '/system/user/dept', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:29:11', 1414143554414059520, '2022-10-18 17:32:26', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582303143110340608, 'adminv3', 1582253152903843840, '数据字典', 'DictList', NULL, b'0', '', b'0', b'0', '/modules/system/translate/DictList.vue', NULL, '/system/config/translate', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:30:42', 1414143554414059520, '2022-10-18 17:30:42', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582303290070364160, 'adminv3', 1582253152903843840, '定时任务', 'QuartzJobList', NULL, b'0', '', b'0', b'0', '/modules/system/quartz/QuartzJobList.vue', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:17', 1414143554414059520, '2022-10-18 17:32:12', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582303447428067328, 'adminv3', 1582253152903843840, '系统参数', 'SystemParamList', NULL, b'0', '', b'0', b'0', '/modules/system/param/SystemParamList.vue', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:54', 1414143554414059520, '2022-10-19 23:14:16', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582632873244172288, 'adminv3', 1582276341792985088, '文件管理', 'FileUploadList', NULL, b'0', '', b'0', b'0', '/modules/develop/file/FileUploadList.vue', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:20:56', 1414143554414059520, '2022-10-19 15:20:56', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582633196587261952, 'adminv3', 1582276341792985088, '代码生成', 'CodeGenList', NULL, b'0', '', b'0', b'0', '/modules/develop/codegen/CodeGenList.vue', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:13', 1414143554414059520, '2022-10-19 15:23:17', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582633307786649600, 'adminv3', 1582276341792985088, '动态表单', 'DynamicFormList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicform/DynamicFormList.vue', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:39', 1414143554414059520, '2022-10-19 15:22:39', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1582633620321017856, 'adminv3', 1582276341792985088, '动态数据源', 'DynamicDataSourceList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicsource/DynamicDataSourceList.vue', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:23:54', 1414143554414059520, '2022-10-19 15:23:54', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583074308040925184, 'adminv3', 1582275875424129024, '接口文档', 'ApiSwagger', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:35:02', 1414143554414059520, '2022-10-20 20:35:02', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583075229563068416, 'adminv3', 1582275875424129024, '审计日志', 'AuditLog', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/monitor/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:38:42', 1414143554414059520, '2022-10-20 20:41:38', 2, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583076217481043968, 'adminv3', 1583075229563068416, '登录日志', 'LoginLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/login/LoginLogList.vue', NULL, '/monitor/log/login', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:42:37', 1414143554414059520, '2022-10-20 20:43:36', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583076424935514112, 'adminv3', 1583075229563068416, '操作日志', 'OperateLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/operate/OperateLogList.vue', NULL, '/monitor/log/operate', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:43:26', 1414143554414059520, '2022-10-20 20:43:26', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583076670881112064, 'adminv3', 1583075229563068416, '数据版本日志', 'DataVersionLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/data/DataVersionLogList.vue', NULL, '/monitor/log/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:44:25', 1414143554414059520, '2022-10-20 20:44:25', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583076878956339200, 'adminv3', 1582275875424129024, 'ELK日志', 'ELK', NULL, b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:15', 1414143554414059520, '2022-10-20 20:45:15', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583077015434797056, 'adminv3', 1582275875424129024, 'PlumeLog日志', 'PlumeLog', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:47', 1414143554414059520, '2022-10-20 20:45:47', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583077198772019200, 'adminv3', 1582275875424129024, '系统信息', 'SystemInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/system/SystemInfoMonitor.vue', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:46:31', 1414143554414059520, '2022-10-20 20:46:31', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1583077360827342848, 'adminv3', 1582275875424129024, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/redis/RedisInfoMonitor.vue', NULL, '/monitor/redis', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:47:10', 1414143554414059520, '2022-10-20 20:47:10', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584378294652051456, 'adminv3', 1582275984849326080, '邮件配置', 'MailConfigList', NULL, b'0', '', b'0', b'0', '/modules/notice/mail/MailConfigList.vue', NULL, '/notice/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:56:36', 1414143554414059520, '2022-10-24 16:14:34', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584378497824137216, 'adminv3', 1582275984849326080, '消息模板', 'MessageTemplateList', NULL, b'0', '', b'0', b'0', '/modules/notice/template/MessageTemplateList.vue', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:57:25', 1414143554414059520, '2022-10-25 22:14:14', 2, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584378671266996224, 'adminv3', 1582275984849326080, '站内信', 'SiteMessageList', NULL, b'0', '', b'0', b'0', '/modules/notice/site/sender/SiteMessageList.vue', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:58:06', 1414143554414059520, '2022-10-24 10:58:06', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584379602188574720, 'adminv3', 1582276092038959104, '微信', 'WeChat', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:01:48', 1414143554414059520, '2022-10-24 11:01:48', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584379704122744832, 'adminv3', 1582276092038959104, '企业微信', 'WeCom', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:02:12', 1414143554414059520, '2022-10-24 11:02:12', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584380087805091840, 'adminv3', 1582276092038959104, '钉钉', 'DingTalk', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:03:44', 1414143554414059520, '2022-10-24 11:03:44', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584380527829524480, 'adminv3', 1584379602188574720, '消息模板', 'WechatTemplateList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/template/WechatTemplateList.vue', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:05:29', 1414143554414059520, '2022-10-26 15:58:56', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584380679478779904, 'adminv3', 1584379602188574720, '自定义菜单', 'WechatMenuList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/menu/WechatMenuList.vue', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:05', 1414143554414059520, '2022-10-27 10:15:24', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584380824308097024, 'adminv3', 1584379602188574720, '素材管理', 'WechatMediaList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/media/WechatMediaList.vue', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:40', 1414143554414059520, '2022-10-27 16:38:47', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584381134950834176, 'adminv3', 1584379704122744832, '企微机器人', 'WeComRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/wecom/robot/WeComRobotConfigList.vue', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:07:54', 1414143554414059520, '2022-10-24 11:07:54', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584381322184564736, 'adminv3', 1584380087805091840, '钉钉机器人', 'DingRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/dingtalk/robot/DingRobotConfigList.vue', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:08:38', 1414143554414059520, '2022-10-24 11:08:38', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584381477986181120, 'adminv3', 1584380087805091840, '钉钉配置', 'DingRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/dingtalk/config/DingTalkConfigList.vue', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:09:15', 1414143554414059520, '2022-10-24 11:09:15', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584381848238366720, 'adminv3', 1582274981055909888, '我的消息', 'SiteMessageList', NULL, b'0', '', b'0', b'0', '/modules/notice/site/receive/SiteMessageList.vue', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:10:44', 1414143554414059520, '2022-10-24 11:10:44', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584381976508571648, 'adminv3', 1582274981055909888, '待办任务', 'MyTodoList', NULL, b'0', '', b'0', b'0', '/modules/office/mytodo/MyTodoList.vue', NULL, '/person/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:14', 1414143554414059520, '2022-10-24 11:11:14', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584382091327643648, 'adminv3', 1582274981055909888, '已办任务', 'MyDoneList', NULL, b'0', '', b'0', b'0', '/modules/office/mydone/MyDoneList.vue', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:42', 1414143554414059520, '2022-10-24 11:12:29', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584382258307080192, 'adminv3', 1582274981055909888, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', '/modules/office/myapply/MyApplyList.vue', NULL, '/person/myApply', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:12:21', 1414143554414059520, '2022-10-24 11:12:21', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584382569381830656, 'adminv3', 1582276184120709120, '支付通道', 'PayChannel', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:13:36', 1414143554414059520, '2022-10-24 11:13:36', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584382723186958336, 'adminv3', 1582276184120709120, '支付订单', 'PayOrder', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:12', 1414143554414059520, '2022-10-24 11:14:12', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584382815407120384, 'adminv3', 1582276184120709120, '回调记录', 'PayNotify', NULL, b'0', '', b'0', b'0', '/modules/payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:34', 1414143554414059520, '2022-10-24 11:23:17', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584383492338425856, 'adminv3', 1582276184120709120, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:16', 1414143554414059520, '2022-10-24 11:17:16', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584383640942616576, 'adminv3', 1582276184120709120, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:51', 1414143554414059520, '2022-10-24 11:17:51', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584383859121922048, 'adminv3', 1584382569381830656, '支付宝', 'AliPayConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/alipay/AliPayConfigList.vue', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:18:43', 1414143554414059520, '2022-10-24 11:18:43', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584384015338774528, 'adminv3', 1584382569381830656, '微信支付', 'WeChatConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/wechat/WeChatConfigList.vue', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:20', 1414143554414059520, '2022-10-24 11:19:20', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584384160574939136, 'adminv3', 1584382569381830656, '云闪付', 'WeChatConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/unionpay/UnionPayConfigList.vue', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:55', 1414143554414059520, '2022-10-24 11:19:55', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584384526511185920, 'adminv3', 1584382723186958336, '支付订单', 'PaymentList', NULL, b'0', '', b'0', b'0', '/modules/payment/order/payment/PaymentList.vue', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:21:22', 1414143554414059520, '2022-10-24 11:21:22', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1584384752940687360, 'adminv3', 1584382723186958336, '退款订单', 'ReturnOrder', NULL, b'0', '', b'0', b'0', '/modules/payment/order/refund/RefundRecordList.vue', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:22:16', 1414143554414059520, '2022-10-24 11:22:16', 0, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '接口文档', `name` = 'ApiSwagger', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/doc.html', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = b'1', `keep_alive` = b'1', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-27 15:15:25', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-14 17:47:12', `version` = 18, `deleted` = 0 WHERE `id` = 1431153358157348864; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '登录日志', `name` = 'LoginLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/LoginLogList', `component_name` = NULL, `path` = '/monitor/log/loginLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-07 15:31:31', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-20 20:38:06', `version` = 6, `deleted` = 0 WHERE `id` = 1435143678721236992; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '操作日志', `name` = 'OperateLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/OperateLogList', `component_name` = NULL, `path` = '/monitor/log/OperateLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-09-08 13:33:04', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-20 20:38:12', `version` = 8, `deleted` = 0 WHERE `id` = 1435476255797624832; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1431152689832525824, `title` = '审计日志', `name` = 'auditLog', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'RouteView', `component_name` = NULL, `path` = '/monitor/log', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-10-25 17:29:09', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-20 20:37:46', `version` = 2, `deleted` = 0 WHERE `id` = 1452567897717321728; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1452567897717321728, `title` = '数据版本日志', `name` = 'DataVersionLog', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'starter/log/DataVersionLogList', `component_name` = NULL, `path` = '/monitor/log/DataVersionLog', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-01-11 17:51:54', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-20 20:38:18', `version` = 1, `deleted` = 0 WHERE `id` = 1480839877352476672; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1537732440632524800, `title` = '我的消息', `name` = 'PersonSiteMessage', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'notice/site/receive/SiteMessageList', `component_name` = NULL, `path` = '/person/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-06-17 17:48:03', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-24 11:10:35', `version` = 4, `deleted` = 0 WHERE `id` = 1537733801860333568; - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1450821877831254016, `title` = '企微机器人', `name` = 'WeComRobot', `perm_code` = '', `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = 'third/wecom/robot/WeComRobotConfigList', `component_name` = NULL, `path` = '/third/wecom/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-07-26 13:36:22', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-10-24 11:07:27', `version` = 3, `deleted` = 0 WHERE `id` = 1551803592828932096; - -INSERT INTO `notice_mail_config`(`id`, `code`, `name`, `host`, `port`, `username`, `password`, `sender`, `from_`, `activity`, `security_type`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1554739296333955072, 'fox', 'foxmail邮箱', 'smtp.qq.com', 465, 'sJfAJDDviYlqZ3BtdjMZF8V5jVSYCaMa9DNdVGDbe/s=', '7AtgVwObaO7wrsRpLvKkoo5O+udeEcFP1ONq4gYwOj0=', 'bootx-platform平台', 'xxm1995@foxmail.com', 1, 3, 1399985191002447872, '2022-08-03 16:01:49', 1399985191002447872, '2022-08-03 16:14:55', 0, 8); - -INSERT INTO `notice_mail_config`(`id`, `code`, `name`, `host`, `port`, `username`, `password`, `sender`, `from_`, `activity`, `security_type`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1584814372311744512, '11', '22', '33', 465, 'pwfAgEMJjGLjbVYEcgdXzA==', 'f3zJMwbPGmNRlNXpN5AMyA==', '666', '33333333@foxmail.com', 0, 1, 1414143554414059520, '2022-10-25 15:49:25', 1414143554414059520, '2022-10-25 16:27:12', 0, 10); - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/_config/sql/1.1.x/1.1.6/1.1.6_up_1.1.7.sql b/_config/sql/1.1.x/1.1.6/1.1.6_up_1.1.7.sql deleted file mode 100644 index 730c8bd90..000000000 --- a/_config/sql/1.1.x/1.1.6/1.1.6_up_1.1.7.sql +++ /dev/null @@ -1 +0,0 @@ -# 无sql更新 \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.7/1.1.7_up_1.1.8.sql b/_config/sql/1.1.x/1.1.7/1.1.7_up_1.1.8.sql deleted file mode 100644 index 77a607e2c..000000000 --- a/_config/sql/1.1.x/1.1.7/1.1.7_up_1.1.8.sql +++ /dev/null @@ -1,89 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -INSERT INTO `base_dict`(`id`, `code`, `name`, `group_tag`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `deleted`, `version`) VALUES (1589527951317389312, 'DataScopePerm', '数据范围权限', '系统属性', '数据范围权限', 1414143554414059520, '2022-11-07 15:59:30', 1414143554414059520, '2022-11-07 16:00:27', 0, 1); - -INSERT INTO `base_dict_item` VALUES (1589528254477488128, 1589527951317389312, 'DataScopePerm', '7', '所在及下级部门', 0.00, '', 1414143554414059520, '2022-11-07 16:00:43', 1414143554414059520, '2022-11-07 16:00:43', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528283539820544, 1589527951317389312, 'DataScopePerm', '6', '所在部门', 0.00, '', 1414143554414059520, '2022-11-07 16:00:49', 1414143554414059520, '2022-11-07 16:00:49', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528315672383488, 1589527951317389312, 'DataScopePerm', '5', '全部数据', 0.00, '', 1414143554414059520, '2022-11-07 16:00:57', 1414143554414059520, '2022-11-07 16:00:57', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528340267782144, 1589527951317389312, 'DataScopePerm', '4', '部门和用户范围', 0.00, '', 1414143554414059520, '2022-11-07 16:01:03', 1414143554414059520, '2022-11-07 16:01:03', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528367228768256, 1589527951317389312, 'DataScopePerm', '3', '部门范围', 0.00, '', 1414143554414059520, '2022-11-07 16:01:09', 1414143554414059520, '2022-11-07 16:01:09', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528393292173312, 1589527951317389312, 'DataScopePerm', '2', '用户范围', 0.00, '', 1414143554414059520, '2022-11-07 16:01:16', 1414143554414059520, '2022-11-07 16:01:16', 0, 0); - -INSERT INTO `base_dict_item` VALUES (1589528423956729856, 1589527951317389312, 'DataScopePerm', '1', '自身数据', 0.00, '', 1414143554414059520, '2022-11-07 16:01:23', 1414143554414059520, '2022-11-07 16:01:23', 0, 0); - -DELETE FROM `iam_perm_menu` WHERE `id` = 1476489893513404416; - -DELETE FROM `iam_perm_menu` WHERE `id` = 1478002945936015360; - -DELETE FROM `iam_perm_menu` WHERE `id` = 1478004271512240128; - -INSERT INTO `iam_perm_menu` VALUES (1591689087570378752, 'adminv3', 1582276447602692096, '流程模型', 'BpmModelList', NULL, b'0', '', b'0', b'0', '/modules/bpm/model/BpmModelList.vue', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:05', 1414143554414059520, '2022-11-13 15:07:05', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1591689307427405824, 'adminv3', 1582276447602692096, '未处理任务', 'TodoTaskList', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/TodoTaskList.vue', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:58', 1414143554414059520, '2022-11-14 22:45:57', 2, 0); - -INSERT INTO `iam_perm_menu` VALUES (1591689479075102720, 'adminv3', 1582276447602692096, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/DoneTaskList.vue', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:08:39', 1414143554414059520, '2022-11-13 15:14:17', 3, 0); - -INSERT INTO `iam_perm_menu` VALUES (1591690820224778240, 'adminv3', 1582276447602692096, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', '/modules/bpm/instance/InstanceList.vue', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:13:58', 1414143554414059520, '2022-11-13 15:13:58', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1594586131247075328, 'adminv3', 1582275875424129024, 'ELK日志x', 'ELKx', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/monitor/elk', 'https://www.antdv.com/components/overview-cn', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-21 14:58:54', 1414143554414059520, '2022-11-21 15:21:35', 6, 0); - -INSERT INTO `iam_perm_menu` VALUES (1595255743081025536, 'adminv3', 1580740450633101312, '菜单管理1', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:////system/menu?onlytab=1&__full__', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-23 11:19:42', 1414143554414059520, '2022-11-23 21:02:52', 20, 1); - -INSERT INTO `iam_perm_menu` VALUES (1597044371008516096, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 09:47:04', 1414143554414059520, '2022-11-28 09:47:04', 0, 1); - -INSERT INTO `iam_perm_menu` VALUES (1597102799370317824, 'adminv3', 1582276516905177088, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 13:39:15', 1414143554414059520, '2022-11-28 13:39:15', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1597210969883275264, 'adminv3', 1582276516905177088, '超级查询', 'SuperQueryDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/query/SuperQueryDemoList.vue', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 20:49:05', 1414143554414059520, '2022-11-28 21:00:14', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1598306560788877312, 'adminv3', 1584383492338425856, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/list/WalletList.vue', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:22:34', 1414143554414059520, '2022-12-01 21:22:34', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1598306760764903424, 'adminv3', 1584383492338425856, '个人钱包', 'MyWallet', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/personal/MyWallet.vue', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:23:22', 1414143554414059520, '2022-12-01 21:23:22', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599337250200440832, 'adminv3', NULL, '关于', '', NULL, b'0', 'simple-icons:about-dot-me', b'0', b'0', '', NULL, '/about/index', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 17:38:09', 1414143554414059520, '2022-12-04 17:43:32', 3, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599378494880436224, 'adminv3', 1582276516905177088, 'WS演示', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:03', 1414143554414059520, '2022-12-04 20:22:03', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599378579513102336, 'adminv3', 1582276516905177088, '幂等请求演示', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:23', 1414143554414059520, '2022-12-04 20:22:23', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599378728490586112, 'adminv3', 1582276516905177088, '消息中间件演示', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:59', 1414143554414059520, '2022-12-04 20:23:12', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599378838519762944, 'adminv3', 1582276516905177088, '富文本编辑', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:23:25', 1414143554414059520, '2022-12-04 20:23:25', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599378992811429888, 'adminv3', 1582276516905177088, '消息通知', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:02', 1414143554414059520, '2022-12-04 20:24:37', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599379197124366336, 'adminv3', 1582276516905177088, '支付演示', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/pay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:50', 1414143554414059520, '2022-12-04 20:24:50', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599379348144476160, 'adminv3', 1599379197124366336, '收银台', 'SimpleCashier', NULL, b'0', '', b'0', b'0', '/demo/payment/cashier/SimpleCashier.vue', NULL, '/demo/pay/cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:26', 1414143554414059520, '2022-12-05 21:28:10', 1, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599379428784164864, 'adminv3', 1599379197124366336, '组合支付', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/pay/combination', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:46', 1414143554414059520, '2022-12-04 20:25:46', 0, 0); - -INSERT INTO `iam_perm_menu` VALUES (1599379539232772096, 'adminv3', 1599379197124366336, '支付结算台演示', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:///cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:26:12', 1414143554414059520, '2022-12-04 20:26:34', 1, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'admin', `parent_id` = 1546850918849249280, `title` = '支付结算台演示', `name` = 'CashierDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = '/cashier', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'0', `target_outside` = b'1', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1399985191002447872, `create_time` = '2022-07-07 15:51:26', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-11-23 15:31:08', `version` = 4, `deleted` = 0 WHERE `id` = 1544952211901218816; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582275875424129024, `title` = '接口文档', `name` = 'ApiSwagger', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://127.0.0.1:9999/doc.html', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-20 20:35:02', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-23 13:59:09', `version` = 2, `deleted` = 0 WHERE `id` = 1583074308040925184; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582275875424129024, `title` = 'ELK日志', `name` = 'ELK', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '', `component_name` = NULL, `path` = 'http://elk.dev.bootx.cn:5601/app/discover', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-20 20:45:15', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-21 15:04:13', `version` = 2, `deleted` = 0 WHERE `id` = 1583076878956339200; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584379704122744832, `title` = '企微机器人', `name` = 'WeComRobotConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/third/wecom/robot/WecomRobotConfigList.vue', `component_name` = NULL, `path` = '/third/wecom/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:07:54', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-12 20:58:25', `version` = 3, `deleted` = 0 WHERE `id` = 1584381134950834176; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584380087805091840, `title` = '钉钉机器人', `name` = 'DingRobotConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/third/dingtalk/robot/DingRobotConfigList.vue', `component_name` = NULL, `path` = '/third/dingTalk/robot', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:08:38', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-12 20:58:37', `version` = 6, `deleted` = 0 WHERE `id` = 1584381322184564736; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584380087805091840, `title` = '钉钉配置', `name` = 'DingRobotConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'1', `hide_children_in_menu` = b'0', `component` = '/modules/third/dingtalk/config/DingTalkConfigList.vue', `component_name` = NULL, `path` = '/third/dingtalk/config', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:09:15', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-11 16:04:47', `version` = 1, `deleted` = 1 WHERE `id` = 1584381477986181120; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582274981055909888, `title` = '我的消息', `name` = 'SiteMessageListReceive', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/notice/site/receive/SiteMessageList.vue', `component_name` = NULL, `path` = '/person/siteMessage', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:10:44', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-17 09:08:02', `version` = 1, `deleted` = 0 WHERE `id` = 1584381848238366720; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582276184120709120, `title` = '储值卡', `name` = 'Voucher', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/payment/voucher/VoucherList.vue', `component_name` = NULL, `path` = '/payment/voucher', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:17:51', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-12-01 22:17:39', `version` = 1, `deleted` = 0 WHERE `id` = 1584383640942616576; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584382569381830656, `title` = '支付宝', `name` = 'AliPayConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/payment/channel/alipay/AlipayConfigList.vue', `component_name` = NULL, `path` = '/payment/channel/alipay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:18:43', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-22 15:20:37', `version` = 1, `deleted` = 0 WHERE `id` = 1584383859121922048; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584382569381830656, `title` = '微信支付', `name` = 'WeChatConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/payment/channel/wechat/WechatPayConfigList.vue', `component_name` = NULL, `path` = '/payment/channel/wechat', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:19:20', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-22 22:22:07', `version` = 1, `deleted` = 0 WHERE `id` = 1584384015338774528; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1584382569381830656, `title` = '云闪付', `name` = 'UnionPayConfigList', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/payment/channel/unionpay/UnionPayConfigList.vue', `component_name` = NULL, `path` = '/payment/channel/unionpay', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-10-24 11:19:55', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-11-22 22:27:32', `version` = 1, `deleted` = 0 WHERE `id` = 1584384160574939136; - -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file diff --git a/_config/sql/1.1.x/1.1.8/1.1.8_up_1.1.9.sql b/_config/sql/1.1.x/1.1.8/1.1.8_up_1.1.9.sql deleted file mode 100644 index 07159f279..000000000 --- a/_config/sql/1.1.x/1.1.8/1.1.8_up_1.1.9.sql +++ /dev/null @@ -1,9 +0,0 @@ -SET FOREIGN_KEY_CHECKS = 0; - -ALTER TABLE `base_dict` ADD COLUMN `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态' AFTER `name`; - -ALTER TABLE `base_dict_item` ADD COLUMN `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态' AFTER `name`; - -ALTER TABLE `base_param` ADD COLUMN `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态' AFTER `type`; - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/_config/sql/1.2.0/1.1.9_up_1.2.0.sql b/_config/sql/1.2.0/1.1.9_up_1.2.0.sql deleted file mode 100644 index 1639c2ced..000000000 --- a/_config/sql/1.2.0/1.1.9_up_1.2.0.sql +++ /dev/null @@ -1,7 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -ALTER TABLE `starter_audit_data_version` ADD COLUMN `table_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据表名称' AFTER `id`; -ALTER TABLE `starter_audit_data_version` ADD COLUMN `change_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据更新内容' AFTER `data_content`; -ALTER TABLE `starter_audit_data_version` MODIFY COLUMN `data_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据名称' AFTER `table_name`; - -SET FOREIGN_KEY_CHECKS=1; diff --git a/_config/sql/1.2.1/1.2.0_up_1.2.1.sql b/_config/sql/1.2.1/1.2.0_up_1.2.1.sql deleted file mode 100644 index 2b6b3b0e4..000000000 --- a/_config/sql/1.2.1/1.2.0_up_1.2.1.sql +++ /dev/null @@ -1,6783 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `base_area` ( - `code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '区域名称', - `city_code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '城市编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_city_code`(`city_code`) USING BTREE COMMENT '城市' -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '县区表' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `base_city` ( - `code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '城市编码', - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '城市名称', - `province_code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '省份编码', - PRIMARY KEY (`code`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '城市表' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `base_province` ( - `code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省份编码', - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '省份名称', - PRIMARY KEY (`code`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '省份表' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `base_street` ( - `code` char(9) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码', - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '街道名称', - `area_code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '县区编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_area_code`(`area_code`) USING BTREE COMMENT '县区' -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '街道表' ROW_FORMAT = DYNAMIC; - -CREATE TABLE `base_village` ( - `code` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '编码', - `name` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名称', - `street_code` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '社区/乡镇编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_street_code`(`street_code`) USING BTREE COMMENT '所属街道索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '村庄/社区' ROW_FORMAT = DYNAMIC; - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110101', '东城区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110102', '西城区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110105', '朝阳区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110106', '丰台区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110107', '石景山区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110108', '海淀区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110109', '门头沟区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110111', '房山区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110112', '通州区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110113', '顺义区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110114', '昌平区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110115', '大兴区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110116', '怀柔区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110117', '平谷区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110118', '密云区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('110119', '延庆区', '1101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120101', '和平区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120102', '河东区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120103', '河西区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120104', '南开区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120105', '河北区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120106', '红桥区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120110', '东丽区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120111', '西青区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120112', '津南区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120113', '北辰区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120114', '武清区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120115', '宝坻区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120116', '滨海新区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120117', '宁河区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120118', '静海区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('120119', '蓟州区', '1201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130102', '长安区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130104', '桥西区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130105', '新华区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130107', '井陉矿区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130108', '裕华区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130109', '藁城区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130110', '鹿泉区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130111', '栾城区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130121', '井陉县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130123', '正定县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130125', '行唐县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130126', '灵寿县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130127', '高邑县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130128', '深泽县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130129', '赞皇县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130130', '无极县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130131', '平山县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130132', '元氏县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130133', '赵县', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130171', '石家庄高新技术产业开发区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130172', '石家庄循环化工园区', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130181', '辛集市', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130183', '晋州市', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130184', '新乐市', '1301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130202', '路南区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130203', '路北区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130204', '古冶区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130205', '开平区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130207', '丰南区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130208', '丰润区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130209', '曹妃甸区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130224', '滦南县', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130225', '乐亭县', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130227', '迁西县', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130229', '玉田县', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130271', '河北唐山芦台经济开发区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130272', '唐山市汉沽管理区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130273', '唐山高新技术产业开发区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130274', '河北唐山海港经济开发区', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130281', '遵化市', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130283', '迁安市', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130284', '滦州市', '1302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130302', '海港区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130303', '山海关区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130304', '北戴河区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130306', '抚宁区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130321', '青龙满族自治县', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130322', '昌黎县', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130324', '卢龙县', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130371', '秦皇岛市经济技术开发区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130372', '北戴河新区', '1303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130402', '邯山区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130403', '丛台区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130404', '复兴区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130406', '峰峰矿区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130407', '肥乡区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130408', '永年区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130423', '临漳县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130424', '成安县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130425', '大名县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130426', '涉县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130427', '磁县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130430', '邱县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130431', '鸡泽县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130432', '广平县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130433', '馆陶县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130434', '魏县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130435', '曲周县', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130471', '邯郸经济技术开发区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130473', '邯郸冀南新区', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130481', '武安市', '1304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130502', '襄都区', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130503', '信都区', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130505', '任泽区', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130506', '南和区', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130522', '临城县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130523', '内丘县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130524', '柏乡县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130525', '隆尧县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130528', '宁晋县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130529', '巨鹿县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130530', '新河县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130531', '广宗县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130532', '平乡县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130533', '威县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130534', '清河县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130535', '临西县', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130571', '河北邢台经济开发区', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130581', '南宫市', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130582', '沙河市', '1305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130602', '竞秀区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130606', '莲池区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130607', '满城区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130608', '清苑区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130609', '徐水区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130623', '涞水县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130624', '阜平县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130626', '定兴县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130627', '唐县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130628', '高阳县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130629', '容城县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130630', '涞源县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130631', '望都县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130632', '安新县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130633', '易县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130634', '曲阳县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130635', '蠡县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130636', '顺平县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130637', '博野县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130638', '雄县', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130671', '保定高新技术产业开发区', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130672', '保定白沟新城', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130681', '涿州市', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130682', '定州市', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130683', '安国市', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130684', '高碑店市', '1306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130702', '桥东区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130703', '桥西区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130705', '宣化区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130706', '下花园区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130708', '万全区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130709', '崇礼区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130722', '张北县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130723', '康保县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130724', '沽源县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130725', '尚义县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130726', '蔚县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130727', '阳原县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130728', '怀安县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130730', '怀来县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130731', '涿鹿县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130732', '赤城县', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130771', '张家口经济开发区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130772', '张家口市察北管理区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130773', '张家口市塞北管理区', '1307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130802', '双桥区', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130803', '双滦区', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130804', '鹰手营子矿区', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130821', '承德县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130822', '兴隆县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130824', '滦平县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130825', '隆化县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130826', '丰宁满族自治县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130827', '宽城满族自治县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130828', '围场满族蒙古族自治县', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130871', '承德高新技术产业开发区', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130881', '平泉市', '1308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130902', '新华区', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130903', '运河区', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130921', '沧县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130922', '青县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130923', '东光县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130924', '海兴县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130925', '盐山县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130926', '肃宁县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130927', '南皮县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130928', '吴桥县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130929', '献县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130930', '孟村回族自治县', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130971', '河北沧州经济开发区', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130972', '沧州高新技术产业开发区', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130973', '沧州渤海新区', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130981', '泊头市', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130982', '任丘市', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130983', '黄骅市', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('130984', '河间市', '1309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131002', '安次区', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131003', '广阳区', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131022', '固安县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131023', '永清县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131024', '香河县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131025', '大城县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131026', '文安县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131028', '大厂回族自治县', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131071', '廊坊经济技术开发区', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131081', '霸州市', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131082', '三河市', '1310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131102', '桃城区', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131103', '冀州区', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131121', '枣强县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131122', '武邑县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131123', '武强县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131124', '饶阳县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131125', '安平县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131126', '故城县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131127', '景县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131128', '阜城县', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131171', '河北衡水高新技术产业开发区', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131172', '衡水滨湖新区', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('131182', '深州市', '1311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140105', '小店区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140106', '迎泽区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140107', '杏花岭区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140108', '尖草坪区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140109', '万柏林区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140110', '晋源区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140121', '清徐县', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140122', '阳曲县', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140123', '娄烦县', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140171', '山西转型综合改革示范区', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140181', '古交市', '1401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140212', '新荣区', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140213', '平城区', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140214', '云冈区', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140215', '云州区', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140221', '阳高县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140222', '天镇县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140223', '广灵县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140224', '灵丘县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140225', '浑源县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140226', '左云县', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140271', '山西大同经济开发区', '1402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140302', '城区', '1403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140303', '矿区', '1403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140311', '郊区', '1403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140321', '平定县', '1403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140322', '盂县', '1403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140403', '潞州区', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140404', '上党区', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140405', '屯留区', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140406', '潞城区', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140423', '襄垣县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140425', '平顺县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140426', '黎城县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140427', '壶关县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140428', '长子县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140429', '武乡县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140430', '沁县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140431', '沁源县', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140471', '山西长治高新技术产业园区', '1404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140502', '城区', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140521', '沁水县', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140522', '阳城县', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140524', '陵川县', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140525', '泽州县', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140581', '高平市', '1405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140602', '朔城区', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140603', '平鲁区', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140621', '山阴县', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140622', '应县', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140623', '右玉县', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140671', '山西朔州经济开发区', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140681', '怀仁市', '1406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140702', '榆次区', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140703', '太谷区', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140721', '榆社县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140722', '左权县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140723', '和顺县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140724', '昔阳县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140725', '寿阳县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140727', '祁县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140728', '平遥县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140729', '灵石县', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140781', '介休市', '1407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140802', '盐湖区', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140821', '临猗县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140822', '万荣县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140823', '闻喜县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140824', '稷山县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140825', '新绛县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140826', '绛县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140827', '垣曲县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140828', '夏县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140829', '平陆县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140830', '芮城县', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140881', '永济市', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140882', '河津市', '1408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140902', '忻府区', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140921', '定襄县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140922', '五台县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140923', '代县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140924', '繁峙县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140925', '宁武县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140926', '静乐县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140927', '神池县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140928', '五寨县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140929', '岢岚县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140930', '河曲县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140931', '保德县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140932', '偏关县', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140971', '五台山风景名胜区', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('140981', '原平市', '1409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141002', '尧都区', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141021', '曲沃县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141022', '翼城县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141023', '襄汾县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141024', '洪洞县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141025', '古县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141026', '安泽县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141027', '浮山县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141028', '吉县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141029', '乡宁县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141030', '大宁县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141031', '隰县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141032', '永和县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141033', '蒲县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141034', '汾西县', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141081', '侯马市', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141082', '霍州市', '1410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141102', '离石区', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141121', '文水县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141122', '交城县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141123', '兴县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141124', '临县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141125', '柳林县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141126', '石楼县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141127', '岚县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141128', '方山县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141129', '中阳县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141130', '交口县', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141181', '孝义市', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('141182', '汾阳市', '1411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150102', '新城区', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150103', '回民区', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150104', '玉泉区', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150105', '赛罕区', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150121', '土默特左旗', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150122', '托克托县', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150123', '和林格尔县', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150124', '清水河县', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150125', '武川县', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150172', '呼和浩特经济技术开发区', '1501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150202', '东河区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150203', '昆都仑区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150204', '青山区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150205', '石拐区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150206', '白云鄂博矿区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150207', '九原区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150221', '土默特右旗', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150222', '固阳县', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150223', '达尔罕茂明安联合旗', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150271', '包头稀土高新技术产业开发区', '1502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150302', '海勃湾区', '1503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150303', '海南区', '1503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150304', '乌达区', '1503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150402', '红山区', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150403', '元宝山区', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150404', '松山区', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150421', '阿鲁科尔沁旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150422', '巴林左旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150423', '巴林右旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150424', '林西县', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150425', '克什克腾旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150426', '翁牛特旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150428', '喀喇沁旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150429', '宁城县', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150430', '敖汉旗', '1504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150502', '科尔沁区', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150521', '科尔沁左翼中旗', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150522', '科尔沁左翼后旗', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150523', '开鲁县', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150524', '库伦旗', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150525', '奈曼旗', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150526', '扎鲁特旗', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150571', '通辽经济技术开发区', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150581', '霍林郭勒市', '1505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150602', '东胜区', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150603', '康巴什区', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150621', '达拉特旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150622', '准格尔旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150623', '鄂托克前旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150624', '鄂托克旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150625', '杭锦旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150626', '乌审旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150627', '伊金霍洛旗', '1506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150702', '海拉尔区', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150703', '扎赉诺尔区', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150721', '阿荣旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150722', '莫力达瓦达斡尔族自治旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150723', '鄂伦春自治旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150724', '鄂温克族自治旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150725', '陈巴尔虎旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150726', '新巴尔虎左旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150727', '新巴尔虎右旗', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150781', '满洲里市', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150782', '牙克石市', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150783', '扎兰屯市', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150784', '额尔古纳市', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150785', '根河市', '1507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150802', '临河区', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150821', '五原县', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150822', '磴口县', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150823', '乌拉特前旗', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150824', '乌拉特中旗', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150825', '乌拉特后旗', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150826', '杭锦后旗', '1508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150902', '集宁区', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150921', '卓资县', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150922', '化德县', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150923', '商都县', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150924', '兴和县', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150925', '凉城县', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150926', '察哈尔右翼前旗', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150927', '察哈尔右翼中旗', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150928', '察哈尔右翼后旗', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150929', '四子王旗', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('150981', '丰镇市', '1509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152201', '乌兰浩特市', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152202', '阿尔山市', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152221', '科尔沁右翼前旗', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152222', '科尔沁右翼中旗', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152223', '扎赉特旗', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152224', '突泉县', '1522'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152501', '二连浩特市', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152502', '锡林浩特市', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152522', '阿巴嘎旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152523', '苏尼特左旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152524', '苏尼特右旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152525', '东乌珠穆沁旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152526', '西乌珠穆沁旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152527', '太仆寺旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152528', '镶黄旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152529', '正镶白旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152530', '正蓝旗', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152531', '多伦县', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152571', '乌拉盖管委会', '1525'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152921', '阿拉善左旗', '1529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152922', '阿拉善右旗', '1529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152923', '额济纳旗', '1529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('152971', '内蒙古阿拉善高新技术产业开发区', '1529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210102', '和平区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210103', '沈河区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210104', '大东区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210105', '皇姑区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210106', '铁西区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210111', '苏家屯区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210112', '浑南区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210113', '沈北新区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210114', '于洪区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210115', '辽中区', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210123', '康平县', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210124', '法库县', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210181', '新民市', '2101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210202', '中山区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210203', '西岗区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210204', '沙河口区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210211', '甘井子区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210212', '旅顺口区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210213', '金州区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210214', '普兰店区', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210224', '长海县', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210281', '瓦房店市', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210283', '庄河市', '2102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210302', '铁东区', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210303', '铁西区', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210304', '立山区', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210311', '千山区', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210321', '台安县', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210323', '岫岩满族自治县', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210381', '海城市', '2103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210402', '新抚区', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210403', '东洲区', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210404', '望花区', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210411', '顺城区', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210421', '抚顺县', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210422', '新宾满族自治县', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210423', '清原满族自治县', '2104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210502', '平山区', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210503', '溪湖区', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210504', '明山区', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210505', '南芬区', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210521', '本溪满族自治县', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210522', '桓仁满族自治县', '2105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210602', '元宝区', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210603', '振兴区', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210604', '振安区', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210624', '宽甸满族自治县', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210681', '东港市', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210682', '凤城市', '2106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210702', '古塔区', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210703', '凌河区', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210711', '太和区', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210726', '黑山县', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210727', '义县', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210781', '凌海市', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210782', '北镇市', '2107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210802', '站前区', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210803', '西市区', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210804', '鲅鱼圈区', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210811', '老边区', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210881', '盖州市', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210882', '大石桥市', '2108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210902', '海州区', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210903', '新邱区', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210904', '太平区', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210905', '清河门区', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210911', '细河区', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210921', '阜新蒙古族自治县', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('210922', '彰武县', '2109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211002', '白塔区', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211003', '文圣区', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211004', '宏伟区', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211005', '弓长岭区', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211011', '太子河区', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211021', '辽阳县', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211081', '灯塔市', '2110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211102', '双台子区', '2111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211103', '兴隆台区', '2111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211104', '大洼区', '2111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211122', '盘山县', '2111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211202', '银州区', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211204', '清河区', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211221', '铁岭县', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211223', '西丰县', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211224', '昌图县', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211281', '调兵山市', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211282', '开原市', '2112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211302', '双塔区', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211303', '龙城区', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211321', '朝阳县', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211322', '建平县', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211324', '喀喇沁左翼蒙古族自治县', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211381', '北票市', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211382', '凌源市', '2113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211402', '连山区', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211403', '龙港区', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211404', '南票区', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211421', '绥中县', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211422', '建昌县', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('211481', '兴城市', '2114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220102', '南关区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220103', '宽城区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220104', '朝阳区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220105', '二道区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220106', '绿园区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220112', '双阳区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220113', '九台区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220122', '农安县', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220171', '长春经济技术开发区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220172', '长春净月高新技术产业开发区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220173', '长春高新技术产业开发区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220174', '长春汽车经济技术开发区', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220182', '榆树市', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220183', '德惠市', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220184', '公主岭市', '2201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220202', '昌邑区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220203', '龙潭区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220204', '船营区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220211', '丰满区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220221', '永吉县', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220271', '吉林经济开发区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220272', '吉林高新技术产业开发区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220273', '吉林中国新加坡食品区', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220281', '蛟河市', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220282', '桦甸市', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220283', '舒兰市', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220284', '磐石市', '2202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220302', '铁西区', '2203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220303', '铁东区', '2203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220322', '梨树县', '2203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220323', '伊通满族自治县', '2203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220382', '双辽市', '2203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220402', '龙山区', '2204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220403', '西安区', '2204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220421', '东丰县', '2204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220422', '东辽县', '2204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220502', '东昌区', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220503', '二道江区', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220521', '通化县', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220523', '辉南县', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220524', '柳河县', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220581', '梅河口市', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220582', '集安市', '2205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220602', '浑江区', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220605', '江源区', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220621', '抚松县', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220622', '靖宇县', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220623', '长白朝鲜族自治县', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220681', '临江市', '2206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220702', '宁江区', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220721', '前郭尔罗斯蒙古族自治县', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220722', '长岭县', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220723', '乾安县', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220771', '吉林松原经济开发区', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220781', '扶余市', '2207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220802', '洮北区', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220821', '镇赉县', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220822', '通榆县', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220871', '吉林白城经济开发区', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220881', '洮南市', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('220882', '大安市', '2208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222401', '延吉市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222402', '图们市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222403', '敦化市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222404', '珲春市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222405', '龙井市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222406', '和龙市', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222424', '汪清县', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('222426', '安图县', '2224'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230102', '道里区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230103', '南岗区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230104', '道外区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230108', '平房区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230109', '松北区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230110', '香坊区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230111', '呼兰区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230112', '阿城区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230113', '双城区', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230123', '依兰县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230124', '方正县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230125', '宾县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230126', '巴彦县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230127', '木兰县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230128', '通河县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230129', '延寿县', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230183', '尚志市', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230184', '五常市', '2301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230202', '龙沙区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230203', '建华区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230204', '铁锋区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230205', '昂昂溪区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230206', '富拉尔基区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230207', '碾子山区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230208', '梅里斯达斡尔族区', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230221', '龙江县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230223', '依安县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230224', '泰来县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230225', '甘南县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230227', '富裕县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230229', '克山县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230230', '克东县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230231', '拜泉县', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230281', '讷河市', '2302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230302', '鸡冠区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230303', '恒山区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230304', '滴道区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230305', '梨树区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230306', '城子河区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230307', '麻山区', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230321', '鸡东县', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230381', '虎林市', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230382', '密山市', '2303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230402', '向阳区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230403', '工农区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230404', '南山区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230405', '兴安区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230406', '东山区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230407', '兴山区', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230421', '萝北县', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230422', '绥滨县', '2304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230502', '尖山区', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230503', '岭东区', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230505', '四方台区', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230506', '宝山区', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230521', '集贤县', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230522', '友谊县', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230523', '宝清县', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230524', '饶河县', '2305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230602', '萨尔图区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230603', '龙凤区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230604', '让胡路区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230605', '红岗区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230606', '大同区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230621', '肇州县', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230622', '肇源县', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230623', '林甸县', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230624', '杜尔伯特蒙古族自治县', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230671', '大庆高新技术产业开发区', '2306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230717', '伊美区', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230718', '乌翠区', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230719', '友好区', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230722', '嘉荫县', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230723', '汤旺县', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230724', '丰林县', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230725', '大箐山县', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230726', '南岔县', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230751', '金林区', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230781', '铁力市', '2307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230803', '向阳区', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230804', '前进区', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230805', '东风区', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230811', '郊区', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230822', '桦南县', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230826', '桦川县', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230828', '汤原县', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230881', '同江市', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230882', '富锦市', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230883', '抚远市', '2308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230902', '新兴区', '2309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230903', '桃山区', '2309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230904', '茄子河区', '2309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('230921', '勃利县', '2309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231002', '东安区', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231003', '阳明区', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231004', '爱民区', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231005', '西安区', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231025', '林口县', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231071', '牡丹江经济技术开发区', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231081', '绥芬河市', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231083', '海林市', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231084', '宁安市', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231085', '穆棱市', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231086', '东宁市', '2310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231102', '爱辉区', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231123', '逊克县', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231124', '孙吴县', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231181', '北安市', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231182', '五大连池市', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231183', '嫩江市', '2311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231202', '北林区', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231221', '望奎县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231222', '兰西县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231223', '青冈县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231224', '庆安县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231225', '明水县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231226', '绥棱县', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231281', '安达市', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231282', '肇东市', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('231283', '海伦市', '2312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232701', '漠河市', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232721', '呼玛县', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232722', '塔河县', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232761', '加格达奇区', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232762', '松岭区', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232763', '新林区', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('232764', '呼中区', '2327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310101', '黄浦区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310104', '徐汇区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310105', '长宁区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310106', '静安区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310107', '普陀区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310109', '虹口区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310110', '杨浦区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310112', '闵行区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310113', '宝山区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310114', '嘉定区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310115', '浦东新区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310116', '金山区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310117', '松江区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310118', '青浦区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310120', '奉贤区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('310151', '崇明区', '3101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320102', '玄武区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320104', '秦淮区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320105', '建邺区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320106', '鼓楼区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320111', '浦口区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320113', '栖霞区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320114', '雨花台区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320115', '江宁区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320116', '六合区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320117', '溧水区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320118', '高淳区', '3201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320205', '锡山区', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320206', '惠山区', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320211', '滨湖区', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320213', '梁溪区', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320214', '新吴区', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320281', '江阴市', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320282', '宜兴市', '3202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320302', '鼓楼区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320303', '云龙区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320305', '贾汪区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320311', '泉山区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320312', '铜山区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320321', '丰县', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320322', '沛县', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320324', '睢宁县', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320371', '徐州经济技术开发区', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320381', '新沂市', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320382', '邳州市', '3203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320402', '天宁区', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320404', '钟楼区', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320411', '新北区', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320412', '武进区', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320413', '金坛区', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320481', '溧阳市', '3204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320505', '虎丘区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320506', '吴中区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320507', '相城区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320508', '姑苏区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320509', '吴江区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320571', '苏州工业园区', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320581', '常熟市', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320582', '张家港市', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320583', '昆山市', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320585', '太仓市', '3205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320612', '通州区', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320613', '崇川区', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320614', '海门区', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320623', '如东县', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320671', '南通经济技术开发区', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320681', '启东市', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320682', '如皋市', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320685', '海安市', '3206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320703', '连云区', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320706', '海州区', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320707', '赣榆区', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320722', '东海县', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320723', '灌云县', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320724', '灌南县', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320771', '连云港经济技术开发区', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320772', '连云港高新技术产业开发区', '3207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320803', '淮安区', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320804', '淮阴区', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320812', '清江浦区', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320813', '洪泽区', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320826', '涟水县', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320830', '盱眙县', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320831', '金湖县', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320871', '淮安经济技术开发区', '3208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320902', '亭湖区', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320903', '盐都区', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320904', '大丰区', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320921', '响水县', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320922', '滨海县', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320923', '阜宁县', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320924', '射阳县', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320925', '建湖县', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320971', '盐城经济技术开发区', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('320981', '东台市', '3209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321002', '广陵区', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321003', '邗江区', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321012', '江都区', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321023', '宝应县', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321071', '扬州经济技术开发区', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321081', '仪征市', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321084', '高邮市', '3210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321102', '京口区', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321111', '润州区', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321112', '丹徒区', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321171', '镇江新区', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321181', '丹阳市', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321182', '扬中市', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321183', '句容市', '3211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321202', '海陵区', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321203', '高港区', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321204', '姜堰区', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321271', '泰州医药高新技术产业开发区', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321281', '兴化市', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321282', '靖江市', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321283', '泰兴市', '3212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321302', '宿城区', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321311', '宿豫区', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321322', '沭阳县', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321323', '泗阳县', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321324', '泗洪县', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('321371', '宿迁经济技术开发区', '3213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330102', '上城区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330105', '拱墅区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330106', '西湖区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330108', '滨江区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330109', '萧山区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330110', '余杭区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330111', '富阳区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330112', '临安区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330113', '临平区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330114', '钱塘区', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330122', '桐庐县', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330127', '淳安县', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330182', '建德市', '3301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330203', '海曙区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330205', '江北区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330206', '北仑区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330211', '镇海区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330212', '鄞州区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330213', '奉化区', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330225', '象山县', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330226', '宁海县', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330281', '余姚市', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330282', '慈溪市', '3302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330302', '鹿城区', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330303', '龙湾区', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330304', '瓯海区', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330305', '洞头区', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330324', '永嘉县', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330326', '平阳县', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330327', '苍南县', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330328', '文成县', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330329', '泰顺县', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330381', '瑞安市', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330382', '乐清市', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330383', '龙港市', '3303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330402', '南湖区', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330411', '秀洲区', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330421', '嘉善县', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330424', '海盐县', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330481', '海宁市', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330482', '平湖市', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330483', '桐乡市', '3304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330502', '吴兴区', '3305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330503', '南浔区', '3305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330521', '德清县', '3305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330522', '长兴县', '3305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330523', '安吉县', '3305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330602', '越城区', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330603', '柯桥区', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330604', '上虞区', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330624', '新昌县', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330681', '诸暨市', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330683', '嵊州市', '3306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330702', '婺城区', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330703', '金东区', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330723', '武义县', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330726', '浦江县', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330727', '磐安县', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330781', '兰溪市', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330782', '义乌市', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330783', '东阳市', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330784', '永康市', '3307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330802', '柯城区', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330803', '衢江区', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330822', '常山县', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330824', '开化县', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330825', '龙游县', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330881', '江山市', '3308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330902', '定海区', '3309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330903', '普陀区', '3309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330921', '岱山县', '3309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('330922', '嵊泗县', '3309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331002', '椒江区', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331003', '黄岩区', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331004', '路桥区', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331022', '三门县', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331023', '天台县', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331024', '仙居县', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331081', '温岭市', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331082', '临海市', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331083', '玉环市', '3310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331102', '莲都区', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331121', '青田县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331122', '缙云县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331123', '遂昌县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331124', '松阳县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331125', '云和县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331126', '庆元县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331127', '景宁畲族自治县', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('331181', '龙泉市', '3311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340102', '瑶海区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340103', '庐阳区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340104', '蜀山区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340111', '包河区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340121', '长丰县', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340122', '肥东县', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340123', '肥西县', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340124', '庐江县', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340171', '合肥高新技术产业开发区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340172', '合肥经济技术开发区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340173', '合肥新站高新技术产业开发区', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340181', '巢湖市', '3401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340202', '镜湖区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340207', '鸠江区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340209', '弋江区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340210', '湾沚区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340212', '繁昌区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340223', '南陵县', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340271', '芜湖经济技术开发区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340272', '安徽芜湖三山经济开发区', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340281', '无为市', '3402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340302', '龙子湖区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340303', '蚌山区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340304', '禹会区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340311', '淮上区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340321', '怀远县', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340322', '五河县', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340323', '固镇县', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340371', '蚌埠市高新技术开发区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340372', '蚌埠市经济开发区', '3403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340402', '大通区', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340403', '田家庵区', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340404', '谢家集区', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340405', '八公山区', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340406', '潘集区', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340421', '凤台县', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340422', '寿县', '3404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340503', '花山区', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340504', '雨山区', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340506', '博望区', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340521', '当涂县', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340522', '含山县', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340523', '和县', '3405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340602', '杜集区', '3406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340603', '相山区', '3406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340604', '烈山区', '3406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340621', '濉溪县', '3406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340705', '铜官区', '3407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340706', '义安区', '3407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340711', '郊区', '3407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340722', '枞阳县', '3407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340802', '迎江区', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340803', '大观区', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340811', '宜秀区', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340822', '怀宁县', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340825', '太湖县', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340826', '宿松县', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340827', '望江县', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340828', '岳西县', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340871', '安徽安庆经济开发区', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340881', '桐城市', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('340882', '潜山市', '3408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341002', '屯溪区', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341003', '黄山区', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341004', '徽州区', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341021', '歙县', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341022', '休宁县', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341023', '黟县', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341024', '祁门县', '3410'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341102', '琅琊区', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341103', '南谯区', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341122', '来安县', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341124', '全椒县', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341125', '定远县', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341126', '凤阳县', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341171', '中新苏滁高新技术产业开发区', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341172', '滁州经济技术开发区', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341181', '天长市', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341182', '明光市', '3411'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341202', '颍州区', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341203', '颍东区', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341204', '颍泉区', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341221', '临泉县', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341222', '太和县', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341225', '阜南县', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341226', '颍上县', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341271', '阜阳合肥现代产业园区', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341272', '阜阳经济技术开发区', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341282', '界首市', '3412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341302', '埇桥区', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341321', '砀山县', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341322', '萧县', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341323', '灵璧县', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341324', '泗县', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341371', '宿州马鞍山现代产业园区', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341372', '宿州经济技术开发区', '3413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341502', '金安区', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341503', '裕安区', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341504', '叶集区', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341522', '霍邱县', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341523', '舒城县', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341524', '金寨县', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341525', '霍山县', '3415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341602', '谯城区', '3416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341621', '涡阳县', '3416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341622', '蒙城县', '3416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341623', '利辛县', '3416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341702', '贵池区', '3417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341721', '东至县', '3417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341722', '石台县', '3417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341723', '青阳县', '3417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341802', '宣州区', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341821', '郎溪县', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341823', '泾县', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341824', '绩溪县', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341825', '旌德县', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341871', '宣城市经济开发区', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341881', '宁国市', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('341882', '广德市', '3418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350102', '鼓楼区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350103', '台江区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350104', '仓山区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350105', '马尾区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350111', '晋安区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350112', '长乐区', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350121', '闽侯县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350122', '连江县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350123', '罗源县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350124', '闽清县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350125', '永泰县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350128', '平潭县', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350181', '福清市', '3501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350203', '思明区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350205', '海沧区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350206', '湖里区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350211', '集美区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350212', '同安区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350213', '翔安区', '3502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350302', '城厢区', '3503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350303', '涵江区', '3503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350304', '荔城区', '3503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350305', '秀屿区', '3503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350322', '仙游县', '3503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350404', '三元区', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350405', '沙县区', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350421', '明溪县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350423', '清流县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350424', '宁化县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350425', '大田县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350426', '尤溪县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350428', '将乐县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350429', '泰宁县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350430', '建宁县', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350481', '永安市', '3504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350502', '鲤城区', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350503', '丰泽区', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350504', '洛江区', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350505', '泉港区', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350521', '惠安县', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350524', '安溪县', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350525', '永春县', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350526', '德化县', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350527', '金门县', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350581', '石狮市', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350582', '晋江市', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350583', '南安市', '3505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350602', '芗城区', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350603', '龙文区', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350604', '龙海区', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350605', '长泰区', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350622', '云霄县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350623', '漳浦县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350624', '诏安县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350626', '东山县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350627', '南靖县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350628', '平和县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350629', '华安县', '3506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350702', '延平区', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350703', '建阳区', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350721', '顺昌县', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350722', '浦城县', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350723', '光泽县', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350724', '松溪县', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350725', '政和县', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350781', '邵武市', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350782', '武夷山市', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350783', '建瓯市', '3507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350802', '新罗区', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350803', '永定区', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350821', '长汀县', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350823', '上杭县', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350824', '武平县', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350825', '连城县', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350881', '漳平市', '3508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350902', '蕉城区', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350921', '霞浦县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350922', '古田县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350923', '屏南县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350924', '寿宁县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350925', '周宁县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350926', '柘荣县', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350981', '福安市', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('350982', '福鼎市', '3509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360102', '东湖区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360103', '西湖区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360104', '青云谱区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360111', '青山湖区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360112', '新建区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360113', '红谷滩区', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360121', '南昌县', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360123', '安义县', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360124', '进贤县', '3601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360202', '昌江区', '3602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360203', '珠山区', '3602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360222', '浮梁县', '3602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360281', '乐平市', '3602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360302', '安源区', '3603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360313', '湘东区', '3603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360321', '莲花县', '3603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360322', '上栗县', '3603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360323', '芦溪县', '3603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360402', '濂溪区', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360403', '浔阳区', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360404', '柴桑区', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360423', '武宁县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360424', '修水县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360425', '永修县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360426', '德安县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360428', '都昌县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360429', '湖口县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360430', '彭泽县', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360481', '瑞昌市', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360482', '共青城市', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360483', '庐山市', '3604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360502', '渝水区', '3605'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360521', '分宜县', '3605'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360602', '月湖区', '3606'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360603', '余江区', '3606'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360681', '贵溪市', '3606'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360702', '章贡区', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360703', '南康区', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360704', '赣县区', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360722', '信丰县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360723', '大余县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360724', '上犹县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360725', '崇义县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360726', '安远县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360728', '定南县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360729', '全南县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360730', '宁都县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360731', '于都县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360732', '兴国县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360733', '会昌县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360734', '寻乌县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360735', '石城县', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360781', '瑞金市', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360783', '龙南市', '3607'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360802', '吉州区', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360803', '青原区', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360821', '吉安县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360822', '吉水县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360823', '峡江县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360824', '新干县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360825', '永丰县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360826', '泰和县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360827', '遂川县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360828', '万安县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360829', '安福县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360830', '永新县', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360881', '井冈山市', '3608'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360902', '袁州区', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360921', '奉新县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360922', '万载县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360923', '上高县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360924', '宜丰县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360925', '靖安县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360926', '铜鼓县', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360981', '丰城市', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360982', '樟树市', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('360983', '高安市', '3609'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361002', '临川区', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361003', '东乡区', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361021', '南城县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361022', '黎川县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361023', '南丰县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361024', '崇仁县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361025', '乐安县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361026', '宜黄县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361027', '金溪县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361028', '资溪县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361030', '广昌县', '3610'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361102', '信州区', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361103', '广丰区', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361104', '广信区', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361123', '玉山县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361124', '铅山县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361125', '横峰县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361126', '弋阳县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361127', '余干县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361128', '鄱阳县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361129', '万年县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361130', '婺源县', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('361181', '德兴市', '3611'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370102', '历下区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370103', '市中区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370104', '槐荫区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370105', '天桥区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370112', '历城区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370113', '长清区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370114', '章丘区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370115', '济阳区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370116', '莱芜区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370117', '钢城区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370124', '平阴县', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370126', '商河县', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370171', '济南高新技术产业开发区', '3701'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370202', '市南区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370203', '市北区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370211', '黄岛区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370212', '崂山区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370213', '李沧区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370214', '城阳区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370215', '即墨区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370271', '青岛高新技术产业开发区', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370281', '胶州市', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370283', '平度市', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370285', '莱西市', '3702'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370302', '淄川区', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370303', '张店区', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370304', '博山区', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370305', '临淄区', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370306', '周村区', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370321', '桓台县', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370322', '高青县', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370323', '沂源县', '3703'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370402', '市中区', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370403', '薛城区', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370404', '峄城区', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370405', '台儿庄区', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370406', '山亭区', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370481', '滕州市', '3704'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370502', '东营区', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370503', '河口区', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370505', '垦利区', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370522', '利津县', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370523', '广饶县', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370571', '东营经济技术开发区', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370572', '东营港经济开发区', '3705'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370602', '芝罘区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370611', '福山区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370612', '牟平区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370613', '莱山区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370614', '蓬莱区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370671', '烟台高新技术产业开发区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370672', '烟台经济技术开发区', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370681', '龙口市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370682', '莱阳市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370683', '莱州市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370685', '招远市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370686', '栖霞市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370687', '海阳市', '3706'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370702', '潍城区', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370703', '寒亭区', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370704', '坊子区', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370705', '奎文区', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370724', '临朐县', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370725', '昌乐县', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370772', '潍坊滨海经济技术开发区', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370781', '青州市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370782', '诸城市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370783', '寿光市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370784', '安丘市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370785', '高密市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370786', '昌邑市', '3707'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370811', '任城区', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370812', '兖州区', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370826', '微山县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370827', '鱼台县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370828', '金乡县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370829', '嘉祥县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370830', '汶上县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370831', '泗水县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370832', '梁山县', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370871', '济宁高新技术产业开发区', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370881', '曲阜市', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370883', '邹城市', '3708'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370902', '泰山区', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370911', '岱岳区', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370921', '宁阳县', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370923', '东平县', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370982', '新泰市', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('370983', '肥城市', '3709'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371002', '环翠区', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371003', '文登区', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371071', '威海火炬高技术产业开发区', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371072', '威海经济技术开发区', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371073', '威海临港经济技术开发区', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371082', '荣成市', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371083', '乳山市', '3710'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371102', '东港区', '3711'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371103', '岚山区', '3711'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371121', '五莲县', '3711'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371122', '莒县', '3711'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371171', '日照经济技术开发区', '3711'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371302', '兰山区', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371311', '罗庄区', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371312', '河东区', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371321', '沂南县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371322', '郯城县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371323', '沂水县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371324', '兰陵县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371325', '费县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371326', '平邑县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371327', '莒南县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371328', '蒙阴县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371329', '临沭县', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371371', '临沂高新技术产业开发区', '3713'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371402', '德城区', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371403', '陵城区', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371422', '宁津县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371423', '庆云县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371424', '临邑县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371425', '齐河县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371426', '平原县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371427', '夏津县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371428', '武城县', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371471', '德州天衢新区', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371481', '乐陵市', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371482', '禹城市', '3714'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371502', '东昌府区', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371503', '茌平区', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371521', '阳谷县', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371522', '莘县', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371524', '东阿县', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371525', '冠县', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371526', '高唐县', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371581', '临清市', '3715'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371602', '滨城区', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371603', '沾化区', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371621', '惠民县', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371622', '阳信县', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371623', '无棣县', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371625', '博兴县', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371681', '邹平市', '3716'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371702', '牡丹区', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371703', '定陶区', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371721', '曹县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371722', '单县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371723', '成武县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371724', '巨野县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371725', '郓城县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371726', '鄄城县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371728', '东明县', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371771', '菏泽经济技术开发区', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('371772', '菏泽高新技术开发区', '3717'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410102', '中原区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410103', '二七区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410104', '管城回族区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410105', '金水区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410106', '上街区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410108', '惠济区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410122', '中牟县', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410171', '郑州经济技术开发区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410172', '郑州高新技术产业开发区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410173', '郑州航空港经济综合实验区', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410181', '巩义市', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410182', '荥阳市', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410183', '新密市', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410184', '新郑市', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410185', '登封市', '4101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410202', '龙亭区', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410203', '顺河回族区', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410204', '鼓楼区', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410205', '禹王台区', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410212', '祥符区', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410221', '杞县', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410222', '通许县', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410223', '尉氏县', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410225', '兰考县', '4102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410302', '老城区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410303', '西工区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410304', '瀍河回族区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410305', '涧西区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410307', '偃师区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410308', '孟津区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410311', '洛龙区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410323', '新安县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410324', '栾川县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410325', '嵩县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410326', '汝阳县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410327', '宜阳县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410328', '洛宁县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410329', '伊川县', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410371', '洛阳高新技术产业开发区', '4103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410402', '新华区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410403', '卫东区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410404', '石龙区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410411', '湛河区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410421', '宝丰县', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410422', '叶县', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410423', '鲁山县', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410425', '郏县', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410471', '平顶山高新技术产业开发区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410472', '平顶山市城乡一体化示范区', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410481', '舞钢市', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410482', '汝州市', '4104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410502', '文峰区', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410503', '北关区', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410505', '殷都区', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410506', '龙安区', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410522', '安阳县', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410523', '汤阴县', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410526', '滑县', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410527', '内黄县', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410571', '安阳高新技术产业开发区', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410581', '林州市', '4105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410602', '鹤山区', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410603', '山城区', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410611', '淇滨区', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410621', '浚县', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410622', '淇县', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410671', '鹤壁经济技术开发区', '4106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410702', '红旗区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410703', '卫滨区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410704', '凤泉区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410711', '牧野区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410721', '新乡县', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410724', '获嘉县', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410725', '原阳县', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410726', '延津县', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410727', '封丘县', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410771', '新乡高新技术产业开发区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410772', '新乡经济技术开发区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410773', '新乡市平原城乡一体化示范区', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410781', '卫辉市', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410782', '辉县市', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410783', '长垣市', '4107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410802', '解放区', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410803', '中站区', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410804', '马村区', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410811', '山阳区', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410821', '修武县', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410822', '博爱县', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410823', '武陟县', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410825', '温县', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410871', '焦作城乡一体化示范区', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410882', '沁阳市', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410883', '孟州市', '4108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410902', '华龙区', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410922', '清丰县', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410923', '南乐县', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410926', '范县', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410927', '台前县', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410928', '濮阳县', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410971', '河南濮阳工业园区', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('410972', '濮阳经济技术开发区', '4109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411002', '魏都区', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411003', '建安区', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411024', '鄢陵县', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411025', '襄城县', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411071', '许昌经济技术开发区', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411081', '禹州市', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411082', '长葛市', '4110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411102', '源汇区', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411103', '郾城区', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411104', '召陵区', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411121', '舞阳县', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411122', '临颍县', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411171', '漯河经济技术开发区', '4111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411202', '湖滨区', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411203', '陕州区', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411221', '渑池县', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411224', '卢氏县', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411271', '河南三门峡经济开发区', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411281', '义马市', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411282', '灵宝市', '4112'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411302', '宛城区', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411303', '卧龙区', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411321', '南召县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411322', '方城县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411323', '西峡县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411324', '镇平县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411325', '内乡县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411326', '淅川县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411327', '社旗县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411328', '唐河县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411329', '新野县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411330', '桐柏县', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411371', '南阳高新技术产业开发区', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411372', '南阳市城乡一体化示范区', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411381', '邓州市', '4113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411402', '梁园区', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411403', '睢阳区', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411421', '民权县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411422', '睢县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411423', '宁陵县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411424', '柘城县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411425', '虞城县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411426', '夏邑县', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411471', '豫东综合物流产业聚集区', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411472', '河南商丘经济开发区', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411481', '永城市', '4114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411502', '浉河区', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411503', '平桥区', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411521', '罗山县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411522', '光山县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411523', '新县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411524', '商城县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411525', '固始县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411526', '潢川县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411527', '淮滨县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411528', '息县', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411571', '信阳高新技术产业开发区', '4115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411602', '川汇区', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411603', '淮阳区', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411621', '扶沟县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411622', '西华县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411623', '商水县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411624', '沈丘县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411625', '郸城县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411627', '太康县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411628', '鹿邑县', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411671', '河南周口经济开发区', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411681', '项城市', '4116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411702', '驿城区', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411721', '西平县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411722', '上蔡县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411723', '平舆县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411724', '正阳县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411725', '确山县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411726', '泌阳县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411727', '汝南县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411728', '遂平县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411729', '新蔡县', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('411771', '河南驻马店经济开发区', '4117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('419001', '济源市', '4190'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420102', '江岸区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420103', '江汉区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420104', '硚口区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420105', '汉阳区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420106', '武昌区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420107', '青山区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420111', '洪山区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420112', '东西湖区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420113', '汉南区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420114', '蔡甸区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420115', '江夏区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420116', '黄陂区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420117', '新洲区', '4201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420202', '黄石港区', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420203', '西塞山区', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420204', '下陆区', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420205', '铁山区', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420222', '阳新县', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420281', '大冶市', '4202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420302', '茅箭区', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420303', '张湾区', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420304', '郧阳区', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420322', '郧西县', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420323', '竹山县', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420324', '竹溪县', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420325', '房县', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420381', '丹江口市', '4203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420502', '西陵区', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420503', '伍家岗区', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420504', '点军区', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420505', '猇亭区', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420506', '夷陵区', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420525', '远安县', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420526', '兴山县', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420527', '秭归县', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420528', '长阳土家族自治县', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420529', '五峰土家族自治县', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420581', '宜都市', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420582', '当阳市', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420583', '枝江市', '4205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420602', '襄城区', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420606', '樊城区', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420607', '襄州区', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420624', '南漳县', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420625', '谷城县', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420626', '保康县', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420682', '老河口市', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420683', '枣阳市', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420684', '宜城市', '4206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420702', '梁子湖区', '4207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420703', '华容区', '4207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420704', '鄂城区', '4207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420802', '东宝区', '4208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420804', '掇刀区', '4208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420822', '沙洋县', '4208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420881', '钟祥市', '4208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420882', '京山市', '4208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420902', '孝南区', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420921', '孝昌县', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420922', '大悟县', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420923', '云梦县', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420981', '应城市', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420982', '安陆市', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('420984', '汉川市', '4209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421002', '沙市区', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421003', '荆州区', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421022', '公安县', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421024', '江陵县', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421071', '荆州经济技术开发区', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421081', '石首市', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421083', '洪湖市', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421087', '松滋市', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421088', '监利市', '4210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421102', '黄州区', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421121', '团风县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421122', '红安县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421123', '罗田县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421124', '英山县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421125', '浠水县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421126', '蕲春县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421127', '黄梅县', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421171', '龙感湖管理区', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421181', '麻城市', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421182', '武穴市', '4211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421202', '咸安区', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421221', '嘉鱼县', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421222', '通城县', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421223', '崇阳县', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421224', '通山县', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421281', '赤壁市', '4212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421303', '曾都区', '4213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421321', '随县', '4213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('421381', '广水市', '4213'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422801', '恩施市', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422802', '利川市', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422822', '建始县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422823', '巴东县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422825', '宣恩县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422826', '咸丰县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422827', '来凤县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('422828', '鹤峰县', '4228'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('429004', '仙桃市', '4290'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('429005', '潜江市', '4290'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('429006', '天门市', '4290'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('429021', '神农架林区', '4290'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430102', '芙蓉区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430103', '天心区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430104', '岳麓区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430105', '开福区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430111', '雨花区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430112', '望城区', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430121', '长沙县', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430181', '浏阳市', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430182', '宁乡市', '4301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430202', '荷塘区', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430203', '芦淞区', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430204', '石峰区', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430211', '天元区', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430212', '渌口区', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430223', '攸县', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430224', '茶陵县', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430225', '炎陵县', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430281', '醴陵市', '4302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430302', '雨湖区', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430304', '岳塘区', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430321', '湘潭县', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430371', '湖南湘潭高新技术产业园区', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430372', '湘潭昭山示范区', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430373', '湘潭九华示范区', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430381', '湘乡市', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430382', '韶山市', '4303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430405', '珠晖区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430406', '雁峰区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430407', '石鼓区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430408', '蒸湘区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430412', '南岳区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430421', '衡阳县', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430422', '衡南县', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430423', '衡山县', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430424', '衡东县', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430426', '祁东县', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430471', '衡阳综合保税区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430472', '湖南衡阳高新技术产业园区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430473', '湖南衡阳松木经济开发区', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430481', '耒阳市', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430482', '常宁市', '4304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430502', '双清区', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430503', '大祥区', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430511', '北塔区', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430522', '新邵县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430523', '邵阳县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430524', '隆回县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430525', '洞口县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430527', '绥宁县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430528', '新宁县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430529', '城步苗族自治县', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430581', '武冈市', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430582', '邵东市', '4305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430602', '岳阳楼区', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430603', '云溪区', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430611', '君山区', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430621', '岳阳县', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430623', '华容县', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430624', '湘阴县', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430626', '平江县', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430671', '岳阳市屈原管理区', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430681', '汨罗市', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430682', '临湘市', '4306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430702', '武陵区', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430703', '鼎城区', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430721', '安乡县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430722', '汉寿县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430723', '澧县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430724', '临澧县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430725', '桃源县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430726', '石门县', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430771', '常德市西洞庭管理区', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430781', '津市市', '4307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430802', '永定区', '4308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430811', '武陵源区', '4308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430821', '慈利县', '4308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430822', '桑植县', '4308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430902', '资阳区', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430903', '赫山区', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430921', '南县', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430922', '桃江县', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430923', '安化县', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430971', '益阳市大通湖管理区', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430972', '湖南益阳高新技术产业园区', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('430981', '沅江市', '4309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431002', '北湖区', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431003', '苏仙区', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431021', '桂阳县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431022', '宜章县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431023', '永兴县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431024', '嘉禾县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431025', '临武县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431026', '汝城县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431027', '桂东县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431028', '安仁县', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431081', '资兴市', '4310'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431102', '零陵区', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431103', '冷水滩区', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431122', '东安县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431123', '双牌县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431124', '道县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431125', '江永县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431126', '宁远县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431127', '蓝山县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431128', '新田县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431129', '江华瑶族自治县', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431171', '永州经济技术开发区', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431173', '永州市回龙圩管理区', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431181', '祁阳市', '4311'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431202', '鹤城区', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431221', '中方县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431222', '沅陵县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431223', '辰溪县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431224', '溆浦县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431225', '会同县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431226', '麻阳苗族自治县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431227', '新晃侗族自治县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431228', '芷江侗族自治县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431229', '靖州苗族侗族自治县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431230', '通道侗族自治县', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431271', '怀化市洪江管理区', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431281', '洪江市', '4312'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431302', '娄星区', '4313'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431321', '双峰县', '4313'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431322', '新化县', '4313'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431381', '冷水江市', '4313'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('431382', '涟源市', '4313'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433101', '吉首市', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433122', '泸溪县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433123', '凤凰县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433124', '花垣县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433125', '保靖县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433126', '古丈县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433127', '永顺县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('433130', '龙山县', '4331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440103', '荔湾区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440104', '越秀区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440105', '海珠区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440106', '天河区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440111', '白云区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440112', '黄埔区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440113', '番禺区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440114', '花都区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440115', '南沙区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440117', '从化区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440118', '增城区', '4401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440203', '武江区', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440204', '浈江区', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440205', '曲江区', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440222', '始兴县', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440224', '仁化县', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440229', '翁源县', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440232', '乳源瑶族自治县', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440233', '新丰县', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440281', '乐昌市', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440282', '南雄市', '4402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440303', '罗湖区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440304', '福田区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440305', '南山区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440306', '宝安区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440307', '龙岗区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440308', '盐田区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440309', '龙华区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440310', '坪山区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440311', '光明区', '4403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440402', '香洲区', '4404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440403', '斗门区', '4404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440404', '金湾区', '4404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440507', '龙湖区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440511', '金平区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440512', '濠江区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440513', '潮阳区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440514', '潮南区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440515', '澄海区', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440523', '南澳县', '4405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440604', '禅城区', '4406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440605', '南海区', '4406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440606', '顺德区', '4406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440607', '三水区', '4406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440608', '高明区', '4406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440703', '蓬江区', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440704', '江海区', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440705', '新会区', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440781', '台山市', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440783', '开平市', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440784', '鹤山市', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440785', '恩平市', '4407'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440802', '赤坎区', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440803', '霞山区', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440804', '坡头区', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440811', '麻章区', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440823', '遂溪县', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440825', '徐闻县', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440881', '廉江市', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440882', '雷州市', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440883', '吴川市', '4408'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440902', '茂南区', '4409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440904', '电白区', '4409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440981', '高州市', '4409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440982', '化州市', '4409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('440983', '信宜市', '4409'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441202', '端州区', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441203', '鼎湖区', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441204', '高要区', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441223', '广宁县', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441224', '怀集县', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441225', '封开县', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441226', '德庆县', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441284', '四会市', '4412'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441302', '惠城区', '4413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441303', '惠阳区', '4413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441322', '博罗县', '4413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441323', '惠东县', '4413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441324', '龙门县', '4413'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441402', '梅江区', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441403', '梅县区', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441422', '大埔县', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441423', '丰顺县', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441424', '五华县', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441426', '平远县', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441427', '蕉岭县', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441481', '兴宁市', '4414'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441502', '城区', '4415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441521', '海丰县', '4415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441523', '陆河县', '4415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441581', '陆丰市', '4415'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441602', '源城区', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441621', '紫金县', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441622', '龙川县', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441623', '连平县', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441624', '和平县', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441625', '东源县', '4416'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441702', '江城区', '4417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441704', '阳东区', '4417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441721', '阳西县', '4417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441781', '阳春市', '4417'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441802', '清城区', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441803', '清新区', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441821', '佛冈县', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441823', '阳山县', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441825', '连山壮族瑶族自治县', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441826', '连南瑶族自治县', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441881', '英德市', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441882', '连州市', '4418'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('441900', '东莞市', '4419'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('442000', '中山市', '4420'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445102', '湘桥区', '4451'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445103', '潮安区', '4451'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445122', '饶平县', '4451'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445202', '榕城区', '4452'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445203', '揭东区', '4452'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445222', '揭西县', '4452'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445224', '惠来县', '4452'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445281', '普宁市', '4452'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445302', '云城区', '4453'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445303', '云安区', '4453'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445321', '新兴县', '4453'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445322', '郁南县', '4453'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('445381', '罗定市', '4453'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450102', '兴宁区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450103', '青秀区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450105', '江南区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450107', '西乡塘区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450108', '良庆区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450109', '邕宁区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450110', '武鸣区', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450123', '隆安县', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450124', '马山县', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450125', '上林县', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450126', '宾阳县', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450181', '横州市', '4501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450202', '城中区', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450203', '鱼峰区', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450204', '柳南区', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450205', '柳北区', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450206', '柳江区', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450222', '柳城县', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450223', '鹿寨县', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450224', '融安县', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450225', '融水苗族自治县', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450226', '三江侗族自治县', '4502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450302', '秀峰区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450303', '叠彩区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450304', '象山区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450305', '七星区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450311', '雁山区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450312', '临桂区', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450321', '阳朔县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450323', '灵川县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450324', '全州县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450325', '兴安县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450326', '永福县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450327', '灌阳县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450328', '龙胜各族自治县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450329', '资源县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450330', '平乐县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450332', '恭城瑶族自治县', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450381', '荔浦市', '4503'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450403', '万秀区', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450405', '长洲区', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450406', '龙圩区', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450421', '苍梧县', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450422', '藤县', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450423', '蒙山县', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450481', '岑溪市', '4504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450502', '海城区', '4505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450503', '银海区', '4505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450512', '铁山港区', '4505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450521', '合浦县', '4505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450602', '港口区', '4506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450603', '防城区', '4506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450621', '上思县', '4506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450681', '东兴市', '4506'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450702', '钦南区', '4507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450703', '钦北区', '4507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450721', '灵山县', '4507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450722', '浦北县', '4507'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450802', '港北区', '4508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450803', '港南区', '4508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450804', '覃塘区', '4508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450821', '平南县', '4508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450881', '桂平市', '4508'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450902', '玉州区', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450903', '福绵区', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450921', '容县', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450922', '陆川县', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450923', '博白县', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450924', '兴业县', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('450981', '北流市', '4509'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451002', '右江区', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451003', '田阳区', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451022', '田东县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451024', '德保县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451026', '那坡县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451027', '凌云县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451028', '乐业县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451029', '田林县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451030', '西林县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451031', '隆林各族自治县', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451081', '靖西市', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451082', '平果市', '4510'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451102', '八步区', '4511'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451103', '平桂区', '4511'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451121', '昭平县', '4511'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451122', '钟山县', '4511'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451123', '富川瑶族自治县', '4511'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451202', '金城江区', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451203', '宜州区', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451221', '南丹县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451222', '天峨县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451223', '凤山县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451224', '东兰县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451225', '罗城仫佬族自治县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451226', '环江毛南族自治县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451227', '巴马瑶族自治县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451228', '都安瑶族自治县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451229', '大化瑶族自治县', '4512'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451302', '兴宾区', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451321', '忻城县', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451322', '象州县', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451323', '武宣县', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451324', '金秀瑶族自治县', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451381', '合山市', '4513'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451402', '江州区', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451421', '扶绥县', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451422', '宁明县', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451423', '龙州县', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451424', '大新县', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451425', '天等县', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('451481', '凭祥市', '4514'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460105', '秀英区', '4601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460106', '龙华区', '4601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460107', '琼山区', '4601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460108', '美兰区', '4601'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460202', '海棠区', '4602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460203', '吉阳区', '4602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460204', '天涯区', '4602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460205', '崖州区', '4602'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460321', '西沙群岛', '4603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460322', '南沙群岛', '4603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460323', '中沙群岛的岛礁及其海域', '4603'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('460400', '儋州市', '4604'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469001', '五指山市', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469002', '琼海市', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469005', '文昌市', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469006', '万宁市', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469007', '东方市', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469021', '定安县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469022', '屯昌县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469023', '澄迈县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469024', '临高县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469025', '白沙黎族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469026', '昌江黎族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469027', '乐东黎族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469028', '陵水黎族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469029', '保亭黎族苗族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('469030', '琼中黎族苗族自治县', '4690'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500101', '万州区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500102', '涪陵区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500103', '渝中区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500104', '大渡口区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500105', '江北区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500106', '沙坪坝区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500107', '九龙坡区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500108', '南岸区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500109', '北碚区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500110', '綦江区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500111', '大足区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500112', '渝北区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500113', '巴南区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500114', '黔江区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500115', '长寿区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500116', '江津区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500117', '合川区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500118', '永川区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500119', '南川区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500120', '璧山区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500151', '铜梁区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500152', '潼南区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500153', '荣昌区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500154', '开州区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500155', '梁平区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500156', '武隆区', '5001'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500229', '城口县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500230', '丰都县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500231', '垫江县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500233', '忠县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500235', '云阳县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500236', '奉节县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500237', '巫山县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500238', '巫溪县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500240', '石柱土家族自治县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500241', '秀山土家族苗族自治县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500242', '酉阳土家族苗族自治县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('500243', '彭水苗族土家族自治县', '5002'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510104', '锦江区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510105', '青羊区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510106', '金牛区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510107', '武侯区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510108', '成华区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510112', '龙泉驿区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510113', '青白江区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510114', '新都区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510115', '温江区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510116', '双流区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510117', '郫都区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510118', '新津区', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510121', '金堂县', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510129', '大邑县', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510131', '蒲江县', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510181', '都江堰市', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510182', '彭州市', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510183', '邛崃市', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510184', '崇州市', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510185', '简阳市', '5101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510302', '自流井区', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510303', '贡井区', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510304', '大安区', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510311', '沿滩区', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510321', '荣县', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510322', '富顺县', '5103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510402', '东区', '5104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510403', '西区', '5104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510411', '仁和区', '5104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510421', '米易县', '5104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510422', '盐边县', '5104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510502', '江阳区', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510503', '纳溪区', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510504', '龙马潭区', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510521', '泸县', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510522', '合江县', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510524', '叙永县', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510525', '古蔺县', '5105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510603', '旌阳区', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510604', '罗江区', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510623', '中江县', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510681', '广汉市', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510682', '什邡市', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510683', '绵竹市', '5106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510703', '涪城区', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510704', '游仙区', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510705', '安州区', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510722', '三台县', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510723', '盐亭县', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510725', '梓潼县', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510726', '北川羌族自治县', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510727', '平武县', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510781', '江油市', '5107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510802', '利州区', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510811', '昭化区', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510812', '朝天区', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510821', '旺苍县', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510822', '青川县', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510823', '剑阁县', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510824', '苍溪县', '5108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510903', '船山区', '5109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510904', '安居区', '5109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510921', '蓬溪县', '5109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510923', '大英县', '5109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('510981', '射洪市', '5109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511002', '市中区', '5110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511011', '东兴区', '5110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511024', '威远县', '5110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511025', '资中县', '5110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511083', '隆昌市', '5110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511102', '市中区', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511111', '沙湾区', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511112', '五通桥区', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511113', '金口河区', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511123', '犍为县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511124', '井研县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511126', '夹江县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511129', '沐川县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511132', '峨边彝族自治县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511133', '马边彝族自治县', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511181', '峨眉山市', '5111'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511302', '顺庆区', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511303', '高坪区', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511304', '嘉陵区', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511321', '南部县', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511322', '营山县', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511323', '蓬安县', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511324', '仪陇县', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511325', '西充县', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511381', '阆中市', '5113'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511402', '东坡区', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511403', '彭山区', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511421', '仁寿县', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511423', '洪雅县', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511424', '丹棱县', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511425', '青神县', '5114'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511502', '翠屏区', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511503', '南溪区', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511504', '叙州区', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511523', '江安县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511524', '长宁县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511525', '高县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511526', '珙县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511527', '筠连县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511528', '兴文县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511529', '屏山县', '5115'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511602', '广安区', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511603', '前锋区', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511621', '岳池县', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511622', '武胜县', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511623', '邻水县', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511681', '华蓥市', '5116'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511702', '通川区', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511703', '达川区', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511722', '宣汉县', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511723', '开江县', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511724', '大竹县', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511725', '渠县', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511781', '万源市', '5117'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511802', '雨城区', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511803', '名山区', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511822', '荥经县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511823', '汉源县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511824', '石棉县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511825', '天全县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511826', '芦山县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511827', '宝兴县', '5118'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511902', '巴州区', '5119'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511903', '恩阳区', '5119'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511921', '通江县', '5119'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511922', '南江县', '5119'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('511923', '平昌县', '5119'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('512002', '雁江区', '5120'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('512021', '安岳县', '5120'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('512022', '乐至县', '5120'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513201', '马尔康市', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513221', '汶川县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513222', '理县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513223', '茂县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513224', '松潘县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513225', '九寨沟县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513226', '金川县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513227', '小金县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513228', '黑水县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513230', '壤塘县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513231', '阿坝县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513232', '若尔盖县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513233', '红原县', '5132'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513301', '康定市', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513322', '泸定县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513323', '丹巴县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513324', '九龙县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513325', '雅江县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513326', '道孚县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513327', '炉霍县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513328', '甘孜县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513329', '新龙县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513330', '德格县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513331', '白玉县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513332', '石渠县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513333', '色达县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513334', '理塘县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513335', '巴塘县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513336', '乡城县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513337', '稻城县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513338', '得荣县', '5133'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513401', '西昌市', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513402', '会理市', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513422', '木里藏族自治县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513423', '盐源县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513424', '德昌县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513426', '会东县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513427', '宁南县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513428', '普格县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513429', '布拖县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513430', '金阳县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513431', '昭觉县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513432', '喜德县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513433', '冕宁县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513434', '越西县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513435', '甘洛县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513436', '美姑县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('513437', '雷波县', '5134'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520102', '南明区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520103', '云岩区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520111', '花溪区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520112', '乌当区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520113', '白云区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520115', '观山湖区', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520121', '开阳县', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520122', '息烽县', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520123', '修文县', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520181', '清镇市', '5201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520201', '钟山区', '5202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520203', '六枝特区', '5202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520204', '水城区', '5202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520281', '盘州市', '5202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520302', '红花岗区', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520303', '汇川区', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520304', '播州区', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520322', '桐梓县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520323', '绥阳县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520324', '正安县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520325', '道真仡佬族苗族自治县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520326', '务川仡佬族苗族自治县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520327', '凤冈县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520328', '湄潭县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520329', '余庆县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520330', '习水县', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520381', '赤水市', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520382', '仁怀市', '5203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520402', '西秀区', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520403', '平坝区', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520422', '普定县', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520423', '镇宁布依族苗族自治县', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520424', '关岭布依族苗族自治县', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520425', '紫云苗族布依族自治县', '5204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520502', '七星关区', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520521', '大方县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520523', '金沙县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520524', '织金县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520525', '纳雍县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520526', '威宁彝族回族苗族自治县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520527', '赫章县', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520581', '黔西市', '5205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520602', '碧江区', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520603', '万山区', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520621', '江口县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520622', '玉屏侗族自治县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520623', '石阡县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520624', '思南县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520625', '印江土家族苗族自治县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520626', '德江县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520627', '沿河土家族自治县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('520628', '松桃苗族自治县', '5206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522301', '兴义市', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522302', '兴仁市', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522323', '普安县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522324', '晴隆县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522325', '贞丰县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522326', '望谟县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522327', '册亨县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522328', '安龙县', '5223'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522601', '凯里市', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522622', '黄平县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522623', '施秉县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522624', '三穗县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522625', '镇远县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522626', '岑巩县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522627', '天柱县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522628', '锦屏县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522629', '剑河县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522630', '台江县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522631', '黎平县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522632', '榕江县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522633', '从江县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522634', '雷山县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522635', '麻江县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522636', '丹寨县', '5226'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522701', '都匀市', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522702', '福泉市', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522722', '荔波县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522723', '贵定县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522725', '瓮安县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522726', '独山县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522727', '平塘县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522728', '罗甸县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522729', '长顺县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522730', '龙里县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522731', '惠水县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('522732', '三都水族自治县', '5227'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530102', '五华区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530103', '盘龙区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530111', '官渡区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530112', '西山区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530113', '东川区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530114', '呈贡区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530115', '晋宁区', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530124', '富民县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530125', '宜良县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530126', '石林彝族自治县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530127', '嵩明县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530128', '禄劝彝族苗族自治县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530129', '寻甸回族彝族自治县', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530181', '安宁市', '5301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530302', '麒麟区', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530303', '沾益区', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530304', '马龙区', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530322', '陆良县', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530323', '师宗县', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530324', '罗平县', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530325', '富源县', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530326', '会泽县', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530381', '宣威市', '5303'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530402', '红塔区', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530403', '江川区', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530423', '通海县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530424', '华宁县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530425', '易门县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530426', '峨山彝族自治县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530427', '新平彝族傣族自治县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530428', '元江哈尼族彝族傣族自治县', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530481', '澄江市', '5304'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530502', '隆阳区', '5305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530521', '施甸县', '5305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530523', '龙陵县', '5305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530524', '昌宁县', '5305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530581', '腾冲市', '5305'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530602', '昭阳区', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530621', '鲁甸县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530622', '巧家县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530623', '盐津县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530624', '大关县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530625', '永善县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530626', '绥江县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530627', '镇雄县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530628', '彝良县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530629', '威信县', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530681', '水富市', '5306'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530702', '古城区', '5307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530721', '玉龙纳西族自治县', '5307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530722', '永胜县', '5307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530723', '华坪县', '5307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530724', '宁蒗彝族自治县', '5307'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530802', '思茅区', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530821', '宁洱哈尼族彝族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530822', '墨江哈尼族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530823', '景东彝族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530824', '景谷傣族彝族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530825', '镇沅彝族哈尼族拉祜族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530826', '江城哈尼族彝族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530827', '孟连傣族拉祜族佤族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530828', '澜沧拉祜族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530829', '西盟佤族自治县', '5308'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530902', '临翔区', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530921', '凤庆县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530922', '云县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530923', '永德县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530924', '镇康县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530925', '双江拉祜族佤族布朗族傣族自治县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530926', '耿马傣族佤族自治县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('530927', '沧源佤族自治县', '5309'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532301', '楚雄市', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532302', '禄丰市', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532322', '双柏县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532323', '牟定县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532324', '南华县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532325', '姚安县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532326', '大姚县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532327', '永仁县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532328', '元谋县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532329', '武定县', '5323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532501', '个旧市', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532502', '开远市', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532503', '蒙自市', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532504', '弥勒市', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532523', '屏边苗族自治县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532524', '建水县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532525', '石屏县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532527', '泸西县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532528', '元阳县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532529', '红河县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532530', '金平苗族瑶族傣族自治县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532531', '绿春县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532532', '河口瑶族自治县', '5325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532601', '文山市', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532622', '砚山县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532623', '西畴县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532624', '麻栗坡县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532625', '马关县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532626', '丘北县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532627', '广南县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532628', '富宁县', '5326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532801', '景洪市', '5328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532822', '勐海县', '5328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532823', '勐腊县', '5328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532901', '大理市', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532922', '漾濞彝族自治县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532923', '祥云县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532924', '宾川县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532925', '弥渡县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532926', '南涧彝族自治县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532927', '巍山彝族回族自治县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532928', '永平县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532929', '云龙县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532930', '洱源县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532931', '剑川县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('532932', '鹤庆县', '5329'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533102', '瑞丽市', '5331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533103', '芒市', '5331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533122', '梁河县', '5331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533123', '盈江县', '5331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533124', '陇川县', '5331'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533301', '泸水市', '5333'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533323', '福贡县', '5333'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533324', '贡山独龙族怒族自治县', '5333'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533325', '兰坪白族普米族自治县', '5333'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533401', '香格里拉市', '5334'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533422', '德钦县', '5334'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('533423', '维西傈僳族自治县', '5334'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540102', '城关区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540103', '堆龙德庆区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540104', '达孜区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540121', '林周县', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540122', '当雄县', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540123', '尼木县', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540124', '曲水县', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540127', '墨竹工卡县', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540171', '格尔木藏青工业园区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540172', '拉萨经济技术开发区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540173', '西藏文化旅游创意园区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540174', '达孜工业园区', '5401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540202', '桑珠孜区', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540221', '南木林县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540222', '江孜县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540223', '定日县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540224', '萨迦县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540225', '拉孜县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540226', '昂仁县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540227', '谢通门县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540228', '白朗县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540229', '仁布县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540230', '康马县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540231', '定结县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540232', '仲巴县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540233', '亚东县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540234', '吉隆县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540235', '聂拉木县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540236', '萨嘎县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540237', '岗巴县', '5402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540302', '卡若区', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540321', '江达县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540322', '贡觉县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540323', '类乌齐县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540324', '丁青县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540325', '察雅县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540326', '八宿县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540327', '左贡县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540328', '芒康县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540329', '洛隆县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540330', '边坝县', '5403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540402', '巴宜区', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540421', '工布江达县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540422', '米林县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540423', '墨脱县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540424', '波密县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540425', '察隅县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540426', '朗县', '5404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540502', '乃东区', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540521', '扎囊县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540522', '贡嘎县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540523', '桑日县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540524', '琼结县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540525', '曲松县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540526', '措美县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540527', '洛扎县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540528', '加查县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540529', '隆子县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540530', '错那县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540531', '浪卡子县', '5405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540602', '色尼区', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540621', '嘉黎县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540622', '比如县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540623', '聂荣县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540624', '安多县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540625', '申扎县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540626', '索县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540627', '班戈县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540628', '巴青县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540629', '尼玛县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('540630', '双湖县', '5406'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542521', '普兰县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542522', '札达县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542523', '噶尔县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542524', '日土县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542525', '革吉县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542526', '改则县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('542527', '措勤县', '5425'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610102', '新城区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610103', '碑林区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610104', '莲湖区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610111', '灞桥区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610112', '未央区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610113', '雁塔区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610114', '阎良区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610115', '临潼区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610116', '长安区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610117', '高陵区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610118', '鄠邑区', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610122', '蓝田县', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610124', '周至县', '6101'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610202', '王益区', '6102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610203', '印台区', '6102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610204', '耀州区', '6102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610222', '宜君县', '6102'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610302', '渭滨区', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610303', '金台区', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610304', '陈仓区', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610305', '凤翔区', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610323', '岐山县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610324', '扶风县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610326', '眉县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610327', '陇县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610328', '千阳县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610329', '麟游县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610330', '凤县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610331', '太白县', '6103'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610402', '秦都区', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610403', '杨陵区', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610404', '渭城区', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610422', '三原县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610423', '泾阳县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610424', '乾县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610425', '礼泉县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610426', '永寿县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610428', '长武县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610429', '旬邑县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610430', '淳化县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610431', '武功县', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610481', '兴平市', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610482', '彬州市', '6104'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610502', '临渭区', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610503', '华州区', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610522', '潼关县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610523', '大荔县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610524', '合阳县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610525', '澄城县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610526', '蒲城县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610527', '白水县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610528', '富平县', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610581', '韩城市', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610582', '华阴市', '6105'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610602', '宝塔区', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610603', '安塞区', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610621', '延长县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610622', '延川县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610625', '志丹县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610626', '吴起县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610627', '甘泉县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610628', '富县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610629', '洛川县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610630', '宜川县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610631', '黄龙县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610632', '黄陵县', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610681', '子长市', '6106'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610702', '汉台区', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610703', '南郑区', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610722', '城固县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610723', '洋县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610724', '西乡县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610725', '勉县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610726', '宁强县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610727', '略阳县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610728', '镇巴县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610729', '留坝县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610730', '佛坪县', '6107'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610802', '榆阳区', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610803', '横山区', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610822', '府谷县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610824', '靖边县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610825', '定边县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610826', '绥德县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610827', '米脂县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610828', '佳县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610829', '吴堡县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610830', '清涧县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610831', '子洲县', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610881', '神木市', '6108'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610902', '汉滨区', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610921', '汉阴县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610922', '石泉县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610923', '宁陕县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610924', '紫阳县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610925', '岚皋县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610926', '平利县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610927', '镇坪县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610929', '白河县', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('610981', '旬阳市', '6109'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611002', '商州区', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611021', '洛南县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611022', '丹凤县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611023', '商南县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611024', '山阳县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611025', '镇安县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('611026', '柞水县', '6110'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620102', '城关区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620103', '七里河区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620104', '西固区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620105', '安宁区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620111', '红古区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620121', '永登县', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620122', '皋兰县', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620123', '榆中县', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620171', '兰州新区', '6201'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620201', '嘉峪关市', '6202'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620302', '金川区', '6203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620321', '永昌县', '6203'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620402', '白银区', '6204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620403', '平川区', '6204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620421', '靖远县', '6204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620422', '会宁县', '6204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620423', '景泰县', '6204'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620502', '秦州区', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620503', '麦积区', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620521', '清水县', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620522', '秦安县', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620523', '甘谷县', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620524', '武山县', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620525', '张家川回族自治县', '6205'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620602', '凉州区', '6206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620621', '民勤县', '6206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620622', '古浪县', '6206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620623', '天祝藏族自治县', '6206'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620702', '甘州区', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620721', '肃南裕固族自治县', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620722', '民乐县', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620723', '临泽县', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620724', '高台县', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620725', '山丹县', '6207'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620802', '崆峒区', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620821', '泾川县', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620822', '灵台县', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620823', '崇信县', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620825', '庄浪县', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620826', '静宁县', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620881', '华亭市', '6208'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620902', '肃州区', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620921', '金塔县', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620922', '瓜州县', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620923', '肃北蒙古族自治县', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620924', '阿克塞哈萨克族自治县', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620981', '玉门市', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('620982', '敦煌市', '6209'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621002', '西峰区', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621021', '庆城县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621022', '环县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621023', '华池县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621024', '合水县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621025', '正宁县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621026', '宁县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621027', '镇原县', '6210'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621102', '安定区', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621121', '通渭县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621122', '陇西县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621123', '渭源县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621124', '临洮县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621125', '漳县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621126', '岷县', '6211'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621202', '武都区', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621221', '成县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621222', '文县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621223', '宕昌县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621224', '康县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621225', '西和县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621226', '礼县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621227', '徽县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('621228', '两当县', '6212'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622901', '临夏市', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622921', '临夏县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622922', '康乐县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622923', '永靖县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622924', '广河县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622925', '和政县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622926', '东乡族自治县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('622927', '积石山保安族东乡族撒拉族自治县', '6229'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623001', '合作市', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623021', '临潭县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623022', '卓尼县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623023', '舟曲县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623024', '迭部县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623025', '玛曲县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623026', '碌曲县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('623027', '夏河县', '6230'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630102', '城东区', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630103', '城中区', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630104', '城西区', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630105', '城北区', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630106', '湟中区', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630121', '大通回族土族自治县', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630123', '湟源县', '6301'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630202', '乐都区', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630203', '平安区', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630222', '民和回族土族自治县', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630223', '互助土族自治县', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630224', '化隆回族自治县', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('630225', '循化撒拉族自治县', '6302'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632221', '门源回族自治县', '6322'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632222', '祁连县', '6322'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632223', '海晏县', '6322'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632224', '刚察县', '6322'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632301', '同仁市', '6323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632322', '尖扎县', '6323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632323', '泽库县', '6323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632324', '河南蒙古族自治县', '6323'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632521', '共和县', '6325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632522', '同德县', '6325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632523', '贵德县', '6325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632524', '兴海县', '6325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632525', '贵南县', '6325'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632621', '玛沁县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632622', '班玛县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632623', '甘德县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632624', '达日县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632625', '久治县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632626', '玛多县', '6326'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632701', '玉树市', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632722', '杂多县', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632723', '称多县', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632724', '治多县', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632725', '囊谦县', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632726', '曲麻莱县', '6327'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632801', '格尔木市', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632802', '德令哈市', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632803', '茫崖市', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632821', '乌兰县', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632822', '都兰县', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632823', '天峻县', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('632857', '大柴旦行政委员会', '6328'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640104', '兴庆区', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640105', '西夏区', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640106', '金凤区', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640121', '永宁县', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640122', '贺兰县', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640181', '灵武市', '6401'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640202', '大武口区', '6402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640205', '惠农区', '6402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640221', '平罗县', '6402'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640302', '利通区', '6403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640303', '红寺堡区', '6403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640323', '盐池县', '6403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640324', '同心县', '6403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640381', '青铜峡市', '6403'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640402', '原州区', '6404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640422', '西吉县', '6404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640423', '隆德县', '6404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640424', '泾源县', '6404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640425', '彭阳县', '6404'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640502', '沙坡头区', '6405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640521', '中宁县', '6405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('640522', '海原县', '6405'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650102', '天山区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650103', '沙依巴克区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650104', '新市区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650105', '水磨沟区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650106', '头屯河区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650107', '达坂城区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650109', '米东区', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650121', '乌鲁木齐县', '6501'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650202', '独山子区', '6502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650203', '克拉玛依区', '6502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650204', '白碱滩区', '6502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650205', '乌尔禾区', '6502'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650402', '高昌区', '6504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650421', '鄯善县', '6504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650422', '托克逊县', '6504'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650502', '伊州区', '6505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650521', '巴里坤哈萨克自治县', '6505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('650522', '伊吾县', '6505'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652301', '昌吉市', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652302', '阜康市', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652323', '呼图壁县', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652324', '玛纳斯县', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652325', '奇台县', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652327', '吉木萨尔县', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652328', '木垒哈萨克自治县', '6523'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652701', '博乐市', '6527'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652702', '阿拉山口市', '6527'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652722', '精河县', '6527'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652723', '温泉县', '6527'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652801', '库尔勒市', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652822', '轮台县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652823', '尉犁县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652824', '若羌县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652825', '且末县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652826', '焉耆回族自治县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652827', '和静县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652828', '和硕县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652829', '博湖县', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652871', '库尔勒经济技术开发区', '6528'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652901', '阿克苏市', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652902', '库车市', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652922', '温宿县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652924', '沙雅县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652925', '新和县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652926', '拜城县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652927', '乌什县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652928', '阿瓦提县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('652929', '柯坪县', '6529'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653001', '阿图什市', '6530'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653022', '阿克陶县', '6530'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653023', '阿合奇县', '6530'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653024', '乌恰县', '6530'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653101', '喀什市', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653121', '疏附县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653122', '疏勒县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653123', '英吉沙县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653124', '泽普县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653125', '莎车县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653126', '叶城县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653127', '麦盖提县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653128', '岳普湖县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653129', '伽师县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653130', '巴楚县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653131', '塔什库尔干塔吉克自治县', '6531'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653201', '和田市', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653221', '和田县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653222', '墨玉县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653223', '皮山县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653224', '洛浦县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653225', '策勒县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653226', '于田县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('653227', '民丰县', '6532'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654002', '伊宁市', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654003', '奎屯市', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654004', '霍尔果斯市', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654021', '伊宁县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654022', '察布查尔锡伯自治县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654023', '霍城县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654024', '巩留县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654025', '新源县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654026', '昭苏县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654027', '特克斯县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654028', '尼勒克县', '6540'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654201', '塔城市', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654202', '乌苏市', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654203', '沙湾市', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654221', '额敏县', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654224', '托里县', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654225', '裕民县', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654226', '和布克赛尔蒙古自治县', '6542'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654301', '阿勒泰市', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654321', '布尔津县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654322', '富蕴县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654323', '福海县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654324', '哈巴河县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654325', '青河县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('654326', '吉木乃县', '6543'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659001', '石河子市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659002', '阿拉尔市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659003', '图木舒克市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659004', '五家渠市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659005', '北屯市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659006', '铁门关市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659007', '双河市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659008', '可克达拉市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659009', '昆玉市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659010', '胡杨河市', '6590'); - -INSERT INTO `base_area`(`code`, `name`, `city_code`) VALUES ('659011', '新星市', '6590'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1101', '市辖区', '11'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1201', '市辖区', '12'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1301', '石家庄市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1302', '唐山市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1303', '秦皇岛市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1304', '邯郸市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1305', '邢台市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1306', '保定市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1307', '张家口市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1308', '承德市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1309', '沧州市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1310', '廊坊市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1311', '衡水市', '13'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1401', '太原市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1402', '大同市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1403', '阳泉市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1404', '长治市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1405', '晋城市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1406', '朔州市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1407', '晋中市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1408', '运城市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1409', '忻州市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1410', '临汾市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1411', '吕梁市', '14'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1501', '呼和浩特市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1502', '包头市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1503', '乌海市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1504', '赤峰市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1505', '通辽市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1506', '鄂尔多斯市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1507', '呼伦贝尔市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1508', '巴彦淖尔市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1509', '乌兰察布市', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1522', '兴安盟', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1525', '锡林郭勒盟', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('1529', '阿拉善盟', '15'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2101', '沈阳市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2102', '大连市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2103', '鞍山市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2104', '抚顺市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2105', '本溪市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2106', '丹东市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2107', '锦州市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2108', '营口市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2109', '阜新市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2110', '辽阳市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2111', '盘锦市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2112', '铁岭市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2113', '朝阳市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2114', '葫芦岛市', '21'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2201', '长春市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2202', '吉林市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2203', '四平市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2204', '辽源市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2205', '通化市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2206', '白山市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2207', '松原市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2208', '白城市', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2224', '延边朝鲜族自治州', '22'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2301', '哈尔滨市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2302', '齐齐哈尔市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2303', '鸡西市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2304', '鹤岗市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2305', '双鸭山市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2306', '大庆市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2307', '伊春市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2308', '佳木斯市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2309', '七台河市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2310', '牡丹江市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2311', '黑河市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2312', '绥化市', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('2327', '大兴安岭地区', '23'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3101', '市辖区', '31'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3201', '南京市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3202', '无锡市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3203', '徐州市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3204', '常州市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3205', '苏州市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3206', '南通市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3207', '连云港市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3208', '淮安市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3209', '盐城市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3210', '扬州市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3211', '镇江市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3212', '泰州市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3213', '宿迁市', '32'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3301', '杭州市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3302', '宁波市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3303', '温州市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3304', '嘉兴市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3305', '湖州市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3306', '绍兴市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3307', '金华市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3308', '衢州市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3309', '舟山市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3310', '台州市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3311', '丽水市', '33'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3401', '合肥市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3402', '芜湖市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3403', '蚌埠市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3404', '淮南市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3405', '马鞍山市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3406', '淮北市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3407', '铜陵市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3408', '安庆市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3410', '黄山市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3411', '滁州市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3412', '阜阳市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3413', '宿州市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3415', '六安市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3416', '亳州市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3417', '池州市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3418', '宣城市', '34'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3501', '福州市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3502', '厦门市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3503', '莆田市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3504', '三明市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3505', '泉州市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3506', '漳州市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3507', '南平市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3508', '龙岩市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3509', '宁德市', '35'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3601', '南昌市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3602', '景德镇市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3603', '萍乡市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3604', '九江市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3605', '新余市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3606', '鹰潭市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3607', '赣州市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3608', '吉安市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3609', '宜春市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3610', '抚州市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3611', '上饶市', '36'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3701', '济南市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3702', '青岛市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3703', '淄博市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3704', '枣庄市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3705', '东营市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3706', '烟台市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3707', '潍坊市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3708', '济宁市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3709', '泰安市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3710', '威海市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3711', '日照市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3713', '临沂市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3714', '德州市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3715', '聊城市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3716', '滨州市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('3717', '菏泽市', '37'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4101', '郑州市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4102', '开封市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4103', '洛阳市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4104', '平顶山市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4105', '安阳市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4106', '鹤壁市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4107', '新乡市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4108', '焦作市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4109', '濮阳市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4110', '许昌市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4111', '漯河市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4112', '三门峡市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4113', '南阳市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4114', '商丘市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4115', '信阳市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4116', '周口市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4117', '驻马店市', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4190', '省直辖县级行政区划', '41'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4201', '武汉市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4202', '黄石市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4203', '十堰市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4205', '宜昌市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4206', '襄阳市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4207', '鄂州市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4208', '荆门市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4209', '孝感市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4210', '荆州市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4211', '黄冈市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4212', '咸宁市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4213', '随州市', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4228', '恩施土家族苗族自治州', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4290', '省直辖县级行政区划', '42'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4301', '长沙市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4302', '株洲市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4303', '湘潭市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4304', '衡阳市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4305', '邵阳市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4306', '岳阳市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4307', '常德市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4308', '张家界市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4309', '益阳市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4310', '郴州市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4311', '永州市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4312', '怀化市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4313', '娄底市', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4331', '湘西土家族苗族自治州', '43'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4401', '广州市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4402', '韶关市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4403', '深圳市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4404', '珠海市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4405', '汕头市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4406', '佛山市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4407', '江门市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4408', '湛江市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4409', '茂名市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4412', '肇庆市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4413', '惠州市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4414', '梅州市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4415', '汕尾市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4416', '河源市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4417', '阳江市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4418', '清远市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4419', '东莞市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4420', '中山市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4451', '潮州市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4452', '揭阳市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4453', '云浮市', '44'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4501', '南宁市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4502', '柳州市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4503', '桂林市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4504', '梧州市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4505', '北海市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4506', '防城港市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4507', '钦州市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4508', '贵港市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4509', '玉林市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4510', '百色市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4511', '贺州市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4512', '河池市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4513', '来宾市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4514', '崇左市', '45'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4601', '海口市', '46'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4602', '三亚市', '46'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4603', '三沙市', '46'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4604', '儋州市', '46'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('4690', '省直辖县级行政区划', '46'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5001', '市辖区', '50'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5002', '县', '50'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5101', '成都市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5103', '自贡市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5104', '攀枝花市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5105', '泸州市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5106', '德阳市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5107', '绵阳市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5108', '广元市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5109', '遂宁市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5110', '内江市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5111', '乐山市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5113', '南充市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5114', '眉山市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5115', '宜宾市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5116', '广安市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5117', '达州市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5118', '雅安市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5119', '巴中市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5120', '资阳市', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5132', '阿坝藏族羌族自治州', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5133', '甘孜藏族自治州', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5134', '凉山彝族自治州', '51'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5201', '贵阳市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5202', '六盘水市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5203', '遵义市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5204', '安顺市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5205', '毕节市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5206', '铜仁市', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5223', '黔西南布依族苗族自治州', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5226', '黔东南苗族侗族自治州', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5227', '黔南布依族苗族自治州', '52'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5301', '昆明市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5303', '曲靖市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5304', '玉溪市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5305', '保山市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5306', '昭通市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5307', '丽江市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5308', '普洱市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5309', '临沧市', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5323', '楚雄彝族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5325', '红河哈尼族彝族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5326', '文山壮族苗族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5328', '西双版纳傣族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5329', '大理白族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5331', '德宏傣族景颇族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5333', '怒江傈僳族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5334', '迪庆藏族自治州', '53'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5401', '拉萨市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5402', '日喀则市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5403', '昌都市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5404', '林芝市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5405', '山南市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5406', '那曲市', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('5425', '阿里地区', '54'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6101', '西安市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6102', '铜川市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6103', '宝鸡市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6104', '咸阳市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6105', '渭南市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6106', '延安市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6107', '汉中市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6108', '榆林市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6109', '安康市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6110', '商洛市', '61'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6201', '兰州市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6202', '嘉峪关市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6203', '金昌市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6204', '白银市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6205', '天水市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6206', '武威市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6207', '张掖市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6208', '平凉市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6209', '酒泉市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6210', '庆阳市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6211', '定西市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6212', '陇南市', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6229', '临夏回族自治州', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6230', '甘南藏族自治州', '62'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6301', '西宁市', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6302', '海东市', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6322', '海北藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6323', '黄南藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6325', '海南藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6326', '果洛藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6327', '玉树藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6328', '海西蒙古族藏族自治州', '63'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6401', '银川市', '64'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6402', '石嘴山市', '64'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6403', '吴忠市', '64'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6404', '固原市', '64'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6405', '中卫市', '64'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6501', '乌鲁木齐市', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6502', '克拉玛依市', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6504', '吐鲁番市', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6505', '哈密市', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6523', '昌吉回族自治州', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6527', '博尔塔拉蒙古自治州', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6528', '巴音郭楞蒙古自治州', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6529', '阿克苏地区', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6530', '克孜勒苏柯尔克孜自治州', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6531', '喀什地区', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6532', '和田地区', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6540', '伊犁哈萨克自治州', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6542', '塔城地区', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6543', '阿勒泰地区', '65'); - -INSERT INTO `base_city`(`code`, `name`, `province_code`) VALUES ('6590', '自治区直辖县级行政区划', '65'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('11', '北京市'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('12', '天津市'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('13', '河北省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('14', '山西省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('15', '内蒙古自治区'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('21', '辽宁省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('22', '吉林省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('23', '黑龙江省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('31', '上海市'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('32', '江苏省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('33', '浙江省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('34', '安徽省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('35', '福建省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('36', '江西省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('37', '山东省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('41', '河南省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('42', '湖北省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('43', '湖南省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('44', '广东省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('45', '广西壮族自治区'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('46', '海南省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('50', '重庆市'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('51', '四川省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('52', '贵州省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('53', '云南省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('54', '西藏自治区'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('61', '陕西省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('62', '甘肃省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('63', '青海省'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('64', '宁夏回族自治区'); - -INSERT INTO `base_province`(`code`, `name`) VALUES ('65', '新疆维吾尔自治区'); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1589495250199760896, 'adminv3', 1580740450633101312, '22', NULL, '11', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1414143554414059520, '2022-11-07 13:49:34', 1414143554414059520, '2022-11-07 13:49:34', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1617513861605191680, 'admin', 1414596052497092608, '123', NULL, '123', b'0', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2023-01-23 21:25:31', 1399985191002447872, '2023-01-23 21:56:34', 3, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1617847577158324224, 'adminv3', 1597102799370317824, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/perm/DataPermDemoList.vue', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:35', 1414143554414059520, '2023-01-24 20:06:04', 2, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1617847653746315264, 'adminv3', 1597102799370317824, '加密解密', 'DataEncryptDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/encrypt/DataEncryptDemoList.vue', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:53', 1414143554414059520, '2023-01-24 20:05:45', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1617847747375763456, 'adminv3', 1597102799370317824, '数据脱敏', 'DataSensitiveDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/sensitive/DataSensitiveDemoList.vue', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:32:16', 1414143554414059520, '2023-01-24 20:06:58', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1621150743447965696, 'admin', 1495968302034210816, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', 'demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-02 22:17:11', 1399985191002447872, '2023-02-08 09:43:39', 1, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1623156857846034432, 'adminv3', 1582276516905177088, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 11:08:46', 1414143554414059520, '2023-02-08 11:08:46', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1623325795944439808, 'adminv3', 1599378992811429888, '邮件通知', '', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 22:20:04', 1414143554414059520, '2023-02-08 22:20:04', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1623494586215579648, 'admin', 1552207982510706688, '行政区划', 'ChinaRegion', NULL, b'0', '', b'1', b'0', 'develop/region/ChinaRegionList', NULL, '/develop/region', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-09 09:30:47', 1399985191002447872, '2023-02-09 17:50:05', 1, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582276516905177088, `title` = 'WS演示', `name` = 'WebsocketDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/demo/ws/WebsocketDemo', `component_name` = NULL, `path` = '/demo/ws', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-12-04 20:22:03', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-08 12:17:58', `version` = 1, `deleted` = 0 WHERE `id` = 1599378494880436224; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582276516905177088, `title` = '幂等请求演示', `name` = 'IdempotentDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/demo/idempotent/IdempotentDemo', `component_name` = NULL, `path` = '/demo/idempotent', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-12-04 20:22:23', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-08 11:46:00', `version` = 3, `deleted` = 0 WHERE `id` = 1599378579513102336; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582276516905177088, `title` = '消息中间件演示', `name` = 'MqDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/demo/mq/MqDemo', `component_name` = NULL, `path` = '/demo/mq', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-12-04 20:22:59', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-08 22:09:04', `version` = 2, `deleted` = 0 WHERE `id` = 1599378728490586112; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1582276516905177088, `title` = '富文本编辑', `name` = 'WangEditorDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/demo/wangeditor/WangEditorDemo.vue', `component_name` = NULL, `path` = '/demo/wangEditor', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-12-04 20:23:25', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-10 09:05:16', `version` = 1, `deleted` = 0 WHERE `id` = 1599378838519762944; - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1599379197124366336, `title` = '组合支付', `name` = 'CombinationCashier', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/demo/payment/cashier/CombinationCashier.vue', `component_name` = NULL, `path` = '/demo/pay/combination', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2022-12-04 20:25:46', `last_modifier` = 1414143554414059520, `last_modified_time` = '2022-12-08 22:32:55', `version` = 1, `deleted` = 0 WHERE `id` = 1599379428784164864; - - -SET FOREIGN_KEY_CHECKS=1; diff --git a/_config/sql/1.2.2/1.2.1_up_1.2.2.sql b/_config/sql/1.2.2/1.2.1_up_1.2.2.sql deleted file mode 100644 index a264264f5..000000000 --- a/_config/sql/1.2.2/1.2.1_up_1.2.2.sql +++ /dev/null @@ -1,106 +0,0 @@ -SET FOREIGN_KEY_CHECKS=0; - -CREATE TABLE `report_project_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目名称', - `state` int(11) NULL DEFAULT NULL COMMENT '发布状态', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '乐观锁', - `deleted` bit(1) NOT NULL COMMENT '删除标志', - `index_image` bigint(20) NULL DEFAULT NULL COMMENT '预览图片id', - `edit` bit(1) NULL DEFAULT NULL COMMENT '是否在编辑中', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏信息' ROW_FORMAT = Dynamic; - -CREATE TABLE `report_project_info_publish` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '乐观锁', - `deleted` bit(1) NOT NULL COMMENT '删除标志', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏发布信息' ROW_FORMAT = Dynamic; - -DROP TABLE `goods_brand`; - -DROP TABLE `goods_category`; - -DROP TABLE `goods_category_brand`; - -DROP TABLE `goods_category_parameter`; - -DROP TABLE `goods_category_parameter_group`; - -DROP TABLE `goods_category_specification`; - -DROP TABLE `goods_goods`; - -DROP TABLE `goods_goods_packing`; - -DROP TABLE `goods_goods_sku`; - -DROP TABLE `goods_goods_sku_attr`; - -DROP TABLE `goods_goods_sku_packing`; - -DROP TABLE `goods_specification`; - -DROP TABLE `order_order`; - -DROP TABLE `order_order_billing`; - -DROP TABLE `order_order_detail`; - -DROP TABLE `order_order_item_billing`; - -DROP TABLE `order_order_strategy_mapping`; - -DROP TABLE `sales_activity`; - -DROP TABLE `sales_check_rule`; - -DROP TABLE `sales_coupon`; - -DROP TABLE `sales_coupon_template`; - -DROP TABLE `sales_match_rule`; - -DROP TABLE `sales_strategy`; - -DROP TABLE `sales_strategy_check_rule`; - -DROP TABLE `sales_strategy_config`; - -DROP TABLE `sales_strategy_config_value`; - -DROP TABLE `sales_strategy_register`; - -SET FOREIGN_KEY_CHECKS = 0; - -INSERT INTO `iam_client`(`id`, `code`, `name`, `system`, `enable`, `login_type_ids`, `description`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1626840094767714304, 'GoView', '可视化平台', b'0', b'1', '1430430071299207168', '', 1414143554414059520, '2023-02-18 15:04:38', 1414143554414059520, '2023-02-18 15:04:38', 0, 0); - -INSERT INTO `iam_login_type`(`id`, `code`, `name`, `type`, `system`, `timeout`, `captcha`, `pwd_err_num`, `enable`, `description`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1626845524617203712, 'passwordGoView', '可视化平台登录', 'password', b'0', 3600, b'0', -1, b'1', '', 1414143554414059520, '2023-02-18 15:26:13', 1414143554414059520, '2023-02-18 15:26:13', 0, 0); - -UPDATE `iam_login_type` SET `code` = 'password', `name` = '账号密码登陆', `type` = 'password', `system` = b'1', `timeout` = 3600, `captcha` = b'0', `pwd_err_num` = -1, `enable` = b'1', `description` = NULL, `creator` = 1399985191002447872, `create_time` = '2021-08-25 15:21:20', `last_modifier` = 1399985191002447872, `last_modified_time` = '2022-11-03 22:24:53', `version` = 20, `deleted` = 0 WHERE `id` = 1430430071299207168; - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1631946120891707392, 'admin', 1552207982510706688, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', 'develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-03-04 17:14:10', 1399985191002447872, '2023-03-04 17:14:10', 0, 0); - -INSERT INTO `iam_perm_menu`(`id`, `client_code`, `parent_id`, `title`, `name`, `perm_code`, `effect`, `icon`, `hidden`, `hide_children_in_menu`, `component`, `component_name`, `path`, `redirect`, `sort_no`, `menu_type`, `leaf`, `keep_alive`, `target_outside`, `hidden_header_content`, `admin`, `remark`, `creator`, `create_time`, `last_modifier`, `last_modified_time`, `version`, `deleted`) VALUES (1629039360928075776, 'adminv3', 1582276341792985088, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', '/modules/develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-24 16:43:44', 1414143554414059520, '2023-02-24 16:44:17', 1, 0); - -UPDATE `iam_perm_menu` SET `client_code` = 'adminv3', `parent_id` = 1599378992811429888, `title` = '邮件通知', `name` = 'EmailSenderDemo', `perm_code` = NULL, `effect` = b'0', `icon` = '', `hidden` = b'0', `hide_children_in_menu` = b'0', `component` = '/modules/demo/notice/email/EmailSenderDemo.vue', `component_name` = NULL, `path` = '/demo/notice/email', `redirect` = '', `sort_no` = 0, `menu_type` = 1, `leaf` = NULL, `keep_alive` = b'1', `target_outside` = b'0', `hidden_header_content` = b'0', `admin` = b'0', `remark` = NULL, `creator` = 1414143554414059520, `create_time` = '2023-02-08 22:20:04', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-20 10:38:55', `version` = 1, `deleted` = 0 WHERE `id` = 1623325795944439808; - -UPDATE `iam_user_info` SET `name` = '小小明', `username` = 'xxm', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '133****3333', `email` = 'x******@outlook.com', `client_ids` = '1430430071299207168,1430430071299207169,1626840094767714304,1580487061605175296', `avatar` = NULL, `source` = NULL, `admin` = b'1', `register_time` = '2021-06-02 15:04:12', `status` = 1, `creator` = 1, `create_time` = '2021-06-02 15:04:15', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-18 15:08:42', `version` = 55, `deleted` = 0 WHERE `id` = 1399985191002447872; - -UPDATE `iam_user_info` SET `name` = '小小明1995', `username` = 'xxm1995', `password` = 'f52020dca765fd3943ed40a615dc2c5c', `phone` = '130****0000', `email` = 'x******@foxmail.com', `client_ids` = '1430430071299207168,1580487061605175296,1430430071299207169,1626840094767714304', `avatar` = NULL, `source` = NULL, `admin` = b'1', `register_time` = '2021-07-11 16:44:31', `status` = 1, `creator` = 1, `create_time` = '2021-07-11 16:44:32', `last_modifier` = 1414143554414059520, `last_modified_time` = '2023-02-18 15:08:48', `version` = 9, `deleted` = 0 WHERE `id` = 1414143554414059520; - -SET FOREIGN_KEY_CHECKS = 1; - -SET FOREIGN_KEY_CHECKS=1; diff --git a/_config/sql/bootx-platform.sql b/_config/sql/bootx-platform.sql index 3ba3dba13..582480cf0 100644 --- a/_config/sql/bootx-platform.sql +++ b/_config/sql/bootx-platform.sql @@ -1,15 +1,12 @@ /* Navicat Premium Data Transfer - Source Server : 阿里 Source Server Type : MySQL - Source Server Version : 50735 Target Server Type : MySQL - Target Server Version : 50735 File Encoding : 65001 - Date: 03/03/2023 16:59:26 + Date: 31/01/2024 10:42:54 */ SET NAMES utf8mb4; @@ -3015,6 +3012,29 @@ INSERT INTO `base_area` VALUES ('659009', '昆玉市', '6590'); INSERT INTO `base_area` VALUES ('659010', '胡杨河市', '6590'); INSERT INTO `base_area` VALUES ('659011', '新星市', '6590'); +-- ---------------------------- +-- Table structure for base_china_word +-- ---------------------------- +DROP TABLE IF EXISTS `base_china_word`; +CREATE TABLE `base_china_word` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '敏感词', + `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分类', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '描述', + `enable` bit(1) NULL DEFAULT NULL COMMENT '是否启用', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `white` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '敏感词' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_china_word +-- ---------------------------- + -- ---------------------------- -- Table structure for base_city -- ---------------------------- @@ -3372,6 +3392,31 @@ INSERT INTO `base_city` VALUES ('6542', '塔城地区', '65'); INSERT INTO `base_city` VALUES ('6543', '阿勒泰地区', '65'); INSERT INTO `base_city` VALUES ('6590', '自治区直辖县级行政区划', '65'); +-- ---------------------------- +-- Table structure for base_data_result_sql +-- ---------------------------- +DROP TABLE IF EXISTS `base_data_result_sql`; +CREATE TABLE `base_data_result_sql` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `database_id` bigint(20) NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `is_list` bit(1) NULL DEFAULT NULL, + `sql` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `fields` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '数据集SQL语句' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_data_result_sql +-- ---------------------------- + -- ---------------------------- -- Table structure for base_dict -- ---------------------------- @@ -3384,9 +3429,9 @@ CREATE TABLE `base_dict` ( `group_tag` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '分类标签', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NULL DEFAULT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -3397,7 +3442,7 @@ CREATE TABLE `base_dict` ( -- ---------------------------- INSERT INTO `base_dict` VALUES (1422929378374828033, 'Sex', '性别', b'1', '基础属性', '性别', 0, '2021-08-04 22:36:15', 1399985191002447872, '2022-05-11 19:48:40', 0, 6); INSERT INTO `base_dict` VALUES (1425744045414772737, 'MenuType', '菜单类型', b'1', '系统属性', '菜单类型', 0, '2021-08-12 17:00:44', 1399985191002447872, '2022-05-11 19:48:44', 0, 4); -INSERT INTO `base_dict` VALUES (1430063572491411456, 'loginType', '字典类型', b'1', NULL, '字典类型', 1399985191002447872, '2021-08-24 15:05:00', 1399985191002447872, '2021-08-24 15:05:00', 1, 2); +INSERT INTO `base_dict` VALUES (1430063572491411456, 'loginType', '字典类型', b'1', '基础属性', '字典类型', 1399985191002447872, '2021-08-24 15:05:00', 1399985191002447872, '2021-08-24 15:05:00', 1, 2); INSERT INTO `base_dict` VALUES (1435829999592759296, 'UserStatusCode', '用户状态码', b'1', '系统属性', '用户状态码', 1399985191002447872, '2021-09-09 12:58:43', 1399985191002447872, '2022-05-11 19:48:56', 0, 2); INSERT INTO `base_dict` VALUES (1435838066191458304, 'LogBusinessType', '业务操作类型', b'1', '系统属性', '操作日志记录的业务操作类型', 1399985191002447872, '2021-09-09 13:30:46', 1399985191002447872, '2022-05-11 19:49:00', 0, 2); INSERT INTO `base_dict` VALUES (1438078864509317120, 'MailSecurityCode', '邮箱安全方式编码', b'1', '消息服务', '邮箱安全方式编码', 1399985191002447872, '2021-09-15 17:54:54', 1399985191002447872, '2022-05-11 19:49:06', 0, 2); @@ -3405,27 +3450,14 @@ INSERT INTO `base_dict` VALUES (1439961232651034624, 'MessageTemplateCode', '消 INSERT INTO `base_dict` VALUES (1452836604783845376, 'SocialType', '三方系统类型', b'1', '系统属性', '三方系统类型', 1399985191002447872, '2021-10-26 11:16:54', 1399985191002447872, '2022-05-11 19:48:28', 0, 3); INSERT INTO `base_dict` VALUES (1452843488735621120, 'ParamType', '参数类型', b'1', '系统属性', '参数类型', 1399985191002447872, '2021-10-26 11:44:15', 1399985191002447872, '2022-05-11 19:48:21', 0, 2); INSERT INTO `base_dict` VALUES (1496024933900169216, 'Political', '政治面貌', b'1', '基础数据', '政治面貌', 1399985191002447872, '2022-02-22 15:31:54', 1399985191002447872, '2022-05-11 19:48:04', 0, 1); -INSERT INTO `base_dict` VALUES (1496722894707728384, 'PayChannel', '支付通道', b'1', '支付服务', '支付宝, 微信, 云闪付等', 1399985191002447872, '2022-02-24 13:45:21', 1399985191002447872, '2022-05-11 19:47:51', 0, 1); -INSERT INTO `base_dict` VALUES (1496723207565058048, 'PayWay', '支付方式', b'1', '支付服务', '扫码支付、Wap、App支付等', 1399985191002447872, '2022-02-24 13:46:35', 1399985191002447872, '2022-05-11 19:47:46', 0, 1); -INSERT INTO `base_dict` VALUES (1497140849954185216, 'PayStatus', '支付状态', b'1', '支付服务', '支付中,成功,失败等', 1399985191002447872, '2022-02-25 17:26:09', 1399985191002447872, '2022-05-11 19:47:40', 0, 2); -INSERT INTO `base_dict` VALUES (1501031423232937984, 'AsyncPayChannel', '异步支付通道', b'1', '支付服务', '如微信支付宝云闪付等第三方支付', 1399985191002447872, '2022-03-08 11:05:54', 1399985191002447872, '2022-05-11 19:47:37', 0, 1); -INSERT INTO `base_dict` VALUES (1502276739978473472, 'WalletStatus', '钱包状态', b'1', '支付服务', '钱包状态', 1399985191002447872, '2022-03-11 21:34:20', 1399985191002447872, '2022-05-11 19:47:33', 0, 2); -INSERT INTO `base_dict` VALUES (1502624342339448832, 'WalletOperation', '钱包日志操作类型', b'1', NULL, '', 1399985191002447872, '2022-03-12 20:35:35', 1399985191002447872, '2022-03-12 20:35:35', 1, 0); -INSERT INTO `base_dict` VALUES (1502624515799085056, 'WalletLogType', '钱包日志类型', b'1', '支付服务', '钱包日志类型', 1399985191002447872, '2022-03-12 20:36:17', 1399985191002447872, '2022-05-11 19:47:29', 0, 1); -INSERT INTO `base_dict` VALUES (1502624632392347648, 'WalletLogOperation', '钱包日志操作类型', b'1', '支付服务', '钱包日志操作类型', 1399985191002447872, '2022-03-12 20:36:44', 1399985191002447872, '2022-05-11 19:47:21', 0, 1); -INSERT INTO `base_dict` VALUES (1503340128037212160, 'VoucherStatus', '储值卡状态', b'1', '支付服务', '储值卡状态', 1399985191002447872, '2022-03-14 19:59:52', 1399985191002447872, '2022-05-11 19:47:12', 0, 1); -INSERT INTO `base_dict` VALUES (1524356168611188736, 'input', '手工输入', b'1', '商品服务', '', 1399985191002447872, '2022-05-11 19:50:06', 1399985191002447872, '2022-05-11 19:50:06', 1, 0); -INSERT INTO `base_dict` VALUES (1524356376518643712, 'GoodsParamType', '参数类型', b'1', '商品服务', '列表/手动输入', 1399985191002447872, '2022-05-11 19:50:56', 1399985191002447872, '2022-05-14 23:05:41', 0, 1); -INSERT INTO `base_dict` VALUES (1546757092010078208, 'PayNotifyProcess', '支付回调处理状态', b'1', '支付服务', '成功/忽略/失败', 1399985191002447872, '2022-07-12 15:23:23', 1399985191002447872, '2022-07-12 15:23:53', 0, 1); INSERT INTO `base_dict` VALUES (1556996322223968256, 'WeChatMediaType', '微信媒体类型', b'1', '微信', '微信媒体类型', 1399985191002447872, '2022-08-09 21:30:25', 1399985191002447872, '2022-08-09 21:30:26', 0, 0); INSERT INTO `base_dict` VALUES (1561003021674987520, 'SiteMessageReceive', '消息接收类型', b'1', '站内信', '站内信接收类型', 1399985191002447872, '2022-08-20 22:51:37', 1399985191002447872, '2022-08-20 22:51:37', 0, 0); INSERT INTO `base_dict` VALUES (1561003189111603200, 'SiteMessageState', '消息发布状态', b'1', '站内信', '站内信消息发布状态', 1399985191002447872, '2022-08-20 22:52:17', 1399985191002447872, '2022-08-20 22:52:17', 0, 0); -INSERT INTO `base_dict` VALUES (1562696107020230656, 'BpmModelPublish', '工作流模型发布状态', b'1', '工作流', '工作流模型发布状态', 1399985191002447872, '2022-08-25 14:59:20', 1399985191002447872, '2022-08-25 15:27:55', 0, 1); -INSERT INTO `base_dict` VALUES (1563083969989423104, 'BpmTaskAssignType', '工作流处理人分配类型', b'1', '工作流', '流程任务处理人分配类型', 1399985191002447872, '2022-08-26 16:40:34', 1399985191002447872, '2022-08-26 16:40:53', 0, 1); -INSERT INTO `base_dict` VALUES (1567091641298386944, 'BpmTaskState', '流程任务状态', b'1', '工作流', '流程任务状态', 1399985191002447872, '2022-09-06 18:05:37', 1399985191002447872, '2022-09-06 18:05:47', 0, 1); -INSERT INTO `base_dict` VALUES (1570343684024705024, 'BpmTaskResult', '流程任务处理结果', b'1', '工作流', '流程任务处理结果', 1399985191002447872, '2022-09-15 17:28:05', 1414143554414059520, '2022-10-19 23:13:40', 0, 1); -INSERT INTO `base_dict` VALUES (1570764395519111168, 'BpmInstanceState', '流程实例状态', b'1', '工作流', '流程实例状态', 1399985191002447872, '2022-09-16 21:19:50', 1414143554414059520, '2022-10-19 23:13:33', 0, 1); -INSERT INTO `base_dict` VALUES (1589527951317389312, 'DataScopePerm', '数据范围权限', b'1', '系统属性', '数据范围权限', 1414143554414059520, '2022-11-07 15:59:30', 1414143554414059520, '2022-11-07 16:00:27', 0, 1); +INSERT INTO `base_dict` VALUES (1589527951317389312, 'DataScopePerm', '数据权限类型', b'1', '系统属性', '数据权限类型', 1414143554414059520, '2022-11-07 15:59:30', 1399985191002447872, '2023-11-28 23:14:24', 0, 4); +INSERT INTO `base_dict` VALUES (1633393287952257024, 'DatabaseType', '数据库类型', b'1', '开发', '数据库类型', 1414143554414059520, '2023-03-08 17:04:41', 1414143554414059520, '2023-03-08 17:04:41', 0, 0); +INSERT INTO `base_dict` VALUES (1688742690398617600, 'SmsChannel', '短信渠道商', b'1', '消息服务', '短信渠道商', 1414143554414059520, '2023-08-08 10:43:27', 1414143554414059520, '2023-08-12 20:24:03', 0, 1); +INSERT INTO `base_dict` VALUES (1690338321769918464, 'GeneralTemplateUseType', '通用模板类型', b'1', '系统属性', '通用模板类型', 1414143554414059520, '2023-08-12 20:23:56', 1414143554414059520, '2023-08-12 20:24:22', 0, 1); +INSERT INTO `base_dict` VALUES (1690338545284378624, 'GeneralTemplateState', '通用模板状态', b'1', '系统属性', '通用模板状态', 1414143554414059520, '2023-08-12 20:24:49', 1414143554414059520, '2023-08-12 20:24:49', 0, 0); -- ---------------------------- -- Table structure for base_dict_item @@ -3441,9 +3473,9 @@ CREATE TABLE `base_dict_item` ( `sort_no` double(8, 2) NOT NULL COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE, @@ -3459,9 +3491,9 @@ INSERT INTO `base_dict_item` VALUES (1425744258544136194, 1425744045414772737, ' INSERT INTO `base_dict_item` VALUES (1425744436592340993, 1425744045414772737, 'MenuType', '1', '子菜单', b'1', 0.00, '子菜单', 0, '2021-08-12 17:02:17', 0, '2021-08-12 17:02:17', 0, 0); INSERT INTO `base_dict_item` VALUES (1425744470582980610, 1425744045414772737, 'MenuType', '2', '按钮权限', b'1', 0.00, '按钮权限', 0, '2021-08-12 17:02:26', 0, '2021-08-12 17:02:26', 0, 0); INSERT INTO `base_dict_item` VALUES (1430094707250413568, 1422929378374828033, 'Sex', '0', '未知', b'1', 0.00, '不确定性别', 1399985191002447872, '2021-08-24 17:08:43', 1399985191002447872, '2021-08-24 17:08:43', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830086406463488, 1435829999592759296, 'UserStatusCode', '1', '正常', b'1', 0.00, 'NORMAL', 1399985191002447872, '2021-09-09 12:59:04', 1399985191002447872, '2021-09-09 12:59:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830141855162368, 1435829999592759296, 'UserStatusCode', '2', '锁定', b'1', 0.00, 'LOCK, 多次登录失败被锁定', 1399985191002447872, '2021-09-09 12:59:17', 1399985191002447872, '2021-09-09 12:59:17', 0, 1); -INSERT INTO `base_dict_item` VALUES (1435830260503633920, 1435829999592759296, 'UserStatusCode', '3', '封禁', b'1', 0.00, 'BAN', 1399985191002447872, '2021-09-09 12:59:45', 1399985191002447872, '2021-09-09 12:59:45', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435830086406463488, 1435829999592759296, 'UserStatusCode', 'normal', '正常', b'1', 0.00, 'NORMAL', 1399985191002447872, '2021-09-09 12:59:04', 1399985191002447872, '2023-11-25 15:32:04', 0, 1); +INSERT INTO `base_dict_item` VALUES (1435830141855162368, 1435829999592759296, 'UserStatusCode', 'lock', '锁定', b'1', 0.00, 'LOCK, 多次登录失败被锁定', 1399985191002447872, '2021-09-09 12:59:17', 1399985191002447872, '2023-11-25 15:32:14', 0, 2); +INSERT INTO `base_dict_item` VALUES (1435830260503633920, 1435829999592759296, 'UserStatusCode', 'ban', '封禁', b'1', 0.00, 'BAN', 1399985191002447872, '2021-09-09 12:59:45', 1399985191002447872, '2023-11-25 15:32:20', 0, 1); INSERT INTO `base_dict_item` VALUES (1435838374749626368, 1435838066191458304, 'LogBusinessType', 'other', '其它', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:00', 1399985191002447872, '2021-09-09 13:32:00', 0, 0); INSERT INTO `base_dict_item` VALUES (1435838414436130816, 1435838066191458304, 'LogBusinessType', 'insert', '新增', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:09', 1399985191002447872, '2021-09-09 13:32:09', 0, 0); INSERT INTO `base_dict_item` VALUES (1435838467624099840, 1435838066191458304, 'LogBusinessType', 'update', '修改', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:22', 1399985191002447872, '2021-09-09 13:32:22', 0, 0); @@ -3497,93 +3529,37 @@ INSERT INTO `base_dict_item` VALUES (1496027369796743168, 1496024933900169216, ' INSERT INTO `base_dict_item` VALUES (1496027408141070336, 1496024933900169216, 'Political', '11', '台盟盟员', b'1', 11.00, '', 1399985191002447872, '2022-02-22 15:41:44', 1399985191002447872, '2022-02-22 15:41:44', 0, 0); INSERT INTO `base_dict_item` VALUES (1496027456849522688, 1496024933900169216, 'Political', '12', '无党派人士', b'1', 12.00, '', 1399985191002447872, '2022-02-22 15:41:55', 1399985191002447872, '2022-02-22 15:41:55', 0, 0); INSERT INTO `base_dict_item` VALUES (1496027516639326208, 1496024933900169216, 'Political', '13', '群众', b'1', 13.00, '', 1399985191002447872, '2022-02-22 15:42:09', 1399985191002447872, '2022-02-22 15:42:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780500696539136, 1496722894707728384, 'PayChannel', '1', '支付宝', b'1', 1.00, '', 1399985191002447872, '2022-02-24 17:34:15', 1399985191002447872, '2022-03-08 11:02:59', 0, 3); -INSERT INTO `base_dict_item` VALUES (1496780576818962432, 1496722894707728384, 'PayChannel', '2', '微信', b'1', 2.00, '', 1399985191002447872, '2022-02-24 17:34:33', 1399985191002447872, '2022-03-08 11:04:00', 0, 2); -INSERT INTO `base_dict_item` VALUES (1496780712492113920, 1496723207565058048, 'PayWay', '1', 'wap支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:05', 1399985191002447872, '2022-02-24 17:35:05', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780757647990784, 1496723207565058048, 'PayWay', '2', '应用支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:16', 1399985191002447872, '2022-02-24 17:35:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780799691694080, 1496723207565058048, 'PayWay', '3', 'web支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:26', 1399985191002447872, '2022-02-24 17:35:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780838451257344, 1496723207565058048, 'PayWay', '4', '二维码扫码支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:35', 1399985191002447872, '2022-02-24 17:35:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780876388737024, 1496723207565058048, 'PayWay', '5', '付款码支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:44', 1399985191002447872, '2022-02-24 17:35:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141630803566592, 1497140849954185216, 'PayStatus', '3', '支付取消', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:15', 1399985191002447872, '2022-02-25 17:29:15', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141652379066368, 1497140849954185216, 'PayStatus', '2', '失败', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:20', 1399985191002447872, '2022-02-25 17:29:20', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141681915355136, 1497140849954185216, 'PayStatus', '1', '成功', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:27', 1399985191002447872, '2022-02-25 17:29:27', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141712743489536, 1497140849954185216, 'PayStatus', '0', '支付中', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:35', 1399985191002447872, '2022-02-25 17:29:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497506810439892992, 1497140849954185216, 'PayStatus', '4', '部分退款', b'1', 1.00, '部分退款', 1399985191002447872, '2022-02-26 17:40:21', 1399985191002447872, '2022-03-04 21:22:46', 0, 7); -INSERT INTO `base_dict_item` VALUES (1499367587857694720, 1497140849954185216, 'PayStatus', '5', '已退款', b'1', 2.00, '完全退款', 1399985191002447872, '2022-03-03 20:54:25', 1399985191002447872, '2022-03-04 21:22:49', 0, 3); -INSERT INTO `base_dict_item` VALUES (1501030031432847360, 1496722894707728384, 'PayChannel', '3', '云闪付', b'1', 3.00, '', 1399985191002447872, '2022-03-08 11:00:22', 1399985191002447872, '2022-03-08 11:04:07', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030073489133568, 1496722894707728384, 'PayChannel', '4', '现金', b'1', 4.00, '', 1399985191002447872, '2022-03-08 11:00:32', 1399985191002447872, '2022-03-08 11:04:10', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030108314439680, 1496722894707728384, 'PayChannel', '5', '钱包', b'1', 5.00, '', 1399985191002447872, '2022-03-08 11:00:40', 1399985191002447872, '2022-03-08 11:04:14', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501031490513768448, 1501031423232937984, 'AsyncPayChannel', '3', '云闪付', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:10', 1399985191002447872, '2022-03-08 11:06:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031518208757760, 1501031423232937984, 'AsyncPayChannel', '2', '微信', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:16', 1399985191002447872, '2022-03-08 11:06:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031544360243200, 1501031423232937984, 'AsyncPayChannel', '1', '支付宝', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:23', 1399985191002447872, '2022-03-08 11:06:23', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276841057005568, 1502276739978473472, 'WalletStatus', '2', '禁用', b'1', 0.00, '', 1399985191002447872, '2022-03-11 21:34:45', 1399985191002447872, '2022-03-11 21:34:45', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276862108217344, 1502276739978473472, 'WalletStatus', '1', '正常', b'1', 0.00, '', 1399985191002447872, '2022-03-11 21:34:50', 1399985191002447872, '2022-03-11 21:34:50', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624716257456128, 1502624515799085056, 'WalletLogType', '1', '开通', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:37:04', 1399985191002447872, '2022-03-12 20:37:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624931978899456, 1502624515799085056, 'WalletLogType', '2', '主动充值', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:37:56', 1399985191002447872, '2022-03-12 20:37:56', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624956209393664, 1502624515799085056, 'WalletLogType', '3', '自动充值', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:02', 1399985191002447872, '2022-03-12 20:38:02', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625014719934464, 1502624515799085056, 'WalletLogType', '4', '余额变动', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:16', 1399985191002447872, '2022-03-12 20:38:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625053097816064, 1502624515799085056, 'WalletLogType', '5', '支付', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:25', 1399985191002447872, '2022-03-12 20:38:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625091639275520, 1502624515799085056, 'WalletLogType', '6', '系统扣除余额', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:34', 1399985191002447872, '2022-03-12 20:38:34', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625123725701120, 1502624515799085056, 'WalletLogType', '7', '退款', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:42', 1399985191002447872, '2022-03-12 20:38:42', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625783145787392, 1502624632392347648, 'WalletLogOperation', '1', '系统操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:19', 1399985191002447872, '2022-03-12 20:41:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625814837948416, 1502624632392347648, 'WalletLogOperation', '2', '管理员操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:26', 1399985191002447872, '2022-03-12 20:41:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625850355314688, 1502624632392347648, 'WalletLogOperation', '3', '用户操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:35', 1399985191002447872, '2022-03-12 20:41:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340241493135360, 1503340128037212160, 'VoucherStatus', '1', '启用', b'1', 0.00, '', 1399985191002447872, '2022-03-14 20:00:19', 1399985191002447872, '2022-03-14 20:00:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340326645895168, 1503340128037212160, 'VoucherStatus', '2', '停用', b'1', 0.00, '', 1399985191002447872, '2022-03-14 20:00:39', 1399985191002447872, '2022-03-14 20:00:39', 0, 0); -INSERT INTO `base_dict_item` VALUES (1505112357976612864, 1496722894707728384, 'PayChannel', '6', '储值卡', b'1', 0.00, '', 1399985191002447872, '2022-03-19 17:22:04', 1399985191002447872, '2022-03-19 17:22:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356452720758784, 1524356376518643712, 'GoodsParamType', 'input', '手工录入', b'1', 0.00, '', 1399985191002447872, '2022-05-11 19:51:14', 1399985191002447872, '2022-05-11 19:51:14', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356510157557760, 1524356376518643712, 'GoodsParamType', 'select', '列表选择', b'1', 0.00, '', 1399985191002447872, '2022-05-11 19:51:28', 1399985191002447872, '2022-05-11 19:51:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1546757293592522752, 1546757092010078208, 'PayNotifyProcess', '0', '失败', b'1', 0.00, '', 1399985191002447872, '2022-07-12 15:24:11', 1399985191002447872, '2022-07-12 15:24:11', 0, 0); -INSERT INTO `base_dict_item` VALUES (1546757327901929472, 1546757092010078208, 'PayNotifyProcess', '1', '成功', b'1', -1.00, '', 1399985191002447872, '2022-07-12 15:24:19', 1399985191002447872, '2022-07-12 15:31:38', 0, 2); -INSERT INTO `base_dict_item` VALUES (1546757375637303296, 1546757092010078208, 'PayNotifyProcess', '2', '忽略', b'1', 0.00, '', 1399985191002447872, '2022-07-12 15:24:30', 1399985191002447872, '2022-07-12 15:24:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996422006460416, 1556996322223968256, 'WeChatMediaType', 'news', '新闻', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:30:49', 1399985191002447872, '2022-08-09 21:30:49', 1, 0); -INSERT INTO `base_dict_item` VALUES (1556996472661069824, 1556996322223968256, 'WeChatMediaType', 'voice', '语音', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:01', 1399985191002447872, '2022-08-09 21:31:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996501417218048, 1556996322223968256, 'WeChatMediaType', 'image', '图片', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:08', 1399985191002447872, '2022-08-09 21:31:08', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996529565192192, 1556996322223968256, 'WeChatMediaType', 'video', '视频', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:15', 1399985191002447872, '2022-08-09 21:31:15', 0, 0); -INSERT INTO `base_dict_item` VALUES (1561003235710320640, 1561003189111603200, 'SiteMessageState', 'user', '指定用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:52:28', 1399985191002447872, '2022-08-20 22:52:28', 1, 0); -INSERT INTO `base_dict_item` VALUES (1561003279322693632, 1561003189111603200, 'SiteMessageState', 'all', '全部用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:52:38', 1399985191002447872, '2022-08-20 22:52:39', 1, 0); INSERT INTO `base_dict_item` VALUES (1561003368762032128, 1561003021674987520, 'SiteMessageReceive', 'user', '指定用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:00', 1399985191002447872, '2022-08-20 22:53:00', 0, 0); INSERT INTO `base_dict_item` VALUES (1561003399778910208, 1561003021674987520, 'SiteMessageReceive', 'all', '全部用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:07', 1399985191002447872, '2022-08-20 22:53:24', 0, 1); INSERT INTO `base_dict_item` VALUES (1561003539772194816, 1561003189111603200, 'SiteMessageState', 'sent', '已发送', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:41', 1399985191002447872, '2022-08-20 22:53:41', 0, 0); INSERT INTO `base_dict_item` VALUES (1561003575608328192, 1561003189111603200, 'SiteMessageState', 'cancel', '撤销', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:49', 1399985191002447872, '2022-08-20 22:53:49', 0, 0); INSERT INTO `base_dict_item` VALUES (1561245469535080448, 1561003189111603200, 'SiteMessageState', 'draft', '草稿', b'1', 0.00, '', 1399985191002447872, '2022-08-21 14:55:01', 1399985191002447872, '2022-08-21 14:55:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1562696390043475968, 1562696107020230656, 'BpmModelPublish', 'published', '已发布', b'1', 0.00, '', 1399985191002447872, '2022-08-25 15:00:28', 1399985191002447872, '2022-08-25 15:00:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1562696420561231872, 1562696107020230656, 'BpmModelPublish', 'unpublished', '未发布', b'1', 0.00, '未上传xml文档', 1399985191002447872, '2022-08-25 15:00:35', 1399985191002447872, '2022-08-25 15:28:09', 0, 1); -INSERT INTO `base_dict_item` VALUES (1562703450588028928, 1562696107020230656, 'BpmModelPublish', 'unpublishedXml', '未发布(已上传BPMN)', b'1', 0.00, '有xml文档', 1399985191002447872, '2022-08-25 15:28:31', 1399985191002447872, '2022-08-25 15:34:45', 0, 1); -INSERT INTO `base_dict_item` VALUES (1563087300157747200, 1563083969989423104, 'BpmTaskAssignType', 'user', '用户', b'1', 0.00, '', 1399985191002447872, '2022-08-26 16:53:48', 1399985191002447872, '2022-09-06 22:50:15', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567091825981980672, 1567091641298386944, 'BpmTaskState', 'running', '处理中', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:21', 1399985191002447872, '2022-09-06 18:06:21', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567091863017684992, 1567091641298386944, 'BpmTaskState', 'pass', '通过', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:30', 1399985191002447872, '2022-09-06 18:06:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567091902414782464, 1567091641298386944, 'BpmTaskState', 'reject', '驳回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:39', 1399985191002447872, '2022-09-06 18:06:51', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567091993569591296, 1567091641298386944, 'BpmTaskState', 'back', '退回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:01', 1399985191002447872, '2022-09-06 18:07:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567092037261656064, 1567091641298386944, 'BpmTaskState', 'retrieve', '取回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:12', 1399985191002447872, '2022-09-06 18:07:22', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567092124226355200, 1567091641298386944, 'BpmTaskState', 'skip', '跳过', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:32', 1399985191002447872, '2022-09-06 18:07:32', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163310103564288, 1563083969989423104, 'BpmTaskAssignType', 'userGroup', '用户组', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:24', 1399985191002447872, '2022-09-06 22:50:24', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163343288897536, 1563083969989423104, 'BpmTaskAssignType', 'role', '角色', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:32', 1399985191002447872, '2022-09-06 22:50:32', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163380693700608, 1563083969989423104, 'BpmTaskAssignType', 'deptMember', '部门成员', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:41', 1399985191002447872, '2022-09-06 22:50:41', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163412960481280, 1563083969989423104, 'BpmTaskAssignType', 'deptLeader', '部门的负责人', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:49', 1399985191002447872, '2022-09-06 22:50:49', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567175558888923136, 1563083969989423104, 'BpmTaskAssignType', 'roleGroup', '角色组', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:39:05', 1399985191002447872, '2022-09-06 23:39:05', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567178994242002944, 1563083969989423104, 'BpmTaskAssignType', 'sponsor', '发起人', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:52:44', 1399985191002447872, '2022-09-06 23:52:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567179143576002560, 1563083969989423104, 'BpmTaskAssignType', 'select', '用户手动选择', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:53:19', 1399985191002447872, '2022-09-07 00:01:22', 0, 1); -INSERT INTO `base_dict_item` VALUES (1570343731634249728, 1570343684024705024, 'BpmTaskResult', 'pass', '通过', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:16', 1399985191002447872, '2022-09-15 17:28:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343761636106240, 1570343684024705024, 'BpmTaskResult', 'notPass', '不通过', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:23', 1399985191002447872, '2022-09-15 17:28:23', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343788056027136, 1570343684024705024, 'BpmTaskResult', 'abstain', '弃权', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:29', 1399985191002447872, '2022-09-15 17:28:29', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343826018672640, 1570343684024705024, 'BpmTaskResult', 'reject', '驳回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:38', 1399985191002447872, '2022-09-15 17:28:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343873737269248, 1570343684024705024, 'BpmTaskResult', 'back', '退回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:50', 1399985191002447872, '2022-09-15 17:28:50', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343913918701568, 1570343684024705024, 'BpmTaskResult', 'retrieve', '取回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:59', 1399985191002447872, '2022-09-15 17:28:59', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570685888076120064, 1570343684024705024, 'BpmTaskResult', 'autoFinish', '自动完成', b'1', 0.00, '', 1399985191002447872, '2022-09-16 16:07:52', 1399985191002447872, '2022-09-16 16:08:02', 0, 1); -INSERT INTO `base_dict_item` VALUES (1570764765255397376, 1570764395519111168, 'BpmInstanceState', 'running', '运行中', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:18', 1399985191002447872, '2022-09-16 21:21:18', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570764802047832064, 1570764395519111168, 'BpmInstanceState', 'finish', '已完成', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:27', 1399985191002447872, '2022-09-16 21:21:27', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570764836319490048, 1570764395519111168, 'BpmInstanceState', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:35', 1399985191002447872, '2022-09-16 21:21:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570784215744585728, 1570343684024705024, 'BpmTaskResult', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 22:38:35', 1399985191002447872, '2022-09-16 22:38:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570784331511570432, 1567091641298386944, 'BpmTaskState', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 22:39:03', 1399985191002447872, '2022-09-16 22:39:03', 0, 0); INSERT INTO `base_dict_item` VALUES (1573665422392098816, 1439961232651034624, 'MessageTemplateCode', '0', '站内信', b'1', -11.00, 'SITE', 1399985191002447872, '2022-09-24 21:27:29', 1399985191002447872, '2022-09-24 21:27:39', 0, 1); -INSERT INTO `base_dict_item` VALUES (1589528254477488128, 1589527951317389312, 'DataScopePerm', '7', '所在及下级部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:43', 1414143554414059520, '2022-11-07 16:00:43', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528283539820544, 1589527951317389312, 'DataScopePerm', '6', '所在部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:49', 1414143554414059520, '2022-11-07 16:00:49', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528315672383488, 1589527951317389312, 'DataScopePerm', '5', '全部数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:57', 1414143554414059520, '2022-11-07 16:00:57', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528340267782144, 1589527951317389312, 'DataScopePerm', '4', '部门和用户范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:03', 1414143554414059520, '2022-11-07 16:01:03', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528367228768256, 1589527951317389312, 'DataScopePerm', '3', '部门范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:09', 1414143554414059520, '2022-11-07 16:01:09', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528393292173312, 1589527951317389312, 'DataScopePerm', '2', '用户范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:16', 1414143554414059520, '2022-11-07 16:01:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528423956729856, 1589527951317389312, 'DataScopePerm', '1', '自身数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:23', 1414143554414059520, '2022-11-07 16:01:23', 0, 0); +INSERT INTO `base_dict_item` VALUES (1589528254477488128, 1589527951317389312, 'DataScopePerm', 'self_dept_sub', '所在及下级部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:43', 1399985191002447872, '2023-11-28 23:16:02', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528283539820544, 1589527951317389312, 'DataScopePerm', 'self_dept', '所在部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:49', 1399985191002447872, '2023-11-28 23:15:52', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528315672383488, 1589527951317389312, 'DataScopePerm', 'all', '全部数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:57', 1399985191002447872, '2023-11-25 22:51:28', 0, 1); +INSERT INTO `base_dict_item` VALUES (1589528340267782144, 1589527951317389312, 'DataScopePerm', 'dept_and_user', '自定义部门和用户', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:03', 1399985191002447872, '2023-11-29 15:25:01', 0, 3); +INSERT INTO `base_dict_item` VALUES (1589528367228768256, 1589527951317389312, 'DataScopePerm', 'dept', '自定义部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:09', 1399985191002447872, '2023-11-29 15:24:47', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528393292173312, 1589527951317389312, 'DataScopePerm', 'user', '指定用户', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:16', 1399985191002447872, '2023-11-29 15:25:16', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528423956729856, 1589527951317389312, 'DataScopePerm', 'self', '自身数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:23', 1399985191002447872, '2023-11-25 22:50:41', 0, 1); +INSERT INTO `base_dict_item` VALUES (1633403429028536320, 1633393287952257024, 'DatabaseType', 'mysql', 'MySQL', b'1', 1.00, '', 1414143554414059520, '2023-03-08 17:44:59', 1414143554414059520, '2023-03-08 17:44:59', 0, 0); +INSERT INTO `base_dict_item` VALUES (1633403459470794752, 1633393287952257024, 'DatabaseType', 'oracle', 'Oracle', b'1', 2.00, '', 1414143554414059520, '2023-03-08 17:45:07', 1414143554414059520, '2023-03-08 17:45:07', 0, 0); +INSERT INTO `base_dict_item` VALUES (1633403498695925760, 1633393287952257024, 'DatabaseType', 'mssql', 'SQLServer', b'1', 3.00, '', 1414143554414059520, '2023-03-08 17:45:16', 1414143554414059520, '2023-03-08 17:45:16', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742732891111424, 1688742690398617600, 'SmsChannel', 'alibaba', '阿里云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:38', 1414143554414059520, '2023-08-08 10:43:38', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742768479780864, 1688742690398617600, 'SmsChannel', 'huawei', '华为云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:46', 1414143554414059520, '2023-08-08 10:43:46', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742808027873280, 1688742690398617600, 'SmsChannel', 'yunpian', '云片', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:55', 1414143554414059520, '2023-08-08 10:43:56', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742840626003968, 1688742690398617600, 'SmsChannel', 'tencent', '腾讯云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:03', 1414143554414059520, '2023-08-08 10:44:03', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742872506908672, 1688742690398617600, 'SmsChannel', 'uni_sms', '合一短信', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:11', 1414143554414059520, '2023-08-08 10:44:11', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742905553829888, 1688742690398617600, 'SmsChannel', 'jd_cloud', '京东云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:19', 1414143554414059520, '2023-08-08 10:44:19', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742954715267072, 1688742690398617600, 'SmsChannel', 'cloopen', '容联云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:30', 1414143554414059520, '2023-08-08 10:44:30', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742990446542848, 1688742690398617600, 'SmsChannel', 'emay', '亿美软通', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:39', 1414143554414059520, '2023-08-08 10:44:39', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688743032297308160, 1688742690398617600, 'SmsChannel', 'ctyun', '天翼云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:49', 1414143554414059520, '2023-08-08 10:44:49', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688743065205817344, 1688742690398617600, 'SmsChannel', 'netease', '网易云信', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:57', 1414143554414059520, '2023-08-08 10:44:57', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338619024437248, 1690338321769918464, 'GeneralTemplateUseType', 'import', '导入', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:06', 1414143554414059520, '2023-08-12 20:25:06', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338653442895872, 1690338321769918464, 'GeneralTemplateUseType', 'export', '导出', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:15', 1414143554414059520, '2023-08-12 20:25:15', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338707129987072, 1690338545284378624, 'GeneralTemplateState', 'enable', '启用', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:27', 1414143554414059520, '2023-08-12 20:25:27', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338748032839680, 1690338545284378624, 'GeneralTemplateState', 'disable', '停用', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:37', 1414143554414059520, '2023-08-12 20:25:37', 0, 0); +INSERT INTO `base_dict_item` VALUES (1729519341702086656, 1589527951317389312, 'DataScopePerm', 'dept_sub', '指定部门及下级部门', b'1', 0.00, '', 1399985191002447872, '2023-11-28 23:15:19', 1399985191002447872, '2023-11-28 23:15:19', 0, 0); -- ---------------------------- -- Table structure for base_dynamic_data_source @@ -3594,6 +3570,7 @@ CREATE TABLE `base_dynamic_data_source` ( `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源编码', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源名称', `database_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库类型', + `auto_load` bit(1) NULL DEFAULT NULL COMMENT '是否启动自动加载', `db_driver` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '驱动类', `db_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库地址', `db_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库名称', @@ -3601,9 +3578,9 @@ CREATE TABLE `base_dynamic_data_source` ( `db_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -3624,9 +3601,9 @@ CREATE TABLE `base_dynamic_form` ( `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '表单内容', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -3638,6 +3615,33 @@ CREATE TABLE `base_dynamic_form` ( INSERT INTO `base_dynamic_form` VALUES (1552656018381422592, '测试表单', 'test', '{\"list\":[{\"type\":\"input\",\"label\":\"输入框\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"aa\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"文本框\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"bb\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}],\"config\":{\"layout\":\"horizontal\",\"labelCol\":{\"xs\":4,\"sm\":4,\"md\":4,\"lg\":4,\"xl\":4,\"xxl\":4},\"labelWidth\":100,\"labelLayout\":\"flex\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1399985191002447872, '2022-07-29 09:55:22', 0, 7); INSERT INTO `base_dynamic_form` VALUES (1552656018381422593, '测试表单1', 'test1', '{\"list\":[{\"type\":\"input\",\"label\":\"申请人\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"apply_by\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"input\",\"label\":\"请假天数\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":false,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"leave_days\",\"key\":\"input_1662106166142\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"备注\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"remark\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"switch\",\"label\":\"开关\",\"options\":{\"defaultValue\":false,\"hidden\":false,\"disabled\":false},\"model\":\"switch_1662108221389\",\"key\":\"switch_1662108221389\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"table\",\"label\":\"表格布局\",\"trs\":[{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]},{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[{\"type\":\"editor\",\"label\":\"富文本\",\"icon\":\"icon-LC_icon_edit_line_1\",\"list\":[],\"options\":{\"height\":300,\"placeholder\":\"请输入\",\"defaultValue\":\"\",\"chinesization\":true,\"hidden\":false,\"disabled\":false,\"showLabel\":false,\"width\":\"100%\"},\"model\":\"editor_1662106288134\",\"key\":\"editor_1662106288134\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]}],\"options\":{\"width\":\"100%\",\"bordered\":true,\"bright\":false,\"small\":true,\"customStyle\":\"\"},\"key\":\"table_1662106283652\"}],\"config\":{\"layout\":\"vertical\",\"labelCol\":{\"xs\":6,\"sm\":6,\"md\":6,\"lg\":6,\"xl\":6,\"xxl\":6},\"labelWidth\":100,\"labelLayout\":\"Grid\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1414143554414059520, '2022-09-02 16:44:01', 0, 12); +-- ---------------------------- +-- Table structure for base_general_template +-- ---------------------------- +DROP TABLE IF EXISTS `base_general_template`; +CREATE TABLE `base_general_template` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板名称', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板代码', + `use_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '使用类型(导入/导出)', + `file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板类型', + `file_suffix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板后缀名', + `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '状态', + `file_id` bigint(20) NULL DEFAULT NULL COMMENT '文件ID', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '通用模板管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_general_template +-- ---------------------------- + -- ---------------------------- -- Table structure for base_key_value -- ---------------------------- @@ -3647,9 +3651,9 @@ CREATE TABLE `base_key_value` ( `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -3673,9 +3677,9 @@ CREATE TABLE `base_param` ( `internal` bit(1) NOT NULL COMMENT '内置参数', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -3685,11 +3689,7 @@ CREATE TABLE `base_param` ( -- Records of base_param -- ---------------------------- INSERT INTO `base_param` VALUES (1452842684284891136, '测试', 'test.v1', '123', 1, b'1', b'0', NULL, 1399985191002447872, '2021-10-26 11:41:03', 1399985191002447872, '2021-10-26 11:41:03', 0, 0); -INSERT INTO `base_param` VALUES (1500338438182789120, '结算台聚合支付请求地址', 'CashierAggregateUrl', 'http://127.0.0.1/api/', 1, b'1', b'1', '', 1399985191002447872, '2022-03-06 13:12:13', 1399985191002447872, '2022-05-01 15:03:03', 0, 3); -INSERT INTO `base_param` VALUES (1520668030248361984, '文件服务器地址', 'FileServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-01 15:34:46', 1399985191002447872, '2022-05-19 12:53:21', 0, 5); -INSERT INTO `base_param` VALUES (1529281530059161600, 'websocket服务器地址', 'WebsocketServerUrl', 'ws://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-25 10:01:44', 1399985191002447872, '2022-05-25 10:01:44', 0, 0); -INSERT INTO `base_param` VALUES (1545765299880448000, '服务器地址', 'ServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-07-09 21:42:21', 1399985191002447872, '2022-07-09 21:42:21', 0, 0); -INSERT INTO `base_param` VALUES (1547511252795912192, '微信jsapi支付回调服务地址', 'JsapiRedirectUrl', 'http://127.0.0.1/api/', 1, b'1', b'1', '', 1414143554414059520, '2022-07-14 17:20:09', 1414143554414059520, '2022-07-14 17:20:09', 0, 0); +INSERT INTO `base_param` VALUES (1529281530059161600, 'websocket服务器地址', 'WebsocketServerUrl', 'ws://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-25 10:01:44', 1399985191002447872, '2023-10-21 22:31:38', 0, 2); -- ---------------------------- -- Table structure for base_province @@ -3736,6 +3736,31 @@ INSERT INTO `base_province` VALUES ('63', '青海省'); INSERT INTO `base_province` VALUES ('64', '宁夏回族自治区'); INSERT INTO `base_province` VALUES ('65', '新疆维吾尔自治区'); +-- ---------------------------- +-- Table structure for base_query_sql +-- ---------------------------- +DROP TABLE IF EXISTS `base_query_sql`; +CREATE TABLE `base_query_sql` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `database_id` bigint(20) NULL DEFAULT NULL COMMENT '数据源ID', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称', + `is_list` bit(1) NULL DEFAULT NULL COMMENT '是否集合', + `sql` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'sql语句', + `params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'SQL查询参数', + `fields` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'SQL查询结果字段', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'SQL查询语句' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_query_sql +-- ---------------------------- + -- ---------------------------- -- Table structure for base_street -- ---------------------------- @@ -3768,141 +3793,6 @@ CREATE TABLE `base_village` ( -- Records of base_village -- ---------------------------- --- ---------------------------- --- Table structure for bpm_instance --- ---------------------------- -DROP TABLE IF EXISTS `bpm_instance`; -CREATE TABLE `bpm_instance` ( - `id` bigint(20) NOT NULL, - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程标题', - `model_id` bigint(20) NULL DEFAULT NULL COMMENT '模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义ID', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程实例的状态', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程实例扩展' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_instance --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_model --- ---------------------------- -DROP TABLE IF EXISTS `bpm_model`; -CREATE TABLE `bpm_model` ( - `id` bigint(20) NOT NULL, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `model_type` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程类型', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发布状态', - `enable` bit(1) NULL DEFAULT NULL COMMENT '启用状态', - `deploy_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '部署id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称', - `def_remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程备注', - `main_process` bit(1) NULL DEFAULT NULL COMMENT '是否主流程', - `process_version` int(8) NULL DEFAULT NULL COMMENT '流程版本号', - `model_editor_xml` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '流程xml', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程模型' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_model --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_model_node --- ---------------------------- -DROP TABLE IF EXISTS `bpm_model_node`; -CREATE TABLE `bpm_model_node` ( - `id` bigint(20) NOT NULL, - `model_id` bigint(20) NOT NULL COMMENT '关联模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `multi` bit(1) NOT NULL COMMENT '是否多任务', - `sequential` bit(1) NULL DEFAULT NULL COMMENT '是否串签', - `or_sign` bit(1) NULL DEFAULT NULL COMMENT '是否是或签', - `ratio_pass` bit(1) NULL DEFAULT NULL COMMENT '是否比例通过', - `pass_ratio` int(3) NULL DEFAULT NULL COMMENT '通过比例', - `reject` bit(1) NOT NULL COMMENT '是否允许驳回', - `back` bit(1) NOT NULL COMMENT '是否允许回退', - `retrieve` bit(1) NOT NULL COMMENT '是否允许取回', - `skip` bit(1) NOT NULL COMMENT '是否跳过当前节点', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `assign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分配类型', - `assign_raw` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的原始数据', - `assign_show` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的数据的展示', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '模型任务节点配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_model_node --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_task --- ---------------------------- -DROP TABLE IF EXISTS `bpm_task`; -CREATE TABLE `bpm_task` ( - `id` bigint(20) NOT NULL, - `task_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '任务ID', - `execution_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务执行 ID', - `multi_id` bigint(20) NULL DEFAULT NULL COMMENT '多实例关联id', - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称(业务标题)', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理状态', - `result` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理结果', - `reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理意见', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '当前处理人', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '当前处理人', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程任务扩展' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_task --- ---------------------------- - -- ---------------------------- -- Table structure for common_sequence_range -- ---------------------------- @@ -3912,9 +3802,9 @@ CREATE TABLE `common_sequence_range` ( `range_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '区间key', `range_value` bigint(20) NOT NULL COMMENT '区间开始值', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -3935,9 +3825,9 @@ CREATE TABLE `demo_data_encrypt` ( `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -3959,9 +3849,9 @@ CREATE TABLE `demo_data_perm` ( `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者名称', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -3988,9 +3878,9 @@ CREATE TABLE `demo_data_sensitive` ( `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮件', `other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其他', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4012,14 +3902,14 @@ CREATE TABLE `demo_super_query` ( `age` int(5) NULL DEFAULT NULL COMMENT '年龄', `vip` bit(1) NULL DEFAULT NULL COMMENT '是否vip', `birthday` date NULL DEFAULT NULL COMMENT '生日', - `work_time` time(0) NULL DEFAULT NULL COMMENT '上班时间', - `registration_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', + `work_time` time NULL DEFAULT NULL COMMENT '上班时间', + `registration_time` datetime NULL DEFAULT NULL COMMENT '注册时间', `political` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '政治面貌', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4039,97 +3929,90 @@ INSERT INTO `demo_super_query` VALUES (1496373512871284736, '刘备', 108, b'0', -- ---------------------------- DROP TABLE IF EXISTS `iam_client`; CREATE TABLE `iam_client` ( - `id` bigint(20) NOT NULL, + `id` bigint(20) NOT NULL COMMENT '主键', `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `system` bit(1) NOT NULL COMMENT '是否系统内置', + `internal` bit(1) NOT NULL COMMENT '是否系统内置', `enable` bit(1) NOT NULL COMMENT '是否可用', + `default_endow` bit(1) NULL DEFAULT NULL COMMENT '新注册的用户是否默认赋予该终端', `login_type_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联登录方式\r\n', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '认证终端' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of iam_client -- ---------------------------- -INSERT INTO `iam_client` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-07-02 14:55:11', 4, 0); -INSERT INTO `iam_client` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-06-29 18:31:45', 1, 0); -INSERT INTO `iam_client` VALUES (1580487061605175296, 'adminv3', 'pc管理端(vue3版)', b'0', b'1', '1430430071299207168,1430478946919653376,1435138582839009280,1542091599907115008,1542804450312122368,1543126042909016064', 'vue3版本', 1399985191002447872, '2022-10-13 17:14:14', 1399985191002447872, '2022-10-13 17:14:25', 1, 0); -INSERT INTO `iam_client` VALUES (1626840094767714304, 'GoView', '可视化平台', b'0', b'1', '1430430071299207168', '', 1414143554414059520, '2023-02-18 15:04:38', 1414143554414059520, '2023-02-18 15:04:38', 0, 0); +INSERT INTO `iam_client` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', b'1', '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2023-10-19 19:58:31', 5, b'0'); +INSERT INTO `iam_client` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2023-10-19 19:58:27', 2, b'0'); +INSERT INTO `iam_client` VALUES (1580487061605175296, 'adminv3', 'pc管理端(vue3版)', b'0', b'1', b'1', '1430430071299207168,1430478946919653376,1435138582839009280,1542091599907115008,1542804450312122368,1543126042909016064', 'vue3版本', 1399985191002447872, '2022-10-13 17:14:14', 1399985191002447872, '2023-10-19 19:58:21', 3, b'0'); +INSERT INTO `iam_client` VALUES (1626840094767714304, 'GoView', '可视化平台', b'0', b'1', b'1', '1430430071299207168', '', 1414143554414059520, '2023-02-18 15:04:38', 1399985191002447872, '2023-10-19 19:58:34', 1, b'0'); -- ---------------------------- --- Table structure for iam_data_scope +-- Table structure for iam_data_role -- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope`; -CREATE TABLE `iam_data_scope` ( +DROP TABLE IF EXISTS `iam_data_role`; +CREATE TABLE `iam_data_role` ( `id` bigint(20) NOT NULL COMMENT '角色ID', `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `type` int(4) NOT NULL COMMENT '类型', + `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据范围权限' ROW_FORMAT = DYNAMIC; -- ---------------------------- --- Records of iam_data_scope +-- Records of iam_data_role -- ---------------------------- -INSERT INTO `iam_data_scope` VALUES (1474706893178871808, 'self', '自身数据', 1, '只能查看自身范围的数据', 1399985191002447872, '2021-12-25 19:41:37', 1399985191002447872, '2021-12-25 19:41:37', 1, 0); -INSERT INTO `iam_data_scope` VALUES (1474717084985270272, 'user', '用户数据权限', 2, '用户数据权限', 1399985191002447872, '2021-12-25 20:22:07', 1399985191002447872, '2021-12-25 20:22:07', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717160671485952, 'dept', '部门权限', 3, '', 1399985191002447872, '2021-12-25 20:22:25', 1399985191002447872, '2021-12-25 20:22:25', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717276908232704, 'userAndDept', '用户和部门权限', 4, '', 1399985191002447872, '2021-12-25 20:22:52', 1399985191002447872, '2021-12-25 20:22:52', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717344562356224, 'all', '全部数据', 5, '', 1399985191002447872, '2021-12-25 20:23:09', 1399985191002447872, '2021-12-25 20:23:09', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990268903804928, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:34', 1399985191002447872, '2022-01-03 21:08:35', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990290521247744, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:40', 1399985191002447872, '2022-01-03 21:08:40', 0, 1); -INSERT INTO `iam_data_scope` VALUES (1477990439800721408, 'belong_dept_and_sub', '所在及下级部门', 7, '', 1399985191002447872, '2022-01-03 21:09:15', 1399985191002447872, '2022-01-03 21:09:15', 0, 0); +INSERT INTO `iam_data_role` VALUES (1474706893178871808, 'self', '自身数据', 'self', '只能查看自身范围的数据', 1399985191002447872, '2021-12-25 19:41:37', 1399985191002447872, '2021-12-25 19:41:37', 0, 0); +INSERT INTO `iam_data_role` VALUES (1474717084985270272, 'user', '用户(测试)', 'user', '用户数据权限', 1399985191002447872, '2021-12-25 20:22:07', 1399985191002447872, '2023-11-29 10:34:24', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717160671485952, 'dept', '部门(测试)', 'dept', '', 1399985191002447872, '2021-12-25 20:22:25', 1399985191002447872, '2023-11-29 10:34:04', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717276908232704, 'userAndDept', '用户和部门(测试)', 'dept_and_user', '', 1399985191002447872, '2021-12-25 20:22:52', 1399985191002447872, '2023-11-29 10:34:13', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717344562356224, 'all', '全部数据', 'all', '', 1399985191002447872, '2021-12-25 20:23:09', 1399985191002447872, '2023-11-29 10:28:40', 1, 0); +INSERT INTO `iam_data_role` VALUES (1477990268903804928, 'self_dept', '所在部门', 'self_dept', '', 1399985191002447872, '2022-01-03 21:08:34', 1399985191002447872, '2023-11-29 10:33:38', 5, 0); +INSERT INTO `iam_data_role` VALUES (1477990439800721408, 'self_dept_and_sub', '当前加下级部门', 'self_dept_sub', '', 1399985191002447872, '2022-01-03 21:09:15', 1399985191002447872, '2023-11-29 13:55:12', 9, 0); -- ---------------------------- --- Table structure for iam_data_scope_dept +-- Table structure for iam_data_role_dept -- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope_dept`; -CREATE TABLE `iam_data_scope_dept` ( +DROP TABLE IF EXISTS `iam_data_role_dept`; +CREATE TABLE `iam_data_role_dept` ( `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', + `role_id` bigint(20) NOT NULL COMMENT '数据角色id', `dept_id` bigint(20) NOT NULL COMMENT '部门id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围部门关联配置' ROW_FORMAT = DYNAMIC; -- ---------------------------- --- Records of iam_data_scope_dept +-- Records of iam_data_role_dept -- ---------------------------- -INSERT INTO `iam_data_scope_dept` VALUES (1478742690014101504, 1474717160671485952, 1477978464559484928); -INSERT INTO `iam_data_scope_dept` VALUES (1478742920071675904, 1474717160671485952, 1477977592291053568); -- ---------------------------- --- Table structure for iam_data_scope_user +-- Table structure for iam_data_role_user -- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope_user`; -CREATE TABLE `iam_data_scope_user` ( +DROP TABLE IF EXISTS `iam_data_role_user`; +CREATE TABLE `iam_data_role_user` ( `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', + `role_id` bigint(20) NOT NULL COMMENT '数据角色id', `user_id` bigint(20) NOT NULL COMMENT '用户id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围用户关联配置' ROW_FORMAT = DYNAMIC; -- ---------------------------- --- Records of iam_data_scope_user +-- Records of iam_data_role_user -- ---------------------------- -INSERT INTO `iam_data_scope_user` VALUES (1478738754876149760, 1474717084985270272, 1399985191002447872); -INSERT INTO `iam_data_scope_user` VALUES (1478738766460817408, 1474717084985270272, 1414143554414059520); -INSERT INTO `iam_data_scope_user` VALUES (1478738811792855040, 1474717084985270272, 1477997602862505984); -INSERT INTO `iam_data_scope_user` VALUES (1478747304583114752, 1474717084985270272, 1435894470432456704); -INSERT INTO `iam_data_scope_user` VALUES (1478747304587309056, 1474717084985270272, 1477997391729631232); -- ---------------------------- -- Table structure for iam_dept @@ -4147,9 +4030,9 @@ CREATE TABLE `iam_dept` ( `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4173,40 +4056,131 @@ INSERT INTO `iam_dept` VALUES (1477978610865197056, 1477977592291053568, '高新 INSERT INTO `iam_dept` VALUES (1477978810526650368, 1477977827897692160, '奎文办事部', 0, '2', '1_2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:03', 1399985191002447872, '2022-01-03 20:23:03', 0, 0); INSERT INTO `iam_dept` VALUES (1477978883247493120, 1477977827897692160, '潍城办事部', 0, '2', '1_2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:20', 1399985191002447872, '2022-01-03 20:23:20', 0, 0); +-- ---------------------------- +-- Table structure for iam_login_security_config +-- ---------------------------- +DROP TABLE IF EXISTS `iam_login_security_config`; +CREATE TABLE `iam_login_security_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `client_id` bigint(20) NULL DEFAULT NULL COMMENT '关联终端ID', + `require_login_change_pwd` bit(1) NULL DEFAULT NULL COMMENT '修改密码是否需要重新登录', + `captcha_enable` bit(1) NULL DEFAULT NULL COMMENT '默认启用验证码', + `max_captcha_error_count` int(11) NULL DEFAULT NULL COMMENT '出现验证码的错误次数', + `allow_multi_login` bit(1) NULL DEFAULT NULL COMMENT '同端是否允许同时登录', + `allow_multi_terminal_login` bit(1) NULL DEFAULT NULL COMMENT '多终端是否允许同时登录', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '登录安全策略' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_login_security_config +-- ---------------------------- + -- ---------------------------- -- Table structure for iam_login_type -- ---------------------------- DROP TABLE IF EXISTS `iam_login_type`; CREATE TABLE `iam_login_type` ( - `id` bigint(20) NOT NULL, + `id` bigint(20) NOT NULL COMMENT '主键', `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长 秒', + `internal` bit(1) NOT NULL COMMENT '是否系统内置', + `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长(秒)', + `captcha_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '验证码类型', `captcha` bit(1) NOT NULL COMMENT '启用验证码', - `pwd_err_num` int(8) NOT NULL COMMENT '密码错误次数', `enable` bit(1) NOT NULL COMMENT '是否可用', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录方式' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of iam_login_type -- ---------------------------- -INSERT INTO `iam_login_type` VALUES (1430430071299207168, 'password', '账号密码登陆', 'password', b'1', 3600, b'0', -1, b'1', NULL, 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-11-03 22:24:53', 20, 0); -INSERT INTO `iam_login_type` VALUES (1430478946919653376, 'miniApp', '微信小程序', 'openId', b'0', 99999, b'0', 0, b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2022-07-16 12:32:26', 3, 0); -INSERT INTO `iam_login_type` VALUES (1435138582839009280, 'phone', '手机短信登录', 'openId', b'0', 3600, b'0', 0, b'1', NULL, 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-07-16 12:32:19', 5, 0); -INSERT INTO `iam_login_type` VALUES (1542091599907115008, 'dingTalk', '钉钉', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, 0); -INSERT INTO `iam_login_type` VALUES (1542804450312122368, 'weCom', '企业微信', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, 0); -INSERT INTO `iam_login_type` VALUES (1543126042909016064, 'weChat', '微信登录', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 0, '2022-10-12 22:15:05', 2, 0); -INSERT INTO `iam_login_type` VALUES (1626845524617203712, 'passwordGoView', '可视化平台登录', 'password', b'0', 3600, b'0', -1, b'1', '', 1414143554414059520, '2023-02-18 15:26:13', 1414143554414059520, '2023-02-18 15:26:13', 0, 0); +INSERT INTO `iam_login_type` VALUES (1430430071299207168, 'password', '账号密码登陆', 'password', b'1', 3600, '-1', b'0', b'1', NULL, 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-11-03 22:24:53', 20, b'0'); +INSERT INTO `iam_login_type` VALUES (1430478946919653376, 'miniApp', '微信小程序', 'openId', b'0', 99999, '0', b'0', b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2022-07-16 12:32:26', 3, b'0'); +INSERT INTO `iam_login_type` VALUES (1435138582839009280, 'phone', '手机短信登录', 'openId', b'0', 3600, '0', b'0', b'1', NULL, 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-07-16 12:32:19', 5, b'0'); +INSERT INTO `iam_login_type` VALUES (1542091599907115008, 'dingTalk', '钉钉', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, b'0'); +INSERT INTO `iam_login_type` VALUES (1542804450312122368, 'weCom', '企业微信', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, b'0'); +INSERT INTO `iam_login_type` VALUES (1543126042909016064, 'weChat', '微信登录', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 0, '2022-10-12 22:15:05', 2, b'0'); +INSERT INTO `iam_login_type` VALUES (1626845524617203712, 'passwordGoView', '可视化平台登录', 'password', b'0', 3600, '-1', b'0', b'1', '', 1414143554414059520, '2023-02-18 15:26:13', 1414143554414059520, '2023-02-18 15:26:13', 0, b'0'); + +-- ---------------------------- +-- Table structure for iam_password_change_history +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_change_history`; +CREATE TABLE `iam_password_change_history` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户Id', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码更改历史' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_change_history +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_password_login_fail_record +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_login_fail_record`; +CREATE TABLE `iam_password_login_fail_record` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', + `fail_count` int(11) NULL DEFAULT NULL COMMENT '登录失败次数', + `fail_time` datetime NULL DEFAULT NULL COMMENT '登录失败时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码登录失败记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_login_fail_record +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_password_security_config +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_security_config`; +CREATE TABLE `iam_password_security_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `max_pwd_error_count` int(11) NULL DEFAULT NULL COMMENT '最大密码错误数', + `error_lock_time` int(11) NULL DEFAULT NULL COMMENT '密码错误锁定时间(分钟)', + `require_change_pwd` bit(1) NULL DEFAULT NULL COMMENT '强制修改初始密码', + `update_frequency` int(11) NULL DEFAULT NULL COMMENT '更新频率', + `expire_remind` int(11) NULL DEFAULT NULL COMMENT '到期提醒(天数)', + `same_as_login_name` bit(1) NULL DEFAULT NULL COMMENT '与登录名相同', + `recent_password` int(11) NULL DEFAULT NULL COMMENT '不能与近期多少次密码相同', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码安全策略' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_security_config +-- ---------------------------- +INSERT INTO `iam_password_security_config` VALUES (1714844168393515008, 5, 10, b'1', 90, 14, b'0', 5, 1399985191002447872, '2023-10-19 11:21:25', 1399985191002447872, '2023-10-19 11:21:25', 0, b'0'); -- ---------------------------- -- Table structure for iam_perm_menu @@ -4236,9 +4210,9 @@ CREATE TABLE `iam_perm_menu` ( `admin` bit(1) NOT NULL COMMENT '系统菜单', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4247,106 +4221,6 @@ CREATE TABLE `iam_perm_menu` ( -- ---------------------------- -- Records of iam_perm_menu -- ---------------------------- -INSERT INTO `iam_perm_menu` VALUES (1414596052497092608, 'admin', NULL, '系统管理', 'system', '', NULL, 'desktop', b'0', b'0', 'RouteView', '', '/system', '/system/user', -99999, 0, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:02:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596647509446656, 'admin', 1452569691537256448, '用户管理', 'User', '', NULL, '', b'0', b'0', 'system/user/UserList', '', '/system/userAuth/user', '', 0, 1, b'0', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:17:40', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596773275652096, 'admin', 1414596052497092608, '菜单管理', 'Menu', '', NULL, '', b'0', b'0', 'system/menu/MenuList', '', '/system/permission/menu', '', 0, 1, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596805538238464, 'admin', 1452569339987472384, '角色管理', 'Role', '', NULL, '', b'0', b'0', 'system/role/RoleList', '', '/system/permission/role', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:04', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596842322284544, 'admin', 1452569691537256448, '部门管理', 'Dept', '', NULL, '', b'0', b'0', 'system/dept/DeptList', '', '/system/userAuth/dept', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:31', 7, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596877617352704, 'admin', 1452571269199540224, '数据字典', 'Dict', '', b'0', '', b'0', b'0', 'system/dict/DictList', '', '/system/config/dict', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2022-05-19 09:04:55', 11, 0); -INSERT INTO `iam_perm_menu` VALUES (1431082258161434624, 'admin', 1452569691537256448, '在线用户管理', 'OnlineUser', '', NULL, '', b'0', b'0', 'system/online/OnlineUserList', NULL, '/system/userAuth/online', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:32:53', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1431083330909208576, 'admin', 1541427353886859264, '登录方式', 'LoginType', '', b'0', '', b'0', b'0', 'system/client/LoginTypeList', NULL, '/system/config/loginType', '', 9, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:09', 1399985191002447872, '2022-07-05 21:18:12', 11, 0); -INSERT INTO `iam_perm_menu` VALUES (1431089129232498688, 'admin', 1452569339987472384, '请求权限管理', 'Path', '', NULL, '', b'0', b'0', 'system/path/PathList', NULL, '/system/permission/path', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 11:00:11', 1399985191002447872, '2021-08-27 11:00:11', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1431152689832525824, 'admin', NULL, '系统监控', 'monitor', '', b'0', 'radar-chart', b'0', b'0', 'RouteView', NULL, '/monitor', '', 0, 0, b'1', b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2021-08-27 15:12:45', 1399985191002447872, '2022-06-17 17:57:30', 21, 0); -INSERT INTO `iam_perm_menu` VALUES (1431153358157348864, 'admin', 1431152689832525824, '接口文档', 'ApiSwagger', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, b'1', b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 15:15:25', 1399985191002447872, '2022-10-14 17:47:12', 18, 0); -INSERT INTO `iam_perm_menu` VALUES (1435143678721236992, 'admin', 1452567897717321728, '登录日志', 'LoginLog', '', b'0', '', b'0', b'0', 'starter/log/LoginLogList', NULL, '/monitor/log/loginLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-07 15:31:31', 1399985191002447872, '2022-10-20 20:38:06', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1435476255797624832, 'admin', 1452567897717321728, '操作日志', 'OperateLog', '', b'0', '', b'0', b'0', 'starter/log/OperateLogList', NULL, '/monitor/log/OperateLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-08 13:33:04', 1399985191002447872, '2022-10-20 20:38:12', 8, 0); -INSERT INTO `iam_perm_menu` VALUES (1438061887002759168, 'admin', NULL, '通知管理', 'notice', '', NULL, 'message', b'0', b'0', 'RouteView', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 16:47:26', 1399985191002447872, '2021-09-15 16:47:26', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1438072357281542144, 'admin', 1438061887002759168, '邮件配置', 'MailConfig', '', NULL, '', b'0', b'0', 'notice/mail/MailConfigList', NULL, '/notice/mailConfig', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 17:29:03', 1399985191002447872, '2021-09-15 17:29:03', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1439196893514031104, 'admin', 1438061887002759168, '消息模板', 'MessageTemplate', '', NULL, '', b'0', b'0', 'notice/template/TemplateList', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-18 19:57:33', 1399985191002447872, '2021-09-18 19:57:33', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1440216178722050048, 'admin', 1438061887002759168, '钉钉', 'DingTalk', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/notice/dingTalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:27:50', 1399985191002447872, '2021-09-21 15:27:50', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1440216612211757056, 'admin', 1450822511087271936, '钉钉机器人', 'DingTalkRobot', '', b'0', '', b'0', b'0', 'third/dingtalk/robot/DingRobotConfigList', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:29:33', 1399985191002447872, '2022-07-26 13:34:35', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450473063320526848, 'admin', 1452569691537256448, '第三方登录', 'Social', '', b'0', '', b'1', b'0', 'system/social/SocialList', NULL, '/system/userAuth/social', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-19 22:45:01', 1399985191002447872, '2022-07-26 13:35:47', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450803906215886848, 'admin', 1452571269199540224, '定时任务', 'QuartzJobList', '', NULL, '', b'0', b'0', 'starter/quartz/QuartzJobList', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 20:39:41', 1399985191002447872, '2021-10-20 20:39:41', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450819607680991232, 'admin', NULL, '第三方对接', 'third', '', b'0', 'branches', b'0', b'0', 'RouteView', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:42:04', 1399985191002447872, '2022-07-26 13:34:02', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821723027881984, 'admin', 1450819607680991232, '微信', 'WeChat', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:50:28', 1399985191002447872, '2022-08-03 23:23:10', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821877831254016, 'admin', 1450819607680991232, '企业微信', 'WeCom', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:51:05', 1399985191002447872, '2022-08-03 23:22:58', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822511087271936, 'admin', 1450819607680991232, '钉钉', 'DingTalk', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:53:36', 1399985191002447872, '2022-08-03 23:23:29', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822842995130368, 'admin', NULL, '支付管理', 'PayManager', '', NULL, 'pay-circle', b'0', b'0', 'RouteView', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:54:55', 1399985191002447872, '2021-10-20 21:54:55', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450823960236081152, 'admin', 1450822842995130368, '支付通道', 'PayChannel', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:22', 1399985191002447872, '2021-10-20 21:59:22', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824117849636864, 'admin', 1450823960236081152, '支付宝', 'AliPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/alipay/AliPayConfigList', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:59', 1399985191002447872, '2021-10-20 21:59:59', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824319868289024, 'admin', 1450823960236081152, '微信支付', 'WeChatPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/wechat/WeChatConfigList', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:00:48', 1399985191002447872, '2021-10-20 22:00:48', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824637876224000, 'admin', 1450823960236081152, '云闪付', 'UnionPayConfig', '', b'0', '', b'0', b'0', 'payment/channel/unionpay/UnionPayConfigList', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:02:03', 1399985191002447872, '2022-03-04 16:12:13', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824875198332928, 'admin', 1450823960236081152, '现金支付', 'CashPayConfig', '', b'0', '', b'1', b'0', '', NULL, '/payment/channel/cash', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:03:00', 1399985191002447872, '2022-03-04 16:12:08', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825488577544192, 'admin', 1546850918849249280, '收银台', 'PayCashier', '', b'0', '', b'0', b'0', 'payment/cashier/Cashier', NULL, '/demo/pay/cashier', '', -1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:26', 1399985191002447872, '2022-07-12 21:37:22', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825615857893376, 'admin', 1450822842995130368, '订单管理', 'PayOrder', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:57', 1399985191002447872, '2021-10-20 22:05:57', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825819436826624, 'admin', 1450822842995130368, '回调记录', 'PayNotify', '', NULL, '', b'0', b'0', 'payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:06:45', 1399985191002447872, '2021-10-20 22:06:45', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1450826890318135296, 'admin', 1450825615857893376, '支付订单', 'PaymentOrder', '', b'0', '', b'0', b'0', 'payment/order/payment/PaymentList', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:11:00', 1399985191002447872, '2022-02-25 15:17:07', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827159626006528, 'admin', 1450825615857893376, '退款订单', 'ReturnOrder', '', b'0', '', b'0', b'0', 'payment/order/refund/RefundRecordList', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:05', 1399985191002447872, '2022-03-04 15:44:06', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827308515409920, 'admin', 1450825615857893376, '转账订单', 'TransferOrder', '', b'0', '', b'1', b'0', 'payment/order/transfer/TransferList', NULL, '/payment/order/transfer', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:40', 1399985191002447872, '2022-03-04 15:33:31', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827660459458560, 'admin', 1438061887002759168, '微信', 'NoticeWeChat', '', b'0', '', b'0', b'0', 'Dev', NULL, '/notice/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:14:04', 1399985191002447872, '2022-06-21 20:53:04', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1452567897717321728, 'admin', 1431152689832525824, '审计日志', 'auditLog', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/monitor/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:29:09', 1399985191002447872, '2022-10-20 20:37:46', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569339987472384, 'admin', 1414596052497092608, '权限管理', 'permission', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:34:53', 1399985191002447872, '2021-10-25 17:34:53', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569691537256448, 'admin', 1414596052497092608, '用户信息', 'userAuth', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/userAuth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:36:17', 1399985191002447872, '2021-10-25 17:36:17', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452571269199540224, 'admin', 1414596052497092608, '系统配置', 'systemConfig', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:42:33', 1399985191002447872, '2021-10-25 17:42:33', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452638905302966272, 'admin', 1452571269199540224, '系统参数', 'SystemParam', '', NULL, '', b'0', b'0', 'system/param/SystemParamList', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 22:11:18', 1399985191002447872, '2021-10-25 22:11:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1474694545336676352, 'admin', 1452569339987472384, '数据范围权限', 'DataScope', '', NULL, '', b'0', b'0', 'system/scope/DataScopeList', NULL, '/system/permission/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-12-25 18:52:33', 1399985191002447872, '2021-12-25 18:52:33', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1480839877352476672, 'admin', 1452567897717321728, '数据版本日志', 'DataVersionLog', NULL, b'0', '', b'0', b'0', 'starter/log/DataVersionLogList', NULL, '/monitor/log/DataVersionLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-01-11 17:51:54', 1399985191002447872, '2022-10-20 20:38:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1490984296616263680, 'admin', 1552207982510706688, '文件管理', 'FIleUpLoad', NULL, b'0', '', b'0', b'0', 'develop/file/FileUploadList', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-08 17:42:12', 1399985191002447872, '2022-07-28 09:16:56', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1495013564652429312, 'admin', 1552207982510706688, '代码生成', 'CodeGen', NULL, b'0', '', b'0', b'0', 'develop/codegen/CodeGenList', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-19 20:33:04', 1399985191002447872, '2022-07-27 16:25:05', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1495968302034210816, 'admin', NULL, '功能演示', 'Demo', NULL, b'0', 'block', b'0', b'0', 'RouteView', NULL, '/demo', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:46:52', 1399985191002447872, '2022-05-10 11:02:05', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1495969099987963904, 'admin', 1495968302034210816, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:50:02', 1399985191002447872, '2022-03-24 16:27:46', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1496020308992143360, 'admin', 1495968302034210816, '超级查询', 'SuperQueryDemo', NULL, b'0', '', b'0', b'0', 'demo/query/SuperQueryDemoList', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 15:13:31', 1399985191002447872, '2022-05-27 17:34:41', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501740492360962048, 'admin', 1450822842995130368, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:03:29', 1399985191002447872, '2022-03-10 10:04:53', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742229142556672, 'admin', 1501740492360962048, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:10:23', 1399985191002447872, '2022-03-10 17:06:19', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742417378725888, 'admin', 1501740492360962048, '个人钱包', 'PersonalWallet', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:11:08', 1399985191002447872, '2022-03-10 17:06:10', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501847310319972352, 'admin', 1546850918849249280, '组合支付', 'CombinationCashier', NULL, b'0', '', b'0', b'0', 'payment/combination/CombinationCashier', NULL, '/demo/pay/combination', '', -0.5, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 17:07:56', 1399985191002447872, '2022-07-12 21:37:59', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1502926397176242176, 'admin', 1450822842995130368, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', 'payment/voucher/VoucherList', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-13 16:35:51', 1399985191002447872, '2022-03-14 19:39:45', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910599819165696, 'admin', 1495969099987963904, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', 'demo/data/perm/DataPermDemoList', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:27:39', 1399985191002447872, '2022-03-24 16:28:56', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910885463851008, 'admin', 1495969099987963904, '加密解密', 'DataEncryptDemo', NULL, b'0', '', b'0', b'0', 'demo/data/encrypt/DataEncryptDemoList', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:28:47', 1399985191002447872, '2022-03-24 16:28:47', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1506911113394913280, 'admin', 1495969099987963904, '数据脱敏', 'DataSensitiveDemo', NULL, b'0', '', b'0', b'0', 'demo/data/sensitive/DataSensitiveDemoList', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:29:41', 1399985191002447872, '2022-03-24 17:16:03', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1507998458886197248, 'admin', 1495968302034210816, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', 'demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-27 16:30:25', 1399985191002447872, '2022-03-27 16:30:25', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1509488473583562752, 'admin', 1495968302034210816, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', 'demo/idempotent/Idempotent', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-31 19:11:12', 1399985191002447872, '2022-05-27 17:35:00', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1511266086400524288, 'admin', 1450822511087271936, '钉钉配置', 'DingTalkConfig', NULL, b'0', '', b'1', b'0', 'third/dingtalk/config/DingTalkConfigList', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-04-05 16:54:48', 1399985191002447872, '2022-07-26 13:34:44', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1523860792695283712, 'admin', NULL, '商品管理', 'GoodsManager', NULL, b'0', 'car', b'1', b'0', 'RouteView', NULL, '/goods', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 11:01:40', 1399985191002447872, '2022-10-07 12:38:50', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1523941932282114048, 'admin', 1523860792695283712, '类目管理', 'CategoryManager', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/goods/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:05', 1399985191002447872, '2022-05-10 16:24:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1523942130555252736, 'admin', 1523941932282114048, '类目', 'Category', NULL, b'0', '', b'0', b'0', 'goods/category/CategoryList', NULL, '/goods/category/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:52', 1399985191002447872, '2022-05-10 16:25:23', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044195818278912, 'admin', 1523941932282114048, '品牌', 'Brand', NULL, b'0', '', b'0', b'0', 'goods/brand/BrandList', NULL, '/goods/category/brand', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:10:26', 1399985191002447872, '2022-05-10 23:14:20', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044395823665152, 'admin', 1523941932282114048, '规格', 'SpecificationList', NULL, b'0', '', b'0', b'0', 'goods/spec/SpecificationList', NULL, '/goods/category/spec', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:11:14', 1399985191002447872, '2022-05-10 23:13:51', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044678314233856, 'admin', 1523941932282114048, '参数组', 'ParameterGroup', NULL, b'0', '', b'1', b'0', 'goods/parameter/ParameterGroupList', NULL, '/goods/category/parameter', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:12:21', 1399985191002447872, '2022-05-12 20:30:23', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1525472571967860736, 'admin', 1523860792695283712, '商品', 'Goods', '', b'0', '', b'0', b'0', 'goods/goods/GoodsList', NULL, '/goods/goods', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-14 21:46:18', 1399985191002447872, '2022-05-14 21:46:18', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120084482084864, 'admin', 1495968302034210816, '消息中间件演示', 'MQDemo', NULL, b'0', '', b'0', b'0', 'demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:33:51', 1399985191002447872, '2022-05-31 15:12:15', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120684645044224, 'admin', 1530120084482084864, 'MQTT消息', 'MqttDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/mqtt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:14', 1399985191002447872, '2022-05-27 17:36:14', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1530120821144473600, 'admin', 1530120084482084864, 'RabbitMQ', 'RabbitDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/rabbit', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:47', 1399985191002447872, '2022-05-27 17:36:47', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1534000136370204672, 'admin', 1431152689832525824, 'ELK日志', 'ELK', '', b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 10:31:48', 1399985191002447872, '2022-06-07 10:31:48', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1534008203006652416, 'admin', 1431152689832525824, 'PlumeLog日志', 'PlumeLog', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 11:03:51', 1399985191002447872, '2022-06-07 11:06:13', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1535451167008436224, 'admin', 1431152689832525824, '系统信息', 'SysInfo', NULL, b'0', '', b'0', b'0', 'starter/monitor/SystemInfoMonitor', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-11 10:37:40', 1399985191002447872, '2022-06-13 13:07:46', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1535965936371085312, 'admin', 1431152689832525824, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', 'starter/monitor/RedisInfoMonitor', NULL, '/monitor/redis', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-12 20:43:11', 1399985191002447872, '2022-06-13 13:07:38', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1537730140522348544, 'admin', 1438061887002759168, '站内信', 'SiteMessageSender', '', b'0', '', b'0', b'0', 'notice/site/sender/SiteMessageList', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:33:30', 1399985191002447872, '2022-08-20 21:12:30', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1537732440632524800, 'admin', NULL, '个人办公', 'person', '', b'0', 'user', b'0', b'0', 'RouteView', NULL, '/person', '', -99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:42:38', 1399985191002447872, '2022-08-20 22:15:21', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1537733801860333568, 'admin', 1537732440632524800, '我的消息', 'PersonSiteMessage', NULL, b'0', '', b'0', b'0', 'notice/site/receive/SiteMessageList', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:48:03', 1399985191002447872, '2022-10-24 11:10:35', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1537735851818024960, 'admin', 1537732440632524800, '待办任务', 'MyTodoTaskList', NULL, b'0', '', b'0', b'0', 'office/mytodo/MyTodoList', NULL, '/person/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:56:11', 1399985191002447872, '2022-08-30 22:46:47', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1538160478872625152, 'admin', 1495968302034210816, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', 'demo/wangeditor/WangEditorDemo', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-18 22:03:30', 1399985191002447872, '2022-06-18 22:03:31', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1541355214204030976, 'admin', 1541427353886859264, '认证终端', 'Client', '', b'0', '', b'0', b'0', 'system/client/ClientList', NULL, '/system/config/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:08', 1399985191002447872, '2022-07-05 21:17:45', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1541427353886859264, 'admin', 1414596052497092608, '认证管理', 'Auth', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-27 22:24:54', 1399985191002447872, '2022-06-27 22:24:54', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1544952211901218816, 'admin', 1546850918849249280, '支付结算台演示', 'CashierDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/cashier', '', 0, 1, NULL, b'0', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-07-07 15:51:26', 1399985191002447872, '2022-11-23 15:31:08', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1546850918849249280, 'admin', 1495968302034210816, '支付演示', 'DemoPay', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/pay', '', 9, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-12 21:36:13', 1399985191002447872, '2022-08-03 14:49:16', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1551803592828932096, 'admin', 1450821877831254016, '企微机器人', 'WeComRobot', '', b'0', '', b'0', b'0', 'third/wecom/robot/WeComRobotConfigList', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-26 13:36:22', 1399985191002447872, '2022-10-24 11:07:27', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1552207982510706688, 'admin', NULL, '开发管理', 'develop', NULL, b'0', 'gold', b'0', b'0', 'RouteView', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:23:16', 1399985191002447872, '2022-07-27 16:39:09', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1552208167664062464, 'admin', 1552207982510706688, '动态表单', 'DynamicForm', NULL, b'0', '', b'0', b'0', 'develop/dynamicform/DynamicFormList', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:24:00', 1399985191002447872, '2022-07-27 16:38:05', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1554720980865380352, 'admin', 1495968302034210816, '消息通知', 'NoticeDemo', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:49:02', 1399985191002447872, '2022-08-03 14:49:02', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1554721654336385024, 'admin', 1554720980865380352, '邮件发送', 'EmailDemo', NULL, b'0', '', b'0', b'0', 'demo/notice/email/EmailSender', NULL, '/demo/notice/email', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:51:42', 1399985191002447872, '2022-08-03 14:51:42', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1554850179754975232, 'admin', 1450821723027881984, '消息模板', 'WeChatTemplate', NULL, b'0', '', b'0', b'0', 'third/wechat/template/WeChatTemplateList', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 23:22:25', 1399985191002447872, '2022-08-03 23:23:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1555835229426368512, 'admin', 1450821723027881984, '自定义菜单', 'WeChatMenu', NULL, b'0', '', b'0', b'0', 'third/wechat/menu/WeChatMenuList', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-06 16:36:39', 1399985191002447872, '2022-08-08 12:14:14', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1556997405528805376, 'admin', 1450821723027881984, '素材管理', 'WeChatMedia', NULL, b'0', '', b'0', b'0', 'third/wechat/media/WeChatMediaList', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-09 21:34:44', 1399985191002447872, '2022-08-09 21:34:44', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1562460770753544192, 'admin', NULL, '流程管理', 'Bpm', NULL, b'0', 'audit', b'0', b'0', 'RouteView', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:24:12', 1399985191002447872, '2022-08-24 23:25:11', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1562461289450536960, 'admin', 1562460770753544192, '流程模型', 'BpmModel', NULL, b'0', '', b'0', b'0', 'bpm/model/BpmModelList', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:26:15', 1399985191002447872, '2022-08-24 23:26:15', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1562461620766998528, 'admin', 1562460770753544192, '流程表单', 'BpmFrom', NULL, b'0', '', b'0', b'0', 'Dev', NULL, '/bpm/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:27:34', 1399985191002447872, '2022-08-24 23:27:56', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1563092672406859776, 'admin', 1537732440632524800, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', 'office/myapply/MyApplyList', NULL, '/person/myApply', '', 1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-26 17:15:09', 1399985191002447872, '2022-08-30 22:46:25', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1564626025579462656, 'admin', 1537732440632524800, '已办任务', 'MyDoneTaskList', NULL, b'0', '', b'0', b'0', 'office/mydone/MyDoneList', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-30 22:48:09', 1399985191002447872, '2022-08-30 22:48:29', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1571023702122766336, 'admin', 1562460770753544192, '未处理任务', 'BpmTodoTask', NULL, b'0', '', b'0', b'0', 'bpm/task/TodoTaskList', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:30:13', 1399985191002447872, '2022-09-17 14:31:23', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1571023925834358784, 'admin', 1562460770753544192, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', 'bpm/task/DoneTaskList', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:31:07', 1399985191002447872, '2022-09-17 14:31:07', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1571024250171498496, 'admin', 1562460770753544192, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', 'bpm/instance/InstanceList', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:32:24', 1399985191002447872, '2022-09-17 14:32:24', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1573669546890297344, 'admin', 1552207982510706688, '动态数据源', 'DynamicSource', NULL, b'0', '', b'0', b'0', 'develop/dynamicsource/DynamicDataSourceList', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-24 21:43:52', 1399985191002447872, '2022-09-24 21:43:52', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1580740450633101312, 'adminv3', NULL, '系统管理', 'System', NULL, b'0', 'ant-design:setting-outlined', b'0', b'0', 'Layout', NULL, '/system', '/system1/client', -99999, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:07', 1414143554414059520, '2022-10-18 15:32:09', 4, 0); INSERT INTO `iam_perm_menu` VALUES (1580740637841666048, 'adminv3', 1582253306356649984, '终端管理', 'ClientList', NULL, b'0', '', b'0', b'0', '/modules/system/client/ClientList.vue', NULL, '/system/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:51', 1414143554414059520, '2022-10-18 14:13:27', 5, 0); INSERT INTO `iam_perm_menu` VALUES (1580740758629232640, 'adminv3', 1582253306356649984, '登录方式', 'LoginTypeList', NULL, b'0', '', b'0', b'0', '/modules/system/loginType/LoginTypeList.vue', NULL, '/system/loginType', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:02:20', 1414143554414059520, '2022-10-18 14:13:40', 5, 0); @@ -4358,21 +4232,18 @@ INSERT INTO `iam_perm_menu` VALUES (1582249924602580992, 'adminv3', 158074045063 INSERT INTO `iam_perm_menu` VALUES (1582253011803262976, 'adminv3', 1580740450633101312, '用户信息', 'UserAuth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/user', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:11:30', 1414143554414059520, '2022-10-18 14:11:30', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1582253152903843840, 'adminv3', 1580740450633101312, '系统配置', 'SystemConfig', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:03', 1414143554414059520, '2022-10-18 14:12:03', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1582253306356649984, 'adminv3', 1580740450633101312, '认证管理', 'Auth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:40', 1414143554414059520, '2022-10-18 14:13:13', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582274981055909888, 'adminv3', NULL, '个人办公', 'Person', NULL, b'0', 'ant-design:align-right-outlined', b'0', b'0', 'Layout', NULL, '/person', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:38:47', 1414143554414059520, '2022-10-18 15:38:47', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1582275875424129024, 'adminv3', NULL, '系统监控', 'Monitor', NULL, b'0', 'ant-design:monitor-outlined', b'0', b'0', 'Layout', NULL, '/monitor', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:21', 1414143554414059520, '2022-10-19 17:29:29', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582275984849326080, 'adminv3', NULL, '通知管理', 'Notice', NULL, b'0', 'ant-design:message-outlined', b'0', b'0', 'Layout', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:47', 1414143554414059520, '2022-10-19 17:30:06', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582276092038959104, 'adminv3', NULL, '第三方对接', 'Third', NULL, b'0', 'ant-design:api-twotone', b'0', b'0', 'Layout', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:12', 1414143554414059520, '2022-10-19 17:32:04', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276184120709120, 'adminv3', NULL, '支付管理', 'PayManager', NULL, b'0', 'ant-design:pay-circle-outlined', b'0', b'0', 'Layout', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:34', 1414143554414059520, '2022-10-19 17:31:46', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582276341792985088, 'adminv3', NULL, '开发管理', 'Develop', NULL, b'0', 'ant-design:apartment-outlined', b'0', b'0', 'Layout', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:12', 1414143554414059520, '2022-10-19 15:24:22', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276447602692096, 'adminv3', NULL, '流程管理', 'Bpm', NULL, b'0', 'ant-design:file-protect-outlined', b'0', b'0', 'Layout', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:37', 1414143554414059520, '2022-10-19 17:34:11', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582276516905177088, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', 'ant-design:appstore-twotone', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:54', 1414143554414059520, '2022-10-19 17:34:26', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582277076421136384, 'adminv3', 1582249924602580992, '角色管理', 'RoleList', NULL, b'0', '', b'0', b'0', '/modules/system/role/RoleList.vue', NULL, '/system/permission/role', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:47:07', 1414143554414059520, '2022-10-18 15:59:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582301940364308480, 'adminv3', 1582249924602580992, '请求权限管理', 'PermPathList', NULL, b'0', '', b'0', b'0', '/modules/system/path/PermPathList.vue', NULL, '/system/permission/path', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:25:55', 1414143554414059520, '2022-10-18 20:41:22', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582302180999917568, 'adminv3', 1582249924602580992, '数据范围权限', 'DataScopeList', NULL, b'0', '', b'0', b'0', '/modules/system/scope/DataScopeList.vue', NULL, '/system/permission/scope', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:26:52', 1414143554414059520, '2022-10-18 17:26:52', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582301940364308480, 'adminv3', 1582249924602580992, '请求权限', 'PermPathList', NULL, b'0', '', b'0', b'0', '/modules/system/path/PermPathList.vue', NULL, '/system/permission/path', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:25:55', 1399985191002447872, '2023-11-29 13:57:56', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1582302180999917568, 'adminv3', 1582249924602580992, '数据角色', 'DataRoleList', NULL, b'0', '', b'0', b'0', '/modules/system/scope/DataRoleList.vue', NULL, '/system/permission/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:26:52', 1399985191002447872, '2023-11-28 21:02:57', 2, 0); INSERT INTO `iam_perm_menu` VALUES (1582302542955769856, 'adminv3', 1582253011803262976, '用户管理', 'UserList', NULL, b'0', '', b'0', b'0', '/modules/system/user/UserList.vue', NULL, '/system/user/info', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:28:19', 1414143554414059520, '2022-10-18 17:28:19', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1582302764129808384, 'adminv3', 1582253011803262976, '部门管理', 'DeptList', NULL, b'0', '', b'0', b'0', '/modules/system/dept/DeptList.vue', NULL, '/system/user/dept', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:29:11', 1414143554414059520, '2022-10-18 17:32:26', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582303143110340608, 'adminv3', 1582253152903843840, '数据字典', 'DictList', NULL, b'0', '', b'0', b'0', '/modules/system/dict/DictList.vue', NULL, '/system/config/dict', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:30:42', 1414143554414059520, '2022-10-18 17:30:42', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582303290070364160, 'adminv3', 1582253152903843840, '定时任务', 'QuartzJobList', NULL, b'0', '', b'0', b'0', '/modules/system/quartz/QuartzJobList.vue', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:17', 1414143554414059520, '2022-10-18 17:32:12', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582303290070364160, 'adminv3', 1582253152903843840, '定时任务', 'QuartzJobList', NULL, b'0', '', b'0', b'0', '/modules/baseapi/quartz/QuartzJobList.vue', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:17', 1414143554414059520, '2023-08-09 15:50:46', 2, 0); INSERT INTO `iam_perm_menu` VALUES (1582303447428067328, 'adminv3', 1582253152903843840, '系统参数', 'SystemParamList', NULL, b'0', '', b'0', b'0', '/modules/system/param/SystemParamList.vue', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:54', 1414143554414059520, '2022-10-19 23:14:16', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1582632873244172288, 'adminv3', 1582276341792985088, '文件管理', 'FileUploadList', NULL, b'0', '', b'0', b'0', '/modules/develop/file/FileUploadList.vue', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:20:56', 1414143554414059520, '2022-10-19 15:20:56', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1582633196587261952, 'adminv3', 1582276341792985088, '代码生成', 'CodeGenList', NULL, b'0', '', b'0', b'0', '/modules/develop/codegen/CodeGenList.vue', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:13', 1414143554414059520, '2022-10-19 15:23:17', 1, 0); @@ -4383,7 +4254,7 @@ INSERT INTO `iam_perm_menu` VALUES (1583075229563068416, 'adminv3', 158227587542 INSERT INTO `iam_perm_menu` VALUES (1583076217481043968, 'adminv3', 1583075229563068416, '登录日志', 'LoginLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/login/LoginLogList.vue', NULL, '/monitor/log/login', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:42:37', 1414143554414059520, '2022-10-20 20:43:36', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1583076424935514112, 'adminv3', 1583075229563068416, '操作日志', 'OperateLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/operate/OperateLogList.vue', NULL, '/monitor/log/operate', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:43:26', 1414143554414059520, '2022-10-20 20:43:26', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1583076670881112064, 'adminv3', 1583075229563068416, '数据版本日志', 'DataVersionLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/data/DataVersionLogList.vue', NULL, '/monitor/log/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:44:25', 1414143554414059520, '2022-10-20 20:44:25', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583076878956339200, 'adminv3', 1582275875424129024, 'ELK日志', 'ELK', NULL, b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:15', 1414143554414059520, '2022-11-21 15:04:13', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1583076878956339200, 'adminv3', 1582275875424129024, 'ELK日志', 'ELK', NULL, b'0', '', b'1', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:15', 1414143554414059520, '2023-08-12 19:26:12', 3, 0); INSERT INTO `iam_perm_menu` VALUES (1583077015434797056, 'adminv3', 1582275875424129024, 'PlumeLog日志', 'PlumeLog', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:47', 1414143554414059520, '2022-10-20 20:45:47', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1583077198772019200, 'adminv3', 1582275875424129024, '系统信息', 'SystemInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/system/SystemInfoMonitor.vue', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:46:31', 1414143554414059520, '2022-10-20 20:46:31', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1583077360827342848, 'adminv3', 1582275875424129024, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/redis/RedisInfoMonitor.vue', NULL, '/monitor/redis', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:47:10', 1414143554414059520, '2022-10-20 20:47:10', 0, 0); @@ -4399,43 +4270,14 @@ INSERT INTO `iam_perm_menu` VALUES (1584380824308097024, 'adminv3', 158437960218 INSERT INTO `iam_perm_menu` VALUES (1584381134950834176, 'adminv3', 1584379704122744832, '企微机器人', 'WeComRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/wecom/robot/WecomRobotConfigList.vue', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:07:54', 1414143554414059520, '2022-11-12 20:58:25', 3, 0); INSERT INTO `iam_perm_menu` VALUES (1584381322184564736, 'adminv3', 1584380087805091840, '钉钉机器人', 'DingRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/dingtalk/robot/DingRobotConfigList.vue', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:08:38', 1414143554414059520, '2022-11-12 20:58:37', 6, 0); INSERT INTO `iam_perm_menu` VALUES (1584381477986181120, 'adminv3', 1584380087805091840, '钉钉配置', 'DingRobotConfigList', NULL, b'0', '', b'1', b'0', '/modules/third/dingtalk/config/DingTalkConfigList.vue', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:09:15', 1414143554414059520, '2022-11-11 16:04:47', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1584381848238366720, 'adminv3', 1582274981055909888, '我的消息', 'SiteMessageListReceive', NULL, b'0', '', b'0', b'0', '/modules/notice/site/receive/SiteMessageList.vue', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:10:44', 1414143554414059520, '2022-11-17 09:08:02', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584381976508571648, 'adminv3', 1582274981055909888, '待办任务', 'MyTodoList', NULL, b'0', '', b'0', b'0', '/modules/office/mytodo/MyTodoList.vue', NULL, '/person/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:14', 1414143554414059520, '2022-10-24 11:11:14', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382091327643648, 'adminv3', 1582274981055909888, '已办任务', 'MyDoneList', NULL, b'0', '', b'0', b'0', '/modules/office/mydone/MyDoneList.vue', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:42', 1414143554414059520, '2022-10-24 11:12:29', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382258307080192, 'adminv3', 1582274981055909888, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', '/modules/office/myapply/MyApplyList.vue', NULL, '/person/myApply', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:12:21', 1414143554414059520, '2022-10-24 11:12:21', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382569381830656, 'adminv3', 1582276184120709120, '支付通道', 'PayChannel', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:13:36', 1414143554414059520, '2022-10-24 11:13:36', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382723186958336, 'adminv3', 1582276184120709120, '支付订单', 'PayOrder', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:12', 1414143554414059520, '2022-10-24 11:14:12', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382815407120384, 'adminv3', 1582276184120709120, '回调记录', 'PayNotify', NULL, b'0', '', b'0', b'0', '/modules/payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:34', 1414143554414059520, '2022-10-24 11:23:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383492338425856, 'adminv3', 1582276184120709120, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:16', 1414143554414059520, '2022-10-24 11:17:16', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383640942616576, 'adminv3', 1582276184120709120, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', '/modules/payment/voucher/VoucherList.vue', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:51', 1414143554414059520, '2022-12-01 22:17:39', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383859121922048, 'adminv3', 1584382569381830656, '支付宝', 'AliPayConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/alipay/AlipayConfigList.vue', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:18:43', 1414143554414059520, '2022-11-22 15:20:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384015338774528, 'adminv3', 1584382569381830656, '微信支付', 'WeChatConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/wechat/WechatPayConfigList.vue', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:20', 1414143554414059520, '2022-11-22 22:22:07', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384160574939136, 'adminv3', 1584382569381830656, '云闪付', 'UnionPayConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/unionpay/UnionPayConfigList.vue', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:55', 1414143554414059520, '2022-11-22 22:27:32', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384526511185920, 'adminv3', 1584382723186958336, '支付订单', 'PaymentList', NULL, b'0', '', b'0', b'0', '/modules/payment/order/payment/PaymentList.vue', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:21:22', 1414143554414059520, '2022-10-24 11:21:22', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384752940687360, 'adminv3', 1584382723186958336, '退款订单', 'ReturnOrder', NULL, b'0', '', b'0', b'0', '/modules/payment/order/refund/RefundRecordList.vue', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:22:16', 1414143554414059520, '2022-10-24 11:22:16', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1589495250199760896, 'adminv3', 1580740450633101312, '22', NULL, '11', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1414143554414059520, '2022-11-07 13:49:34', 1414143554414059520, '2022-11-07 13:49:34', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689087570378752, 'adminv3', 1582276447602692096, '流程模型', 'BpmModelList', NULL, b'0', '', b'0', b'0', '/modules/bpm/model/BpmModelList.vue', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:05', 1414143554414059520, '2022-11-13 15:07:05', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689307427405824, 'adminv3', 1582276447602692096, '未处理任务', 'TodoTaskList', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/TodoTaskList.vue', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:58', 1414143554414059520, '2022-11-14 22:45:57', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689479075102720, 'adminv3', 1582276447602692096, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/DoneTaskList.vue', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:08:39', 1414143554414059520, '2022-11-13 15:14:17', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1591690820224778240, 'adminv3', 1582276447602692096, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', '/modules/bpm/instance/InstanceList.vue', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:13:58', 1414143554414059520, '2022-11-13 15:13:58', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1594586131247075328, 'adminv3', 1582275875424129024, 'ELK日志x', 'ELKx', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/monitor/elk', 'https://www.antdv.com/components/overview-cn', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-21 14:58:54', 1414143554414059520, '2022-11-21 15:21:35', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1595255743081025536, 'adminv3', 1580740450633101312, '菜单管理1', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:////system/menu?onlytab=1&__full__', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-23 11:19:42', 1414143554414059520, '2022-11-23 21:02:52', 20, 1); INSERT INTO `iam_perm_menu` VALUES (1597044371008516096, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 09:47:04', 1414143554414059520, '2022-11-28 09:47:04', 0, 1); INSERT INTO `iam_perm_menu` VALUES (1597102799370317824, 'adminv3', 1582276516905177088, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 13:39:15', 1414143554414059520, '2022-11-28 13:39:15', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1597210969883275264, 'adminv3', 1582276516905177088, '超级查询', 'SuperQueryDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/query/SuperQueryDemoList.vue', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 20:49:05', 1414143554414059520, '2022-11-28 21:00:14', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1598306560788877312, 'adminv3', 1584383492338425856, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/list/WalletList.vue', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:22:34', 1414143554414059520, '2022-12-01 21:22:34', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1598306760764903424, 'adminv3', 1584383492338425856, '个人钱包', 'MyWallet', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/personal/MyWallet.vue', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:23:22', 1414143554414059520, '2022-12-01 21:23:22', 0, 0); INSERT INTO `iam_perm_menu` VALUES (1599337250200440832, 'adminv3', NULL, '关于', '', NULL, b'0', 'simple-icons:about-dot-me', b'0', b'0', '', NULL, '/about/index', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 17:38:09', 1414143554414059520, '2022-12-04 17:43:32', 3, 0); INSERT INTO `iam_perm_menu` VALUES (1599378494880436224, 'adminv3', 1582276516905177088, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:03', 1414143554414059520, '2023-02-08 12:17:58', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1599378579513102336, 'adminv3', 1582276516905177088, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/idempotent/IdempotentDemo', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:23', 1414143554414059520, '2023-02-08 11:46:00', 3, 0); INSERT INTO `iam_perm_menu` VALUES (1599378728490586112, 'adminv3', 1582276516905177088, '消息中间件演示', 'MqDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:59', 1414143554414059520, '2023-02-08 22:09:04', 2, 0); INSERT INTO `iam_perm_menu` VALUES (1599378838519762944, 'adminv3', 1582276516905177088, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/wangeditor/WangEditorDemo.vue', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:23:25', 1414143554414059520, '2023-02-10 09:05:16', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378992811429888, 'adminv3', 1582276516905177088, '消息通知', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:02', 1414143554414059520, '2022-12-04 20:24:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379197124366336, 'adminv3', 1582276516905177088, '支付演示', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/pay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:50', 1414143554414059520, '2022-12-04 20:24:50', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379348144476160, 'adminv3', 1599379197124366336, '收银台', 'SimpleCashier', NULL, b'0', '', b'0', b'0', '/demo/payment/cashier/SimpleCashier.vue', NULL, '/demo/pay/cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:26', 1414143554414059520, '2022-12-05 21:28:10', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379428784164864, 'adminv3', 1599379197124366336, '组合支付', 'CombinationCashier', NULL, b'0', '', b'0', b'0', '/demo/payment/cashier/CombinationCashier.vue', NULL, '/demo/pay/combination', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:46', 1414143554414059520, '2022-12-08 22:32:55', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379539232772096, 'adminv3', 1599379197124366336, '支付结算台演示', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:///cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:26:12', 1414143554414059520, '2022-12-04 20:26:34', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1617513861605191680, 'admin', 1414596052497092608, '123', NULL, '123', b'0', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2023-01-23 21:25:31', 1399985191002447872, '2023-01-23 21:56:34', 3, 0); INSERT INTO `iam_perm_menu` VALUES (1617847577158324224, 'adminv3', 1597102799370317824, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/perm/DataPermDemoList.vue', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:35', 1414143554414059520, '2023-01-24 20:06:04', 2, 0); INSERT INTO `iam_perm_menu` VALUES (1617847653746315264, 'adminv3', 1597102799370317824, '加密解密', 'DataEncryptDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/encrypt/DataEncryptDemoList.vue', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:53', 1414143554414059520, '2023-01-24 20:05:45', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1617847747375763456, 'adminv3', 1597102799370317824, '数据脱敏', 'DataSensitiveDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/sensitive/DataSensitiveDemoList.vue', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:32:16', 1414143554414059520, '2023-01-24 20:06:58', 1, 0); @@ -4445,6 +4287,16 @@ INSERT INTO `iam_perm_menu` VALUES (1623325795944439808, 'adminv3', 159937899281 INSERT INTO `iam_perm_menu` VALUES (1623494586215579648, 'admin', 1552207982510706688, '行政区划', 'ChinaRegion', NULL, b'0', '', b'1', b'0', 'develop/region/ChinaRegionList', NULL, '/develop/region', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-09 09:30:47', 1399985191002447872, '2023-02-09 17:50:05', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1629039360928075776, 'adminv3', 1582276341792985088, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', '/modules/develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-24 16:43:44', 1414143554414059520, '2023-02-24 16:44:17', 1, 0); INSERT INTO `iam_perm_menu` VALUES (1631946120891707392, 'admin', 1552207982510706688, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', 'develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-03-04 17:14:10', 1399985191002447872, '2023-03-04 17:14:10', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1635274568758435840, 'adminv3', 1582276341792985088, '数据集管理', 'DataResultSqlList', NULL, b'0', '', b'0', b'0', '/modules/develop/dataresult/DataResultSqlList', NULL, '/develop/dataresult', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-03-13 21:40:14', 1414143554414059520, '2023-09-18 14:26:51', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1687369862646558720, 'adminv3', 1582275984849326080, '短信管理', 'Sms', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/notice/sms', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:48:20', 1414143554414059520, '2023-08-04 15:48:32', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1687370142234669056, 'adminv3', 1687369862646558720, '短信配置', 'SmsChannelConfigList', NULL, b'0', '', b'0', b'0', '/modules/notice/sms/config/SmsChannelConfigList', NULL, '/notice/sms/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:49:26', 1414143554414059520, '2023-08-04 15:49:26', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1687370277496778752, 'adminv3', 1687369862646558720, '短信模板', 'SmsTemplateList', NULL, b'0', '', b'0', b'0', '/modules/notice/sms/template/SmsTemplateList', NULL, '/notice/sms/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:49:59', 1414143554414059520, '2023-08-04 15:50:38', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1689181991598997504, 'adminv3', 1582253152903843840, '敏感词管理', 'ChinaWord', NULL, b'0', '', b'0', b'0', '/modules/baseapi/chianword/ChinaWordList.vue', NULL, '/system/config/chinaword', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-09 15:49:05', 1414143554414059520, '2023-08-09 15:49:05', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1690324070514782208, 'adminv3', 1582276341792985088, '通用模板', 'GeneralTemplateList', NULL, b'0', '', b'0', b'0', '/modules/develop/template/GeneralTemplateList', NULL, '/develop/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-12 19:27:18', 1414143554414059520, '2023-08-12 19:31:26', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1703665090038800384, 'adminv3', 1582276341792985088, '在线SQL', 'SqlQueryInfo', NULL, b'0', '', b'0', b'0', '/modules/develop/query/SqlQueryInfo', NULL, '/develop/sqlquery', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-09-18 14:59:45', 1414143554414059520, '2023-09-18 14:59:45', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1713931084759293952, 'adminv3', 1582253306356649984, '密码安全', 'PassowrdSecurity', NULL, b'0', '', b'0', b'0', '/modules/system/security/password/PasswordSecurityConfig.vue', NULL, '/system/config/passowrd', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-10-16 22:53:09', 1399985191002447872, '2023-10-16 22:58:59', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1719311626751950848, 'adminv3', 1582276516905177088, '大屏', '', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/demo/big', 'http://localhost:8112/#/index', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-10-31 19:13:30', 1399985191002447872, '2023-11-15 11:11:26', 0, 1); +INSERT INTO `iam_perm_menu` VALUES (1733829906427682816, 'adminv3', 1582275875424129024, '在线用户', 'OnlineUserList', NULL, b'0', '', b'0', b'0', '/modules/monitor/user/online/OnlineUserList', NULL, '/monitor/user/online', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-12-10 20:43:57', 1399985191002447872, '2023-12-10 20:43:57', 0, 0); -- ---------------------------- -- Table structure for iam_perm_path @@ -4480,13 +4332,14 @@ DROP TABLE IF EXISTS `iam_role`; CREATE TABLE `iam_role` ( `id` bigint(20) NOT NULL COMMENT '角色ID', `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', + `pid` bigint(20) NULL DEFAULT NULL COMMENT '父ID', `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', `internal` bit(1) NOT NULL COMMENT '是否系统内置', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4495,10 +4348,10 @@ CREATE TABLE `iam_role` ( -- ---------------------------- -- Records of iam_role -- ---------------------------- -INSERT INTO `iam_role` VALUES (1405414804771971072, 'admin', '管理员', b'1', '管理员', 1, '2021-06-17 14:39:35', 1399985191002447872, '2021-07-18 22:31:02', 6, 0); -INSERT INTO `iam_role` VALUES (1416730722714144768, 'test', '测试', b'0', '测试角色', 1399985191002447872, '2021-07-18 20:05:01', 1399985191002447872, '2021-07-18 20:16:15', 1, 0); -INSERT INTO `iam_role` VALUES (1422832797731778562, 'user', '用户', b'0', '用户角色', 0, '2021-08-04 16:12:29', 1399985191002447872, '2021-08-04 16:15:03', 7, 1); -INSERT INTO `iam_role` VALUES (1428891259564445696, 'manager', '管理者', b'0', 'manager管理者', 1399985191002447872, '2021-08-21 09:26:38', 1399985191002447872, '2021-08-21 09:26:39', 0, 1); +INSERT INTO `iam_role` VALUES (1405414804771971072, 'admin', NULL, '管理员', b'1', '管理员', 1, '2021-06-17 14:39:35', 1399985191002447872, '2021-07-18 22:31:02', 6, 0); +INSERT INTO `iam_role` VALUES (1416730722714144768, 'test', NULL, '测试', b'0', '测试角色', 1399985191002447872, '2021-07-18 20:05:01', 1399985191002447872, '2021-07-18 20:16:15', 1, 0); +INSERT INTO `iam_role` VALUES (1422832797731778562, 'user', NULL, '用户', b'0', '用户角色', 0, '2021-08-04 16:12:29', 1399985191002447872, '2021-08-04 16:15:03', 7, 0); +INSERT INTO `iam_role` VALUES (1428891259564445696, 'manager', NULL, '管理者', b'0', 'manager管理者', 1399985191002447872, '2021-08-21 09:26:38', 1399985191002447872, '2021-08-21 09:26:39', 0, 0); -- ---------------------------- -- Table structure for iam_role_menu @@ -4532,23 +4385,19 @@ CREATE TABLE `iam_role_path` ( -- ---------------------------- -- ---------------------------- --- Table structure for iam_user_data_scope +-- Table structure for iam_user_data_role -- ---------------------------- -DROP TABLE IF EXISTS `iam_user_data_scope`; -CREATE TABLE `iam_user_data_scope` ( +DROP TABLE IF EXISTS `iam_user_data_role`; +CREATE TABLE `iam_user_data_role` ( `id` bigint(20) NOT NULL COMMENT '主键', `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `data_scope_id` bigint(20) NOT NULL COMMENT '数据权限ID', + `role_id` bigint(20) NOT NULL COMMENT '数据角色ID', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户数据范围关系\r\n' ROW_FORMAT = DYNAMIC; -- ---------------------------- --- Records of iam_user_data_scope +-- Records of iam_user_data_role -- ---------------------------- -INSERT INTO `iam_user_data_scope` VALUES (1477617820165345280, 1414143554414059520, 1474717084985270272); -INSERT INTO `iam_user_data_scope` VALUES (1477991040840290304, 1477990832987361280, 1477990439800721408); -INSERT INTO `iam_user_data_scope` VALUES (1477997504506077184, 1477997391729631232, 1477990268903804928); -INSERT INTO `iam_user_data_scope` VALUES (1477997685993611264, 1477997602862505984, 1474706893178871808); -- ---------------------------- -- Table structure for iam_user_dept @@ -4564,46 +4413,35 @@ CREATE TABLE `iam_user_dept` ( -- ---------------------------- -- Records of iam_user_dept -- ---------------------------- -INSERT INTO `iam_user_dept` VALUES (1450088892861501440, 1399985191002447872, 1259383345604300802); -INSERT INTO `iam_user_dept` VALUES (1477996765012533248, 1477990832987361280, 1477977592291053568); -INSERT INTO `iam_user_dept` VALUES (1477997463997489152, 1477997391729631232, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1477997655618461696, 1477997602862505984, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1478741775446118400, 1435967884114194432, 1477978810526650368); -INSERT INTO `iam_user_dept` VALUES (1478741775450312704, 1435967884114194432, 1477978464559484928); -INSERT INTO `iam_user_dept` VALUES (1478741775450312705, 1435967884114194432, 1477978610865197056); -- ---------------------------- -- Table structure for iam_user_expand_info -- ---------------------------- DROP TABLE IF EXISTS `iam_user_expand_info`; CREATE TABLE `iam_user_expand_info` ( - `id` bigint(20) NOT NULL, + `id` bigint(20) NOT NULL COMMENT '主键', `sex` int(4) NULL DEFAULT NULL COMMENT '性别', `birthday` date NULL DEFAULT NULL COMMENT '生日', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '上次登录时间', - `current_login_time` datetime(0) NULL DEFAULT NULL COMMENT '本次登录时间', + `last_login_time` datetime NULL DEFAULT NULL COMMENT '上次登录时间', + `current_login_time` datetime NULL DEFAULT NULL COMMENT '本次登录时间', `initial_password` bit(1) NOT NULL COMMENT '是否初始密码', - `last_change_password_time` datetime(0) NULL DEFAULT NULL COMMENT '上次修改密码时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `expire_password` bit(1) NOT NULL COMMENT '密码是否过期', + `last_change_password_time` datetime NULL DEFAULT NULL COMMENT '上次修改密码时间', + `register_time` datetime NOT NULL COMMENT '注册时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户扩展信息' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of iam_user_expand_info -- ---------------------------- -INSERT INTO `iam_user_expand_info` VALUES (1399985191002447872, 1, '1996-12-01', '1495331905770315776', '2022-10-29 08:44:52', '2022-11-02 09:59:06', b'0', '2022-06-19 21:25:00', 1, '2021-06-02 15:04:15', 0, '2022-11-02 09:59:06', 367, 0); -INSERT INTO `iam_user_expand_info` VALUES (1414143554414059520, 1, '2022-10-31', '1586953599627546624', '2022-11-02 21:32:23', '2022-11-02 21:33:21', b'0', NULL, 1, '2021-07-11 16:44:32', 0, '2022-11-02 21:33:21', 62, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435894470432456704, 1, NULL, NULL, '2022-09-16 16:48:16', '2022-09-17 17:20:58', b'0', '2022-06-29 00:39:23', 1399985191002447872, '2021-09-09 17:14:54', 0, '2022-09-17 17:20:58', 5, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435967884114194432, 1, NULL, NULL, NULL, '2022-05-31 15:59:42', b'0', NULL, 1414143554414059520, '2021-09-09 22:06:37', 0, '2022-05-31 15:59:42', 1, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477990832987361280, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-01-03 21:10:49', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997391729631232, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-01-03 21:36:53', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997602862505984, 1, NULL, NULL, NULL, '2022-06-01 16:51:46', b'0', NULL, 1399985191002447872, '2022-01-03 21:37:43', 0, '2022-06-01 16:51:46', 1, 0); +INSERT INTO `iam_user_expand_info` VALUES (1399985191002447872, 1, '1996-12-01', NULL, '2023-10-19 19:21:46', '2023-10-20 09:31:26', b'0', b'0', '2023-10-19 14:14:08', '2021-08-01 18:52:37', 1, '2021-06-02 15:04:15', 1, '2023-10-20 09:31:26', 382, b'0'); -- ---------------------------- -- Table structure for iam_user_info @@ -4616,16 +4454,13 @@ CREATE TABLE `iam_user_info` ( `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手机号', `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱', - `client_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联终端ds', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '注册来源', - `admin` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否超级管理员', - `register_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', - `status` tinyint(4) NOT NULL COMMENT '账号状态', + `client_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '关联终端ds', + `administrator` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否超级管理员', + `status` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号状态', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4634,13 +4469,7 @@ CREATE TABLE `iam_user_info` ( -- ---------------------------- -- Records of iam_user_info -- ---------------------------- -INSERT INTO `iam_user_info` VALUES (1399985191002447872, '小小明', 'xxm', 'f52020dca765fd3943ed40a615dc2c5c', '133****3333', 'x******@outlook.com', '1430430071299207168,1430430071299207169,1626840094767714304,1580487061605175296', NULL, NULL, b'1', '2021-06-02 15:04:12', 1, 1, '2021-06-02 15:04:15', 1414143554414059520, '2023-02-18 15:08:42', 55, 0); -INSERT INTO `iam_user_info` VALUES (1414143554414059520, '小小明1995', 'xxm1995', 'f52020dca765fd3943ed40a615dc2c5c', '130****0000', 'x******@foxmail.com', '1430430071299207168,1580487061605175296,1430430071299207169,1626840094767714304', NULL, NULL, b'1', '2021-07-11 16:44:31', 1, 1, '2021-07-11 16:44:32', 1414143554414059520, '2023-02-18 15:08:48', 9, 0); -INSERT INTO `iam_user_info` VALUES (1435894470432456704, '管理员', 'admin', 'f52020dca765fd3943ed40a615dc2c5c', '13000001111', 'admin@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 17:14:52', 1, 1399985191002447872, '2021-09-09 17:14:54', 1399985191002447872, '2022-09-16 16:41:51', 7, 0); -INSERT INTO `iam_user_info` VALUES (1435967884114194432, '测试', 'test', 'f52020dca765fd3943ed40a615dc2c5c', '13311111111', 'test@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 22:06:37', 1, 1414143554414059520, '2021-09-09 22:06:37', 1399985191002447872, '2022-05-31 15:59:37', 9, 0); -INSERT INTO `iam_user_info` VALUES (1477990832987361280, '测试用户001', 'test001', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:10:49', 1, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-06-05 20:26:26', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997391729631232, '测试用户002', 'test002', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:36:53', 1, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-06-05 20:26:19', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997602862505984, '测试用户003', 'test003', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:37:43', 1, 1399985191002447872, '2022-01-03 21:37:43', 1399985191002447872, '2022-05-19 13:00:05', 4, 0); +INSERT INTO `iam_user_info` VALUES (1399985191002447872, 'Bootx', 'bootx', 'f52020dca765fd3943ed40a615dc2c5c', '13333333333', 'bootx@bootx.com', '1430430071299207168,1430430071299207169,1626840094767714304,1580487061605175296', b'1', 'norm', 1, '2021-06-02 15:04:15', 1399985191002447872, '2023-10-19 14:14:46', 58, 0); -- ---------------------------- -- Table structure for iam_user_role @@ -4656,7 +4485,6 @@ CREATE TABLE `iam_user_role` ( -- ---------------------------- -- Records of iam_user_role -- ---------------------------- -INSERT INTO `iam_user_role` VALUES (1533038443724980224, 1435894470432456704, 1405414804771971072); -- ---------------------------- -- Table structure for iam_user_third @@ -4673,9 +4501,9 @@ CREATE TABLE `iam_user_third` ( `ding_talk_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉唯一标识', `we_com_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业微信唯一标识', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE, @@ -4699,9 +4527,9 @@ CREATE TABLE `iam_user_third_info` ( `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户头像', `third_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '关联第三方平台的用户id', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE, INDEX `pk_user_client`(`user_id`, `client_code`) USING BTREE COMMENT '用户id和终端code' @@ -4728,9 +4556,9 @@ CREATE TABLE `notice_mail_config` ( `activity` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', `security_type` int(2) NULL DEFAULT NULL COMMENT '安全传输方式 1:plain 2:tls 3:ssl', `creator` bigint(18) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(18) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(8) NULL DEFAULT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -4739,8 +4567,6 @@ CREATE TABLE `notice_mail_config` ( -- ---------------------------- -- Records of notice_mail_config -- ---------------------------- -INSERT INTO `notice_mail_config` VALUES (1554739296333955072, 'fox', 'foxmail邮箱', 'smtp.qq.com', 465, 'sJfAJDDviYlqZ3BtdjMZF8V5jVSYCaMa9DNdVGDbe/s=', '7AtgVwObaO7wrsRpLvKkoo5O+udeEcFP1ONq4gYwOj0=', 'bootx-platform平台', 'xxm1995@foxmail.com', 1, 3, 1399985191002447872, '2022-08-03 16:01:49', 1399985191002447872, '2022-08-03 16:14:55', 0, 8); -INSERT INTO `notice_mail_config` VALUES (1584814372311744512, '11', '22', '33', 465, 'pwfAgEMJjGLjbVYEcgdXzA==', 'f3zJMwbPGmNRlNXpN5AMyA==', '666', '33333333@foxmail.com', 0, 1, 1414143554414059520, '2022-10-25 15:49:25', 1414143554414059520, '2022-10-25 16:27:12', 0, 10); -- ---------------------------- -- Table structure for notice_message_template @@ -4751,12 +4577,12 @@ CREATE TABLE `notice_message_template` ( `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模板数据', - `type` int(11) NULL DEFAULT NULL COMMENT '模板类型', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板类型', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4765,15 +4591,7 @@ CREATE TABLE `notice_message_template` ( -- ---------------------------- -- Records of notice_message_template -- ---------------------------- -INSERT INTO `notice_message_template` VALUES (1424936204932169730, 'cs', '测试', 'hello ${msg}6666666666666666666666666666', 1, '测试模板', 0, '2021-08-10 11:30:40', 0, '2021-08-10 11:30:40', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573951326893510656, 'BpmTaskCreated', '流程任务创建事件', '流程任务创建事件', 0, '', 1399985191002447872, '2022-09-25 16:23:34', 1399985191002447872, '2022-09-25 16:23:34', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573951515616219136, 'BpmTaskAssignCreated', '流程任务更改处理人事件(新处理人)', '流程任务更改处理人事件(新处理人)', 0, '', 1399985191002447872, '2022-09-25 16:24:19', 1399985191002447872, '2022-09-25 16:27:09', 1, 0); -INSERT INTO `notice_message_template` VALUES (1573952505056727040, 'BpmTaskAssignCancel', '流程任务更改处理人事件(原处理人)', '流程任务更改处理人事件(原处理人)', 0, '', 1399985191002447872, '2022-09-25 16:28:14', 1399985191002447872, '2022-09-25 16:28:14', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952568654958592, 'BpmTaskCancel', '流程任务取消事件', '流程任务取消事件', 0, '', 1399985191002447872, '2022-09-25 16:28:30', 1399985191002447872, '2022-09-25 16:28:30', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952621826150400, 'BpmTaskReject', '流程任务驳回事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-09-25 16:28:42', 1399985191002447872, '2022-09-25 16:28:42', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952709432578048, 'BpmInstanceCompleted', '流程完成时通知发起人', '流程完成时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:03', 1399985191002447872, '2022-09-25 16:29:03', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952762507300864, 'BpmInstanceCancel', '流程取消时通知发起人', '流程取消时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:16', 1399985191002447872, '2022-09-25 16:29:16', 0, 0); -INSERT INTO `notice_message_template` VALUES (1580083314274070528, 'BpmTaskBack', '流程任务回退事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-10-12 14:29:53', 1399985191002447872, '2022-10-12 14:30:11', 1, 0); +INSERT INTO `notice_message_template` VALUES (1424936204932169730, 'cs', '测试', 'hello ${msg}6666666666666666666666666666', '1', '测试模板', 0, '2021-08-10 11:30:40', 0, '2021-08-10 11:30:40', 0, 0); -- ---------------------------- -- Table structure for notice_site_message @@ -4785,15 +4603,15 @@ CREATE TABLE `notice_site_message` ( `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '消息内容', `sender_id` bigint(20) NULL DEFAULT NULL COMMENT '发送者id', `sender_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发送者姓名', - `sender_time` datetime(0) NULL DEFAULT NULL COMMENT '发送时间', + `sender_time` datetime NULL DEFAULT NULL COMMENT '发送时间', `receive_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息类型', `send_state` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布状态', - `efficient_time` datetime(0) NULL DEFAULT NULL COMMENT '截至有效期', - `cancel_time` datetime(0) NULL DEFAULT NULL COMMENT '撤回时间', + `efficient_time` datetime NULL DEFAULT NULL COMMENT '截至有效期', + `cancel_time` datetime NULL DEFAULT NULL COMMENT '撤回时间', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4802,11 +4620,6 @@ CREATE TABLE `notice_site_message` ( -- ---------------------------- -- Records of notice_site_message -- ---------------------------- -INSERT INTO `notice_site_message` VALUES (1424212599079161857, '测试消息', '
55
5
5
5
5
5
5
5
5
5
5
5
6等非撒扥森速度扥三扥所
6
8
8
5撒扥森森的
5
5撒扥岁送
8
8
8
', 1399985191002447872, '小小明', '2021-08-08 11:34:11', 'all', 'cancel', NULL, '2022-08-21 23:01:16', 1399985191002447872, '2021-08-08 11:35:19', 1399985191002447872, '2022-08-21 23:01:16', 1, 0); -INSERT INTO `notice_site_message` VALUES (1558781525200130048, '测试站内信', '
sdfsdfsdf
  1. 333
', 0, '未知', '2022-08-14 19:44:11', NULL, 'sent', NULL, NULL, 0, '2022-08-14 19:44:11', 0, '2022-08-14 19:44:11', 0, 0); -INSERT INTO `notice_site_message` VALUES (1561363288741085184, '测试消息', '

三扥广丰和扥撒扥撒扥东方

', 1399985191002447872, '小小明', '2022-08-21 22:59:45', 'all', 'draft', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:43:11', 1399985191002447872, '2022-08-21 23:23:03', 4, 1); -INSERT INTO `notice_site_message` VALUES (1561365894804766720, '测试数据', '

234554通扥广森

', 1399985191002447872, '小小明', '2022-08-21 23:48:55', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:53:33', 1399985191002447872, '2022-08-21 23:48:55', 1, 0); -INSERT INTO `notice_site_message` VALUES (1561368170558623744, '测试数据', '

234554通扥广森

DFF

撒扥萨芬的

11
33
44
风很高
', 1399985191002447872, '小小明', '2022-08-21 23:33:01', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 23:02:35', 1399985191002447872, '2022-08-21 23:33:01', 7, 0); -- ---------------------------- -- Table structure for notice_site_message_user @@ -4817,9 +4630,9 @@ CREATE TABLE `notice_site_message_user` ( `message_id` bigint(20) NOT NULL COMMENT '消息id', `receive_id` bigint(20) NOT NULL COMMENT '接收者id', `have_read` bit(1) NOT NULL COMMENT '已读/未读', - `read_time` datetime(0) NULL DEFAULT NULL COMMENT '已读时间', + `read_time` datetime NULL DEFAULT NULL COMMENT '已读时间', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uni_receive_message`(`receive_id`, `message_id`) USING BTREE COMMENT '接收人和消息联合索引', @@ -4829,10 +4642,44 @@ CREATE TABLE `notice_site_message_user` ( -- ---------------------------- -- Records of notice_site_message_user -- ---------------------------- -INSERT INTO `notice_site_message_user` VALUES (1558781525422428160, 1558781525200130048, 1399985191002447872, b'1', '2022-08-14 19:47:53', 0, '2022-08-14 19:44:11', 0); -INSERT INTO `notice_site_message_user` VALUES (1559917646856540160, 1424212599079161857, 1399985191002447872, b'1', '2022-08-17 22:58:43', 1399985191002447872, '2022-08-17 22:58:44', 0); -INSERT INTO `notice_site_message_user` VALUES (1561379790089302016, 1561368170558623744, 1399985191002447872, b'1', '2022-08-21 23:48:43', 1399985191002447872, '2022-08-21 23:48:46', 0); -INSERT INTO `notice_site_message_user` VALUES (1561379841968648192, 1561365894804766720, 1399985191002447872, b'1', '2022-08-21 23:48:58', 1399985191002447872, '2022-08-21 23:48:58', 0); + +-- ---------------------------- +-- Table structure for notice_sms_channel_config +-- ---------------------------- +DROP TABLE IF EXISTS `notice_sms_channel_config`; +CREATE TABLE `notice_sms_channel_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '渠道类型编码', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '渠道类型名称', + `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态', + `access_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'AccessKey', + `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '配置字符串', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `access_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'AccessSecret', + `image` bigint(20) NULL DEFAULT NULL COMMENT '图片', + `sort_no` double(10, 0) NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '短信渠道配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_sms_channel_config +-- ---------------------------- +INSERT INTO `notice_sms_channel_config` VALUES (1688432603289337856, 'alibaba', '阿里云短信', 'normal', '1', '{\"accessKeyId\":\"1231231231232111\",\"accessKeySecret\":\"12312312321111\",\"signature\":\"1231\",\"templateId\":\"2312313\",\"templateName\":\"123\",\"requestUrl\":\"五千二无二\",\"action\":\"SendSms\",\"version\":\"11\",\"regionId\":\"cn-hangzhou\"}', NULL, '1', 1688450284000247808, 0, 1414143554414059520, '2023-08-07 14:11:17', 1414143554414059520, '2023-08-07 15:35:34', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688456604610953216, 'huawei', '华为云短信', 'normal', '1', '{\"appKey\":\"1231231231232\",\"appSecret\":\"1111\",\"signature\":\"1\",\"sender\":\"1\",\"templateId\":\"12\",\"statusCallBack\":\"1\",\"url\":\"1\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-07 15:46:39', 1414143554414059520, '2023-08-07 15:46:49', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688461302302732288, 'yunpian', '云片短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"callbackUrl\":null,\"templateName\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-07 16:05:19', 1414143554414059520, '2023-08-08 14:12:23', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788784751001600, 'tencent', '腾讯短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"sdkAppId\":null,\"territory\":\"ap-guangzhou\",\"connTimeout\":60,\"requestUrl\":\"sms.tencentcloudapi.com\",\"action\":\"SendSms\",\"version\":\"2021-01-11\",\"service\":\"sms\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:37', 1414143554414059520, '2023-08-08 13:46:37', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788807228276736, 'uni_sms', '合一短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"isSimple\":true,\"templateName\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:42', 1414143554414059520, '2023-08-08 13:46:43', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788823900635136, 'netease', '网易云短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"templateName\":null,\"templateUrl\":\"https://api.netease.im/sms/sendtemplate.action\",\"codeUrl\":\"https://api.netease.im/sms/sendcode.action\",\"verifyUrl\":\"https://api.netease.im/sms/verifycode.action\",\"needUp\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:46', 1414143554414059520, '2023-08-08 13:46:47', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788846944141312, 'ctyun', '天翼云短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"templateName\":null,\"requestUrl\":\"https://sms-global.ctapi.ctyun.cn/sms/api/v1\",\"action\":\"SendSms\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:52', 1414143554414059520, '2023-08-08 13:46:52', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788862987354112, 'emay', '亿美短信', 'normal', '1', '{\"appId\":\"1\",\"secretKey\":\"1\",\"requestUrl\":null}', NULL, '1', 1688792913003102208, 0, 1414143554414059520, '2023-08-08 13:46:56', 1414143554414059520, '2023-08-08 14:03:04', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788885141667840, 'cloopen', '容联短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"appId\":null,\"baseUrl\":\"https://app.cloopen.com:8883/2013-12-26\",\"serverIp\":null,\"serverPort\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:47:01', 1414143554414059520, '2023-08-08 13:47:01', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788904481603584, 'jd_cloud', '京东短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"region\":\"cn-north-1\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:47:06', 1414143554414059520, '2023-08-08 13:47:06', 0, b'0'); -- ---------------------------- -- Table structure for notice_sms_config @@ -4849,9 +4696,9 @@ CREATE TABLE `notice_sms_config` ( `from_num` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, + `create_time` datetime NULL DEFAULT NULL, `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, + `last_modified_time` datetime NULL DEFAULT NULL, `version` int(10) NULL DEFAULT NULL, `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, @@ -4864,6 +4711,29 @@ CREATE TABLE `notice_sms_config` ( -- Records of notice_sms_config -- ---------------------------- +-- ---------------------------- +-- Table structure for notice_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS `notice_sms_template`; +CREATE TABLE `notice_sms_template` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `supplier_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信渠道商类型', + `template_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信渠道商类型', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信模板名称', + `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信模板内容', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '短信模板配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_sms_template +-- ---------------------------- + -- ---------------------------- -- Table structure for notice_wechat_config -- ---------------------------- @@ -4877,9 +4747,9 @@ CREATE TABLE `notice_wechat_config` ( `corp_secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, + `create_time` datetime NULL DEFAULT NULL, `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, + `last_modified_time` datetime NULL DEFAULT NULL, `version` int(10) NULL DEFAULT NULL, `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -4888,440 +4758,6 @@ CREATE TABLE `notice_wechat_config` ( -- ---------------------------- -- Records of notice_wechat_config -- ---------------------------- -INSERT INTO `notice_wechat_config` VALUES (181361815405135421, 0, 'test01', 'test01', 'ww9d6247559117d202', '8n6A3SzN-DJNkw8wyCcJnr8-SOjFFWSOlBqZN8vypKM', 1, 1415, '2018-11-20 11:07:07', 1415, '2018-11-20 11:07:07', 0, 0); - --- ---------------------------- --- Table structure for pay_ali_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_ali_payment`; -CREATE TABLE `pay_ali_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `trade_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付宝关联流水号', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NULL DEFAULT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_ali_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_alipay_config --- ---------------------------- -DROP TABLE IF EXISTS `pay_alipay_config`; -CREATE TABLE `pay_alipay_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', - `app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付宝商户appId', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `server_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求网关地址', - `auth_type` int(4) NOT NULL COMMENT '认证方式', - `sign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '签名类型', - `alipay_public_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥', - `private_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '私钥', - `app_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '应用公钥', - `alipay_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥证书', - `alipay_root_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝CA根证书', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `expire_time` int(10) NOT NULL COMMENT '超时配置', - `pay_ways` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支持的支付类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_alipay_config --- ---------------------------- - --- ---------------------------- --- Table structure for pay_cash_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_cash_payment`; -CREATE TABLE `pay_cash_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '现金交易记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_cash_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_notify_record --- ---------------------------- -DROP TABLE IF EXISTS `pay_pay_notify_record`; -CREATE TABLE `pay_pay_notify_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付号', - `notify_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知消息', - `pay_channel` int(11) NOT NULL COMMENT '支付通道', - `status` int(2) NOT NULL COMMENT '处理状态', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示信息', - `notify_time` datetime(6) NULL DEFAULT NULL COMMENT '回调时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付回调记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_notify_record --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_order_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_pay_order_log`; -CREATE TABLE `pay_pay_order_log` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_pay_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单扩展业务参数', - `pay_order_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单参数', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付关联订单信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_order_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_payment`; -CREATE TABLE `pay_payment` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `description` varchar(240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `pay_type_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付信息', - `async_pay_mode` bit(1) NOT NULL COMMENT '是否是异步支付', - `async_pay_channel` int(11) NULL DEFAULT NULL COMMENT '异步支付方式', - `pay_channel_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付通道信息列表', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `expired_time` datetime(6) NULL DEFAULT NULL COMMENT '过期时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uniq_business_id`(`business_id`) USING BTREE COMMENT '业务编号id, 唯一ID' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_refund_record --- ---------------------------- -DROP TABLE IF EXISTS `pay_refund_record`; -CREATE TABLE `pay_refund_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付记录id', - `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联业务id', - `refund_request_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '异步方式关联退款请求号', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '剩余可退款金额', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `refund_status` int(2) NULL DEFAULT NULL COMMENT '退款状态', - `refund_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '退款记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_refund_record --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher`; -CREATE TABLE `pay_voucher` ( - `id` bigint(20) NOT NULL, - `card_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '卡号', - `batch_no` bigint(20) NULL DEFAULT NULL COMMENT '批次号', - `face_value` decimal(15, 2) NULL DEFAULT NULL COMMENT '面值', - `balance` decimal(15, 2) NULL DEFAULT NULL COMMENT '余额', - `enduring` bit(1) NOT NULL COMMENT '是否长期有效', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `status` int(2) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher_log`; -CREATE TABLE `pay_voucher_log` ( - `id` bigint(20) NOT NULL, - `voucher_id` bigint(20) NOT NULL, - `voucher_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `amount` decimal(19, 2) NULL DEFAULT NULL, - `type` int(5) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher_payment`; -CREATE TABLE `pay_voucher_payment` ( - `id` bigint(20) NOT NULL, - `voucher_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '储值卡id列表', - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wallet --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet`; -CREATE TABLE `pay_wallet` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '关联用户id', - `balance` decimal(19, 2) NOT NULL COMMENT '余额', - `status` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_id`(`user_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet --- ---------------------------- -INSERT INTO `pay_wallet` VALUES (1336489524259352576, 1399985191002447872, 999982.96, 1, NULL, '2022-03-11 21:37:33', 1399985191002447872, '2022-05-03 21:24:04', 29, 0); -INSERT INTO `pay_wallet` VALUES (1502554238582968320, 1414143554414059520, 1019.00, 1, 1399985191002447872, '2022-03-12 15:57:01', 1399985191002447872, '2022-03-13 11:21:10', 2, 0); -INSERT INTO `pay_wallet` VALUES (1502848353136791552, 1435894470432456704, 100.00, 1, 1399985191002447872, '2022-03-13 11:25:44', 1399985191002447872, '2022-03-24 13:22:37', 1, 0); - --- ---------------------------- --- Table structure for pay_wallet_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet_log`; -CREATE TABLE `pay_wallet_log` ( - `id` bigint(20) NOT NULL, - `wallet_id` bigint(20) NOT NULL COMMENT '钱包id', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `type` int(11) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作终端ip', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `operation_source` int(11) NOT NULL COMMENT '操作源', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wallet_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet_payment`; -CREATE TABLE `pay_wallet_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `wallet_id` bigint(20) NULL DEFAULT NULL COMMENT '钱包ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包交易记录表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_pay_config --- ---------------------------- -DROP TABLE IF EXISTS `pay_wechat_pay_config`; -CREATE TABLE `pay_wechat_pay_config` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `app_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信应用AppId', - `mch_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户号', - `api_version` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务商应用编号', - `api_key_v2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv2 密钥', - `api_key_v3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv3 密钥', - `app_secret` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'APPID对应的接口密码,用于获取接口调用凭证access_token时使用', - `p12` bigint(20) NULL DEFAULT NULL COMMENT 'p12的文件id', - `cert_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 cert.pem', - `key_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 key.pem', - `domain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '应用域名,回调中会使用此参数', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `pay_ways` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支持的支付类型', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `expire_time` int(10) NOT NULL COMMENT '超时配置', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NULL DEFAULT NULL COMMENT '状态', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wechat_pay_config --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_wechat_payment`; -CREATE TABLE `pay_wechat_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `trade_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信交易号', - `amount` decimal(19, 2) NOT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wechat_payment --- ---------------------------- -- ---------------------------- -- Table structure for qrtz_blob_triggers @@ -5373,7 +4809,6 @@ CREATE TABLE `qrtz_cron_triggers` ( -- ---------------------------- -- Records of qrtz_cron_triggers -- ---------------------------- -INSERT INTO `qrtz_cron_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '0/5 * * * * ? *', 'Asia/Shanghai'); -- ---------------------------- -- Table structure for qrtz_fired_triggers @@ -5405,7 +4840,6 @@ CREATE TABLE `qrtz_fired_triggers` ( -- ---------------------------- -- Records of qrtz_fired_triggers -- ---------------------------- -INSERT INTO `qrtz_fired_triggers` VALUES ('quartzScheduler', 'NON_CLUSTERED1663741439856', '1546857070483939328', 'DEFAULT', 'NON_CLUSTERED', 1663741920988, 1663741925000, 5, 'ACQUIRED', NULL, NULL, '0', '0'); -- ---------------------------- -- Table structure for qrtz_job_details @@ -5430,7 +4864,6 @@ CREATE TABLE `qrtz_job_details` ( -- ---------------------------- -- Records of qrtz_job_details -- ---------------------------- -INSERT INTO `qrtz_job_details` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', NULL, 'cn.bootx.payment.task.PayExpiredTimeTask', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800); -- ---------------------------- -- Table structure for qrtz_locks @@ -5445,8 +4878,6 @@ CREATE TABLE `qrtz_locks` ( -- ---------------------------- -- Records of qrtz_locks -- ---------------------------- -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'STATE_ACCESS'); -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); -- ---------------------------- -- Table structure for qrtz_paused_trigger_grps @@ -5477,7 +4908,6 @@ CREATE TABLE `qrtz_scheduler_state` ( -- ---------------------------- -- Records of qrtz_scheduler_state -- ---------------------------- -INSERT INTO `qrtz_scheduler_state` VALUES ('quartzScheduler', 'xxm1638448483700', 1638451157328, 10000); -- ---------------------------- -- Table structure for qrtz_simple_triggers @@ -5565,7 +4995,6 @@ CREATE TABLE `qrtz_triggers` ( -- ---------------------------- -- Records of qrtz_triggers -- ---------------------------- -INSERT INTO `qrtz_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '1546857070483939328', 'DEFAULT', NULL, 1663741925000, 1663741920000, 5, 'ACQUIRED', 'CRON', 1657634445000, 0, NULL, 0, ''); -- ---------------------------- -- Table structure for report_project_info @@ -5578,9 +5007,9 @@ CREATE TABLE `report_project_info` ( `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '乐观锁', `deleted` bit(1) NOT NULL COMMENT '删除标志', `index_image` bigint(20) NULL DEFAULT NULL COMMENT '预览图片id', @@ -5600,9 +5029,9 @@ CREATE TABLE `report_project_info_publish` ( `id` bigint(20) NOT NULL COMMENT '主键', `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '乐观锁', `deleted` bit(1) NOT NULL COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE @@ -5625,7 +5054,7 @@ CREATE TABLE `starter_audit_data_version` ( `change_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据更新内容', `version` int(10) NOT NULL COMMENT '版本', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据版本日志' ROW_FORMAT = DYNAMIC; @@ -5651,7 +5080,7 @@ CREATE TABLE `starter_audit_login_log` ( `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', `browser` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器类型', `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示消息', - `login_time` datetime(0) NULL DEFAULT NULL COMMENT '访问时间', + `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登陆日志' ROW_FORMAT = DYNAMIC; @@ -5678,7 +5107,7 @@ CREATE TABLE `starter_audit_operate_log` ( `operate_return` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回参数', `success` bit(1) NULL DEFAULT NULL COMMENT '是否成功', `error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误提示', - `operate_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', + `operate_time` datetime NULL DEFAULT NULL COMMENT '操作时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志' ROW_FORMAT = DYNAMIC; @@ -5728,31 +5157,56 @@ CREATE TABLE `starter_ding_robot_config` ( -- Records of starter_ding_robot_config -- ---------------------------- +-- ---------------------------- +-- Table structure for starter_file_data +-- ---------------------------- +DROP TABLE IF EXISTS `starter_file_data`; +CREATE TABLE `starter_file_data` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `base64` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'base64方式存储', + `data` longblob NULL COMMENT '数据方式存储', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '上传文件数据' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_file_data +-- ---------------------------- + -- ---------------------------- -- Table structure for starter_file_upload_info -- ---------------------------- DROP TABLE IF EXISTS `starter_file_upload_info`; CREATE TABLE `starter_file_upload_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '存储位置', - `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称', - `file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件类型', - `file_suffix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件后缀', - `file_size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小', - `external_storage_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '外部关联id', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `id` bigint(20) NOT NULL COMMENT '文件id', + `url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件访问地址', + `size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小,单位字节', + `filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名称', + `original_filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '原始文件名', + `base_path` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '基础存储路径', + `path` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '存储路径', + `ext` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件扩展名', + `content_type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'MIME类型', + `platform` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '存储平台', + `th_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图访问路径', + `th_filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图名称', + `th_size` bigint(20) NULL DEFAULT NULL COMMENT '缩略图大小,单位字节', + `th_content_type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图MIME类型', + `object_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属对象id', + `object_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属对象类型,例如用户头像,评价图片', + `metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '文件元数据', + `user_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '文件用户元数据', + `th_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '缩略图元数据', + `th_user_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '缩略图用户元数据', + `attr` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '附加属性', + `file_acl` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件ACL', + `th_file_acl` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图文件ACL', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '上传文件信息' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '文件记录表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of starter_file_upload_info -- ---------------------------- -INSERT INTO `starter_file_upload_info` VALUES (1495330622946631680, NULL, 'blob', 'jpg', 'jpg', 68, '62120ac9efeec06e2275fc52', 1399985191002447872, '2022-02-20 17:32:57'); -INSERT INTO `starter_file_upload_info` VALUES (1495331213525606400, NULL, 'blob', 'jpg', 'jpg', 68, '62120b55efeec06e2275fc54', 1399985191002447872, '2022-02-20 17:35:28'); -INSERT INTO `starter_file_upload_info` VALUES (1495331812178616320, NULL, 'blob', 'jpg', 'jpg', 74, '62120be4efeec06e2275fc56', 1399985191002447872, '2022-02-20 17:37:43'); -INSERT INTO `starter_file_upload_info` VALUES (1495331905770315776, NULL, 'blob', 'jpg', 'jpg', 76, '62120bfaefeec06e2275fc58', 1399985191002447872, '2022-02-20 17:38:03'); -INSERT INTO `starter_file_upload_info` VALUES (1530065639127871488, NULL, 'blob', 'jpg', 'jpg', 83, '6290684abf0e90583f414dcf', 1414143554414059520, '2022-05-27 13:57:31'); -- ---------------------------- -- Table structure for starter_quartz_job @@ -5767,9 +5221,9 @@ CREATE TABLE `starter_quartz_job` ( `state` int(4) NULL DEFAULT NULL COMMENT '状态', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', PRIMARY KEY (`id`) USING BTREE @@ -5791,10 +5245,10 @@ CREATE TABLE `starter_quartz_job_log` ( `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器全限定名', `success` bit(1) NOT NULL COMMENT '是否执行成功', `error_message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', + `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', `duration` bigint(255) NULL DEFAULT NULL COMMENT '执行时长', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务执行日志' ROW_FORMAT = DYNAMIC; @@ -5833,7 +5287,7 @@ CREATE TABLE `starter_wx_fans` ( `id` bigint(20) NOT NULL, `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联OpenId', `subscribe_status` bit(1) NULL DEFAULT NULL COMMENT '订阅状态', - `subscribe_time` datetime(0) NULL DEFAULT NULL COMMENT '订阅时间', + `subscribe_time` datetime NULL DEFAULT NULL COMMENT '订阅时间', `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称', `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别', `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '语言', @@ -5860,9 +5314,9 @@ CREATE TABLE `starter_wx_menu` ( `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', `publish` bit(1) NOT NULL COMMENT '是否发布', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', `version` int(11) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE @@ -5888,9 +5342,9 @@ CREATE TABLE `starter_wx_template` ( `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板内容', `example` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '示例', `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', `version` int(11) NOT NULL COMMENT '版本', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `inx_`(`template_id`) USING BTREE COMMENT '模板id' diff --git a/_doc/ChangeLog.md b/_doc/ChangeLog.md index 0e3e852f4..963f21327 100644 --- a/_doc/ChangeLog.md +++ b/_doc/ChangeLog.md @@ -1,9 +1,98 @@ # CHANGELOG +## [v1.3.6] 一号线-园博园 +- 新增: 文件上传替换为基于`x-file-storage`定制 +- 新增: 角色结构改为树形结构, 支持父子角色, 权限分配时支持进行级联收回, 也可以级联分配给下级 +- 优化: 密码过期后清除所有的权限,必须强制更改密码 +- 优化: 密码安全配置设置为必填. 保存信息状态变为查看状态 +- 优化: 密码安全配置设置为必填. 保存信息化状态变为查看状态 +- 优化: 数据权限重构为数据角色, 用于管理数据权限相关配置 +- 优化: Swagger相关配置不进行配置会无法启动处理 +- 优化: 时间反序列化时, 支持反序列化秒和毫秒级别的时间 +- 优化: MP分页和列表查询默认为ID降序 +- 优化: 查询构造器字段排序支持查询参数直接继承实现 +- fix: 请求权限配置新建时偶发类型不可以更改 +- fix: 部分实体类数据更新策略配置错误修复 +- fix: 新增和编辑用户时. 手机号和邮件校验有问题 +- fix: 用户列表和详情字典显示有问题 +- fix: 更新用户信息时, 脱敏的字段保存时未被忽略 +## [v1.3.5] 一号线-园博园 +- 新增: SQL查询功能 +- 新增: SQL查询功能支持导出 +- 新增: 前端登录时检测密码是否需要进行修改 +- 新增: 默认密码强制修改功能 +- 新增: 记录密码输入错误次数 +- 新增: 多次输错密码自动锁定功能 +- 新增: 超过锁定时间后,再登录时解除锁定清空 +- 新增: 记录密码更改记录,不能与前N次相同功能 +- 新增: 控制密码多少天必须更改 +- 新增: 密码安全策略配置 +- 优化: 前端websocket连接前先检测是否已经登录 +- 优化: 完整集成Knife4j, 支持增强功能 +- 优化: 审计日志增加定时删除和一键清除超期日志功能 + +## [v1.3.4] 一号线-园博园 +- 新增: 通用导入组件 +- 新增: 小程序端脚手架 +- 新增: 小程序后端对接相关配置 +- 新增: 敏感字管理和过滤功能 +- 新增: 适配腾讯云cos文件存储上传 +- 优化: 优化几种MP的类型转换器类 +- 优化: 用户批量重置密码 +- 优化: 代码生成模板添加批量操作相关 +- 优化: 支持IpV6地址的记录 +- 优化: Dockerfile相关配置 +- fix: 修复无法查看站内信的问题 +## [v1.3.3] 一号线-园博园 +- 新增: 添加短信配置, 集成SMS4J, 支持分渠道配置 +- 新增: 新版自定义表单集成(epic-designer尚处于测试版) +- 新增: 各种事件通知, 用户相关/角色相关/短信渠道配置相关 +- 新增: vxe暗黑模式适配 +- 优化: 终端可以设置新注册用户是否默认拥有该终端的权限 +- 优化: 删除工作流和支付相关代码 +- fix: JacksonUtil标识未生效 +## [v1.3.2] 一号线-园博园 +- 新增: 查询生成器支持排序 +- 优化: 版本依赖升级 +- fix: 多数据源加载时机不对, 与flyway冲突 +## [v1.3.1] 一号线-园博园 +- 新增: 代码生成器支持多数据源 +- 新增: 多数据源增加启动时自动加载配置 +- 优化: 可视化大屏同步GoVIew最新版本 +- 优化: 数据版本记录插件解析失败SQL时的报错提示 +- 优化: 调整减少部分传递依赖 +- 优化: 代码生成器模板更新 +- fix: 工具类构建树时子孙元素排序未生效 +- fix: 超级查询字段获取失败问题 +- fix: maven-javadoc-plugin升级到3.5.0版本, 避免macos下出现报错 +- fix: mongo相关service条件注入处理,避免在无Mongo依赖的情况下无法启动 +- fix: 记录ip对应地址时偶发的空指针处理 +- fix: 用户分配数据权限有误 +- fix: 系统参数配置值字段缺少 +## [v1.3.0] 一号线-园博园 +**项目主要更新** +- 重构: 拆分支付模块为`dax-pay`子项目 +- 重构: 拆分工作流模块为`bpmn-plus`子项目 +- 重构: 项目包名称统一为cn.bootx.platform +- 重构: 项目改造为支持发布到maven +- 重构: 优化子模块依赖关系,适应子项目引入依赖 +- 重构: 数据库SQL文件精简,拆分到子项目中 +- 重构: 默认日志手机PlumeLog Lite更改为 Plumelog标准版 +- 新增: IP查询地址功能 +- fix: 处理MySql8.x关键字问题 + +**Vue3更新** +- 设为主版本,功能默认使用Vue版进行实现 + +**Vue2更新** +- 非核心模块的功能,后续可能不再做实现。 + ## [v1.2.3] 一号线-创新谷 **项目主要更新** - 新增: 预定义SQL查询管理 - 新增: 动态数据源管理 -- 优化: PlumeLog日志删除定时任务 +- 优化: PlumeLog日志删除定时任务重写 +- 优化: sa-token适配1.34.0版本 +- 优化: 工作流Flowable更新到6.8.0版本 - 优化: 升级spring boot 2.7.10, 解决漏洞问题 - 优化: 升级spring-javaformat插件版本, 优化链式调用时的格式化 - 优化: 微信公众平台消息处理模块优化 @@ -49,7 +138,7 @@ - 数据字段翻译功能支持字典翻译 - 中国行政区划信息扩展至五级,支持村庄社区 - 优化 TreeBuildUtil优化Children的生成 -- fix plumelog新版本有问题(实时日志不显示), 回滚版本 +- fiplumelog新版本有问题(实时日志不显示), 回滚版本 **Vue3更新** - 中国行政区划演示 - 幂等接口演示 @@ -114,7 +203,7 @@ - 优化: redisson启动机制修改, 不再会导致项目无法启动 - 优化: 钱包报错提示优化 - 优化: vue3模板调整 -- fix ts映射字段类型缺失 +- fits映射字段类型缺失 **Vue3进度** - 新增: 企业微信机器人和钉钉机器人配置 @@ -228,8 +317,8 @@ - 增加流程回退处理 - 优化用户基础信息修改 - 优化消息通知内容显示 -- fix 系统内置终端不允许删除 -- fix addable/editable/showable, 状态不随动问题 +- fi系统内置终端不允许删除 +- fiaddable/editable/showable, 状态不随动问题 **Vue3进度** - 移植 终端管理, 增加登录方式 功能 @@ -262,7 +351,7 @@ - 优化重写多实例任务Behavior结束条件 - 优化拆分ApplyFormShow前端组件 - 优化多实例任务记录多实例关联id -- fix 流程节点人员分类信息丢失 +- fi流程节点人员分类信息丢失 ## [v1.1.2] 一号线-工研院 - 增加流程节点人员基础分配类型,新增发起人、指定用户、指定角色、运行时指定等方式 - 增加跳过当前节点配置 @@ -445,7 +534,7 @@ - 优化: 前端修改密码时的提示 - 优化: 字典翻译工具类增加异步方法,解决获取不到字典项的问题 - 优化: 日志文件同时输出log格式文件,保留日期更改为30天 -- fix 字典项分页查询报错 +- fi字典项分页查询报错 ## [v1.1.0-alpha-4] 一号线-工研院.预览版4 - 升级Spring boot 2.6.2、Mybatis Plus 3.5.0 @@ -464,8 +553,8 @@ - 优化: 角色管理给分配菜单权限支持搜索 - 优化: 部门机构支持搜索 - 优化: 部门删除时发送事件,用到部门的地方进行了处理 -- fix 路径误拦截问题 -- fix 云效构建后登录报序列化错误 +- fi路径误拦截问题 +- fi云效构建后登录报序列化错误 ## [v1.1.0-alpha-3] 一号线-工研院.预览版3 - 升级Spring boot 2.6.x diff --git a/_doc/Task.md b/_doc/Task.md index 71bb1fac8..d90565d4e 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -1 +1,27 @@ -[ ] +## 1.3.7 +- [ ] 增加请求权限注解,同步接口时通过注解进行同步,管理界面更改为树形 +- [ ] 权限相关缓存机制更改, 不能直接用户关联到具体的权限 +- [x] 菜单和请求权限只能系统管理员配置, 没有数据权限的控制 +- [ ] 查询构造器支持帮助功能 +- [ ] 请求权限优化, 新增注解, 扫描时可以根据注解自动进行特定的处理 +- [ ] 查询构造器增加时间范围查询功能 +- [x] 序列生成器目前生成有问题, +## 1.3.[x]、1.4.[x] +- 接口平台功能 +- 添加配置备份功能(菜单/系统参数/字典), csv或者表格方式 +- 数据集功能 +- 接入LiteFLow +- PostgreSQL 数据库适配 +- 添加短信模板功能, 可以与各短信商渠道进行同步 +- 优化异常类,将各种异常类进行拆分出来 +- 优化参数校验, 将各种入参进行校验 +- 代码生成模板支持配置 +- 支持预览编辑完成的富文本 +- 添加各种批量操作功能 +- 一键缓存同步和更新操作(字典/参数) +- 加密模块支持主键加密 +- 对上传的文件管理还需要完善, 例如改文件是否还被使用, 上传场景是什么样的一类 +- 前端首页分析页面需要重做,接入真实数据 +- 可视化大屏端支持一键登录 +- 可视化大屏支持快速对接数据集 +- 支持多种验证码方式 diff --git a/_doc/images/jetbrains.png b/_doc/images/jetbrains.png new file mode 100644 index 000000000..15a430e24 Binary files /dev/null and b/_doc/images/jetbrains.png differ diff --git a/_doc/images/qq_qun.jpg b/_doc/images/qq_qun.jpg new file mode 100644 index 000000000..476dd54d3 Binary files /dev/null and b/_doc/images/qq_qun.jpg differ diff --git a/_license/LICENSE.md b/_license/LICENSE.md index 19fcc34a6..2af07d4ed 100644 --- a/_license/LICENSE.md +++ b/_license/LICENSE.md @@ -41,3 +41,15 @@ https://gitee.com/xiaoym/knife4j easy_trans 一个注解搞定数据翻译: https://gitee.com/dromara/easy_trans + +vxe-table暗黑主题灵感 +https://github.com/adoin + +DFA算法实现的敏感词过滤工具,支持Skip参数控制敏感词干扰噪音,支持白名单跳过白名单词汇,支持在线添加和删除敏感词,管理敏感词库: +https://gitee.com/humingzhang/wordfilter + +vue3-vant4-mobile Vant4脚手架: +https://github.com/xiangshu233/vue3-vant4-mobile + +分布式序列号生成组件: +https://gitee.com/xuan698400/xsequence diff --git a/_license/vue3-vant4-mobile/LICENSE b/_license/vue3-vant4-mobile/LICENSE new file mode 100644 index 000000000..453b9cd35 --- /dev/null +++ b/_license/vue3-vant4-mobile/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 傲慢或香橙 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/_license/wordfilter/LICENSE b/_license/wordfilter/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/_license/wordfilter/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_license/xsequence/LICENSE b/_license/xsequence/LICENSE new file mode 100644 index 000000000..c8bbb9fe7 --- /dev/null +++ b/_license/xsequence/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "{}" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright 2018 徐安(徐工) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/bootx-common-core/pom.xml b/bootx-common-core/pom.xml index 7ae2b087a..dc0068bb1 100644 --- a/bootx-common-core/pom.xml +++ b/bootx-common-core/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> cn.bootx.platform - bootx-platform - 1.2.3 + bootx-platform-parent + 1.3.6.2 4.0.0 @@ -16,6 +16,7 @@ org.projectlombok lombok + provided diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/PermCode.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/PermCode.java deleted file mode 100644 index 0fe2ff127..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/PermCode.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.common.core.annotation; - -import java.lang.annotation.*; - -/** - * 权限码鉴权注解 1. 用在Controller及对应的请求方法上时,可以通过用户是否拥有该请求路径的权限码,来决定是否可以通行本次请求 2. - * 放在数据库实体类及字段上时,会在启用查询字段权限的时候,对用户没有权限码的字段不进行SQL查询 - * - * @author xxm - * @date 2023/1/22 - */ -@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE }) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface PermCode { - - /** - * 权限码,支持配置多个 - */ - String[] value(); - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/QueryParam.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/QueryParam.java deleted file mode 100644 index f5fd53062..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/QueryParam.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.bootx.common.core.annotation; - -import java.lang.annotation.*; - -/** - * 查询参数 生效顺序 QueryParams 查询参数字段 > Entity 数据库实体字段 > QueryParams 查询类 > Entity 数据库实体类 - * - * @author xxm - * @date 2022/12/12 - */ -@Target({ ElementType.TYPE, ElementType.FIELD }) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -public @interface QueryParam { - - /** - * 匹配条件类型 - */ - CompareTypeEnum type() default CompareTypeEnum.EQ; - - /** - * 是否忽略 - */ - boolean ignore() default false; - - /** - * 名称转换类型, 默认为下划线 - */ - NamingCaseEnum namingCase() default NamingCaseEnum.UNDER_LINE; - - /** - * 自定义查询字段对应的数据库字段名称. 只可以在字段上标注时使用,标注在类上不生效 配置后,namingCase配置将会无效,会以这项配置数据库字段名称为准 - */ - String fieldName() default ""; - - /** - * 匹配类型 - */ - enum CompareTypeEnum { - - /** 大于 */ - GT, - - /** 大于等于 */ - GE, - - /** 小于 */ - LT, - - /** 小于等于 */ - LE, - - /** 等于 */ - EQ, - - /** 模糊匹配 */ - LIKE, - - /** 左模糊 */ - LIKE_LEFT, - - /** 右模糊 */ - LIKE_RIGHT, - - /** 是否为空, 只作用在布尔类型上, true 代表 is null, false 代表 not null */ - IS_NULL; - - } - - /** - * 名称转换类型 - */ - enum NamingCaseEnum { - - /** 获取数据库实体类配置的数据库字段名称,只可以用在数据库实体类字段上 */ - LAMBDA, - /** 转换为下划线 */ - UNDER_LINE, - /** 不进行处理 */ - NONE; - - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Column.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Column.java deleted file mode 100644 index 8ed99634a..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Column.java +++ /dev/null @@ -1,93 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import cn.bootx.common.core.code.actable.MySqlFieldType; - -import java.lang.annotation.*; - -/** - * 建表的必备注解 - * - * @author sunchenbin, Spet - * @version 2019/07/06 - */ -// 该注解用于方法声明 -@Target(ElementType.FIELD) -// VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息 -@Retention(RetentionPolicy.RUNTIME) -// 将此注解包含在javadoc中 -@Documented -public @interface Column { - - /** - * 字段名 - * @return 字段名:不填默认使用属性名作为表字段名 - */ - String value() default ""; - - /** - * 字段名 - * @return 字段名:不填默认使用属性名作为表字段名 - */ - String name() default ""; - - /** - * 数据库字段排序, 数字小的在前面,大的在后面 - */ - int order() default 0; - - /** - * 字段类型:不填默认使用属性的数据类型进行转换,转换失败的字段不会添加 - * 仅支持cn.bootx.common.actable.constants.MySqlTypeConstant中的枚举数据类型 - * 不填默认转换类:cn.bootx.common.actable.command.JavaToMysqlType - * @return 字段类型 - */ - MySqlFieldType type() default MySqlFieldType.DEFAULT; - - /** - * 字段长度,默认是255 - * @return 默认字段长度,默认是255 - */ - int length() default 255; - - /** - * 小数点长度,默认是0 - * @return 小数点长度,默认是0 - */ - int decimalLength() default 0; - - /** - * 是否为可以为null,true是可以,false是不可以,默认为true - * @return 是否为可以为null,true是可以,false是不可以,默认为true - */ - boolean isNull() default true; - - /** - * 是否是主键,默认false - * @return 是否是主键,默认false - */ - boolean isKey() default false; - - /** - * 是否自动递增,默认false,只有主键才能使用 - * @return 是否自动递增,默认false - */ - boolean isAutoIncrement() default false; - - /** - * 默认值,默认为null - * @return 默认值 - */ - String defaultValue() default "DEFAULT"; - - /** - * 数据表字段备注 - * @return 默认值,默认为空 - */ - String comment() default ""; - - /** - * 是否排除该字段, 默认不排除 - */ - boolean ignore() default false; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/EnableTimeSuffix.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/EnableTimeSuffix.java deleted file mode 100644 index 49b956ba4..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/EnableTimeSuffix.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import cn.hutool.core.date.DatePattern; - -import java.lang.annotation.*; - -/** - * 表名时间后缀 - * - * @author Elphen - * @version 2021年03月11日 上午11:17:37 - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface EnableTimeSuffix { - - /** - * 开启时间后缀 - */ - boolean value() default true; - - /** - * 时间后缀格式
- * 使用常量类 {@link DatePattern} - */ - String pattern() default DatePattern.SIMPLE_MONTH_PATTERN; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IgnoreUpdate.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IgnoreUpdate.java deleted file mode 100644 index b74870bd0..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IgnoreUpdate.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 作者:guoyzh 时间:2021/5/6 9:43 功能:忽略字段更新 - */ -// 该注解用于方法声明 -@Target(ElementType.FIELD) -// VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息 -@Retention(RetentionPolicy.RUNTIME) -// 将此注解包含在javadoc中 -@Documented -public @interface IgnoreUpdate { - - // 是否忽略对当前字段的更新操作 - boolean value() default true; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Index.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Index.java deleted file mode 100644 index 073e557b6..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Index.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import java.lang.annotation.*; - -/** - * 设置字段索引 - * - * @author sunchenbin - * @version 2019年6月14日 下午6:12:48 - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface Index { - - /** - * 索引的名字,不设置默认为{actable_idx_当前标记字段名@Column的name} - *

- * 如果设置了名字例如union_name,系统会默认在名字前加actable_idx_前缀,也就是actable_idx_union_name - * @return - */ - String value() default ""; - - /** - * 要建立索引的字段名,不设置默认为当前标记字段名@Column的name - *

- * 可设置多个建立联合索引{"login_mobile","login_name"} - * @return - */ - String[] columns() default {}; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IsNativeDefValue.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IsNativeDefValue.java deleted file mode 100644 index 3f1e70c19..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/IsNativeDefValue.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import java.lang.annotation.*; - -/** - * 开启默认值原生模式 原生模式介绍:默认是false表示非原生,此时value只支持字符串形式,会将value值以字符串的形式设置到字段的默认值,例如value="aa" - * 即sql为 DEFAULT "aa" 如果设置true,此时如果value="CURRENT_TIMESTAMP",即sql为 DEFAULT - * CURRENT_TIMESTAMP - * - * @author sunchenbin - * @version 2020年5月26日 下午6:13:15 - */ -// 该注解用于方法声明 -@Target(ElementType.FIELD) -// VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息 -@Retention(RetentionPolicy.RUNTIME) -// 将此注解包含在javadoc中 -@Documented -public @interface IsNativeDefValue { - - /** - * 开启默认值原生模式 - * 原生模式介绍:默认是false表示非原生,此时value只支持字符串形式,会将value值以字符串的形式设置到字段的默认值,例如value="aa" 即sql为 - * DEFAULT "aa" 如果设置true,此时如果默认值为="CURRENT_TIMESTAMP",即sql为 DEFAULT CURRENT_TIMESTAMP - * @return - */ - boolean value() default true; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Table.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Table.java deleted file mode 100644 index 4979f444c..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Table.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import cn.bootx.common.core.code.actable.MySqlCharset; -import cn.bootx.common.core.code.actable.MySqlEngine; - -import java.lang.annotation.*; - -/** - * 创建表时的表名 - * - * @author sunchenbin - * @version 2016年6月23日 下午6:13:37 - */ -// 表示注解加在接口、类、枚举等 -@Target(ElementType.TYPE) -// VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息 -@Retention(RetentionPolicy.RUNTIME) -// 将此注解包含在javadoc中 -@Documented -public @interface Table { - - /** - * 表名 - * @return 表名 - */ - String name() default ""; - - /** - * 表名 - * @return 表名 - */ - String value() default ""; - - /** - * 表注释,也可以使用@TableComment注解代替 - */ - String comment() default ""; - - /** - * 表字符集,也可以使用@TableCharset注解代替 - * 仅支持cn.bootx.common.actable.constants.MySqlCharsetConstant中的枚举字符集 - */ - MySqlCharset charset() default MySqlCharset.UTF8MB4; - - /** - * 表引擎,也可以使用@TableEngine注解代替 - * 仅支持cn.bootx.common.actable.constants.MySqlEngineConstant中的存储引擎枚举 - */ - MySqlEngine engine() default MySqlEngine.InnoDB; - - /** - * 是否开启simple模式配置,开启后字段不写注解@Column也可以采用默认的驼峰转换法创建字段 - */ - boolean isSimple() default true; - - /** - * 需要排除的属性名,排除掉的属性不参与建表, 静态字段默认会被排除 - */ - String[] excludeFields() default {}; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Unique.java b/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Unique.java deleted file mode 100644 index 8c04d8c9e..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/actable/Unique.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.common.core.annotation.actable; - -import java.lang.annotation.*; - -/** - * 设置字段唯一约束 - * - * @author sunchenbin - * @version 2019年6月14日 下午6:12:48 - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface Unique { - - /** - * 唯一约束的名字,不设置默认为{actable_uni_当前标记字段名@Column的name} - *

- * 如果设置了名字例如union_name,系统会默认在名字前加auni_前缀,也就是uni_union_name - */ - String value() default ""; - - /** - * 唯一约束的字段名,不设置默认为当前标记字段名@Column的name - *

- * 可设置多个建立联合唯一{"login_mobile","login_name"} - */ - String[] columns() default {}; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/DatabaseType.java b/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/DatabaseType.java deleted file mode 100644 index e1cc69d5a..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/DatabaseType.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.bootx.common.core.code.actable; - -/** - * 数据库类型 - * - * @author xxm - * @date 2023/1/16 - */ -public enum DatabaseType { - - MYSQL, ORACLE, SQLSERVER, POSTGRESQL; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlCharset.java b/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlCharset.java deleted file mode 100644 index 6f98677c6..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlCharset.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.bootx.common.core.code.actable; - -/** - * mysql支持的字符集 - */ -public enum MySqlCharset { - - DEFAULT, ARMSCII8, ASCII, BIG5, BINARY, CP850, CP852, CP866, CP932, CP1250, CP1251, CP1256, CP1257, DEC8, EUCJPMS, - EUCKR, GB2312, GBK, GEOSTD8, GREEK, HEBREW, HP8, KEYBCS2, KOI8R, KOI8U, LATIN1, LATIN2, LATIN5, LATIN7, MACCE, - MACROMAN, SJIS, SWE7, TIS620, UCS2, UJIS, UTF8, UTF8MB4, UTF16, UTF32; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlEngine.java b/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlEngine.java deleted file mode 100644 index f82e4d0b1..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlEngine.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.common.core.code.actable; - -/** - * mysql支持的引擎 - */ -public enum MySqlEngine { - - DEFAULT, ARCHIVE, BLACKHOLE, CSV, InnoDB, MEMORY, MRG_MYISAM, MyISAM, PERFORMANCE_SCHEMA; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlFieldType.java b/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlFieldType.java deleted file mode 100644 index 964b9ad1c..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/actable/MySqlFieldType.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.common.core.code.actable; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 用于配置Mysql数据库中类型,并且该类型需要设置几个长度 这里配置多少个类型决定了,创建表能使用多少类型 例如:varchar(1) decimal(5,2) - * datetime - * - * @author sunchenbin - * @version 2016年6月23日 下午5:59:33 - */ -@Getter -@AllArgsConstructor -public enum MySqlFieldType { - - DEFAULT(null, null, null), INT(1, 11, null), VARCHAR(1, 255, null), BINARY(1, 1, null), CHAR(1, 255, null), - BIGINT(1, 20, null), BIT(1, 1, null), TINYINT(1, 4, null), SMALLINT(1, 6, null), MEDIUMINT(1, 9, null), - DECIMAL(2, 10, 2), DOUBLE(2, 10, 0), TEXT(0, null, null), MEDIUMTEXT(0, null, null), LONGTEXT(0, null, null), - DATETIME(0, null, null), TIMESTAMP(0, null, null), DATE(0, null, null), TIME(0, null, null), FLOAT(2, 10, 0), - YEAR(0, null, null), BLOB(0, null, null), LONGBLOB(0, null, null), MEDIUMBLOB(0, null, null), - TINYTEXT(0, null, null), TINYBLOB(0, null, null), JSON(0, null, null); - - private final Integer lengthCount; - - private final Integer lengthDefault; - - private final Integer decimalLengthDefault; - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DangerSqlException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DangerSqlException.java deleted file mode 100644 index 110747ff9..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DangerSqlException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.common.core.exception; - -import static cn.bootx.common.core.code.CommonErrorCode.DANGER_SQL; - -/** - * SQL相关异常 - * - * @author xxm - * @date 2023/3/9 - */ -public class DangerSqlException extends BizException { - - public DangerSqlException(String msg) { - super(DANGER_SQL, msg); - } - - public DangerSqlException() { - super(DANGER_SQL, "危险SQL异常"); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DataNotExistException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DataNotExistException.java deleted file mode 100644 index a3e2fd7be..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/DataNotExistException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.common.core.exception; - -import static cn.bootx.common.core.code.CommonErrorCode.DATA_NOT_EXIST; - -/** - * 数据不存在异常 - * - * @author xxm - * @date 2022/1/10 - */ -public class DataNotExistException extends BizException { - - public DataNotExistException(String msg) { - super(DATA_NOT_EXIST, msg); - } - - public DataNotExistException() { - super(DATA_NOT_EXIST, "数据不存在"); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/OptimisticLockException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/OptimisticLockException.java deleted file mode 100644 index 416f1aa6c..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/OptimisticLockException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.common.core.exception; - -import java.io.Serializable; - -import static cn.bootx.common.core.code.CommonErrorCode.DATA_OUT_OF_DATE; - -/** - * 乐观锁异常 - * - * @author xxm - * @date 2020/4/15 14:11 - */ -public class OptimisticLockException extends SystemException implements Serializable { - - private static final long serialVersionUID = -1605410024618499135L; - - public OptimisticLockException() { - super(DATA_OUT_OF_DATE, "数据不存在或者已过期"); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/RepetitiveOperationException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/RepetitiveOperationException.java deleted file mode 100644 index 5c864cfc2..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/RepetitiveOperationException.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.bootx.common.core.exception; - -import java.io.Serializable; - -import static cn.bootx.common.core.code.CommonErrorCode.REPETITIVE_OPERATION_ERROR; - -/** - * 重复操作异常 - * - * @author xxm - * @date 2021/1/2 - */ -public class RepetitiveOperationException extends SystemException implements Serializable { - - private static final long serialVersionUID = 2120383728758502943L; - - public RepetitiveOperationException() { - super(REPETITIVE_OPERATION_ERROR, "重复操作异常"); - } - - public RepetitiveOperationException(String msg) { - super(REPETITIVE_OPERATION_ERROR, msg); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportOperateException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportOperateException.java deleted file mode 100644 index 461ece47a..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportOperateException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.common.core.exception; - -import java.io.Serializable; - -import static cn.bootx.common.core.code.CommonErrorCode.UN_SUPPORTED_OPERATE; - -/** - * 不支持的操作异常 - * - * @author xxm - * @date 2022/7/27 - */ -public class UnSupportOperateException extends ErrorCodeRuntimeException implements Serializable { - - public UnSupportOperateException(String message) { - super(UN_SUPPORTED_OPERATE, message); - } - - public UnSupportOperateException() { - super(UN_SUPPORTED_OPERATE, "不支持的操作异常"); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportReadException.java b/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportReadException.java deleted file mode 100644 index 54993a93c..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/UnSupportReadException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.common.core.exception; - -import java.io.Serializable; - -import static cn.bootx.common.core.code.CommonErrorCode.UN_SUPPORTED_READ; - -/** - * 不支持的读取操作 - * - * @author xxm - * @date 2020/4/10 14:05 - */ -public class UnSupportReadException extends BizException implements Serializable { - - private static final long serialVersionUID = -743586662489535860L; - - public UnSupportReadException() { - super(UN_SUPPORTED_READ, "不支持的读取下载响应"); - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/function/EntityBaseFunction.java b/bootx-common-core/src/main/java/cn/bootx/common/core/function/EntityBaseFunction.java deleted file mode 100644 index 7ab8e1c7a..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/function/EntityBaseFunction.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.common.core.function; - -/** - * entity基础方法 - * - * @author xxm - * @date 2020/11/18 - */ -public interface EntityBaseFunction { - - /** - * 转换 - */ - T toDto(); - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/function/ParamService.java b/bootx-common-core/src/main/java/cn/bootx/common/core/function/ParamService.java deleted file mode 100644 index 171ad1261..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/function/ParamService.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.common.core.function; - -/** - * 参数获取服务(必须有实现类) - * - * @author xxm - * @date 2022/5/1 - */ -public interface ParamService { - - /** - * 获取 参数值 - */ - String getValue(String key); - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/function/SystemKeyValueService.java b/bootx-common-core/src/main/java/cn/bootx/common/core/function/SystemKeyValueService.java deleted file mode 100644 index 434f0f5ae..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/function/SystemKeyValueService.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.common.core.function; - -import cn.bootx.common.core.rest.dto.KeyValue; - -import java.util.List; - -/** - * kv存储接口 (必须实现) - * - * @author xxm - * @date 2022/6/13 - */ -public interface SystemKeyValueService { - - /** - * 获取值 - */ - String get(String key); - - /** - * 获取多个 - */ - List gets(List keys); - - /** - * 设置值 - */ - void setup(String key, String value); - - /** - * 设置多个 - */ - void setupBatch(List list); - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/function/UserDetailService.java b/bootx-common-core/src/main/java/cn/bootx/common/core/function/UserDetailService.java deleted file mode 100644 index 39c1eaacd..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/function/UserDetailService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bootx.common.core.function; - -import cn.bootx.common.core.entity.UserDetail; - -import java.util.Optional; - -/** - * 获取用户 - * - * @author xxm - * @date 2022/8/28 - */ -public interface UserDetailService { - - /** - * 获取用户信息 - */ - Optional findByUserId(Long userId); - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/TreeBuildUtil.java b/bootx-common-core/src/main/java/cn/bootx/common/core/util/TreeBuildUtil.java deleted file mode 100644 index 23ba9efa2..000000000 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/TreeBuildUtil.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.bootx.common.core.util; - -import cn.hutool.core.collection.CollectionUtil; -import lombok.experimental.UtilityClass; - -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.function.BiConsumer; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * 构建数据树工具类 - * - * @author xxm - * @date 2022/12/24 - */ -@UtilityClass -public class TreeBuildUtil { - - /** - * 构建成树 - * @param list 要进行转换的列表 - * @param pid 一级节点的父级id,通常为null - * @param getId 获取主键的方法方法引用 - * @param getPid 获取关联父级节点主键的方法引用 - * @param setChildren 设置子节点列表的方法引用 - */ - public List build(List list, Object pid, Function getId, Function getPid, - BiConsumer> setChildren) { - return build(list, pid, getId, getPid, setChildren, null); - } - - /** - * 构建成树 (带排序) - * @param list 要进行转换的列表 - * @param pid 一级节点的父级id,通常为null - * @param getId 获取主键的方法方法引用 - * @param getPid 获取关联父级节点主键的方法引用 - * @param setChildren 设置子节点列表的方法引用 - * @param comparator 节点顺序的排序规则 - */ - public List build(List list, Object pid, Function getId, Function getPid, - BiConsumer> setChildren, Comparator comparator) { - List children = list.stream().filter(m -> Objects.equals(getPid.apply(m), pid)).collect(Collectors.toList()); - if (CollectionUtil.isEmpty(children)) { - return null; - } - for (T region : children) { - List childrenList = build(list, getId.apply(region), getId, getPid, setChildren); - setChildren.accept(region, childrenList); - } - // 排序 - if (Objects.nonNull(comparator)) { - children.sort(comparator); - } - return children; - } - -} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/BigField.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/BigField.java similarity index 75% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/BigField.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/BigField.java index 508100ad1..e96becfe5 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/BigField.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/BigField.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 大字段注解 * * @author xxm - * @date 2021/10/24 + * @since 2021/10/24 */ @Target({ ElementType.PARAMETER, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/CountTime.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/CountTime.java similarity index 75% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/CountTime.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/CountTime.java index 8d47c51e9..87cd1029d 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/CountTime.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/CountTime.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 获取程序执行时间注解 * * @author xxm - * @date 2020/12/22 + * @since 2020/12/22 */ @Target({ ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/DataVersionLog.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/DataVersionLog.java similarity index 80% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/DataVersionLog.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/DataVersionLog.java index abbae6682..e4f1eef2c 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/DataVersionLog.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/DataVersionLog.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 数据版本日志 * * @author xxm - * @date 2023/1/2 + * @since 2023/1/2 */ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/EncryptionField.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/EncryptionField.java similarity index 76% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/EncryptionField.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/EncryptionField.java index 2c7534d96..7fbf1af75 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/EncryptionField.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/EncryptionField.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 加密字段注解 * * @author xxm - * @date 2021/11/23 + * @since 2021/11/23 */ @Target({ ElementType.PARAMETER, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Idempotent.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Idempotent.java similarity index 91% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Idempotent.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Idempotent.java index 480c54dae..d6ee7eea5 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Idempotent.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Idempotent.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 幂等性拦截注解 * * @author xxm - * @date 2021/1/2 + * @since 2021/1/2 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/IgnoreAuth.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/IgnoreAuth.java similarity index 76% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/IgnoreAuth.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/IgnoreAuth.java index 7a0ad09b2..9a504ed67 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/IgnoreAuth.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/IgnoreAuth.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -19,8 +19,9 @@ boolean ignore() default true; /** - * 只要登录就忽略权限校验, 在ignore为false时生效 + * 只要登录就忽略权限校验, login值为true是ignore将不生效 */ boolean login() default false; -} \ No newline at end of file + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/JobLog.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/JobLog.java similarity index 83% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/JobLog.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/JobLog.java index c27d32774..dfc148379 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/JobLog.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/JobLog.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 定时任务日志 * * @author xxm - * @date 2022/7/12 + * @since 2022/7/12 */ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/NestedPermission.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/NestedPermission.java similarity index 89% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/NestedPermission.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/NestedPermission.java index ae31815f1..1e324c37d 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/NestedPermission.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/NestedPermission.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 嵌套权限控制注解,需要配合Permission注解一起使用,在Permission注解声明方法调用其他子方法时, 通过添加本数据来忽略子方法执行时的数据权限拦截 * * @author xxm - * @date 2022/1/2 + * @since 2022/1/2 */ @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLog.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLog.java similarity index 94% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLog.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLog.java index e2f079c79..41da7c5f1 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLog.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLog.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 操作日志注解(支持重复注解) * * @author xxm - * @date 2021/8/13 + * @since 2021/8/13 */ @Target({ ElementType.PARAMETER, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLogs.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLogs.java similarity index 80% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLogs.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLogs.java index ba1c05c31..873201867 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/OperateLogs.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/OperateLogs.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -6,7 +6,7 @@ * 操作日志注解组 * * @author xxm - * @date 2021/12/20 + * @since 2021/12/20 */ @Target({ ElementType.PARAMETER, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/PermCode.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/PermCode.java new file mode 100644 index 000000000..9df640d1a --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/PermCode.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 权限码鉴权注解 + * 1. 用在Controller及对应的请求方法上时,可以通过用户是否拥有该请求路径的权限码,来决定是否可以通行本次请求 + * 2.放在数据库实体类及字段上时,会在启用查询字段权限的时候,对用户没有权限码的字段不进行SQL查询 + * + * @author xxm + * @since 2023/1/22 + */ +@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface PermCode { + + /** + * 权限码,支持配置多个 + */ + String[] value(); + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Permission.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Permission.java similarity index 89% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Permission.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Permission.java index 4a57e202f..235c2e942 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Permission.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Permission.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.*; @@ -7,7 +7,7 @@ * * @see NestedPermission 通常在嵌套方法不启用数据权限时使用 * @author xxm - * @date 2021/12/22 + * @since 2021/12/22 */ @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/QueryParam.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/QueryParam.java new file mode 100644 index 000000000..a3d89271e --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/QueryParam.java @@ -0,0 +1,88 @@ +package cn.bootx.platform.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 查询参数 生效顺序 QueryParams 查询参数字段 > Entity 数据库实体字段 > QueryParams 查询类 > Entity 数据库实体类 + * + * @author xxm + * @since 2022/12/12 + */ +@Target({ ElementType.TYPE, ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface QueryParam { + /** + * 匹配条件类型 + */ + CompareTypeEnum type() default CompareTypeEnum.EQ; + + /** + * 生成查询条件时是否忽略 + */ + boolean ignore() default false; + + /** + * 名称转换类型, 默认为下划线 + */ + NamingCaseEnum namingCase() default NamingCaseEnum.UNDER_LINE; + + /** + * 自定义查询字段对应的数据库字段名称. 只可以在字段上标注时使用,标注在类上不生效 配置后,namingCase配置将会无效,会以这项配置数据库字段名称为准 + */ + String fieldName() default ""; + + /** + * 匹配类型 + */ + enum CompareTypeEnum { + + /** 大于 */ + GT, + + /** 大于等于 */ + GE, + + /** 小于 */ + LT, + + /** 小于等于 */ + LE, + + /** 等于 */ + EQ, + /** 范围查询, 需要放在对象上, */ + BETWEEN, + + /** 模糊匹配 */ + LIKE, + + /** 左模糊 */ + LIKE_LEFT, + + /** 右模糊 */ + LIKE_RIGHT, + + /** 是否为空, 只作用在布尔类型上, true 代表 is null, false 代表 not null */ + IS_NULL, + + /** 排序 */ + SORT; + } + + /** + * 名称转换类型 + */ + enum NamingCaseEnum { + + /** 获取数据库实体类配置的数据库字段名称,只可以用在数据库实体类字段上 */ + LAMBDA, + /** 转换为下划线 */ + UNDER_LINE, + /** 不进行处理 */ + NONE; + + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvert.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvert.java similarity index 82% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvert.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvert.java index ebedc7187..390dc9ea1 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvert.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvert.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -9,7 +9,7 @@ * 数据库表字段翻译注解 * * @author xxm - * @date 2022/12/14 + * @since 2022/12/14 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvertModel.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvertModel.java similarity index 85% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvertModel.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvertModel.java index e0cb37d17..64ebf42f3 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TableFieldConvertModel.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TableFieldConvertModel.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -9,7 +9,7 @@ * 字典转换标示注解, 标注此注解会对对应对象进行字典值转换处理 * * @author xxm - * @date 2022/12/15 + * @since 2022/12/15 */ @Target({ ElementType.METHOD, ElementType.TYPE, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Translate.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Translate.java similarity index 91% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Translate.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Translate.java index 339680bcb..74e88cc2a 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/Translate.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/Translate.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -9,7 +9,7 @@ * 翻译注解 * * @author xxm - * @date 2022/12/14 + * @since 2022/12/14 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TranslationResult.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TranslationResult.java similarity index 95% rename from bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TranslationResult.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TranslationResult.java index 54ed0f472..3e98d2478 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/annotation/TranslationResult.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/annotation/TranslationResult.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.annotation; +package cn.bootx.platform.common.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -10,7 +10,7 @@ * ResResult 使用, 其他场合使用 FieldTranslationService 进行手动处理 * * @author xxm - * @date 2022/12/15 + * @since 2022/12/15 */ @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonCode.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonCode.java similarity index 95% rename from bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonCode.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonCode.java index b817e0800..9d41a581c 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonCode.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonCode.java @@ -1,10 +1,10 @@ -package cn.bootx.common.core.code; +package cn.bootx.platform.common.core.code; /** * 公共常量 * * @author xxm - * @date 2020/4/8 10:58 + * @since 2020/4/8 10:58 */ public interface CommonCode { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonErrorCode.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonErrorCode.java similarity index 95% rename from bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonErrorCode.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonErrorCode.java index cbc1373fc..5d515d4bf 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/CommonErrorCode.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/CommonErrorCode.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.code; +package cn.bootx.platform.common.core.code; /** * 公用错误码常量 10001-10100 diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/ServletCode.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/ServletCode.java similarity index 78% rename from bootx-common-core/src/main/java/cn/bootx/common/core/code/ServletCode.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/ServletCode.java index 323ebef7d..98c964ac6 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/ServletCode.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/ServletCode.java @@ -1,10 +1,10 @@ -package cn.bootx.common.core.code; +package cn.bootx.platform.common.core.code; /** * Servlet常量 * * @author xxm - * @date 2022/3/10 + * @since 2022/3/10 */ public interface ServletCode { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/code/WebHeaderCode.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/WebHeaderCode.java similarity index 96% rename from bootx-common-core/src/main/java/cn/bootx/common/core/code/WebHeaderCode.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/WebHeaderCode.java index eab7d5221..53dc5d011 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/code/WebHeaderCode.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/code/WebHeaderCode.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.code; +package cn.bootx.platform.common.core.code; /** * web请求头常量 diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/entity/UserDetail.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/entity/UserDetail.java similarity index 80% rename from bootx-common-core/src/main/java/cn/bootx/common/core/entity/UserDetail.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/entity/UserDetail.java index a17a35e00..a31f4cd48 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/entity/UserDetail.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/entity/UserDetail.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.entity; +package cn.bootx.platform.common.core.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; @@ -13,7 +13,7 @@ * 用户信息类 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @Getter @Setter @@ -34,8 +34,8 @@ public class UserDetail { @JsonIgnore private transient String password; - /** 拥有权限的应用列表 */ - private List appIds; + /** 拥有权限的终端列表 */ + private List clientIds; /** 是否管理员 */ private boolean admin; @@ -44,6 +44,6 @@ public class UserDetail { * 账号状态 * @see cn.bootx.iam.code.UserStatusCode */ - private Integer status; + private String status; } diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/BizException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/BizException.java similarity index 81% rename from bootx-common-core/src/main/java/cn/bootx/common/core/exception/BizException.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/BizException.java index fc5d379f6..09c657083 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/BizException.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/BizException.java @@ -1,6 +1,6 @@ -package cn.bootx.common.core.exception; +package cn.bootx.platform.common.core.exception; -import cn.bootx.common.core.code.CommonCode; +import cn.bootx.platform.common.core.code.CommonCode; import java.io.Serializable; diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DangerSqlException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DangerSqlException.java new file mode 100644 index 000000000..28adcf2fa --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DangerSqlException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.common.core.exception; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.DANGER_SQL; + +/** + * SQL相关异常 + * + * @author xxm + * @since 2023/3/9 + */ +public class DangerSqlException extends BizException { + + public DangerSqlException(String msg) { + super(DANGER_SQL, msg); + } + + public DangerSqlException() { + super(DANGER_SQL, "危险SQL异常"); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DataNotExistException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DataNotExistException.java new file mode 100644 index 000000000..7d33c3bff --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/DataNotExistException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.common.core.exception; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.DATA_NOT_EXIST; + +/** + * 数据不存在异常 + * + * @author xxm + * @since 2022/1/10 + */ +public class DataNotExistException extends BizException { + + public DataNotExistException(String msg) { + super(DATA_NOT_EXIST, msg); + } + + public DataNotExistException() { + super(DATA_NOT_EXIST, "数据不存在"); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/ErrorCodeRuntimeException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ErrorCodeRuntimeException.java similarity index 92% rename from bootx-common-core/src/main/java/cn/bootx/common/core/exception/ErrorCodeRuntimeException.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ErrorCodeRuntimeException.java index 21b627e60..4173fb360 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/ErrorCodeRuntimeException.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ErrorCodeRuntimeException.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.exception; +package cn.bootx.platform.common.core.exception; import java.io.Serializable; diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/FatalException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/FatalException.java similarity index 81% rename from bootx-common-core/src/main/java/cn/bootx/common/core/exception/FatalException.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/FatalException.java index 5fec4a9de..420528515 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/FatalException.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/FatalException.java @@ -1,8 +1,8 @@ -package cn.bootx.common.core.exception; +package cn.bootx.platform.common.core.exception; import java.io.Serializable; -import static cn.bootx.common.core.code.CommonErrorCode.SYSTEM_ERROR; +import static cn.bootx.platform.common.core.code.CommonErrorCode.SYSTEM_ERROR; /** * 致命异常基类 diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/OptimisticLockException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/OptimisticLockException.java new file mode 100644 index 000000000..ec6af0413 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/OptimisticLockException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.common.core.exception; + +import java.io.Serializable; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.DATA_OUT_OF_DATE; + +/** + * 乐观锁异常 + * + * @author xxm + * @since 2020/4/15 14:11 + */ +public class OptimisticLockException extends SystemException implements Serializable { + + private static final long serialVersionUID = -1605410024618499135L; + + public OptimisticLockException() { + super(DATA_OUT_OF_DATE, "数据不存在或者已过期"); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/RepetitiveOperationException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/RepetitiveOperationException.java new file mode 100644 index 000000000..ef2d9ab6d --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/RepetitiveOperationException.java @@ -0,0 +1,25 @@ +package cn.bootx.platform.common.core.exception; + +import java.io.Serializable; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.REPETITIVE_OPERATION_ERROR; + +/** + * 重复操作异常 + * + * @author xxm + * @since 2021/1/2 + */ +public class RepetitiveOperationException extends SystemException implements Serializable { + + private static final long serialVersionUID = 2120383728758502943L; + + public RepetitiveOperationException() { + super(REPETITIVE_OPERATION_ERROR, "重复操作异常"); + } + + public RepetitiveOperationException(String msg) { + super(REPETITIVE_OPERATION_ERROR, msg); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/SystemException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/SystemException.java similarity index 88% rename from bootx-common-core/src/main/java/cn/bootx/common/core/exception/SystemException.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/SystemException.java index a8de6d6b9..539e80fa7 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/SystemException.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/SystemException.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.exception; +package cn.bootx.platform.common.core.exception; import java.io.Serializable; diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportOperateException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportOperateException.java new file mode 100644 index 000000000..ebd797964 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportOperateException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.common.core.exception; + +import java.io.Serializable; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.UN_SUPPORTED_OPERATE; + +/** + * 不支持的操作异常 + * + * @author xxm + * @since 2022/7/27 + */ +public class UnSupportOperateException extends ErrorCodeRuntimeException implements Serializable { + + public UnSupportOperateException(String message) { + super(UN_SUPPORTED_OPERATE, message); + } + + public UnSupportOperateException() { + super(UN_SUPPORTED_OPERATE, "不支持的操作异常"); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportReadException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportReadException.java new file mode 100644 index 000000000..6bb18bd03 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/UnSupportReadException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.common.core.exception; + +import java.io.Serializable; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.UN_SUPPORTED_READ; + +/** + * 不支持的读取操作 + * + * @author xxm + * @since 2020/4/10 14:05 + */ +public class UnSupportReadException extends BizException implements Serializable { + + private static final long serialVersionUID = -743586662489535860L; + + public UnSupportReadException() { + super(UN_SUPPORTED_READ, "不支持的读取下载响应"); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/ValidationFailedException.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ValidationFailedException.java similarity index 76% rename from bootx-common-core/src/main/java/cn/bootx/common/core/exception/ValidationFailedException.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ValidationFailedException.java index 9072df8bc..b7509d62b 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/exception/ValidationFailedException.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/exception/ValidationFailedException.java @@ -1,8 +1,8 @@ -package cn.bootx.common.core.exception; +package cn.bootx.platform.common.core.exception; import java.io.Serializable; -import static cn.bootx.common.core.code.CommonErrorCode.VALIDATE_PARAMETERS_ERROR; +import static cn.bootx.platform.common.core.code.CommonErrorCode.VALIDATE_PARAMETERS_ERROR; /** * 验证失败异常 diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/function/CollectorsFunction.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/CollectorsFunction.java similarity index 85% rename from bootx-common-core/src/main/java/cn/bootx/common/core/function/CollectorsFunction.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/CollectorsFunction.java index 41c9d60f8..910cd807c 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/function/CollectorsFunction.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/CollectorsFunction.java @@ -1,10 +1,10 @@ -package cn.bootx.common.core.function; +package cn.bootx.platform.common.core.function; /** * stream流处理时进行Collectors时的函数 * * @author xxm - * @date 2023/3/12 + * @since 2023/3/12 */ public interface CollectorsFunction { diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/EntityBaseFunction.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/EntityBaseFunction.java new file mode 100644 index 000000000..b4fe3ce2e --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/EntityBaseFunction.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.common.core.function; + +/** + * entity基础方法 + * + * @author xxm + * @since 2020/11/18 + */ +public interface EntityBaseFunction { + + /** + * 转换 + */ + T toDto(); + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/ParamService.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/ParamService.java new file mode 100644 index 000000000..c88e12361 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/ParamService.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.common.core.function; + +/** + * 参数获取服务(必须有实现类) + * + * @author xxm + * @since 2022/5/1 + */ +public interface ParamService { + + /** + * 获取 参数值, 如果未启用, 返回空 + */ + String getValue(String key); + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/QueryBetween.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/QueryBetween.java new file mode 100644 index 000000000..238202857 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/QueryBetween.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.common.core.function; + +/** + * 查询生成器范围查询标识接口 + * @author xxm + * @since 2024/1/15 + */ +public interface QueryBetween { + + /** + * 获取开始值 + */ + Object getStart(); + + /** + * 获取结束值 + */ + Object getEnd(); +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/SystemKeyValueService.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/SystemKeyValueService.java new file mode 100644 index 000000000..ea90fa123 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/SystemKeyValueService.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.common.core.function; + +import cn.bootx.platform.common.core.rest.dto.KeyValue; + +import java.util.List; + +/** + * kv存储接口 (必须实现) + * + * @author xxm + * @since 2022/6/13 + */ +public interface SystemKeyValueService { + + /** + * 获取值 + */ + String get(String key); + + /** + * 获取多个 + */ + List gets(List keys); + + /** + * 设置值, 如果key不存在将会创建,key存在则会更新 + */ + void setup(String key, String value); + + /** + * 保存多个值 + */ + void setupBatch(List list); + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/UserDetailService.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/UserDetailService.java new file mode 100644 index 000000000..384486555 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/function/UserDetailService.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.common.core.function; + +import cn.bootx.platform.common.core.entity.UserDetail; + +import java.util.Optional; + +/** + * 获取用户 + * + * @author xxm + * @since 2022/8/28 + */ +public interface UserDetailService { + + /** + * 获取用户信息 + */ + Optional findByUserId(Long userId); + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/ErrorResult.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ErrorResult.java similarity index 89% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/ErrorResult.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ErrorResult.java index 1900fa5a2..d3d1422d9 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/ErrorResult.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ErrorResult.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest; +package cn.bootx.platform.common.core.rest; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -8,7 +8,7 @@ * 错误响应类,携带链路追踪标示 trackId * * @author xxm - * @date 2021/9/9 + * @since 2021/9/9 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/PageResult.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/PageResult.java similarity index 94% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/PageResult.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/PageResult.java index c86c0a273..4cedead3e 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/PageResult.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/PageResult.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest; +package cn.bootx.platform.common.core.rest; import java.io.Serializable; import java.util.Collections; @@ -8,7 +8,7 @@ * 分页包装类 * * @author xxm - * @date 2020/4/21 14:37 + * @since 2020/4/21 14:37 */ public class PageResult implements Serializable { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/Res.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/Res.java similarity index 84% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/Res.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/Res.java index fef5e714a..07eb33b41 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/Res.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/Res.java @@ -1,13 +1,13 @@ -package cn.bootx.common.core.rest; +package cn.bootx.platform.common.core.rest; -import static cn.bootx.common.core.code.CommonCode.FAIL_CODE; -import static cn.bootx.common.core.code.CommonCode.SUCCESS_CODE; +import static cn.bootx.platform.common.core.code.CommonCode.FAIL_CODE; +import static cn.bootx.platform.common.core.code.CommonCode.SUCCESS_CODE; /** * 返回工具类 * * @author xxm - * @date 2020/1/22 15:29 + * @since 2020/1/22 15:29 */ public class Res { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/ResResult.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ResResult.java similarity index 86% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/ResResult.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ResResult.java index b6b046fa5..b935a9204 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/ResResult.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/ResResult.java @@ -1,6 +1,6 @@ -package cn.bootx.common.core.rest; +package cn.bootx.platform.common.core.rest; -import cn.bootx.common.core.code.CommonCode; +import cn.bootx.platform.common.core.code.CommonCode; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -11,7 +11,7 @@ * 响应包装类 * * @author xxm - * @date 2020/1/22 15:26 + * @since 2020/1/22 15:26 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/BaseDto.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/BaseDto.java similarity index 90% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/BaseDto.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/BaseDto.java index dee8e5e6f..e441422f6 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/BaseDto.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/BaseDto.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest.dto; +package cn.bootx.platform.common.core.rest.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -12,7 +12,7 @@ * 基础Dto * * @author xxm - * @date 2020/6/1 16:12 + * @since 2020/6/1 16:12 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/KeyValue.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/KeyValue.java similarity index 88% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/KeyValue.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/KeyValue.java index b113a2e02..e4b972387 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/KeyValue.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/KeyValue.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest.dto; +package cn.bootx.platform.common.core.rest.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -10,7 +10,7 @@ * kv键值对象 * * @author xxm - * @date 2021/5/18 + * @since 2021/5/18 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/LabelValue.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/LabelValue.java similarity index 91% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/LabelValue.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/LabelValue.java index 21000a072..364753597 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/dto/LabelValue.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/dto/LabelValue.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest.dto; +package cn.bootx.platform.common.core.rest.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -10,7 +10,7 @@ * LabelValue * * @author xxm - * @date 2022/5/4 + * @since 2022/5/4 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/DateRangeParam.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/DateRangeParam.java new file mode 100644 index 000000000..247fa0a08 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/DateRangeParam.java @@ -0,0 +1,91 @@ +package cn.bootx.platform.common.core.rest.param; + +import cn.bootx.platform.common.core.annotation.QueryParam; +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * 时间日期范围 + * @author xxm + * @since 2024/1/14 + */ +@Getter +@Setter +@QueryParam(ignore = true) +public class DateRangeParam { + + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "开始时间") + private LocalDate startTime; + + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "结束时间") + private LocalDate endTime; + + /** + * 获取开始时间 + */ + public String startTime(){ + return startTime("yyyy-MM-dd HH:mm:ss"); + } + + /** + * 获取开始时间 + */ + public String startTime(String format){ + return LocalDateTimeUtil.format(getStartTime().atStartOfDay(),format); + } + + /** + * 获取结束时间 + */ + public String endTime(){ + return endTime("yyyy-MM-dd HH:mm:ss"); + } + + /** + * 获取结束日期 + */ + public String endTime(String format){ + return LocalDateTimeUtil.format(getEndTime().plusDays(1).atStartOfDay(),"format"); + } + + + /** + * 获取开始日期 + */ + public String startDate(){ + return startDate("yyyy-MM-dd HH:mm:ss"); + } + + /** + * 获取开始日期 + */ + public String startDate(String format){ + return LocalDateTimeUtil.format(getStartTime(),format); + } + + + /** + * 获取开始日期 + */ + public String endDate(){ + return startDate("yyyy-MM-dd HH:mm:ss"); + } + + /** + * 获取结束日期 + */ + public String endDate(String format){ + return LocalDateTimeUtil.format(getEndTime(),format); + } + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/OrderParam.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/OrderParam.java similarity index 84% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/OrderParam.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/OrderParam.java index e5ea2d728..53744de4f 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/OrderParam.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/OrderParam.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest.param; +package cn.bootx.platform.common.core.rest.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -8,7 +8,7 @@ * 排序参数 * * @author xxm - * @date 2022/3/10 + * @since 2022/3/10 */ @Getter @Setter diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/PageParam.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/PageParam.java similarity index 95% rename from bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/PageParam.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/PageParam.java index 6b5ffd9fc..7b459a3ef 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/rest/param/PageParam.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/PageParam.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.rest.param; +package cn.bootx.platform.common.core.rest.param; import cn.hutool.core.util.PageUtil; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/QueryOrder.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/QueryOrder.java new file mode 100644 index 000000000..9412a4f77 --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/rest/param/QueryOrder.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.common.core.rest.param; + +import cn.bootx.platform.common.core.annotation.QueryParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2021/11/17 + */ +@Data +@Accessors(chain = true) +@Schema(title = "查询排序") +public class QueryOrder { + + @QueryParam(ignore = true) + @Schema(description = "设置排序字段") + private String sortField; + + @QueryParam(ignore = true) + @Schema(description = "是否升序") + private boolean asc = true; + + @QueryParam(ignore = true) + @Schema(description = "参数名称是否需要转换成下划线命名") + private boolean underLine = true; + +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/BigDecimalUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/BigDecimalUtil.java similarity index 99% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/BigDecimalUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/BigDecimalUtil.java index 566d51046..b5faead01 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/BigDecimalUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/BigDecimalUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import lombok.experimental.UtilityClass; diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/CertUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CertUtil.java similarity index 92% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/CertUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CertUtil.java index c25a58080..b8a3444bd 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/CertUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CertUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import cn.hutool.core.codec.Base64Encoder; import lombok.SneakyThrows; @@ -13,7 +13,7 @@ * 证书工具类 * * @author xxm - * @date 2022/2/24 + * @since 2022/2/24 */ @UtilityClass public class CertUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ClassUtils.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ClassUtils.java new file mode 100644 index 000000000..281ffc45f --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ClassUtils.java @@ -0,0 +1,68 @@ +package cn.bootx.platform.common.core.util; + +import cn.hutool.core.util.ClassUtil; +import lombok.experimental.UtilityClass; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 类工具类 + * @author xxm + * @since 2023/5/30 + */ +@UtilityClass +public class ClassUtils { + + /** + * 获取字段属性 + */ + public Field getField(Class clas, String fieldName){ + if (Objects.isNull(clas)){ + throw new IllegalArgumentException("类为空"); + } + // 查询是否有该属性 + Field field = ClassUtil.getDeclaredField(clas, fieldName); + if (Objects.nonNull(field)){ + return field; + } + // 递归查询父类中的字段值 + if (Objects.nonNull(clas.getSuperclass())){ + return getField(clas.getSuperclass(),fieldName); + } + return null; + } + + /** + * 递归扫描父类的fields + * @param clas 类 + * @param fields 属性 + */ + public Field[] recursionParents(Class clas, Field[] fields) { + if (Objects.nonNull(clas.getSuperclass())) { + Class clsSup = clas.getSuperclass(); + List fieldList = new ArrayList<>(Arrays.asList(fields)); + // 获取当前class的所有fields的name列表 + List fdNames = fieldList.stream().map(Field::getName).collect(Collectors.toList()); + for (Field pfd : clsSup.getDeclaredFields()) { + // 避免重载属性 + if (fdNames.contains(pfd.getName())) { + continue; + } + fieldList.add(pfd); + } + fields = new Field[fieldList.size()]; + int i = 0; + for (Object field : fieldList.toArray()) { + fields[i] = (Field) field; + i++; + } + fields = recursionParents(clsSup, fields); + } + return fields; + } +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/CollUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CollUtil.java similarity index 88% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/CollUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CollUtil.java index 42e4b6548..4a31c524a 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/CollUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/CollUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import lombok.experimental.UtilityClass; @@ -8,7 +8,7 @@ * 集合工具类 * * @author xxm - * @date 2020/11/28 + * @since 2020/11/28 */ @UtilityClass public class CollUtil extends cn.hutool.core.collection.CollUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/FileUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/FileUtil.java similarity index 94% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/FileUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/FileUtil.java index 66d5880f1..312893f3f 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/FileUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/FileUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import lombok.SneakyThrows; import lombok.experimental.UtilityClass; @@ -11,7 +11,7 @@ * 文件配置 * * @author xxm - * @date 2022/7/25 + * @since 2022/7/25 */ @UtilityClass public class FileUtil extends cn.hutool.core.io.FileUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/LocalDateTimeUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/LocalDateTimeUtil.java similarity index 97% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/LocalDateTimeUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/LocalDateTimeUtil.java index 04a4fe818..141ba1344 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/LocalDateTimeUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/LocalDateTimeUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import lombok.experimental.UtilityClass; @@ -11,7 +11,7 @@ * java8 时间工具类 * * @author xxm - * @date 2020/11/10 + * @since 2020/11/10 */ @UtilityClass public class LocalDateTimeUtil extends cn.hutool.core.date.LocalDateTimeUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/RegexUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/RegexUtil.java similarity index 94% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/RegexUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/RegexUtil.java index 31da4bc5a..c3b5dba8c 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/RegexUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/RegexUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; import lombok.experimental.UtilityClass; diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/ResultConvertUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ResultConvertUtil.java similarity index 89% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/ResultConvertUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ResultConvertUtil.java index 22aef1c97..c1e6a2f8e 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/ResultConvertUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ResultConvertUtil.java @@ -1,6 +1,6 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; -import cn.bootx.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.core.function.EntityBaseFunction; import lombok.experimental.UtilityClass; import java.util.List; @@ -11,7 +11,7 @@ * 结果转换工具类工具类 * * @author xxm - * @date 2020/8/27 + * @since 2020/8/27 */ @UtilityClass public class ResultConvertUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/SqlInjectionUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/SqlInjectionUtil.java similarity index 97% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/SqlInjectionUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/SqlInjectionUtil.java index a04c3ec01..4671b6f2a 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/SqlInjectionUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/SqlInjectionUtil.java @@ -1,6 +1,6 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; -import cn.bootx.common.core.exception.DangerSqlException; +import cn.bootx.platform.common.core.exception.DangerSqlException; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; diff --git a/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/TreeBuildUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/TreeBuildUtil.java new file mode 100644 index 000000000..632c2cd2a --- /dev/null +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/TreeBuildUtil.java @@ -0,0 +1,91 @@ +package cn.bootx.platform.common.core.util; + +import cn.hutool.core.collection.CollectionUtil; +import lombok.experimental.UtilityClass; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 构建数据树工具类 + * + * @author xxm + * @since 2022/12/24 + */ +@UtilityClass +public class TreeBuildUtil { + + /** + * 构建成树 + * @param list 要进行转换的列表 + * @param pid 一级节点的父级id,通常为null + * @param getId 获取主键的方法方法引用 + * @param getPid 获取关联父级节点主键的方法引用 + * @param setChildren 设置子节点列表的方法引用 + */ + public List build(List list, Object pid, Function getId, Function getPid, + BiConsumer> setChildren) { + return build(list, pid, getId, getPid, setChildren, null); + } + + /** + * 构建成树 (带排序) + * @param list 要进行转换的列表 + * @param pid 一级节点的父级id,通常为null + * @param getId 获取主键的方法方法引用 + * @param getPid 获取关联父级节点主键的方法引用 + * @param setChildren 设置子节点列表的方法引用 + * @param comparator 节点顺序的排序规则 + */ + public List build(List list, Object pid, Function getId, Function getPid, + BiConsumer> setChildren, Comparator comparator) { + List children = list.stream().filter(m -> Objects.equals(getPid.apply(m), pid)).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(children)) { + return null; + } + for (T region : children) { + List childrenList = build(list, getId.apply(region), getId, getPid, setChildren,comparator); + setChildren.accept(region, childrenList); + } + // 排序 + if (Objects.nonNull(comparator)) { + children.sort(comparator); + } + return children; + } + + /** + * 展开树为list列表 + * + * @param list 要进行展开的列表 + * @param getChildren 获取子节点列表的方法引用 + * @return 展开后的结果列表 + */ + public List unfold(List list, Function> getChildren){ + return unfold(list,getChildren, new ArrayList<>()); + } + + /** + * 展开树为list列表 + * + * @param list 要进行展开的列表 + * @param getChildren 获取子节点列表的方法引用 + * @param result 用于存储展开后的列表对象 + * @return 展开后的结果列表 + */ + private List unfold(List list, Function> getChildren, List result){ + if (CollectionUtil.isEmpty(list)) { + return null; + } + for (T region : list) { + unfold(getChildren.apply(region), getChildren, result); + result.add(region); + } + return result; + } +} diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/util/ValidationUtil.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ValidationUtil.java similarity index 92% rename from bootx-common-core/src/main/java/cn/bootx/common/core/util/ValidationUtil.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ValidationUtil.java index 9c0b573ee..ae27003c4 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/util/ValidationUtil.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/util/ValidationUtil.java @@ -1,6 +1,6 @@ -package cn.bootx.common.core.util; +package cn.bootx.platform.common.core.util; -import cn.bootx.common.core.exception.ValidationFailedException; +import cn.bootx.platform.common.core.exception.ValidationFailedException; import lombok.experimental.UtilityClass; import javax.validation.ConstraintViolation; @@ -13,7 +13,7 @@ * BeanValidation 工具类 * * @author xxm - * @date 2020/5/26 18:14 + * @since 2020/5/26 18:14 */ @UtilityClass public class ValidationUtil { diff --git a/bootx-common-core/src/main/java/cn/bootx/common/core/validation/ValidationGroup.java b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/ValidationGroup.java similarity index 85% rename from bootx-common-core/src/main/java/cn/bootx/common/core/validation/ValidationGroup.java rename to bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/ValidationGroup.java index 4af7b3437..4e55770e6 100644 --- a/bootx-common-core/src/main/java/cn/bootx/common/core/validation/ValidationGroup.java +++ b/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/ValidationGroup.java @@ -1,10 +1,10 @@ -package cn.bootx.common.core.validation; +package cn.bootx.platform.common.core.validation; /** * 校验分组 * * @author xxm - * @date 2021/5/7 + * @since 2021/5/7 */ public interface ValidationGroup { diff --git a/bootx-common-starters/common-starter-audit-log/pom.xml b/bootx-common-starters/common-starter-audit-log/pom.xml index 867c238a8..124da61c4 100644 --- a/bootx-common-starters/common-starter-audit-log/pom.xml +++ b/bootx-common-starters/common-starter-audit-log/pom.xml @@ -5,7 +5,7 @@ bootx-common-starters cn.bootx.platform - 1.2.3 + 1.3.6.2 4.0.0 @@ -38,6 +38,13 @@ common-mybatis-plus true + + + org.lionsoul + ip2region + ${ip2region.version} + + diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/AuditLogAutoConfiguration.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/AuditLogAutoConfiguration.java similarity index 90% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/AuditLogAutoConfiguration.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/AuditLogAutoConfiguration.java index 70ceb2236..fbf9e514d 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/AuditLogAutoConfiguration.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/AuditLogAutoConfiguration.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log; +package cn.bootx.platform.starter.audit.log; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -11,7 +11,7 @@ * 审计模块 * * @author xxm - * @date 2021/11/8 + * @since 2021/11/8 */ @ComponentScan @ConfigurationPropertiesScan diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/configuration/DataVersionConfiguration.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/configuration/DataVersionConfiguration.java new file mode 100644 index 000000000..a719ab95d --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/configuration/DataVersionConfiguration.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.starter.audit.log.configuration; + +import cn.bootx.platform.common.mybatisplus.interceptor.MpInterceptor; +import cn.bootx.platform.common.mybatisplus.extension.DataChangeRecorderInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author xxm + * @since 2023/1/2 + */ +@Configuration +public class DataVersionConfiguration { + + /** + * 数据变更记录 + */ + @Bean + public MpInterceptor dataChangeRecorderInnerInterceptor( + DataChangeRecorderInnerInterceptor dataChangeRecorderInnerInterceptor) { + return new MpInterceptor(dataChangeRecorderInnerInterceptor, 2); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/DataVersionLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/DataVersionLogController.java new file mode 100644 index 000000000..90979b3e7 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/DataVersionLogController.java @@ -0,0 +1,43 @@ +package cn.bootx.platform.starter.audit.log.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; +import cn.bootx.platform.starter.audit.log.service.DataVersionLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author xxm + * @since 2022/1/10 + */ +@Tag(name = "数据版本日志") +@RestController +@RequestMapping("/log/dataVersion") +@RequiredArgsConstructor +public class DataVersionLogController { + + private final DataVersionLogService service; + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(@ParameterObject PageParam pageParam, + @ParameterObject DataVersionLogParam param) { + return Res.ok(service.page(pageParam, param)); + } + + @Operation(summary = "获取") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(service.findById(id)); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/LoginLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/LoginLogController.java new file mode 100644 index 000000000..3e67ae2ce --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/LoginLogController.java @@ -0,0 +1,49 @@ +package cn.bootx.platform.starter.audit.log.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.service.LoginLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author xxm + * @since 2021/9/7 + */ +@Tag(name = "登录日志") +@RestController +@RequestMapping("/log/login") +@RequiredArgsConstructor +public class LoginLogController { + + private final LoginLogService loginLogService; + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(@ParameterObject PageParam pageParam, @ParameterObject LoginLogParam loginLogParam) { + return Res.ok(loginLogService.page(pageParam, loginLogParam)); + } + + @Operation(summary = "获取") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(loginLogService.findById(id)); + } + + @Operation(summary = "清除指定天数之前的日志") + @DeleteMapping("/deleteByDay") + public ResResult deleteByDay(int deleteDay){ + loginLogService.deleteByDay(deleteDay); + return Res.ok(); + } +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/OperateLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/OperateLogController.java new file mode 100644 index 000000000..d0538f1af --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/controller/OperateLogController.java @@ -0,0 +1,53 @@ +package cn.bootx.platform.starter.audit.log.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.audit.log.service.OperateLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 操作日志 + * + * @author xxm + * @since 2021/9/8 + */ +@Tag(name = "操作日志") +@RestController +@RequestMapping("/log/operate") +@RequiredArgsConstructor +public class OperateLogController { + + private final OperateLogService operateLogService; + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(@ParameterObject PageParam pageParam, + @ParameterObject OperateLogParam operateLogParam) { + return Res.ok(operateLogService.page(pageParam, operateLogParam)); + } + + @Operation(summary = "获取") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(operateLogService.findById(id)); + } + + + @Operation(summary = "清除指定天数的日志") + @DeleteMapping("/deleteByDay") + public ResResult deleteByDay(Integer type){ + operateLogService.deleteByDay(type); + return Res.ok(); + } +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/convert/LogConvert.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/convert/LogConvert.java new file mode 100644 index 000000000..62cccf4b8 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/convert/LogConvert.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.starter.audit.log.core.db.convert; + +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.audit.log.core.db.entity.DataVersionLogDb; +import cn.bootx.platform.starter.audit.log.core.db.entity.LoginLogDb; +import cn.bootx.platform.starter.audit.log.core.db.entity.OperateLogDb; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 日志转换 + * + * @author xxm + * @since 2021/8/12 + */ +@Mapper +public interface LogConvert { + + LogConvert CONVERT = Mappers.getMapper(LogConvert.class); + + OperateLogDto convert(OperateLogDb in); + + LoginLogDto convert(LoginLogDb in); + + OperateLogDb convert(OperateLogParam in); + + LoginLogDb convert(LoginLogParam in); + + DataVersionLogDto convert(DataVersionLogDb in); + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbManager.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbManager.java similarity index 79% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbManager.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbManager.java index 73934e883..f4fdc0a6e 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbManager.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbManager.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.audit.log.core.db.dao; +package cn.bootx.platform.starter.audit.log.core.db.dao; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.entity.DataVersionLogDb; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.entity.DataVersionLogDb; +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -15,7 +15,7 @@ /** * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Slf4j @Repository diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java similarity index 77% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java index 9f2aa6853..dac4de33f 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/DataVersionLogDbMapper.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.audit.log.core.db.dao; +package cn.bootx.platform.starter.audit.log.core.db.dao; -import cn.bootx.starter.audit.log.core.db.entity.DataVersionLogDb; +import cn.bootx.platform.starter.audit.log.core.db.entity.DataVersionLogDb; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Mapper public interface DataVersionLogDbMapper extends BaseMapper { diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbManager.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbManager.java new file mode 100644 index 000000000..24964e105 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbManager.java @@ -0,0 +1,42 @@ +package cn.bootx.platform.starter.audit.log.core.db.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.entity.LoginLogDb; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; + +/** + * 登录日志 + * + * @author xxm + * @since 2021/8/12 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class LoginLogDbManager extends BaseManager { + + public Page page(PageParam pageParam, LoginLogParam loginLogParam) { + Page mpPage = MpUtil.getMpPage(pageParam, LoginLogDb.class); + return lambdaQuery().orderByDesc(LoginLogDb::getId) + .like(StrUtil.isNotBlank(loginLogParam.getAccount()), LoginLogDb::getAccount, loginLogParam.getAccount()) + .like(StrUtil.isNotBlank(loginLogParam.getClient()), LoginLogDb::getClient, loginLogParam.getClient()) + .like(StrUtil.isNotBlank(loginLogParam.getLoginType()), LoginLogDb::getLoginType, + loginLogParam.getLoginType()) + .page(mpPage); + } + + public void deleteByOffset(LocalDateTime offset) { + lambdaUpdate() + .le(LoginLogDb::getLoginTime, offset) + .remove(); + } +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbMapper.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbMapper.java new file mode 100644 index 000000000..b90720aaf --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/LoginLogDbMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.starter.audit.log.core.db.dao; + +import cn.bootx.platform.starter.audit.log.core.db.entity.LoginLogDb; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 登录日志 + * + * @author xxm + * @since 2021/8/12 + */ +@Mapper +public interface LoginLogDbMapper extends BaseMapper { + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbManager.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbManager.java new file mode 100644 index 000000000..269e161d9 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbManager.java @@ -0,0 +1,50 @@ +package cn.bootx.platform.starter.audit.log.core.db.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.entity.OperateLogDb; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 操作日志 + * + * @author xxm + * @since 2021/8/12 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class OperateLogDbManager extends BaseManager { + + public Page page(PageParam pageParam, OperateLogParam operateLogParam) { + Page mpPage = MpUtil.getMpPage(pageParam, OperateLogDb.class); + return lambdaQuery() + .like(StrUtil.isNotBlank(operateLogParam.getUsername()), OperateLogDb::getUsername, + operateLogParam.getUsername()) + .like(StrUtil.isNotBlank(operateLogParam.getTitle()), OperateLogDb::getTitle, operateLogParam.getTitle()) + .eq(Objects.nonNull(operateLogParam.getBusinessType()), OperateLogDb::getBusinessType, + operateLogParam.getBusinessType()) + .orderByDesc(OperateLogDb::getOperateTime) + .page(mpPage); + } + + /** + * 删除 小于指定日期的日志 + */ + public void deleteByOffset(LocalDateTime offset){ + lambdaUpdate() + .le(OperateLogDb::getOperateTime, offset) + .remove(); + + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbMapper.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbMapper.java new file mode 100644 index 000000000..ad6ea45d4 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/dao/OperateLogDbMapper.java @@ -0,0 +1,10 @@ +package cn.bootx.platform.starter.audit.log.core.db.dao; + +import cn.bootx.platform.starter.audit.log.core.db.entity.OperateLogDb; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OperateLogDbMapper extends BaseMapper { + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/DataVersionLogDb.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/DataVersionLogDb.java similarity index 77% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/DataVersionLogDb.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/DataVersionLogDb.java index 314d961c6..6ea9b933d 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/DataVersionLogDb.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/DataVersionLogDb.java @@ -1,9 +1,9 @@ -package cn.bootx.starter.audit.log.core.db.entity; +package cn.bootx.platform.starter.audit.log.core.db.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.starter.audit.log.core.db.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.core.db.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -16,7 +16,7 @@ * 数据版本日志 * * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/LoginLogDb.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/LoginLogDb.java similarity index 76% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/LoginLogDb.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/LoginLogDb.java index 1ce64c3dc..b79631b4d 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/LoginLogDb.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/LoginLogDb.java @@ -1,9 +1,9 @@ -package cn.bootx.starter.audit.log.core.db.entity; +package cn.bootx.platform.starter.audit.log.core.db.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.starter.audit.log.core.db.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.core.db.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -15,7 +15,7 @@ * 登录日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/OperateLogDb.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/OperateLogDb.java similarity index 79% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/OperateLogDb.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/OperateLogDb.java index dcc08b520..a1bb18ee6 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/entity/OperateLogDb.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/entity/OperateLogDb.java @@ -1,9 +1,9 @@ -package cn.bootx.starter.audit.log.core.db.entity; +package cn.bootx.platform.starter.audit.log.core.db.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.starter.audit.log.core.db.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.OperateLogDto; +import cn.bootx.platform.starter.audit.log.core.db.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -15,7 +15,7 @@ * 操作日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/DataVersionLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/DataVersionLogDbService.java new file mode 100644 index 000000000..4147d6955 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/DataVersionLogDbService.java @@ -0,0 +1,83 @@ +package cn.bootx.platform.starter.audit.log.core.db.service; + +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; +import cn.bootx.platform.starter.audit.log.service.DataVersionLogService; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.dao.DataVersionLogDbManager; +import cn.bootx.platform.starter.audit.log.core.db.entity.DataVersionLogDb; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 数据版本日志数据库实现 + * + * @author xxm + * @since 2022/1/10 + */ +@Slf4j +@Service +@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) +@RequiredArgsConstructor +public class DataVersionLogDbService implements DataVersionLogService { + + private final DataVersionLogDbManager manager; + + /** + * 添加 + */ + @Override + @Transactional + public void add(DataVersionLogParam param) { + int maxVersion = manager.getMaxVersion(param.getTableName(), param.getDataId()); + DataVersionLogDb dataVersionLog = new DataVersionLogDb().setTableName(param.getTableName()) + .setDataName(param.getDataName()) + .setDataId(param.getDataId()) + .setCreator(SecurityUtil.getUserIdOrDefaultId()) + .setCreateTime(LocalDateTime.now()) + .setVersion(maxVersion + 1); + if (param.getDataContent() instanceof String) { + dataVersionLog.setDataContent((String) param.getDataContent()); + } + else { + dataVersionLog.setDataContent(JacksonUtil.toJson(param.getDataContent())); + } + if (param.getChangeContent() instanceof String) { + dataVersionLog.setChangeContent(param.getChangeContent()); + } + else { + if (Objects.nonNull(param.getChangeContent())) { + dataVersionLog.setChangeContent(JacksonUtil.toJson(param.getChangeContent())); + } + } + manager.save(dataVersionLog); + } + + /** + * 获取 + */ + @Override + public DataVersionLogDto findById(Long id) { + return manager.findById(id).map(DataVersionLogDb::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 分页 + */ + @Override + public PageResult page(PageParam pageParam, DataVersionLogParam param) { + return MpUtil.convert2DtoPageResult(manager.page(pageParam, param)); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/LoginLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/LoginLogDbService.java new file mode 100644 index 000000000..2cd40891f --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/LoginLogDbService.java @@ -0,0 +1,69 @@ +package cn.bootx.platform.starter.audit.log.core.db.service; + +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.service.LoginLogService; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.convert.LogConvert; +import cn.bootx.platform.starter.audit.log.core.db.dao.LoginLogDbManager; +import cn.bootx.platform.starter.audit.log.core.db.entity.LoginLogDb; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +/** + * 登陆日志 + * + * @author xxm + * @since 2021/8/12 + */ +@Slf4j +@Service +@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) +@RequiredArgsConstructor +public class LoginLogDbService implements LoginLogService { + + private final LoginLogDbManager loginLogManager; + + /** + * 添加 + */ + @Override + public void add(LoginLogParam loginLog) { + loginLogManager.save(LogConvert.CONVERT.convert(loginLog)); + } + + /** + * 获取 + */ + @Override + public LoginLogDto findById(Long id) { + return loginLogManager.findById(id).map(LoginLogDb::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 分页 + */ + @Override + public PageResult page(PageParam pageParam, LoginLogParam loginLogParam) { + return MpUtil.convert2DtoPageResult(loginLogManager.page(pageParam, loginLogParam)); + } + + /** + * 删除 + */ + @Override + public void deleteByDay(int deleteDay) { + LocalDateTime offset = LocalDateTimeUtil.offset(LocalDateTime.now(), -deleteDay, ChronoUnit.DAYS); + loginLogManager.deleteByOffset(offset); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/OperateLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/OperateLogDbService.java new file mode 100644 index 000000000..003e1356a --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/db/service/OperateLogDbService.java @@ -0,0 +1,72 @@ +package cn.bootx.platform.starter.audit.log.core.db.service; + +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.audit.log.service.OperateLogService; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.core.db.convert.LogConvert; +import cn.bootx.platform.starter.audit.log.core.db.dao.OperateLogDbManager; +import cn.bootx.platform.starter.audit.log.core.db.entity.OperateLogDb; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +/** + * 操作日志 + * + * @author xxm + * @since 2021/8/12 + */ +@Slf4j +@Service +@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) +@RequiredArgsConstructor +public class OperateLogDbService implements OperateLogService { + + private final OperateLogDbManager operateLogManager; + + /** + * 添加 + */ + @Async("asyncExecutor") + @Override + public void add(OperateLogParam operateLog) { + operateLogManager.save(LogConvert.CONVERT.convert(operateLog)); + } + + /** + * 获取 + */ + @Override + public OperateLogDto findById(Long id) { + return operateLogManager.findById(id).map(OperateLogDb::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 分页 + */ + @Override + public PageResult page(PageParam pageParam, OperateLogParam operateLogParam) { + return MpUtil.convert2DtoPageResult(operateLogManager.page(pageParam, operateLogParam)); + } + + /** + * 删除 + */ + @Override + public void deleteByDay(int deleteDay) { + // 计算出来指定天数的日期 + LocalDateTime offset = LocalDateTimeUtil.offset(LocalDateTime.now(), -deleteDay, ChronoUnit.DAYS); + operateLogManager.deleteByOffset(offset); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/convert/LogConvert.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/convert/LogConvert.java new file mode 100644 index 000000000..28bb49c80 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/convert/LogConvert.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.convert; + +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.DataVersionLogMongo; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.LoginLogMongo; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.OperateLogMongo; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 日志转换 + * + * @author xxm + * @since 2021/8/12 + */ +@Mapper +public interface LogConvert { + + LogConvert CONVERT = Mappers.getMapper(LogConvert.class); + + OperateLogDto convert(OperateLogMongo in); + + LoginLogDto convert(LoginLogMongo in); + + OperateLogMongo convert(OperateLogParam in); + + LoginLogMongo convert(LoginLogParam in); + + DataVersionLogDto convert(DataVersionLogMongo in); + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java new file mode 100644 index 000000000..65af59e4c --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.dao; + +import cn.bootx.platform.starter.audit.log.core.mongo.entity.DataVersionLogMongo; +import org.springframework.data.mongodb.repository.MongoRepository; + +/** + * mongo持久化方式 + * + * @author xxm + * @since 2022/1/10 + */ +public interface DataVersionLogMongoRepository extends MongoRepository { + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java new file mode 100644 index 000000000..9b1e795f6 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.dao; + +import cn.bootx.platform.starter.audit.log.core.mongo.entity.LoginLogMongo; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.time.LocalDateTime; + +/** + * mongo持久化方式 + * + * @author xxm + * @since 2021/12/2 + */ +public interface LoginLogMongoRepository extends MongoRepository { + + int deleteByLoginTimeBefore(LocalDateTime offset); + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java new file mode 100644 index 000000000..fea30ae7a --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.dao; + +import cn.bootx.platform.starter.audit.log.core.mongo.entity.OperateLogMongo; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.time.LocalDateTime; + +/** + * mongo持久化方式 + * + * @author xxm + * @since 2021/12/2 + */ +public interface OperateLogMongoRepository extends MongoRepository { + int deleteByOperateTimeBefore(LocalDateTime offset); +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java similarity index 81% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java index d0568f5fc..15822d978 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/DataVersionLogMongo.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.audit.log.core.mongo.entity; +package cn.bootx.platform.starter.audit.log.core.mongo.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.starter.audit.log.core.mongo.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.core.mongo.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -16,7 +16,7 @@ * 数据版本日志 * * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Data @FieldNameConstants diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/LoginLogMongo.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/LoginLogMongo.java similarity index 79% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/LoginLogMongo.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/LoginLogMongo.java index b345d3a30..804d5d545 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/LoginLogMongo.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/LoginLogMongo.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.audit.log.core.mongo.entity; +package cn.bootx.platform.starter.audit.log.core.mongo.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.starter.audit.log.core.mongo.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.core.mongo.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.data.annotation.Id; @@ -12,7 +12,7 @@ /** * @author xxm - * @date 2021/12/2 + * @since 2021/12/2 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/OperateLogMongo.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/OperateLogMongo.java similarity index 82% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/OperateLogMongo.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/OperateLogMongo.java index 85e552509..157cb4544 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/entity/OperateLogMongo.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/entity/OperateLogMongo.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.audit.log.core.mongo.entity; +package cn.bootx.platform.starter.audit.log.core.mongo.entity; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.starter.audit.log.core.mongo.convert.LogConvert; -import cn.bootx.starter.audit.log.dto.OperateLogDto; +import cn.bootx.platform.starter.audit.log.core.mongo.convert.LogConvert; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.data.annotation.Id; @@ -12,7 +12,7 @@ /** * @author xxm - * @date 2021/12/2 + * @since 2021/12/2 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java similarity index 83% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java index 49cd16963..570014f14 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/DataVersionLogMongoService.java @@ -1,16 +1,16 @@ -package cn.bootx.starter.audit.log.core.mongo.service; +package cn.bootx.platform.starter.audit.log.core.mongo.service; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.audit.log.core.mongo.dao.DataVersionLogMongoRepository; -import cn.bootx.starter.audit.log.core.mongo.entity.DataVersionLogMongo; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; -import cn.bootx.starter.audit.log.service.DataVersionLogService; -import cn.bootx.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; +import cn.bootx.platform.starter.audit.log.service.DataVersionLogService; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.starter.audit.log.core.mongo.dao.DataVersionLogMongoRepository; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.DataVersionLogMongo; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import cn.hutool.core.util.IdUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,7 +29,7 @@ /** * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/LoginLogMongoService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/LoginLogMongoService.java new file mode 100644 index 000000000..4969c31d6 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/LoginLogMongoService.java @@ -0,0 +1,76 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.service; + +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.service.LoginLogService; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.core.mongo.convert.LogConvert; +import cn.bootx.platform.starter.audit.log.core.mongo.dao.LoginLogMongoRepository; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.LoginLogMongo; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import cn.hutool.core.util.IdUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.data.domain.*; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.stream.Collectors; + +/** + * MongoDB存储实现 + * + * @author xxm + * @since 2021/12/2 + */ +@Slf4j +@Service +@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "mongo") +@RequiredArgsConstructor +public class LoginLogMongoService implements LoginLogService { + + private final LoginLogMongoRepository repository; + + @Override + public void add(LoginLogParam loginLog) { + LoginLogMongo loginLogMongo = LogConvert.CONVERT.convert(loginLog); + loginLogMongo.setId(IdUtil.getSnowflakeNextId()); + repository.save(loginLogMongo); + } + + @Override + public LoginLogDto findById(Long id) { + return repository.findById(id).map(LoginLogMongo::toDto).orElseThrow(DataNotExistException::new); + } + + @Override + public PageResult page(PageParam pageParam, LoginLogParam loginLogParam) { + // 查询条件 + ExampleMatcher matching = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING); + Example example = Example.of(LogConvert.CONVERT.convert(loginLogParam), matching); + // 设置分页条件 (第几页,每页大小,排序) + Sort sort = Sort.by(Sort.Order.desc(CommonCode.ID)); + Pageable pageable = PageRequest.of(pageParam.getCurrent() - 1, pageParam.getSize(), sort); + + Page page = repository.findAll(example, pageable); + List records = page.getContent().stream().map(LoginLogMongo::toDto).collect(Collectors.toList()); + + return new PageResult().setCurrent(pageParam.getCurrent()) + .setSize(pageParam.getSize()) + .setRecords(records) + .setTotal(page.getTotalElements()); + } + + @Override + public void deleteByDay(int deleteDay) { + LocalDateTime offset = LocalDateTimeUtil.offset(LocalDateTime.now(), -deleteDay, ChronoUnit.DAYS); + repository.deleteByLoginTimeBefore(offset); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/OperateLogMongoService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/OperateLogMongoService.java new file mode 100644 index 000000000..68ce5c135 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/core/mongo/service/OperateLogMongoService.java @@ -0,0 +1,81 @@ +package cn.bootx.platform.starter.audit.log.core.mongo.service; + +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.audit.log.service.OperateLogService; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.core.mongo.convert.LogConvert; +import cn.bootx.platform.starter.audit.log.core.mongo.dao.OperateLogMongoRepository; +import cn.bootx.platform.starter.audit.log.core.mongo.entity.OperateLogMongo; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import cn.hutool.core.util.IdUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.data.domain.*; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.stream.Collectors; + +/** + * MongoDB存储实现 + * + * @author xxm + * @since 2021/12/2 + */ +@Slf4j +@Service +@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "mongo") +@RequiredArgsConstructor +public class OperateLogMongoService implements OperateLogService { + + private final OperateLogMongoRepository repository; + + @Override + public void add(OperateLogParam operateLog) { + OperateLogMongo operateLogMongo = LogConvert.CONVERT.convert(operateLog); + operateLogMongo.setId(IdUtil.getSnowflakeNextId()); + repository.save(operateLogMongo); + } + + @Override + public OperateLogDto findById(Long id) { + return repository.findById(id).map(OperateLogMongo::toDto).orElseThrow(DataNotExistException::new); + } + + @Override + public PageResult page(PageParam pageParam, OperateLogParam operateLogParam) { + + // 查询条件 + ExampleMatcher matching = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING); + Example example = Example.of(LogConvert.CONVERT.convert(operateLogParam), matching); + + // 设置分页条件 (第几页,每页大小,排序) + Sort sort = Sort.by(Sort.Order.desc(CommonCode.ID)); + Pageable pageable = PageRequest.of(pageParam.getCurrent() - 1, pageParam.getSize(), sort); + + Page page = repository.findAll(example, pageable); + List records = page.getContent() + .stream() + .map(OperateLogMongo::toDto) + .collect(Collectors.toList()); + + return new PageResult().setCurrent(pageParam.getCurrent()) + .setSize(pageParam.getSize()) + .setRecords(records) + .setTotal(page.getTotalElements()); + } + + @Override + public void deleteByDay(int deleteDay) { + LocalDateTime offset = LocalDateTimeUtil.offset(LocalDateTime.now(), -deleteDay, ChronoUnit.DAYS); + repository.deleteByOperateTimeBefore(offset); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/DataVersionLogDto.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/DataVersionLogDto.java similarity index 93% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/DataVersionLogDto.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/DataVersionLogDto.java index 45fbd2c7a..076297ba3 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/DataVersionLogDto.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/DataVersionLogDto.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log.dto; +package cn.bootx.platform.starter.audit.log.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/LoginLogDto.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/LoginLogDto.java similarity index 94% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/LoginLogDto.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/LoginLogDto.java index 14473f937..6c8a435f8 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/LoginLogDto.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/LoginLogDto.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log.dto; +package cn.bootx.platform.starter.audit.log.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,7 +11,7 @@ * 登录日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/OperateLogDto.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/OperateLogDto.java similarity index 91% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/OperateLogDto.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/OperateLogDto.java index f7df4e446..319777b56 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/dto/OperateLogDto.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/dto/OperateLogDto.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.audit.log.dto; +package cn.bootx.platform.starter.audit.log.dto; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 操作日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/DataVersionRecordHandler.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/DataVersionRecordHandler.java similarity index 87% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/DataVersionRecordHandler.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/DataVersionRecordHandler.java index 62908b41b..ef915f047 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/DataVersionRecordHandler.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/DataVersionRecordHandler.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.audit.log.handler; +package cn.bootx.platform.starter.audit.log.handler; -import cn.bootx.common.core.annotation.DataVersionLog; -import cn.bootx.common.mybatisplus.extension.DataChangeRecorderInnerInterceptor; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; -import cn.bootx.starter.audit.log.service.DataVersionLogService; +import cn.bootx.platform.starter.audit.log.service.DataVersionLogService; +import cn.bootx.platform.common.core.annotation.DataVersionLog; +import cn.bootx.platform.common.mybatisplus.extension.DataChangeRecorderInnerInterceptor; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; import com.baomidou.mybatisplus.core.metadata.TableInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,7 +17,7 @@ * 数据变动记录插件 * * @author xxm - * @date 2023/1/8 + * @since 2023/1/8 */ @Slf4j @Component diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/OperateLogAspectHandler.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/OperateLogAspectHandler.java new file mode 100644 index 000000000..7164e8208 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/handler/OperateLogAspectHandler.java @@ -0,0 +1,140 @@ +package cn.bootx.platform.starter.audit.log.handler; + +import cn.bootx.platform.common.headerholder.HeaderHolder; +import cn.bootx.platform.starter.audit.log.service.OperateLogService; +import cn.bootx.platform.common.core.annotation.OperateLog; +import cn.bootx.platform.common.core.annotation.OperateLogs; +import cn.bootx.platform.common.core.code.ServletCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.common.spring.util.AopUtil; +import cn.bootx.platform.common.spring.util.WebServletUtil; +import cn.bootx.platform.starter.audit.log.ip2region.IpToRegionService; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.DesensitizedUtil; +import cn.hutool.extra.servlet.ServletUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; + +/** + * 操作日志切面处理 + * + * @author xxm + * @since 2021/8/13 + */ +@Slf4j +@Aspect +@Component +@RequiredArgsConstructor +public class OperateLogAspectHandler { + + private final OperateLogService operateLogService; + private final IpToRegionService ipToRegionService; + + /** + * 配置织入点 + */ + @Pointcut("@annotation(cn.bootx.platform.common.core.annotation.OperateLog) || @annotation(cn.bootx.platform.common.core.annotation.OperateLogs)") + public void logPointCut() { + } + + /** + * 处理完请求后执行 + */ + @AfterReturning(pointcut = "logPointCut()", returning = "o") + public void doAfterReturning(JoinPoint joinPoint, Object o) { + handleLog(joinPoint, null, o); + } + + /** + * 拦截异常操作 + */ + @AfterThrowing(value = "logPointCut()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) { + handleLog(joinPoint, e, null); + } + + /** + * 操作log处理 + */ + protected void handleLog(JoinPoint joinPoint, Exception e, Object o) { + List logs = getMethodAnnotation(joinPoint); + if (CollUtil.isEmpty(logs)) { + return; + } + // ip信息 + String ip = "未知"; + String location = "未知"; + Optional ipOpt = Optional.ofNullable(WebServletUtil.getRequest()).map(ServletUtil::getClientIP); + if (ipOpt.isPresent()){ + ip = ipOpt.get(); + location = ipToRegionService.getRegionStrByIp(ip); + } + Optional currentUser = SecurityUtil.getCurrentUser(); + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + + for (OperateLog log : logs) { + OperateLogParam operateLog = new OperateLogParam().setTitle(log.title()) + .setOperateId(currentUser.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) + .setUsername(currentUser.map(UserDetail::getUsername).orElse("未知")) + .setBusinessType(log.businessType().name().toLowerCase(Locale.ROOT)) + .setOperateUrl(HeaderHolder.getHeader(ServletCode.REQUEST_URI)) + .setMethod(className + "#" + methodName) + .setRequestMethod(HeaderHolder.getHeader(ServletCode.METHOD)) + .setSuccess(true) + .setOperateIp(ip) + .setOperateLocation(location) + .setOperateTime(LocalDateTime.now()); + + // 异常流 + if (Objects.nonNull(e)) { + operateLog.setSuccess(false).setErrorMsg(e.getMessage()); + } + + // 参数 + if (log.saveParam()) { + Object[] args = joinPoint.getArgs(); + operateLog.setOperateParam(JacksonUtil.toJson(args)); + } + + // 返回值 + if (log.saverReturn()) { + operateLog.setOperateReturn(JacksonUtil.toJson(o)); + } + + operateLogService.add(operateLog); + } + } + + /** + * 获取注解 + */ + private List getMethodAnnotation(JoinPoint joinPoint) { + List operateLogs = Optional.ofNullable(AopUtil.getMethodAnnotation(joinPoint, OperateLogs.class)) + .map(OperateLogs::value) + .map(ListUtil::of) + .orElse(null); + if (CollUtil.isEmpty(operateLogs)) { + operateLogs = ListUtil.of(AopUtil.getMethodAnnotation(joinPoint, OperateLog.class)); + } + return operateLogs; + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpRegion.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpRegion.java new file mode 100644 index 000000000..8cd05c6cf --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpRegion.java @@ -0,0 +1,76 @@ +package cn.bootx.platform.starter.audit.log.ip2region; + +import cn.bootx.platform.common.core.util.CollUtil; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; + +/** + * IP对应地址区域信息 + * @author xxm + * @since 2023/4/13 + */ +@Data +@Accessors(chain = true) +public class IpRegion { + private static final List BIG_CHINA = Arrays.asList("香港","澳门","台湾"); + private static final List PROVINCE_LEVEL_CITY = Arrays.asList("北京","上海","重庆","天津"); + + /** 国家 */ + private String country; + + /** 区域 */ + private String region; + + /** 省份 */ + private String province; + + /** 城市 */ + private String city; + + /** ISP */ + private String isp; + + + /** 是否内网地址 */ + public boolean isInnerIp(){ + return "内网IP".equals(isp); + } + + /** 是否国内地址 */ + public boolean isChinaIp(){ + return "中国".equals(country); + } + + /** 是否国内直辖市 */ + public boolean isProvinceLevel(){ + return "中国".equals(country)&& + PROVINCE_LEVEL_CITY.contains(province); + } + + /** 是否港澳台 */ + public boolean isBigChina(){ + return "中国".equals(country)&& + BIG_CHINA.contains(province); + } + + /** + * 国家|区域|省份|城市|ISP + */ + public static IpRegion init(List ipInfo){ + IpRegion ipRegion = new IpRegion(); + if (CollUtil.isEmpty(ipInfo)){ + return ipRegion; + } + ipRegion.country = ipInfo.get(0); + ipRegion.region = ipInfo.get(1); + ipRegion.province = ipInfo.get(2); + ipRegion.city = ipInfo.get(3); + ipRegion.isp = ipInfo.get(4); + + return ipRegion; + + } +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpToRegionService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpToRegionService.java new file mode 100644 index 000000000..4cb65b7b7 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/ip2region/IpToRegionService.java @@ -0,0 +1,166 @@ +package cn.bootx.platform.starter.audit.log.ip2region; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.starter.audit.log.properties.AuditLogProperties; +import cn.hutool.core.lang.PatternPool; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.lionsoul.ip2region.xdb.Searcher; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; +import java.util.regex.Matcher; + +/** + * + * @author xxm + * @since 2023/4/13 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class IpToRegionService { + /** VectorIndex 缓存 */ + private static byte[] XDB_INDEX; + /** 整个 xdb 文件缓存 */ + private static byte[] XDB_BUFF; + /** 参数配置 */ + private final AuditLogProperties auditLogProperties; + + /** + * 获取文件查询方式 + */ + private Searcher getSearcherByFile(){ + try { + return Searcher.newWithFileOnly(auditLogProperties.getIp2region().getFilePath()); + } catch (IOException e) { + return null; + } + } + + /** + * VectorIndex 索引 + */ + private Searcher getSearcherByIndex(){ + try { + String filePath = auditLogProperties.getIp2region() + .getFilePath(); + if (Objects.isNull(XDB_INDEX)) { + XDB_INDEX = Searcher.loadVectorIndexFromFile(filePath); + } + return Searcher.newWithVectorIndex(filePath, XDB_INDEX); + } catch (IOException e) { + return null; + } + } + + /** + * 缓存整个 xdb 数据 + */ + private Searcher getSearcherByCache(){ + try { + if (Objects.isNull(XDB_BUFF)) { + String filePath = auditLogProperties.getIp2region() + .getFilePath(); + XDB_BUFF = Searcher.loadContentFromFile(filePath); + } + return Searcher.newWithBuffer(XDB_BUFF); + } catch (IOException e) { + return null; + } + } + + /** + * 根据IP获得地址信息 + */ + public IpRegion getRegionByIp(String ip){ + // 判断IP是否合法 + Matcher matcher = PatternPool.IPV4.matcher(ip); + Matcher ipV6Matcher =PatternPool.IPV6.matcher(ip); + if (!matcher.matches()) { + if (ipV6Matcher.matches()){ + log.warn("IpV6地址: {}",ip); + + }else { + log.warn("非法IPv4地址: {}",ip); + + } + return null; + } + + // 根据类型获取 Searcher 对象 + Searcher searcher; + switch (auditLogProperties.getIp2region() + .getSearchType()) { + case FILE: + searcher = getSearcherByFile(); + break; + case VECTOR_INDEX: + searcher = getSearcherByIndex(); + break; + case CACHE: + searcher = getSearcherByCache(); + break; + default: + throw new BizException("IP地址查询方式不合法"); + } + // 无法进行查询 + if (Objects.isNull(searcher)){ + log.warn(""); + return null; + } + + try { + // 城市Id|国家|区域|省份|城市|ISP + String search = searcher.search(ip); + List ipInfo = StrUtil.split(search, "|"); + return IpRegion.init(ipInfo); + } catch (Exception e) { + throw new BizException("IP查询失败"); + } finally { + try { + searcher.close(); + } catch (IOException e) { + // 这句不会执行, finally中try无效 + throw new BizException("IP查询器关闭失败"); + } + } + } + + /** + * 获取默认格式的地址文本 + */ + public String getRegionStrByIp(String ip){ + String location; + // ip信息 + IpRegion region = this.getRegionByIp(ip); + // 未查询到 + if (Objects.isNull(region)){ + return "未知"; + } + // 中国 港澳台 + if (region.isBigChina()){ + location = StrUtil.format("{}/{}/{}",region.getCountry(),region.getProvince(),region.getIsp()); + } + // 中国 直辖市 + else if (region.isProvinceLevel()){ + location = StrUtil.format("{}/{}",region.getProvince(),region.getIsp()); + } + // 普通中国城市 + else if (region.isChinaIp()){ + location = StrUtil.format("{}/{}/{}",region.getProvince(),region.getCity(),region.getIsp()); + } + // 内网 + else if (region.isInnerIp()){ + location = "内网地址"; + } + // 国外 + else { + location = StrUtil.format("{}/{}",region.getCountry(),region.getIsp()); + } + return location.replaceAll("/0",""); + } +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/DataVersionLogParam.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/DataVersionLogParam.java similarity index 90% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/DataVersionLogParam.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/DataVersionLogParam.java index bbefc90dc..819ffe757 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/DataVersionLogParam.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/DataVersionLogParam.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log.param; +package cn.bootx.platform.starter.audit.log.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -6,7 +6,7 @@ /** * @author xxm - * @date 2022/1/10 + * @since 2022/1/10 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/LoginLogParam.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/LoginLogParam.java similarity index 93% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/LoginLogParam.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/LoginLogParam.java index 33d86de43..944b73baf 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/LoginLogParam.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/LoginLogParam.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log.param; +package cn.bootx.platform.starter.audit.log.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 登录日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/OperateLogParam.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/OperateLogParam.java similarity index 95% rename from bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/OperateLogParam.java rename to bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/OperateLogParam.java index 899e64d97..b8f0e35ef 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/param/OperateLogParam.java +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/param/OperateLogParam.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.audit.log.param; +package cn.bootx.platform.starter.audit.log.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 操作日志 * * @author xxm - * @date 2021/8/12 + * @since 2021/8/12 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/properties/AuditLogProperties.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/properties/AuditLogProperties.java new file mode 100644 index 000000000..7275d28a4 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/properties/AuditLogProperties.java @@ -0,0 +1,63 @@ +package cn.bootx.platform.starter.audit.log.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 审计日志配置 + * + * @author xxm + * @since 2021/12/2 + */ +@Getter +@Setter +@ConfigurationProperties(prefix = "bootx.starter.audit-log") +public class AuditLogProperties { + + /** + * ip地址库配置 + */ + private Ip2region ip2region = new Ip2region(); + + /** + * 存储方式, 默认为数据库 + */ + private Store store = Store.JDBC; + + /** + * Ip地址库配置 + */ + @Getter + @Setter + public static class Ip2region{ + /** ip2region.xdb 数据文件所在路径 */ + private String filePath; + /** 查询模式, 默认为缓存 VectorIndex 索引 */ + private Ip2regionSearch searchType = Ip2regionSearch.VECTOR_INDEX; + } + + /** + * 存储类型 + */ + public enum Store { + + /** 数据库 */ + JDBC, + /** MongoDB */ + MONGO + + } + /** + * Ip2region查询类型 + */ + public enum Ip2regionSearch { + /** 完全基于文件的查询(不推荐) */ + FILE, + /** 缓存 VectorIndex 索引 */ + VECTOR_INDEX, + /** 缓存整个 xdb 数据 */ + CACHE + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/DataVersionLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/DataVersionLogService.java new file mode 100644 index 000000000..c59b7addf --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/DataVersionLogService.java @@ -0,0 +1,41 @@ +package cn.bootx.platform.starter.audit.log.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.DataVersionLogDto; +import cn.bootx.platform.starter.audit.log.param.DataVersionLogParam; +import org.springframework.scheduling.annotation.Async; + +/** + * 数据版本日志 + * + * @author xxm + * @since 2022/1/10 + */ +public interface DataVersionLogService { + + /** + * 添加 + */ + @Async("asyncExecutor") + void add(DataVersionLogParam param); + + /** + * 获取 + */ + DataVersionLogDto findById(Long id); + + /** + * 分页 + */ + PageResult page(PageParam pageParam, DataVersionLogParam param); + + /** + * 删除 + */ + default void delete(Long id) { + throw new BizException("日志不允许删除"); + } + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/LoginLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/LoginLogService.java new file mode 100644 index 000000000..e8f081da2 --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/LoginLogService.java @@ -0,0 +1,38 @@ +package cn.bootx.platform.starter.audit.log.service; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.LoginLogDto; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import org.springframework.scheduling.annotation.Async; + +/** + * 登陆日志 + * + * @author xxm + * @since 2021/12/2 + */ +public interface LoginLogService { + + /** + * 添加 + */ + @Async("asyncExecutor") + void add(LoginLogParam loginLog); + + /** + * 获取 + */ + LoginLogDto findById(Long id); + + /** + * 分页 + */ + PageResult page(PageParam pageParam, LoginLogParam loginLogParam); + + /** + * 删除 + */ + void deleteByDay(int deleteDay); + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/OperateLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/OperateLogService.java new file mode 100644 index 000000000..574a07e7d --- /dev/null +++ b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/platform/starter/audit/log/service/OperateLogService.java @@ -0,0 +1,38 @@ +package cn.bootx.platform.starter.audit.log.service; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.audit.log.dto.OperateLogDto; +import cn.bootx.platform.starter.audit.log.param.OperateLogParam; +import org.springframework.scheduling.annotation.Async; + +/** + * 操作日志 + * + * @author xxm + * @since 2021/8/12 + */ +public interface OperateLogService { + + /** + * 添加 + */ + @Async("asyncExecutor") + void add(OperateLogParam operateLog); + + /** + * 获取 + */ + OperateLogDto findById(Long id); + + /** + * 分页 + */ + PageResult page(PageParam pageParam, OperateLogParam operateLogParam); + + /** + * 删除 + */ + void deleteByDay(int deleteDay); + +} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/configuration/DataVersionConfiguration.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/configuration/DataVersionConfiguration.java deleted file mode 100644 index 4d24dc55f..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/configuration/DataVersionConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.starter.audit.log.configuration; - -import cn.bootx.common.mybatisplus.interceptor.MpInterceptor; -import cn.bootx.common.mybatisplus.extension.DataChangeRecorderInnerInterceptor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author xxm - * @date 2023/1/2 - */ -@Configuration -public class DataVersionConfiguration { - - /** - * 数据变更记录 - */ - @Bean - public MpInterceptor dataChangeRecorderInnerInterceptor( - DataChangeRecorderInnerInterceptor dataChangeRecorderInnerInterceptor) { - return new MpInterceptor(dataChangeRecorderInnerInterceptor, 2); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/DataVersionLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/DataVersionLogController.java deleted file mode 100644 index 62f38d68c..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/DataVersionLogController.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.starter.audit.log.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; -import cn.bootx.starter.audit.log.service.DataVersionLogService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author xxm - * @date 2022/1/10 - */ -@Tag(name = "数据版本日志") -@RestController -@RequestMapping("/log/dataVersion") -@RequiredArgsConstructor -public class DataVersionLogController { - - private final DataVersionLogService service; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject DataVersionLogParam param) { - return Res.ok(service.page(pageParam, param)); - } - - @Operation(summary = "获取") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(service.findById(id)); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/LoginLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/LoginLogController.java deleted file mode 100644 index 9aa618784..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/LoginLogController.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.starter.audit.log.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.service.LoginLogService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author xxm - * @date 2021/9/7 - */ -@Tag(name = "登录日志") -@RestController -@RequestMapping("/log/login") -@RequiredArgsConstructor -public class LoginLogController { - - private final LoginLogService loginLogService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject LoginLogParam loginLogParam) { - return Res.ok(loginLogService.page(pageParam, loginLogParam)); - } - - @Operation(summary = "获取") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(loginLogService.findById(id)); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/OperateLogController.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/OperateLogController.java deleted file mode 100644 index 443a458dc..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/controller/OperateLogController.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.bootx.starter.audit.log.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import cn.bootx.starter.audit.log.service.OperateLogService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 操作日志 - * - * @author xxm - * @date 2021/9/8 - */ -@Tag(name = "操作日志") -@RestController -@RequestMapping("/log/operate") -@RequiredArgsConstructor -public class OperateLogController { - - private final OperateLogService operateLogService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject OperateLogParam operateLogParam) { - return Res.ok(operateLogService.page(pageParam, operateLogParam)); - } - - @Operation(summary = "获取") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(operateLogService.findById(id)); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/convert/LogConvert.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/convert/LogConvert.java deleted file mode 100644 index 4e65ece6b..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/convert/LogConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.convert; - -import cn.bootx.starter.audit.log.core.db.entity.DataVersionLogDb; -import cn.bootx.starter.audit.log.core.db.entity.LoginLogDb; -import cn.bootx.starter.audit.log.core.db.entity.OperateLogDb; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 日志转换 - * - * @author xxm - * @date 2021/8/12 - */ -@Mapper -public interface LogConvert { - - LogConvert CONVERT = Mappers.getMapper(LogConvert.class); - - OperateLogDto convert(OperateLogDb in); - - LoginLogDto convert(LoginLogDb in); - - OperateLogDb convert(OperateLogParam in); - - LoginLogDb convert(LoginLogParam in); - - DataVersionLogDto convert(DataVersionLogDb in); - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbManager.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbManager.java deleted file mode 100644 index 74145e3df..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.entity.LoginLogDb; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * 登录日志 - * - * @author xxm - * @date 2021/8/12 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class LoginLogDbManager extends BaseManager { - - public Page page(PageParam pageParam, LoginLogParam loginLogParam) { - Page mpPage = MpUtil.getMpPage(pageParam, LoginLogDb.class); - return lambdaQuery().orderByDesc(LoginLogDb::getId) - .like(StrUtil.isNotBlank(loginLogParam.getAccount()), LoginLogDb::getAccount, loginLogParam.getAccount()) - .like(StrUtil.isNotBlank(loginLogParam.getClient()), LoginLogDb::getClient, loginLogParam.getClient()) - .like(StrUtil.isNotBlank(loginLogParam.getLoginType()), LoginLogDb::getLoginType, - loginLogParam.getLoginType()) - .page(mpPage); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbMapper.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbMapper.java deleted file mode 100644 index 9a431d7cf..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/LoginLogDbMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.dao; - -import cn.bootx.starter.audit.log.core.db.entity.LoginLogDb; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 登录日志 - * - * @author xxm - * @date 2021/8/12 - */ -@Mapper -public interface LoginLogDbMapper extends BaseMapper { - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbManager.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbManager.java deleted file mode 100644 index de0ca184f..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbManager.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.entity.OperateLogDb; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Objects; - -/** - * 操作日志 - * - * @author xxm - * @date 2021/8/12 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class OperateLogDbManager extends BaseManager { - - public Page page(PageParam pageParam, OperateLogParam operateLogParam) { - Page mpPage = MpUtil.getMpPage(pageParam, OperateLogDb.class); - return lambdaQuery() - .like(StrUtil.isNotBlank(operateLogParam.getUsername()), OperateLogDb::getUsername, - operateLogParam.getUsername()) - .like(StrUtil.isNotBlank(operateLogParam.getTitle()), OperateLogDb::getTitle, operateLogParam.getTitle()) - .eq(Objects.nonNull(operateLogParam.getBusinessType()), OperateLogDb::getBusinessType, - operateLogParam.getBusinessType()) - .orderByDesc(OperateLogDb::getOperateTime) - .page(mpPage); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbMapper.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbMapper.java deleted file mode 100644 index 169b8a266..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/dao/OperateLogDbMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.dao; - -import cn.bootx.starter.audit.log.core.db.entity.OperateLogDb; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface OperateLogDbMapper extends BaseMapper { - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/DataVersionLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/DataVersionLogDbService.java deleted file mode 100644 index cdc9b264d..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/DataVersionLogDbService.java +++ /dev/null @@ -1,83 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.dao.DataVersionLogDbManager; -import cn.bootx.starter.audit.log.core.db.entity.DataVersionLogDb; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; -import cn.bootx.starter.audit.log.service.DataVersionLogService; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Objects; - -/** - * 数据版本日志数据库实现 - * - * @author xxm - * @date 2022/1/10 - */ -@Slf4j -@Service -@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) -@RequiredArgsConstructor -public class DataVersionLogDbService implements DataVersionLogService { - - private final DataVersionLogDbManager manager; - - /** - * 添加 - */ - @Override - @Transactional - public void add(DataVersionLogParam param) { - int maxVersion = manager.getMaxVersion(param.getTableName(), param.getDataId()); - DataVersionLogDb dataVersionLog = new DataVersionLogDb().setTableName(param.getTableName()) - .setDataName(param.getDataName()) - .setDataId(param.getDataId()) - .setCreator(SecurityUtil.getUserIdOrDefaultId()) - .setCreateTime(LocalDateTime.now()) - .setVersion(maxVersion + 1); - if (param.getDataContent() instanceof String) { - dataVersionLog.setDataContent((String) param.getDataContent()); - } - else { - dataVersionLog.setDataContent(JacksonUtil.toJson(param.getDataContent())); - } - if (param.getChangeContent() instanceof String) { - dataVersionLog.setChangeContent(param.getChangeContent()); - } - else { - if (Objects.nonNull(param.getChangeContent())) { - dataVersionLog.setChangeContent(JacksonUtil.toJson(param.getChangeContent())); - } - } - manager.save(dataVersionLog); - } - - /** - * 获取 - */ - @Override - public DataVersionLogDto findById(Long id) { - return manager.findById(id).map(DataVersionLogDb::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 分页 - */ - @Override - public PageResult page(PageParam pageParam, DataVersionLogParam param) { - return MpUtil.convert2DtoPageResult(manager.page(pageParam, param)); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/LoginLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/LoginLogDbService.java deleted file mode 100644 index 98fc23f5c..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/LoginLogDbService.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.convert.LogConvert; -import cn.bootx.starter.audit.log.core.db.dao.LoginLogDbManager; -import cn.bootx.starter.audit.log.core.db.entity.LoginLogDb; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.service.LoginLogService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -/** - * 登陆日志 - * - * @author xxm - * @date 2021/8/12 - */ -@Slf4j -@Service -@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) -@RequiredArgsConstructor -public class LoginLogDbService implements LoginLogService { - - private final LoginLogDbManager loginLogManager; - - /** - * 添加 - */ - @Override - public void add(LoginLogParam loginLog) { - loginLogManager.save(LogConvert.CONVERT.convert(loginLog)); - } - - /** - * 获取 - */ - @Override - public LoginLogDto findById(Long id) { - return loginLogManager.findById(id).map(LoginLogDb::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 分页 - */ - @Override - public PageResult page(PageParam pageParam, LoginLogParam loginLogParam) { - return MpUtil.convert2DtoPageResult(loginLogManager.page(pageParam, loginLogParam)); - } - - /** - * 删除 - */ - @Override - public void delete(Long id) { - loginLogManager.deleteById(id); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/OperateLogDbService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/OperateLogDbService.java deleted file mode 100644 index 3475c67e6..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/db/service/OperateLogDbService.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.bootx.starter.audit.log.core.db.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.audit.log.core.db.convert.LogConvert; -import cn.bootx.starter.audit.log.core.db.dao.OperateLogDbManager; -import cn.bootx.starter.audit.log.core.db.entity.OperateLogDb; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import cn.bootx.starter.audit.log.service.OperateLogService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -/** - * 操作日志 - * - * @author xxm - * @date 2021/8/12 - */ -@Slf4j -@Service -@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "jdbc", matchIfMissing = true) -@RequiredArgsConstructor -public class OperateLogDbService implements OperateLogService { - - private final OperateLogDbManager operateLogManager; - - /** - * 添加 - */ - @Async("asyncExecutor") - @Override - public void add(OperateLogParam operateLog) { - operateLogManager.save(LogConvert.CONVERT.convert(operateLog)); - } - - /** - * 获取 - */ - @Override - public OperateLogDto findById(Long id) { - return operateLogManager.findById(id).map(OperateLogDb::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 分页 - */ - @Override - public PageResult page(PageParam pageParam, OperateLogParam operateLogParam) { - return MpUtil.convert2DtoPageResult(operateLogManager.page(pageParam, operateLogParam)); - } - - /** - * 删除 - */ - @Override - public void delete(Long id) { - operateLogManager.deleteById(id); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/convert/LogConvert.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/convert/LogConvert.java deleted file mode 100644 index 10a7dedda..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/convert/LogConvert.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.convert; - -import cn.bootx.starter.audit.log.core.mongo.entity.DataVersionLogMongo; -import cn.bootx.starter.audit.log.core.mongo.entity.LoginLogMongo; -import cn.bootx.starter.audit.log.core.mongo.entity.OperateLogMongo; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 日志转换 - * - * @author xxm - * @date 2021/8/12 - */ -@Mapper -public interface LogConvert { - - LogConvert CONVERT = Mappers.getMapper(LogConvert.class); - - OperateLogDto convert(OperateLogMongo in); - - LoginLogDto convert(LoginLogMongo in); - - OperateLogMongo convert(OperateLogParam in); - - LoginLogMongo convert(LoginLogParam in); - - DataVersionLogDto convert(DataVersionLogMongo in); - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java deleted file mode 100644 index a5cd648a3..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/DataVersionLogMongoRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.dao; - -import cn.bootx.starter.audit.log.core.mongo.entity.DataVersionLogMongo; -import org.springframework.data.mongodb.repository.MongoRepository; - -/** - * mongo持久化方式 - * - * @author xxm - * @date 2022/1/10 - */ -public interface DataVersionLogMongoRepository extends MongoRepository { - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java deleted file mode 100644 index 68b6abc88..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/LoginLogMongoRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.dao; - -import cn.bootx.starter.audit.log.core.mongo.entity.LoginLogMongo; -import org.springframework.data.mongodb.repository.MongoRepository; - -/** - * mongo持久化方式 - * - * @author xxm - * @date 2021/12/2 - */ -public interface LoginLogMongoRepository extends MongoRepository { - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java deleted file mode 100644 index e35785d13..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/dao/OperateLogMongoRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.dao; - -import cn.bootx.starter.audit.log.core.mongo.entity.OperateLogMongo; -import org.springframework.data.mongodb.repository.MongoRepository; - -/** - * mongo持久化方式 - * - * @author xxm - * @date 2021/12/2 - */ -public interface OperateLogMongoRepository extends MongoRepository { - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/LoginLogMongoService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/LoginLogMongoService.java deleted file mode 100644 index 15f5e54da..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/LoginLogMongoService.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.service; - -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.core.mongo.convert.LogConvert; -import cn.bootx.starter.audit.log.core.mongo.dao.LoginLogMongoRepository; -import cn.bootx.starter.audit.log.core.mongo.entity.LoginLogMongo; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.service.LoginLogService; -import cn.hutool.core.util.IdUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.data.domain.*; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * MongoDB存储实现 - * - * @author xxm - * @date 2021/12/2 - */ -@Slf4j -@Service -@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "mongo") -@RequiredArgsConstructor -public class LoginLogMongoService implements LoginLogService { - - private final LoginLogMongoRepository repository; - - @Override - public void add(LoginLogParam loginLog) { - LoginLogMongo loginLogMongo = LogConvert.CONVERT.convert(loginLog); - loginLogMongo.setId(IdUtil.getSnowflakeNextId()); - repository.save(loginLogMongo); - } - - @Override - public LoginLogDto findById(Long id) { - return repository.findById(id).map(LoginLogMongo::toDto).orElseThrow(DataNotExistException::new); - } - - @Override - public PageResult page(PageParam pageParam, LoginLogParam loginLogParam) { - // 查询条件 - ExampleMatcher matching = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING); - Example example = Example.of(LogConvert.CONVERT.convert(loginLogParam), matching); - // 设置分页条件 (第几页,每页大小,排序) - Sort sort = Sort.by(Sort.Order.desc(CommonCode.ID)); - Pageable pageable = PageRequest.of(pageParam.getCurrent() - 1, pageParam.getSize(), sort); - - Page page = repository.findAll(example, pageable); - List records = page.getContent().stream().map(LoginLogMongo::toDto).collect(Collectors.toList()); - - return new PageResult().setCurrent(pageParam.getCurrent()) - .setSize(pageParam.getSize()) - .setRecords(records) - .setTotal(page.getTotalElements()); - } - - @Override - public void delete(Long id) { - repository.deleteById(id); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/OperateLogMongoService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/OperateLogMongoService.java deleted file mode 100644 index 48366a5ef..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/core/mongo/service/OperateLogMongoService.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.starter.audit.log.core.mongo.service; - -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.core.mongo.convert.LogConvert; -import cn.bootx.starter.audit.log.core.mongo.dao.OperateLogMongoRepository; -import cn.bootx.starter.audit.log.core.mongo.entity.OperateLogMongo; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import cn.bootx.starter.audit.log.service.OperateLogService; -import cn.hutool.core.util.IdUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.data.domain.*; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * MongoDB存储实现 - * - * @author xxm - * @date 2021/12/2 - */ -@Slf4j -@Service -@ConditionalOnProperty(prefix = "bootx.starter.audit-log", value = "store", havingValue = "mongo") -@RequiredArgsConstructor -public class OperateLogMongoService implements OperateLogService { - - private final OperateLogMongoRepository repository; - - @Override - public void add(OperateLogParam operateLog) { - OperateLogMongo operateLogMongo = LogConvert.CONVERT.convert(operateLog); - operateLogMongo.setId(IdUtil.getSnowflakeNextId()); - repository.save(operateLogMongo); - } - - @Override - public OperateLogDto findById(Long id) { - return repository.findById(id).map(OperateLogMongo::toDto).orElseThrow(DataNotExistException::new); - } - - @Override - public PageResult page(PageParam pageParam, OperateLogParam operateLogParam) { - - // 查询条件 - ExampleMatcher matching = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING); - Example example = Example.of(LogConvert.CONVERT.convert(operateLogParam), matching); - - // 设置分页条件 (第几页,每页大小,排序) - Sort sort = Sort.by(Sort.Order.desc(CommonCode.ID)); - Pageable pageable = PageRequest.of(pageParam.getCurrent() - 1, pageParam.getSize(), sort); - - Page page = repository.findAll(example, pageable); - List records = page.getContent() - .stream() - .map(OperateLogMongo::toDto) - .collect(Collectors.toList()); - - return new PageResult().setCurrent(pageParam.getCurrent()) - .setSize(pageParam.getSize()) - .setRecords(records) - .setTotal(page.getTotalElements()); - } - - @Override - public void delete(Long id) { - repository.deleteById(id); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/OperateLogAspectHandler.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/OperateLogAspectHandler.java deleted file mode 100644 index 81bead8be..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/handler/OperateLogAspectHandler.java +++ /dev/null @@ -1,131 +0,0 @@ -package cn.bootx.starter.audit.log.handler; - -import cn.bootx.common.core.annotation.OperateLog; -import cn.bootx.common.core.annotation.OperateLogs; -import cn.bootx.common.core.code.ServletCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.headerholder.HeaderHolder; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.common.spring.util.AopUtil; -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import cn.bootx.starter.audit.log.service.OperateLogService; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.util.DesensitizedUtil; -import cn.hutool.extra.servlet.ServletUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; - -/** - * 操作日志切面处理 - * - * @author xxm - * @date 2021/8/13 - */ -@Slf4j -@Aspect -@Component -@RequiredArgsConstructor -public class OperateLogAspectHandler { - - private final OperateLogService operateLogService; - - /** - * 配置织入点 - */ - @Pointcut("@annotation(cn.bootx.common.core.annotation.OperateLog) || @annotation(cn.bootx.common.core.annotation.OperateLogs)") - public void logPointCut() { - } - - /** - * 处理完请求后执行 - */ - @AfterReturning(pointcut = "logPointCut()", returning = "o") - public void doAfterReturning(JoinPoint joinPoint, Object o) { - handleLog(joinPoint, null, o); - } - - /** - * 拦截异常操作 - */ - @AfterThrowing(value = "logPointCut()", throwing = "e") - public void doAfterThrowing(JoinPoint joinPoint, Exception e) { - handleLog(joinPoint, e, null); - } - - /** - * 操作log处理 - */ - protected void handleLog(JoinPoint joinPoint, Exception e, Object o) { - List logs = getMethodAnnotation(joinPoint); - if (CollUtil.isEmpty(logs)) { - return; - } - // 基础信息 - String ip = Optional.ofNullable(WebServletUtil.getRequest()).map(ServletUtil::getClientIP).orElse("未知"); - Optional currentUser = SecurityUtil.getCurrentUser(); - // 设置方法名称 - String className = joinPoint.getTarget().getClass().getName(); - String methodName = joinPoint.getSignature().getName(); - - for (OperateLog log : logs) { - OperateLogParam operateLog = new OperateLogParam().setTitle(log.title()) - .setOperateId(currentUser.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) - .setUsername(currentUser.map(UserDetail::getUsername).orElse("未知")) - .setBusinessType(log.businessType().name().toLowerCase(Locale.ROOT)) - .setOperateUrl(HeaderHolder.getHeader(ServletCode.REQUEST_URI)) - .setMethod(className + "#" + methodName) - .setRequestMethod(HeaderHolder.getHeader(ServletCode.METHOD)) - .setSuccess(true) - .setOperateIp(ip) - .setOperateTime(LocalDateTime.now()); - - // 异常流 - if (Objects.nonNull(e)) { - operateLog.setSuccess(false).setErrorMsg(e.getMessage()); - } - - // 参数 - if (log.saveParam()) { - Object[] args = joinPoint.getArgs(); - operateLog.setOperateParam(JacksonUtil.toJson(args)); - } - - // 返回值 - if (log.saverReturn()) { - operateLog.setOperateReturn(JacksonUtil.toJson(o)); - } - - operateLogService.add(operateLog); - } - } - - /** - * 获取注解 - */ - private List getMethodAnnotation(JoinPoint joinPoint) { - List operateLogs = Optional.ofNullable(AopUtil.getMethodAnnotation(joinPoint, OperateLogs.class)) - .map(OperateLogs::value) - .map(ListUtil::of) - .orElse(null); - if (CollUtil.isEmpty(operateLogs)) { - operateLogs = ListUtil.of(AopUtil.getMethodAnnotation(joinPoint, OperateLog.class)); - } - return operateLogs; - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/properties/AuditLogProperties.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/properties/AuditLogProperties.java deleted file mode 100644 index de1063630..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/properties/AuditLogProperties.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.starter.audit.log.properties; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * 审计日志配置 - * - * @author xxm - * @date 2021/12/2 - */ -@Getter -@Setter -@ConfigurationProperties(prefix = "bootx.starter.audit-log") -public class AuditLogProperties { - - /** - * 存储方式, 默认为数据库 - */ - private Store store = Store.JDBC; - - /** - * 存储类型 - */ - public enum Store { - - /** 数据库 */ - JDBC, - /** MongoDB */ - MONGO - - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/DataVersionLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/DataVersionLogService.java deleted file mode 100644 index 61e9415f8..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/DataVersionLogService.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.bootx.starter.audit.log.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.DataVersionLogDto; -import cn.bootx.starter.audit.log.param.DataVersionLogParam; -import org.springframework.scheduling.annotation.Async; - -/** - * 数据版本日志 - * - * @author xxm - * @date 2022/1/10 - */ -public interface DataVersionLogService { - - /** - * 添加 - */ - @Async("asyncExecutor") - void add(DataVersionLogParam param); - - /** - * 获取 - */ - DataVersionLogDto findById(Long id); - - /** - * 分页 - */ - PageResult page(PageParam pageParam, DataVersionLogParam param); - - /** - * 删除 - */ - default void delete(Long id) { - throw new BizException("日志不允许删除"); - } - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/LoginLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/LoginLogService.java deleted file mode 100644 index 9cf76cc07..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/LoginLogService.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.starter.audit.log.service; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.LoginLogDto; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import org.springframework.scheduling.annotation.Async; - -/** - * 登陆日志 - * - * @author xxm - * @date 2021/12/2 - */ -public interface LoginLogService { - - /** - * 添加 - */ - @Async("asyncExecutor") - void add(LoginLogParam loginLog); - - /** - * 获取 - */ - LoginLogDto findById(Long id); - - /** - * 分页 - */ - PageResult page(PageParam pageParam, LoginLogParam loginLogParam); - - /** - * 删除 - */ - void delete(Long id); - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/OperateLogService.java b/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/OperateLogService.java deleted file mode 100644 index 5510d4e77..000000000 --- a/bootx-common-starters/common-starter-audit-log/src/main/java/cn/bootx/starter/audit/log/service/OperateLogService.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.starter.audit.log.service; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.audit.log.dto.OperateLogDto; -import cn.bootx.starter.audit.log.param.OperateLogParam; -import org.springframework.scheduling.annotation.Async; - -/** - * 操作日志 - * - * @author xxm - * @date 2021/8/12 - */ -public interface OperateLogService { - - /** - * 添加 - */ - @Async("asyncExecutor") - void add(OperateLogParam operateLog); - - /** - * 获取 - */ - OperateLogDto findById(Long id); - - /** - * 分页 - */ - PageResult page(PageParam pageParam, OperateLogParam operateLogParam); - - /** - * 删除 - */ - void delete(Long id); - -} diff --git a/bootx-common-starters/common-starter-audit-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-audit-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 5d23f9dfe..b39412fd2 100644 --- a/bootx-common-starters/common-starter-audit-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-common-starters/common-starter-audit-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.starter.audit.log.AuditLogAutoConfiguration +cn.bootx.platform.starter.audit.log.AuditLogAutoConfiguration diff --git a/bootx-common-starters/common-starter-auth/pom.xml b/bootx-common-starters/common-starter-auth/pom.xml index 30163069a..76e987eef 100644 --- a/bootx-common-starters/common-starter-auth/pom.xml +++ b/bootx-common-starters/common-starter-auth/pom.xml @@ -5,7 +5,7 @@ cn.bootx.platform bootx-common-starters - 1.2.3 + 1.3.6.2 4.0.0 common-starter-auth diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/AuthAutoConfiguration.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/AuthAutoConfiguration.java similarity index 85% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/AuthAutoConfiguration.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/AuthAutoConfiguration.java index 789c3e86b..daa422611 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/AuthAutoConfiguration.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/AuthAutoConfiguration.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth; +package cn.bootx.platform.starter.auth; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; @@ -8,7 +8,7 @@ * 认证相关 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @ComponentScan @ConfigurationPropertiesScan diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/AbstractAuthentication.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/AbstractAuthentication.java new file mode 100644 index 000000000..f0b365596 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/AbstractAuthentication.java @@ -0,0 +1,70 @@ +package cn.bootx.platform.starter.auth.authentication; + +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.hutool.extra.spring.SpringUtil; + +import javax.validation.constraints.NotNull; +import java.util.Objects; + +/** + * 抽象认证器 + * + * @author xxm + * @since 2021/7/30 + */ +public interface AbstractAuthentication { + + /** + * 获取终端编码 + */ + String getLoginType(); + /** + * 获取用户状态检查接口的实现类 + */ + default UserInfoStatusCheck getUserInfoStatusCheck() { + return SpringUtil.getBean(UserInfoStatusCheck.class); + } + + /** + * 登录类型是否匹配 + */ + default boolean adaptation(String loginType) { + return Objects.equals(getLoginType(), loginType); + } + + /** + * 认证前操作 + */ + default void authenticationBefore(LoginAuthContext context) { + + } + + /** + * 尝试认证, 必须重写 + */ + @NotNull + AuthInfoResult attemptAuthentication(LoginAuthContext context); + + /** + * 认证后处理 + */ + default void authenticationAfter(AuthInfoResult authInfoResult, LoginAuthContext context) { + } + + /** + * 认证流程 + */ + default AuthInfoResult authentication(LoginAuthContext context) { + this.authenticationBefore(context); + // 认证逻辑 + AuthInfoResult authInfoResult = this.attemptAuthentication(context); + // 添加用户信息到上下文中 + context.setUserDetail(authInfoResult.getUserDetail()); + // 检查用户信息和状态 + this.getUserInfoStatusCheck().check(authInfoResult, context); + // 认证后处理 + this.authenticationAfter(authInfoResult, context); + return authInfoResult; + } +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthClientService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthClientService.java new file mode 100644 index 000000000..55e25f91d --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthClientService.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.starter.auth.authentication; + +import cn.bootx.platform.starter.auth.entity.AuthClient; + +/** + * 获取认证终端 + * + * @author xxm + * @since 2022/6/27 + */ +public interface GetAuthClientService { + + /** + * 认证应用 + */ + AuthClient getAuthApplication(String authApplicationCode); + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthLoginTypeService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthLoginTypeService.java new file mode 100644 index 000000000..5105fc9ab --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/GetAuthLoginTypeService.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.starter.auth.authentication; + +import cn.bootx.platform.starter.auth.entity.AuthLoginType; + +/** + * 获取认证登录方式对象服务 + * + * @author xxm + * @since 2021/8/25 + */ +public interface GetAuthLoginTypeService { + + /** + * @param loginType 登录方式编码 + */ + AuthLoginType getAuthLoginType(String loginType); + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/OpenIdAuthentication.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/OpenIdAuthentication.java similarity index 86% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/OpenIdAuthentication.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/OpenIdAuthentication.java index 7c63fa8c0..08c322b4c 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/OpenIdAuthentication.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/OpenIdAuthentication.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.auth.authentication; +package cn.bootx.platform.starter.auth.authentication; -import cn.bootx.starter.auth.entity.ThirdAuthCode; +import cn.bootx.platform.starter.auth.entity.ThirdAuthCode; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthUser; @@ -8,7 +8,7 @@ * OpenId登录认证器 (微信/钉钉/飞书/QQ/企微等) * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ public interface OpenIdAuthentication extends AbstractAuthentication { diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UserInfoStatusCheck.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UserInfoStatusCheck.java new file mode 100644 index 000000000..130678ea0 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UserInfoStatusCheck.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.starter.auth.authentication; + +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; + +/** + * 用户状态检查 + * @author xxm + * @since 2023/9/20 + */ +public interface UserInfoStatusCheck { + + /** + * + * @param authInfoResult 认证返回结果 + * @param context 登录认证上下文 + */ + void check(AuthInfoResult authInfoResult, LoginAuthContext context); +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UsernamePasswordAuthentication.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UsernamePasswordAuthentication.java new file mode 100644 index 000000000..c49250941 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/authentication/UsernamePasswordAuthentication.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.starter.auth.authentication; + +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; + +/** + * 用户密码认证方式 + * + * @author xxm + * @since 2021/7/30 + */ +public interface UsernamePasswordAuthentication extends AbstractAuthentication { + + /** + * 账密登录 + */ + @Override + default String getLoginType() { + return AuthLoginTypeCode.PASSWORD; + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheFilter.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheFilter.java similarity index 92% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheFilter.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheFilter.java index 466d8b572..29f77970b 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheFilter.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheFilter.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.cache; +package cn.bootx.platform.starter.auth.cache; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -16,7 +16,7 @@ * session缓存,用来减少一个请求中多次获取用户信息导致的多次访问redis * * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @Order(value = Integer.MIN_VALUE + 1) @Component @@ -29,7 +29,6 @@ public void doFilterInternal(HttpServletRequest request, HttpServletResponse res throws IOException, ServletException { try { chain.doFilter(request, response); - // 会在请求中被缓存 } finally { SessionCacheLocal.clear(); diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheLocal.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheLocal.java new file mode 100644 index 000000000..351e4c164 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/cache/SessionCacheLocal.java @@ -0,0 +1,54 @@ +package cn.bootx.platform.starter.auth.cache; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.starter.auth.entity.UserStatus; +import com.alibaba.ttl.TransmittableThreadLocal; + +/** + * 会话缓存线程存储 + * + * @author xxm + * @since 2022/1/8 + */ +public final class SessionCacheLocal { + + private static final ThreadLocal USER_INFO_LOCAL = new TransmittableThreadLocal<>(); + private static final ThreadLocal USER_STATUS_LOCAL = new TransmittableThreadLocal<>(); + + /** + * 设置用户信息 + */ + public static void putUserInfo(UserDetail userDetail) { + USER_INFO_LOCAL.set(userDetail); + } + + /** + * 获取用户信息 + */ + public static UserDetail getUserInfo() { + return USER_INFO_LOCAL.get(); + } + + /** + * 设置用户状态 + */ + public static void putUserStatus(UserStatus userStatus) { + USER_STATUS_LOCAL.set(userStatus); + } + + /** + * 获取用户状态上下文 + */ + public static UserStatus getUserStatusContext() { + return USER_STATUS_LOCAL.get(); + } + + /** + * 清除 + */ + public static void clear() { + USER_INFO_LOCAL.remove(); + USER_STATUS_LOCAL.remove(); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/code/AuthLoginTypeCode.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/code/AuthLoginTypeCode.java similarity index 87% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/code/AuthLoginTypeCode.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/code/AuthLoginTypeCode.java index 02384d715..328693bc7 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/code/AuthLoginTypeCode.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/code/AuthLoginTypeCode.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.auth.code; +package cn.bootx.platform.starter.auth.code; /** * 认证录方式 * * @author xxm - * @date 2021/8/2 + * @since 2021/8/2 */ public interface AuthLoginTypeCode { @@ -33,6 +33,10 @@ public interface AuthLoginTypeCode { /** 微信登录(公众号) */ String WE_CHAT = "weChat"; + + /** 微信登录(小程序) */ + String WE_CHAT_APPLET = "weChatApplet"; + /** 微信登录(开放平台) */ String WE_CHAT_OPEN = "weChatOpen"; diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/AuthProperties.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java similarity index 96% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/AuthProperties.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java index f7e73e7ab..85a0bed92 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/AuthProperties.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/AuthProperties.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.configuration; +package cn.bootx.platform.starter.auth.configuration; import lombok.Data; import lombok.Getter; @@ -12,7 +12,7 @@ * 认证配置参数 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @Getter @Setter diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/SaTokenConfigure.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/SaTokenConfigure.java similarity index 90% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/SaTokenConfigure.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/SaTokenConfigure.java index e6c7d3427..d3ca01cbb 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/configuration/SaTokenConfigure.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/configuration/SaTokenConfigure.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.auth.configuration; +package cn.bootx.platform.starter.auth.configuration; -import cn.bootx.starter.auth.handler.SaRouteHandler; +import cn.bootx.platform.starter.auth.handler.SaRouteHandler; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.router.SaRouter; import lombok.RequiredArgsConstructor; @@ -15,7 +15,7 @@ * sa-token * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @EnableConfigurationProperties(AuthProperties.class) @RequiredArgsConstructor diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenEndpoint.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java similarity index 85% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenEndpoint.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java index 3a4ac4fc9..09f63d98d 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenEndpoint.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenEndpoint.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.auth.endpoint; +package cn.bootx.platform.starter.auth.endpoint; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -16,7 +16,7 @@ * 基础登录退出操作 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @Tag(name = "认证相关") @RestController diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenService.java similarity index 83% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenService.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenService.java index fafdbddad..df9b3f27e 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/endpoint/TokenService.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/endpoint/TokenService.java @@ -1,21 +1,21 @@ -package cn.bootx.starter.auth.endpoint; - -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.starter.auth.authentication.AbstractAuthentication; -import cn.bootx.starter.auth.authentication.GetAuthClientService; -import cn.bootx.starter.auth.authentication.GetAuthLoginTypeService; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.entity.AuthClient; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.AuthLoginType; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.ClientNotEnableException; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.handler.LoginFailureHandler; -import cn.bootx.starter.auth.handler.LoginSuccessHandler; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.starter.auth.endpoint; + +import cn.bootx.platform.starter.auth.authentication.AbstractAuthentication; +import cn.bootx.platform.starter.auth.authentication.GetAuthClientService; +import cn.bootx.platform.starter.auth.authentication.GetAuthLoginTypeService; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.exception.ClientNotEnableException; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.starter.auth.entity.AuthClient; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.AuthLoginType; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.handler.LoginFailureHandler; +import cn.bootx.platform.starter.auth.handler.LoginSuccessHandler; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; @@ -32,7 +32,7 @@ * 认证相关服务 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthClient.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthClient.java similarity index 88% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthClient.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthClient.java index 8a8b9e510..51e15d374 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthClient.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthClient.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.entity; +package cn.bootx.platform.starter.auth.entity; import lombok.Data; import lombok.experimental.Accessors; @@ -9,7 +9,7 @@ * 认证应用 * * @author xxm - * @date 2022/6/27 + * @since 2022/6/27 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthInfoResult.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthInfoResult.java new file mode 100644 index 000000000..988a5cec5 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthInfoResult.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.starter.auth.entity; + +import cn.bootx.platform.common.core.entity.UserDetail; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 认证返回结果 + * + * @author xxm + * @since 2021/7/30 + */ +@Data +@Accessors(chain = true) +public class AuthInfoResult { + + /** 用户id */ + private Object id; + + /** 认证终端(例如管理端/小程序/h5等) */ + private String client = ""; + + /** 登录方式(例如web/开放平台/app等) */ + private String loginType = ""; + + /** 用户对象 */ + private UserDetail userDetail; + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthLoginType.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthLoginType.java similarity index 87% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthLoginType.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthLoginType.java index 9d6d06566..5f422f9eb 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthLoginType.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/AuthLoginType.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.entity; +package cn.bootx.platform.starter.auth.entity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -6,7 +6,7 @@ /** * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Data @Accessors(chain = true) @@ -29,6 +29,7 @@ public class AuthLoginType { private boolean enable; /** 密码错误几次冻结 */ + @Deprecated private int pwdErrNum; /** 是否需要验证码 */ diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/LoginAuthContext.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/LoginAuthContext.java similarity index 81% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/LoginAuthContext.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/LoginAuthContext.java index 2c5d07042..67e0dd912 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/LoginAuthContext.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/LoginAuthContext.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.auth.entity; +package cn.bootx.platform.starter.auth.entity; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.common.core.entity.UserDetail; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -15,7 +15,7 @@ * 认证上下文 * * @author xxm - * @date 2022/4/23 + * @since 2022/4/23 */ @Getter @Setter diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/ThirdAuthCode.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/ThirdAuthCode.java similarity index 86% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/ThirdAuthCode.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/ThirdAuthCode.java index e78e6db9c..5f64f4ccc 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/ThirdAuthCode.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/ThirdAuthCode.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.entity; +package cn.bootx.platform.starter.auth.entity; import lombok.Data; import lombok.experimental.Accessors; @@ -7,7 +7,7 @@ * 三方登录认证码 * * @author xxm - * @date 2022/6/29 + * @since 2022/6/29 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/UserStatus.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/UserStatus.java new file mode 100644 index 000000000..2b11f41a8 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/entity/UserStatus.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.starter.auth.entity; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.HashMap; + +/** + * 用户状态上下文 + * @author xxm + * @since 2023/11/25 + */ +@Getter +@Setter +@Accessors(chain = true) +public class UserStatus extends HashMap { + + /** 是否初始密码 */ + private boolean initialPassword; + + /** 密码是否过期 */ + private boolean expirePassword; + + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotEnableException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotEnableException.java new file mode 100644 index 000000000..d464478b7 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotEnableException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 应用被停用 + * + * @author xxm + * @since 2022/6/27 + */ +public class ApplicationNotEnableException extends BizException { + + public ApplicationNotEnableException() { + super("指定应用已被停用"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotFoundException.java new file mode 100644 index 000000000..3d56f966d --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ApplicationNotFoundException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 应用不存在 + * + * @author xxm + * @since 2022/6/27 + */ +public class ApplicationNotFoundException extends BizException { + + public ApplicationNotFoundException() { + super("未找到对应的应用"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotEnableException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotEnableException.java new file mode 100644 index 000000000..2df7c0a6c --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotEnableException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 终端方式被停用 + * + * @author xxm + * @since 2021/9/7 + */ +public class ClientNotEnableException extends BizException { + + public ClientNotEnableException() { + super("指定终端方式已被停用"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotFoundException.java new file mode 100644 index 000000000..bef5144fd --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/ClientNotFoundException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 终端不存在 + * + * @author xxm + * @since 2021/8/25 + */ +public class ClientNotFoundException extends BizException { + + public ClientNotFoundException() { + super("未找到对应的终端"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LoginFailureException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LoginFailureException.java similarity index 76% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LoginFailureException.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LoginFailureException.java index 35dab5b44..2f187bb4b 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LoginFailureException.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LoginFailureException.java @@ -1,13 +1,13 @@ -package cn.bootx.starter.auth.exception; +package cn.bootx.platform.starter.auth.exception; -import cn.bootx.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.BizException; import lombok.Getter; /** * 登录错误异常 * * @author xxm - * @date 2021/8/13 + * @since 2021/8/13 */ @Getter public class LoginFailureException extends BizException { diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LonginTypeNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LonginTypeNotFoundException.java new file mode 100644 index 000000000..53f3ce7d7 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/LonginTypeNotFoundException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 登录方式不存在 + * + * @author xxm + * @since 2022/11/6 + */ +public class LonginTypeNotFoundException extends BizException { + + public LonginTypeNotFoundException() { + super("未找到对应的登录方式"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/NotLoginException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/NotLoginException.java new file mode 100644 index 000000000..2e6d3e1e8 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/NotLoginException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +import static cn.bootx.platform.common.core.code.CommonErrorCode.AUTHENTICATION_FAIL; + +/** + * 未登录异常 + * + * @author xxm + * @since 2021/12/22 + */ +public class NotLoginException extends BizException { + + public NotLoginException(String msg) { + super(AUTHENTICATION_FAIL, msg); + } + + public NotLoginException() { + super(AUTHENTICATION_FAIL, "未登录"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/RouterCheckException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/RouterCheckException.java new file mode 100644 index 000000000..fb340cc70 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/RouterCheckException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.auth.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 路径检查异常 + * + * @author xxm + * @since 2021/12/21 + */ +public class RouterCheckException extends BizException { + + public RouterCheckException() { + super("没有对应请求路径的权限"); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/UserNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/UserNotFoundException.java similarity index 81% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/UserNotFoundException.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/UserNotFoundException.java index d3df4bf47..10accb686 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/UserNotFoundException.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/exception/UserNotFoundException.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.auth.exception; +package cn.bootx.platform.starter.auth.exception; /** * 用户未找到异常 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ public class UserNotFoundException extends LoginFailureException { diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginFailureHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginFailureHandler.java new file mode 100644 index 000000000..220e24d9e --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginFailureHandler.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.starter.auth.handler; + +import cn.bootx.platform.starter.auth.exception.LoginFailureException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 登录失败处理器接口 + * + * @author xxm + * @since 2021/8/13 + */ +public interface LoginFailureHandler { + + void onLoginFailure(HttpServletRequest request, HttpServletResponse response, LoginFailureException e); + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginSuccessHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginSuccessHandler.java new file mode 100644 index 000000000..a3c032a0c --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/LoginSuccessHandler.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.starter.auth.handler; + +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 登录成功处理器接口 + * + * @author xxm + * @since 2021/8/13 + */ +public interface LoginSuccessHandler { + + void onLoginSuccess(HttpServletRequest request, HttpServletResponse response, AuthInfoResult authInfoResult); + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/OpenIdAuthenticationHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/OpenIdAuthenticationHandler.java new file mode 100644 index 000000000..2e5c5c289 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/OpenIdAuthenticationHandler.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.starter.auth.handler; + +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * OpenID登录处理器 + * + * @author xxm + * @since 2021/7/30 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class OpenIdAuthenticationHandler { + + private final List openIdAuthentications; + + /** + * 认证 + */ + public @NotNull AuthInfoResult authentication(LoginAuthContext context) { + String clientCode = context.getAuthLoginType().getCode(); + return openIdAuthentications.stream() + .filter(o -> o.adaptation(clientCode)) + .findFirst() + .map(o -> o.authentication(context)) + .orElseThrow(() -> new LoginFailureException("未找到对应的终端认证器")); + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaExceptionHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaExceptionHandler.java similarity index 78% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaExceptionHandler.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaExceptionHandler.java index 606775b42..ea6e46f1d 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaExceptionHandler.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaExceptionHandler.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.auth.handler; +package cn.bootx.platform.starter.auth.handler; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; import cn.dev33.satoken.exception.SaTokenException; import lombok.extern.slf4j.Slf4j; import org.springframework.core.Ordered; @@ -14,7 +14,7 @@ * 过滤SaTokenException,需要运行在 RestExceptionHandler 之前 * * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ @Order(Ordered.LOWEST_PRECEDENCE - 1) @Slf4j diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaRouteHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaRouteHandler.java similarity index 81% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaRouteHandler.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaRouteHandler.java index 9001819e1..ee2729412 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/SaRouteHandler.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/handler/SaRouteHandler.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.auth.handler; +package cn.bootx.platform.starter.auth.handler; -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.starter.auth.authentication.RouterCheck; -import cn.bootx.starter.auth.exception.RouterCheckException; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.starter.auth.exception.RouterCheckException; +import cn.bootx.platform.common.spring.util.WebServletUtil; import cn.dev33.satoken.fun.SaFunction; import cn.dev33.satoken.router.SaRouter; import lombok.RequiredArgsConstructor; @@ -17,7 +17,7 @@ * 鉴权路由配置类 * * @author xxm - * @date 2021/8/2 + * @since 2021/8/2 */ @Slf4j @Component @@ -48,4 +48,4 @@ public SaFunction check(Object handler) { }; } -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAdminUserRouterCheck.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAdminUserRouterCheck.java new file mode 100644 index 000000000..a531f5cca --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAdminUserRouterCheck.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.starter.auth.impl; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * 超级管理员跳过各种限制 + * + * @author xxm + * @since 2022/5/27 + */ +@Component +@RequiredArgsConstructor +public class IgnoreAdminUserRouterCheck implements RouterCheck { + + private final AuthProperties authProperties; + + @Override + public boolean check(Object handler) { + if (authProperties.isEnableAdmin()) { + UserDetail userDetail = SecurityUtil.getCurrentUser().orElse(new UserDetail()); + return userDetail.isAdmin(); + } + return false; + } + +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAnnotationRouterCheck.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAnnotationRouterCheck.java similarity index 87% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAnnotationRouterCheck.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAnnotationRouterCheck.java index 169d6400d..e2d67e0e7 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAnnotationRouterCheck.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/impl/IgnoreAnnotationRouterCheck.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.auth.impl; +package cn.bootx.platform.starter.auth.impl; -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.starter.auth.authentication.RouterCheck; -import cn.bootx.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; @@ -12,7 +12,7 @@ * 注解方式过滤 * * @author xxm - * @date 2021/12/21 + * @since 2021/12/21 */ @Component public class IgnoreAnnotationRouterCheck implements RouterCheck { @@ -51,14 +51,14 @@ private boolean ignoreAuth(IgnoreAuth ignoreAuth) { if (Objects.isNull(ignoreAuth)) { return false; } - // 忽略鉴权 - if (ignoreAuth.ignore()) { - return true; - } // 只校验登录状态 if (ignoreAuth.login()) { return SecurityUtil.getCurrentUser().isPresent(); } + // 忽略鉴权 + if (ignoreAuth.ignore()) { + return true; + } return false; } diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenDaoRedis.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenDaoRedis.java similarity index 99% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenDaoRedis.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenDaoRedis.java index 04f3386a8..cd8029962 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenDaoRedis.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenDaoRedis.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.redis; +package cn.bootx.platform.starter.auth.redis; import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.util.SaFoxUtil; diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisConfiguration.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisConfiguration.java similarity index 98% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisConfiguration.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisConfiguration.java index fbe805181..b0152beb0 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisConfiguration.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisConfiguration.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.auth.redis; +package cn.bootx.platform.starter.auth.redis; -import cn.bootx.common.core.exception.FatalException; +import cn.bootx.platform.common.core.exception.FatalException; import cn.dev33.satoken.dao.SaTokenDao; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisProperties.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisProperties.java similarity index 92% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisProperties.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisProperties.java index dff83371c..096bca000 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/redis/SaTokenRedisProperties.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/redis/SaTokenRedisProperties.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.auth.redis; +package cn.bootx.platform.starter.auth.redis; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -7,7 +7,7 @@ * sa-token Redis 插件配置 * * @author xxm - * @date 2021/8/2 + * @since 2021/8/2 */ @ConfigurationProperties(prefix = "sa-token.plugins.redis") public class SaTokenRedisProperties { diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/RouterCheck.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/RouterCheck.java similarity index 77% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/RouterCheck.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/RouterCheck.java index 01e2ec861..2bc2ca9d6 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/RouterCheck.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/RouterCheck.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.auth.authentication; +package cn.bootx.platform.starter.auth.service; /** * 路由拦截检查 * * @author xxm - * @date 2021/12/21 + * @since 2021/12/21 */ public interface RouterCheck { diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/UserStatusService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/UserStatusService.java new file mode 100644 index 000000000..a44f676d2 --- /dev/null +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/service/UserStatusService.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.starter.auth.service; + +import cn.bootx.platform.starter.auth.entity.UserStatus; + +/** + * 用户状态服务 + * @author xxm + * @since 2023/11/25 + */ +public interface UserStatusService { + + /** + * 获取用户状态 + */ + UserStatus getUserStatus(); +} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/PasswordEncoder.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/PasswordEncoder.java similarity index 91% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/PasswordEncoder.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/PasswordEncoder.java index a9552dfca..e498e3596 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/PasswordEncoder.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/PasswordEncoder.java @@ -1,19 +1,17 @@ -package cn.bootx.starter.auth.util; +package cn.bootx.platform.starter.auth.util; -import cn.bootx.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; import cn.dev33.satoken.secure.SaSecureUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.Objects; - /** * 密码编码器 * * @author xxm - * @date 2021/7/30 + * @since 2021/7/30 */ @Slf4j @Component diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/SecurityUtil.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/SecurityUtil.java similarity index 85% rename from bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/SecurityUtil.java rename to bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/SecurityUtil.java index 724833933..547395c5e 100644 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/util/SecurityUtil.java +++ b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/platform/starter/auth/util/SecurityUtil.java @@ -1,9 +1,9 @@ -package cn.bootx.starter.auth.util; +package cn.bootx.platform.starter.auth.util; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.starter.auth.cache.SessionCacheLocal; -import cn.bootx.starter.auth.exception.NotLoginException; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.starter.auth.cache.SessionCacheLocal; +import cn.bootx.platform.starter.auth.exception.NotLoginException; import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.DesensitizedUtil; @@ -17,7 +17,7 @@ * 安全工具类 * * @author xxm - * @date 2021/8/2 + * @since 2021/8/2 */ @UtilityClass public class SecurityUtil { @@ -78,12 +78,12 @@ public String getClient(HttpServletRequest request) { * 获取当前用户,无异常, 使用线程缓存来减少redis的访问频率 */ private Optional getCurrentUser0() { - Optional userDetail = Optional.ofNullable(SessionCacheLocal.get()); + Optional userDetail = Optional.ofNullable(SessionCacheLocal.getUserInfo()); if (!userDetail.isPresent()) { try { userDetail = Optional.ofNullable(StpUtil.getSession()) .map(saSession -> saSession.getModel(CommonCode.USER, UserDetail.class)); - SessionCacheLocal.put(userDetail.orElse(null)); + SessionCacheLocal.putUserInfo(userDetail.orElse(null)); } catch (SaTokenException e) { userDetail = Optional.empty(); diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/AbstractAuthentication.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/AbstractAuthentication.java deleted file mode 100644 index 04cdb99ee..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/AbstractAuthentication.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.bootx.starter.auth.authentication; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.entity.AuthClient; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; - -import javax.validation.constraints.NotNull; -import java.util.Objects; - -/** - * 抽象认证器 - * - * @author xxm - * @date 2021/7/30 - */ -public interface AbstractAuthentication { - - /** - * 获取终端编码 - */ - String getLoginType(); - - /** - * 登录类型是否匹配 - */ - default boolean adaptation(String loginType) { - return Objects.equals(getLoginType(), loginType); - } - - /** - * 认证前操作 - */ - default void authenticationBefore(LoginAuthContext context) { - - } - - /** - * 尝试认证, 必须重写 - */ - @NotNull - AuthInfoResult attemptAuthentication(LoginAuthContext context); - - /** - * 认证后处理 - */ - default void authenticationAfter(AuthInfoResult authInfoResult, LoginAuthContext context) { - - } - - /** - * 认证流程 - */ - default AuthInfoResult authentication(LoginAuthContext context) { - this.authenticationBefore(context); - // 认证逻辑 - AuthInfoResult authInfoResult = this.attemptAuthentication(context); - AuthClient authClient = context.getAuthClient(); - // 添加用户信息到上下文中 - UserDetail userDetail = authInfoResult.getUserDetail(); - context.setUserDetail(userDetail); - - // 判断是否开启了超级管理员 - AuthProperties authProperties = context.getAuthProperties(); - if (!authProperties.isEnableAdmin() && userDetail.isAdmin()) { - throw new LoginFailureException("未开启超级管理员权限"); - } - // 管理员跳过各种限制 - if (!userDetail.isAdmin()) { - // 判断用户是否拥有认证应用的权限 - if (!userDetail.getAppIds().contains(authClient.getId())) { - throw new LoginFailureException("该用户不拥有该终端的权限"); - } - } - authenticationAfter(authInfoResult, context); - return authInfoResult; - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthClientService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthClientService.java deleted file mode 100644 index 33e04d7a0..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthClientService.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.starter.auth.authentication; - -import cn.bootx.starter.auth.entity.AuthClient; - -/** - * 获取认证终端 - * - * @author xxm - * @date 2022/6/27 - */ -public interface GetAuthClientService { - - /** - * 认证应用 - */ - AuthClient getAuthApplication(String authApplicationCode); - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthLoginTypeService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthLoginTypeService.java deleted file mode 100644 index 386d868c0..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/GetAuthLoginTypeService.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.starter.auth.authentication; - -import cn.bootx.starter.auth.entity.AuthLoginType; - -/** - * 获取认证登录方式对象服务 - * - * @author xxm - * @date 2021/8/25 - */ -public interface GetAuthLoginTypeService { - - /** - * @param loginType 登录方式编码 - */ - AuthLoginType getAuthLoginType(String loginType); - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/UsernamePasswordAuthentication.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/UsernamePasswordAuthentication.java deleted file mode 100644 index f73b39228..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/authentication/UsernamePasswordAuthentication.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.starter.auth.authentication; - -import cn.bootx.starter.auth.code.AuthLoginTypeCode; - -/** - * 用户密码认证方式 - * - * @author xxm - * @date 2021/7/30 - */ -public interface UsernamePasswordAuthentication extends AbstractAuthentication { - - /** - * 账密登录 - */ - @Override - default String getLoginType() { - return AuthLoginTypeCode.PASSWORD; - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheLocal.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheLocal.java deleted file mode 100644 index d44a683dd..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/cache/SessionCacheLocal.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.starter.auth.cache; - -import cn.bootx.common.core.entity.UserDetail; -import com.alibaba.ttl.TransmittableThreadLocal; - -/** - * 会话缓存线程存储 - * - * @author xxm - * @date 2022/1/8 - */ -public final class SessionCacheLocal { - - private static final ThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>(); - - /** - * TTL 设置数据 - */ - public static void put(UserDetail userDetail) { - THREAD_LOCAL.set(userDetail); - } - - /** - * 获取TTL中的数据 - */ - public static UserDetail get() { - return THREAD_LOCAL.get(); - } - - /** - * 清除 - */ - public static void clear() { - THREAD_LOCAL.remove(); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/controller/OnlineUserController.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/controller/OnlineUserController.java deleted file mode 100644 index 8f0f8244d..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/controller/OnlineUserController.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.bootx.starter.auth.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.auth.online.OnlineUserDto; -import cn.bootx.starter.auth.online.OnlineUserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -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; - -@Tag(name = "在线用户") -@RestController -@RequestMapping("/user/online") -@RequiredArgsConstructor -public class OnlineUserController { - - private final OnlineUserService onlineUserService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam) { - return Res.ok(onlineUserService.page(pageParam)); - } - - @Operation(summary = "获取单条") - @GetMapping("/findBySessionId") - public ResResult findBySessionId(String sessionId) { - return Res.ok(onlineUserService.findBySessionId(sessionId)); - } - - @Operation(summary = "踢人下线") - @PostMapping("/logoutByUserId") - public ResResult logoutByUserId(Long userId) { - onlineUserService.logoutByUserId(userId); - return Res.ok(); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthInfoResult.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthInfoResult.java deleted file mode 100644 index 4fa60a364..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/entity/AuthInfoResult.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.starter.auth.entity; - -import cn.bootx.common.core.entity.UserDetail; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 认证返回结果 - * - * @author xxm - * @date 2021/7/30 - */ -@Data -@Accessors(chain = true) -public class AuthInfoResult { - - /** 用户id */ - private Object id; - - /** 认证终端(例如管理端/小程序/h5等) */ - private String client = ""; - - /** 登录方式(例如web/开放平台/app等) */ - private String loginType = ""; - - /** 用户对象 */ - private UserDetail userDetail; - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotEnableException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotEnableException.java deleted file mode 100644 index 087fa7a98..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotEnableException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 应用被停用 - * - * @author xxm - * @date 2022/6/27 - */ -public class ApplicationNotEnableException extends BizException { - - public ApplicationNotEnableException() { - super("指定应用已被停用"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotFoundException.java deleted file mode 100644 index ff3264f5a..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ApplicationNotFoundException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 应用不存在 - * - * @author xxm - * @date 2022/6/27 - */ -public class ApplicationNotFoundException extends BizException { - - public ApplicationNotFoundException() { - super("未找到对应的应用"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotEnableException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotEnableException.java deleted file mode 100644 index 98586cb89..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotEnableException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 终端方式被停用 - * - * @author xxm - * @date 2021/9/7 - */ -public class ClientNotEnableException extends BizException { - - public ClientNotEnableException() { - super("指定终端方式已被停用"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotFoundException.java deleted file mode 100644 index 601a6ddcb..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/ClientNotFoundException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 终端不存在 - * - * @author xxm - * @date 2021/8/25 - */ -public class ClientNotFoundException extends BizException { - - public ClientNotFoundException() { - super("未找到对应的终端"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LonginTypeNotFoundException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LonginTypeNotFoundException.java deleted file mode 100644 index ba3dc86a5..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/LonginTypeNotFoundException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 登录方式不存在 - * - * @author xxm - * @date 2022/11/6 - */ -public class LonginTypeNotFoundException extends BizException { - - public LonginTypeNotFoundException() { - super("未找到对应的登录方式"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/NotLoginException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/NotLoginException.java deleted file mode 100644 index 4c6d1c8bb..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/NotLoginException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -import static cn.bootx.common.core.code.CommonErrorCode.AUTHENTICATION_FAIL; - -/** - * 未登录异常 - * - * @author xxm - * @date 2021/12/22 - */ -public class NotLoginException extends BizException { - - public NotLoginException(String msg) { - super(AUTHENTICATION_FAIL, msg); - } - - public NotLoginException() { - super(AUTHENTICATION_FAIL, "未登录"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/RouterCheckException.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/RouterCheckException.java deleted file mode 100644 index 13779e7b7..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/exception/RouterCheckException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.auth.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 路径检查异常 - * - * @author xxm - * @date 2021/12/21 - */ -public class RouterCheckException extends BizException { - - public RouterCheckException() { - super("没有对应请求路径的权限"); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginFailureHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginFailureHandler.java deleted file mode 100644 index f48b84adc..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginFailureHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.starter.auth.handler; - -import cn.bootx.starter.auth.exception.LoginFailureException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * 登录失败处理器 - * - * @author xxm - * @date 2021/8/13 - */ -public interface LoginFailureHandler { - - void onLoginFailure(HttpServletRequest request, HttpServletResponse response, LoginFailureException e); - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginSuccessHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginSuccessHandler.java deleted file mode 100644 index afc432a25..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/LoginSuccessHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.starter.auth.handler; - -import cn.bootx.starter.auth.entity.AuthInfoResult; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * 登录成功处理器 - * - * @author xxm - * @date 2021/8/13 - */ -public interface LoginSuccessHandler { - - void onLoginSuccess(HttpServletRequest request, HttpServletResponse response, AuthInfoResult authInfoResult); - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/OpenIdAuthenticationHandler.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/OpenIdAuthenticationHandler.java deleted file mode 100644 index 63091723b..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/handler/OpenIdAuthenticationHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.starter.auth.handler; - -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * OpenID登录处理器 - * - * @author xxm - * @date 2021/7/30 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class OpenIdAuthenticationHandler { - - private final List openIdAuthentications; - - /** - * 认证 - */ - public @NotNull AuthInfoResult authentication(LoginAuthContext context) { - String clientCode = context.getAuthLoginType().getCode(); - return openIdAuthentications.stream() - .filter(o -> o.adaptation(clientCode)) - .findFirst() - .map(o -> o.authentication(context)) - .orElseThrow(() -> new LoginFailureException("未找到对应的终端认证器")); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAdminUserRouterCheck.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAdminUserRouterCheck.java deleted file mode 100644 index 2a1d18090..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/impl/IgnoreAdminUserRouterCheck.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.starter.auth.impl; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.starter.auth.authentication.RouterCheck; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -/** - * 超级管理员跳过各种限制 - * - * @author xxm - * @date 2022/5/27 - */ -@Component -@RequiredArgsConstructor -public class IgnoreAdminUserRouterCheck implements RouterCheck { - - private final AuthProperties authProperties; - - @Override - public int sortNo() { - return 0; - } - - @Override - public boolean check(Object handler) { - if (authProperties.isEnableAdmin()) { - UserDetail userDetail = SecurityUtil.getCurrentUser().orElse(new UserDetail()); - return userDetail.isAdmin(); - } - return false; - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserDto.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserDto.java deleted file mode 100644 index cdfdea37a..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserDto.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.bootx.starter.auth.online; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * @author xxm - * @date 2021/9/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "在线用户") -public class OnlineUserDto { - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "会话id") - private String sessionId; - - @Schema(description = "用户名称") - private String name; - - @Schema(description = "用户账号") - private String userName; - - @Schema(description = "创建时间") - private LocalDateTime creationTime; - - @Schema(description = "剩余有效时间(秒)") - private Long timeout; - - @Schema(description = "Token列表") - private List tokenSigns; - - @Data - @Accessors(chain = true) - @Schema(title = "Token签名") - public static class TokenSign { - - @Schema(description = "token值") - private String value; - - @Schema(description = "所在设备标识") - private String device; - - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserService.java b/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserService.java deleted file mode 100644 index 42dba9fe8..000000000 --- a/bootx-common-starters/common-starter-auth/src/main/java/cn/bootx/starter/auth/online/OnlineUserService.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.bootx.starter.auth.online; - -import cn.bootx.common.core.annotation.OperateLog; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.dev33.satoken.session.SaSession; -import cn.dev33.satoken.stp.StpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * 在线用户 - * - * @author xxm - * @date 2021/9/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class OnlineUserService { - - @SuppressWarnings("FieldCanBeLocal") - private final String SessionPattern = "AccessToken:login:session:*"; - - private final StringRedisTemplate stringRedisTemplate; - - private final RedisTemplate objectRedisTemplate; - - /** - * 分页查询 - */ - public PageResult page(PageParam pageParam) { - ArrayList keys = Optional.ofNullable(stringRedisTemplate.keys(SessionPattern)) - .map(ArrayList::new) - .orElseGet(ArrayList::new); - List list = new ArrayList<>(); - int start = pageParam.start(); - int end = pageParam.end(); - for (int i = start; i < end; i++) { - if (i >= keys.size()) { - break; - } - else { - list.add(keys.get(i)); - } - } - List onlineUsers = Optional.ofNullable(objectRedisTemplate.opsForValue().multiGet(list)) - .orElseGet(ArrayList::new) - .stream() - .map(this::convert) - .collect(Collectors.toList()); - return new PageResult().setCurrent(pageParam.getCurrent()) - .setSize(pageParam.getSize()) - .setTotal(keys.size()) - .setRecords(onlineUsers); - } - - /** - * 获取单条 - */ - public OnlineUserDto findBySessionId(String sessionId) { - SaSession saSession = Optional.ofNullable(objectRedisTemplate.opsForValue().get(sessionId)) - .orElseThrow(() -> new BizException("会话不存在")); - return this.convert(saSession); - } - - /** - * 转换if在线用户对象 - */ - private OnlineUserDto convert(SaSession saSession) { - UserDetail userDetail = saSession.getModel(CommonCode.USER, UserDetail.class); - List tokenSignList = saSession.getTokenSignList() - .stream() - .map(tokenSign -> new OnlineUserDto.TokenSign().setDevice(tokenSign.getDevice()) - .setValue(tokenSign.getValue())) - .collect(Collectors.toList()); - - return new OnlineUserDto().setUserId(userDetail.getId()) - .setUserName(userDetail.getUsername()) - .setName(userDetail.getName()) - .setTimeout(saSession.getTimeout()) - .setCreationTime(LocalDateTimeUtil.of(saSession.getCreateTime())) - .setSessionId(saSession.getId()) - .setTokenSigns(tokenSignList); - } - - /** - * 下线 - */ - @OperateLog(title = "强退用户", businessType = OperateLog.BusinessType.FORCE, saveParam = true) - public void logoutByUserId(Long userId) { - StpUtil.kickout(userId); - } - -} diff --git a/bootx-common-starters/common-starter-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index f6366a5f7..4684eaf2d 100644 --- a/bootx-common-starters/common-starter-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-common-starters/common-starter-auth/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.starter.auth.AuthAutoConfiguration +cn.bootx.platform.starter.auth.AuthAutoConfiguration diff --git a/bootx-common-starters/common-starter-code-gen/pom.xml b/bootx-common-starters/common-starter-code-gen/pom.xml index abec4d99d..18566bc6f 100644 --- a/bootx-common-starters/common-starter-code-gen/pom.xml +++ b/bootx-common-starters/common-starter-code-gen/pom.xml @@ -5,7 +5,7 @@ cn.bootx.platform bootx-common-starters - 1.2.3 + 1.3.6.2 4.0.0 diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/CodeGenAutoConfiguration.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/CodeGenAutoConfiguration.java similarity index 85% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/CodeGenAutoConfiguration.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/CodeGenAutoConfiguration.java index 4c92f53c6..9c1fb3e3a 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/CodeGenAutoConfiguration.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/CodeGenAutoConfiguration.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen; +package cn.bootx.platform.starter.code.gen; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -9,7 +9,7 @@ * 代码生成 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @ComponentScan @MapperScan(annotationClass = Mapper.class) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenColumnTypeEnum.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenColumnTypeEnum.java similarity index 93% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenColumnTypeEnum.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenColumnTypeEnum.java index d22491968..de604375f 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenColumnTypeEnum.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenColumnTypeEnum.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.code.gen.code; +package cn.bootx.platform.starter.code.gen.code; -import cn.bootx.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.BizException; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,7 +11,7 @@ * 数据库字段类型与java类型映射 * * @author xxm - * @date 2022/2/17 + * @since 2022/2/17 */ @Getter @AllArgsConstructor diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenTemplateVmEnum.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenTemplateVmEnum.java similarity index 82% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenTemplateVmEnum.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenTemplateVmEnum.java index 2beec1cde..5cd52a82d 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/code/CodeGenTemplateVmEnum.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/code/CodeGenTemplateVmEnum.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.code.gen.code; +package cn.bootx.platform.starter.code.gen.code; -import cn.bootx.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.BizException; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,7 +11,7 @@ * 代码生成模板枚举 * * @author xxm - * @date 2022/2/17 + * @since 2022/2/17 */ @Getter @AllArgsConstructor @@ -25,9 +25,6 @@ public enum CodeGenTemplateVmEnum { DTO("dto", "codegen/template/java/dto.java.vm", "Dto.java"), PARAM("param", "codegen/template/java/param.java.vm", "Param.java"), CONVERT("convert", "codegen/template/java/convert.java.vm", "Convert.java"), - API_V2("api_v2", "codegen/template/vue2/api.js.vm", ".js"), - LIST_V2("list_v2", "codegen/template/vue2/list.vue.vm", "List.vue"), - EDIT_V2("edit_v2", "codegen/template/vue2/edit.vue.vm", "Edit.vue"), API_V3("api_v3", "codegen/template/vue3/api.ts.vm", ".api.ts"), LIST_V3("list_v3", "codegen/template/vue3/list.vue.vm", "List.vue"), EDIT_V3("edit_v3", "codegen/template/vue3/edit.vue.vm", "Edit.vue"); diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/CodeGeneratorController.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/CodeGeneratorController.java new file mode 100644 index 000000000..a463ea383 --- /dev/null +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/CodeGeneratorController.java @@ -0,0 +1,45 @@ +package cn.bootx.platform.starter.code.gen.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.starter.code.gen.dto.CodeGenPreview; +import cn.bootx.platform.starter.code.gen.param.CodeGenParam; +import cn.bootx.platform.starter.code.gen.service.CodeGeneratorService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 代码生成 + * + * @author xxm + * @since 2022/2/17 + */ +@Tag(name = "代码生成") +@RestController +@RequestMapping("/gen/code") +@RequiredArgsConstructor +public class CodeGeneratorController { + + private final CodeGeneratorService generatorService; + + @Operation(summary = "预览生成代码") + @PostMapping("/codeGenPreview") + public ResResult> codeGenPreview(@RequestBody CodeGenParam param) { + return Res.ok(generatorService.codeGenPreview(param)); + } + + @Operation(summary = "下载生成代码") + @PostMapping("/genCodeZip") + public ResponseEntity genCodeZip(@RequestBody CodeGenParam param) { + return generatorService.genCodeZip(param); + } + +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/DatabaseTableController.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/DatabaseTableController.java new file mode 100644 index 000000000..dad28571c --- /dev/null +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/controller/DatabaseTableController.java @@ -0,0 +1,67 @@ +package cn.bootx.platform.starter.code.gen.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.code.gen.dto.TableGenParamDto; +import cn.bootx.platform.starter.code.gen.entity.DatabaseColumn; +import cn.bootx.platform.starter.code.gen.entity.DatabaseTable; +import cn.bootx.platform.starter.code.gen.service.DatabaseTableService; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author xxm + * @since 2022/1/27 + */ +@Tag(name = "数据库表信息") +@RestController +@RequestMapping("/gen/table") +@RequiredArgsConstructor +public class DatabaseTableController { + + private final DatabaseTableService databaseTableService; + + @Operation(summary = "表列表") + @GetMapping("/findAll") + public ResResult> findAll() { + return Res.ok(databaseTableService.findAll()); + } + + @Operation(summary = "表列表分页") + @GetMapping("/page") + public ResResult> page(@ParameterObject PageParam pageParam, + @ParameterObject DatabaseTable param, + @ParameterObject String dataSourceCode) + { + return Res.ok(databaseTableService.page(pageParam, param,dataSourceCode)); + } + + @Operation(summary = "获取表信息") + @GetMapping("/findByTableName") + public ResResult findByTableName(String tableName) { + return Res.ok(databaseTableService.findByTableName(tableName)); + } + + @Operation(summary = "获取数据表行信息") + @GetMapping("/findColumnByTableName") + public ResResult> findColumnByTableName(String tableName) { + return Res.ok(databaseTableService.findColumnByTableName(tableName)); + } + + @Operation(summary = "获取表相关的代码生成参数信息") + @GetMapping("/getTableGenParam") + public ResResult getTableGenParam(String dataSourceCode, String tableName) { + return Res.ok(databaseTableService.getTableGenParam(dataSourceCode,tableName)); + } + +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dao/DatabaseTableMapper.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dao/DatabaseTableMapper.java similarity index 90% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dao/DatabaseTableMapper.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dao/DatabaseTableMapper.java index 9dadfd78f..9cbdd36d2 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dao/DatabaseTableMapper.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dao/DatabaseTableMapper.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.code.gen.dao; +package cn.bootx.platform.starter.code.gen.dao; -import cn.bootx.starter.code.gen.entity.DatabaseColumn; -import cn.bootx.starter.code.gen.entity.DatabaseTable; +import cn.bootx.platform.starter.code.gen.entity.DatabaseColumn; +import cn.bootx.platform.starter.code.gen.entity.DatabaseTable; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -16,7 +16,7 @@ * 表信息查询 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @Mapper public interface DatabaseTableMapper { diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/domain/CodeGenData.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/domain/CodeGenData.java similarity index 95% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/domain/CodeGenData.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/domain/CodeGenData.java index b0c7fd052..65fe4a963 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/domain/CodeGenData.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/domain/CodeGenData.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.domain; +package cn.bootx.platform.starter.code.gen.domain; import cn.hutool.core.date.DateUtil; import lombok.Data; @@ -11,7 +11,7 @@ * 代码生成所需的参数数据 * * @author xxm - * @date 2022/8/1 + * @since 2022/8/1 */ @Data @Accessors(chain = true) @@ -72,7 +72,7 @@ public class CodeGenData { * 行信息 * * @author xxm - * @date 2022/8/1 + * @since 2022/8/1 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/CodeGenPreview.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/CodeGenPreview.java similarity index 85% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/CodeGenPreview.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/CodeGenPreview.java index b597718f9..3c7fdc888 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/CodeGenPreview.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/CodeGenPreview.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.dto; +package cn.bootx.platform.starter.code.gen.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 代码预览 * * @author xxm - * @date 2022/2/18 + * @since 2022/2/18 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/TableGenParamDto.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/TableGenParamDto.java similarity index 87% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/TableGenParamDto.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/TableGenParamDto.java index 6ea2fdfe3..629e80151 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/dto/TableGenParamDto.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/dto/TableGenParamDto.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.dto; +package cn.bootx.platform.starter.code.gen.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 代码生成相关参数信息 * * @author xxm - * @date 2022/8/2 + * @since 2022/8/2 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseColumn.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseColumn.java similarity index 84% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseColumn.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseColumn.java index 4c9f44bad..716210b9d 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseColumn.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseColumn.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.entity; +package cn.bootx.platform.starter.code.gen.entity; import lombok.Data; import lombok.experimental.Accessors; @@ -7,7 +7,7 @@ * 数据库行信息 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseTable.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseTable.java similarity index 87% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseTable.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseTable.java index ed0d0f76f..86ccf142b 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/DatabaseTable.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/entity/DatabaseTable.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.entity; +package cn.bootx.platform.starter.code.gen.entity; import lombok.Data; import lombok.experimental.Accessors; @@ -10,7 +10,7 @@ * 表信息 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/param/CodeGenParam.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/param/CodeGenParam.java similarity index 89% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/param/CodeGenParam.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/param/CodeGenParam.java index 4e53d1893..aa3ac0c40 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/param/CodeGenParam.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/param/CodeGenParam.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.param; +package cn.bootx.platform.starter.code.gen.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,13 +8,16 @@ * 代码生成参数 * * @author xxm - * @date 2022/2/18 + * @since 2022/2/18 */ @Data @Accessors(chain = true) @Schema(title = "代码生成参数") public class CodeGenParam { + @Schema(description = "数据库源") + private String dataSourceCode; + @Schema(description = "表名") private String tableName; diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/CodeGeneratorService.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/CodeGeneratorService.java similarity index 88% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/CodeGeneratorService.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/CodeGeneratorService.java index 31b8f2adf..9d337349f 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/CodeGeneratorService.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/CodeGeneratorService.java @@ -1,20 +1,21 @@ -package cn.bootx.starter.code.gen.service; +package cn.bootx.platform.starter.code.gen.service; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.starter.code.gen.code.CodeGenColumnTypeEnum; -import cn.bootx.starter.code.gen.code.CodeGenTemplateVmEnum; -import cn.bootx.starter.code.gen.domain.CodeGenData; -import cn.bootx.starter.code.gen.domain.CodeGenData.CodeGenColumnData; -import cn.bootx.starter.code.gen.dto.CodeGenPreview; -import cn.bootx.starter.code.gen.entity.DatabaseColumn; -import cn.bootx.starter.code.gen.entity.DatabaseTable; -import cn.bootx.starter.code.gen.param.CodeGenParam; -import cn.bootx.starter.code.gen.util.CodeGenUtil; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.starter.code.gen.code.CodeGenColumnTypeEnum; +import cn.bootx.platform.starter.code.gen.code.CodeGenTemplateVmEnum; +import cn.bootx.platform.starter.code.gen.domain.CodeGenData; +import cn.bootx.platform.starter.code.gen.domain.CodeGenData.CodeGenColumnData; +import cn.bootx.platform.starter.code.gen.dto.CodeGenPreview; +import cn.bootx.platform.starter.code.gen.entity.DatabaseColumn; +import cn.bootx.platform.starter.code.gen.entity.DatabaseTable; +import cn.bootx.platform.starter.code.gen.param.CodeGenParam; +import cn.bootx.platform.starter.code.gen.util.CodeGenUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.NamingCase; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DS; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -40,7 +41,7 @@ * 代码生成模板 * * @author xxm - * @date 2022/1/27 + * @since 2022/1/27 */ @Slf4j @Service @@ -135,6 +136,7 @@ private Map getCodeGenInfo(CodeGenParam codeGenParam) { * 生成代码文件压缩包 */ @SneakyThrows + @DS("#codeGenParam.getDataSourceCode()") public ResponseEntity genCodeZip(CodeGenParam codeGenParam) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/DatabaseTableService.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/DatabaseTableService.java new file mode 100644 index 000000000..b44c7b681 --- /dev/null +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/service/DatabaseTableService.java @@ -0,0 +1,86 @@ +package cn.bootx.platform.starter.code.gen.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.code.gen.dao.DatabaseTableMapper; +import cn.bootx.platform.starter.code.gen.dto.TableGenParamDto; +import cn.bootx.platform.starter.code.gen.entity.DatabaseColumn; +import cn.bootx.platform.starter.code.gen.entity.DatabaseTable; +import cn.bootx.platform.starter.code.gen.util.CodeGenUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.util.List; + +/** + * 数据库信息服务类型 + * + * @author xxm + * @since 2022/1/27 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DatabaseTableService { + + private final DatabaseTableMapper databaseTableMapper; + + /** + * 查询全部 + */ + public List findAll() { + QueryWrapper wrapper = new QueryWrapper<>(); + return databaseTableMapper.findAll(wrapper); + } + + /** + * 分页 + */ + @DS("#dataSourceName") + public PageResult page(PageParam pageParam, DatabaseTable param, String dataSourceName) { + val mpPage = MpUtil.getMpPage(pageParam, DatabaseTable.class); + QueryWrapper wrapper = new QueryWrapper<>(); + + wrapper.like(StrUtil.isNotBlank(param.getTableName()), DatabaseTable.Fields.tableName, param.getTableName()) + .like(StrUtil.isNotBlank(param.getTableComment()), DatabaseTable.Fields.tableComment, + param.getTableComment()) + .orderByDesc(DatabaseTable.Fields.createTime, DatabaseTable.Fields.tableName); + + return MpUtil.convert2PageResult(databaseTableMapper.page(mpPage, wrapper)) ; + } + + /** + * 获取表信息 + */ + public DatabaseTable findByTableName(String tableName) { + return databaseTableMapper.findByTableName(tableName).orElseThrow(DataNotExistException::new); + } + + /** + * 获取数据表列信息 + */ + public List findColumnByTableName(String tableName) { + return databaseTableMapper.findColumnByTableName(tableName); + } + + /** + * 获取表相关的代码生成参数信息 + */ + @DS("#dataSourceCode") + public TableGenParamDto getTableGenParam(String dataSourceCode, String tableName) { + DatabaseTable databaseTable = this.findByTableName(tableName); + String entityName = CodeGenUtil.tableToJava(databaseTable.getTableName()); + return new TableGenParamDto().setEntityName(entityName).setModule(entityName.toLowerCase()); + } + +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/util/CodeGenUtil.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/util/CodeGenUtil.java similarity index 85% rename from bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/util/CodeGenUtil.java rename to bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/util/CodeGenUtil.java index 8af64e7b7..a394a6829 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/util/CodeGenUtil.java +++ b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/platform/starter/code/gen/util/CodeGenUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.code.gen.util; +package cn.bootx.platform.starter.code.gen.util; import cn.hutool.core.text.NamingCase; import lombok.experimental.UtilityClass; @@ -7,7 +7,7 @@ * 代码生成工具类 * * @author xxm - * @date 2022/8/2 + * @since 2022/8/2 */ @UtilityClass public class CodeGenUtil { diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/CodeGeneratorController.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/CodeGeneratorController.java deleted file mode 100644 index 75eda6332..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/CodeGeneratorController.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.starter.code.gen.controller; - -import cn.bootx.common.core.function.SystemKeyValueService; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.starter.code.gen.dto.CodeGenPreview; -import cn.bootx.starter.code.gen.param.CodeGenParam; -import cn.bootx.starter.code.gen.service.CodeGeneratorService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * 代码生成 - * - * @author xxm - * @date 2022/2/17 - */ -@Tag(name = "代码生成") -@RestController -@RequestMapping("/gen/code") -@RequiredArgsConstructor -public class CodeGeneratorController { - - private final CodeGeneratorService generatorService; - - private final SystemKeyValueService systemKeyValueService; - - @Operation(summary = "预览生成代码") - @PostMapping("/codeGenPreview") - public ResResult> codeGenPreview(@RequestBody CodeGenParam param) { - return Res.ok(generatorService.codeGenPreview(param)); - } - - @Operation(summary = "下载生成代码") - @PostMapping("/genCodeZip") - public ResponseEntity genCodeZip(@RequestBody CodeGenParam param) { - return generatorService.genCodeZip(param); - } - -} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/DatabaseTableController.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/DatabaseTableController.java deleted file mode 100644 index 38702e623..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/controller/DatabaseTableController.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.bootx.starter.code.gen.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.code.gen.dto.TableGenParamDto; -import cn.bootx.starter.code.gen.entity.DatabaseColumn; -import cn.bootx.starter.code.gen.entity.DatabaseTable; -import cn.bootx.starter.code.gen.service.DatabaseTableService; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * @author xxm - * @date 2022/1/27 - */ -@Tag(name = "数据库表信息") -@RestController -@RequestMapping("/gen/table") -@RequiredArgsConstructor -public class DatabaseTableController { - - private final DatabaseTableService databaseTableService; - - @Operation(summary = "表列表") - @GetMapping("/findAll") - public ResResult> findAll() { - return Res.ok(databaseTableService.findAll()); - } - - @Operation(summary = "表列表分页") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject DatabaseTable param) { - return Res.ok(databaseTableService.page(pageParam, param)); - } - - @Operation(summary = "获取表信息") - @GetMapping("/findByTableName") - public ResResult findByTableName(String tableName) { - return Res.ok(databaseTableService.findByTableName(tableName)); - } - - @Operation(summary = "获取数据表行信息") - @GetMapping("/findColumnByTableName") - public ResResult> findColumnByTableName(String tableName) { - return Res.ok(databaseTableService.findColumnByTableName(tableName)); - } - - @Operation(summary = "获取表相关的代码生成参数信息") - @GetMapping("/getTableGenParam") - public ResResult getTableGenParam(String tableName) { - return Res.ok(databaseTableService.getTableGenParam(tableName)); - } - -} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/CodeGenConfig.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/CodeGenConfig.java deleted file mode 100644 index 69f911cde..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/entity/CodeGenConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.starter.code.gen.entity; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 代码生成配置 - * - * @author xxm - * @date 2022/6/13 - */ -@Data -@Accessors(chain = true) -@Schema(title = "代码生成配置") -public class CodeGenConfig { - -} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/DatabaseTableService.java b/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/DatabaseTableService.java deleted file mode 100644 index 8716ba818..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/java/cn/bootx/starter/code/gen/service/DatabaseTableService.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.bootx.starter.code.gen.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.code.gen.dao.DatabaseTableMapper; -import cn.bootx.starter.code.gen.dto.TableGenParamDto; -import cn.bootx.starter.code.gen.entity.DatabaseColumn; -import cn.bootx.starter.code.gen.entity.DatabaseTable; -import cn.bootx.starter.code.gen.util.CodeGenUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * 数据库信息服务类型 - * - * @author xxm - * @date 2022/1/27 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DatabaseTableService { - - private final DatabaseTableMapper databaseTableMapper; - - /** - * 查询全部 - */ - public List findAll() { - QueryWrapper wrapper = new QueryWrapper<>(); - return databaseTableMapper.findAll(wrapper); - } - - /** - * 分页 - */ - public Page page(PageParam pageParam, DatabaseTable param) { - val mpPage = MpUtil.getMpPage(pageParam, DatabaseTable.class); - QueryWrapper wrapper = new QueryWrapper<>(); - - wrapper.like(StrUtil.isNotBlank(param.getTableName()), DatabaseTable.Fields.tableName, param.getTableName()) - .like(StrUtil.isNotBlank(param.getTableComment()), DatabaseTable.Fields.tableComment, - param.getTableComment()) - .orderByDesc(DatabaseTable.Fields.createTime, DatabaseTable.Fields.tableName); - return databaseTableMapper.page(mpPage, wrapper); - } - - /** - * 获取表信息 - */ - public DatabaseTable findByTableName(String tableName) { - return databaseTableMapper.findByTableName(tableName).orElseThrow(DataNotExistException::new); - } - - /** - * 获取数据表列信息 - */ - public List findColumnByTableName(String tableName) { - return databaseTableMapper.findColumnByTableName(tableName); - } - - /** - * 获取表相关的代码生成参数信息 - */ - public TableGenParamDto getTableGenParam(String tableName) { - DatabaseTable databaseTable = this.findByTableName(tableName); - String entityName = CodeGenUtil.tableToJava(databaseTable.getTableName()); - return new TableGenParamDto().setEntityName(entityName).setModule(entityName.toLowerCase()); - } - -} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-code-gen/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 5ec8c6a7c..db9980d90 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.starter.code.gen.CodeGenAutoConfiguration +cn.bootx.platform.starter.code.gen.CodeGenAutoConfiguration diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/controller.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/controller.java.vm index 333f775bc..5f2aec471 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/controller.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/controller.java.vm @@ -1,9 +1,9 @@ package ${controllerPack}; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; import ${corePack}.service.${entityUpName}Service; import ${dtoPack}.${entityUpName}Dto; import ${paramPack}.${entityUpName}Param; @@ -17,7 +17,7 @@ import java.util.List; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Tag(name ="${comments}") @RestController @@ -47,6 +47,13 @@ public class ${entityUpName}Controller { return Res.ok(); } + @Operation(summary = "批量删除") + @DeleteMapping("/deleteBatch") + public ResResult deleteBatch(@RequestBody List ids) { + ${entityLowName}Service.deleteBatch(ids); + return Res.ok(); + } + @Operation( summary = "通过ID查询") @GetMapping(value = "/findById") public ResResult<${entityUpName}Dto> findById(Long id){ @@ -61,7 +68,7 @@ public class ${entityUpName}Controller { @Operation( summary = "分页查询") @GetMapping(value = "/page") - public ResResult> page(PageParam pageParam, ${entityUpName}Param ${entityLowName}Param){ - return Res.ok(${entityLowName}Service.page(pageParam,${entityLowName}Param)); + public ResResult> page(PageParam pageParam, ${entityUpName}Param query){ + return Res.ok(${entityLowName}Service.page(pageParam,query)); } -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/convert.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/convert.java.vm index 87e2aa77f..1ad55ca1c 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/convert.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/convert.java.vm @@ -9,7 +9,7 @@ import org.mapstruct.factory.Mappers; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Mapper public interface ${entityUpName}Convert { @@ -19,4 +19,4 @@ public interface ${entityUpName}Convert { ${entityUpName}Dto convert(${entityUpName} in); -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/dto.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/dto.java.vm index fa6a09a73..b128d5976 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/dto.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/dto.java.vm @@ -4,7 +4,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalDate; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,7 +13,7 @@ import lombok.experimental.Accessors; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @EqualsAndHashCode(callSuper = true) @Data @@ -26,4 +26,4 @@ public class ${entityUpName}Dto extends BaseDto { private $column.javaType $column.name; #end -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/entity.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/entity.java.vm index 0e53fbc72..272b65c4a 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/entity.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/entity.java.vm @@ -5,8 +5,9 @@ import java.time.LocalDateTime; import java.time.LocalDate; import java.time.LocalTime; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.${baseClass}; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.${baseClass}; + import com.baomidou.mybatisplus.annotation.TableName; import ${dtoPack}.${entityUpName}Dto; import ${paramPack}.${entityUpName}Param; @@ -19,7 +20,7 @@ import lombok.experimental.Accessors; /** * ${comments} * @author ${author} -* @date ${datetime} +* @since ${datetime} */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/manager.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/manager.java.vm index f254b1a7b..321d8e06f 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/manager.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/manager.java.vm @@ -1,23 +1,22 @@ package ${corePack}.dao; -import cn.bootx.common.mybatisplus.impl.BaseManager; import ${paramPack}.${entityUpName}Param; import ${corePack}.entity.${entityUpName}; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import java.util.Optional; - /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Repository @RequiredArgsConstructor @@ -28,9 +27,9 @@ public class ${entityUpName}Manager extends BaseManager<${entityUpName}Mapper, $ */ public Page<${entityUpName}> page(PageParam pageParam, ${entityUpName}Param param) { Page<${entityUpName}> mpPage = MpUtil.getMpPage(pageParam, ${entityUpName}.class); - return this.lambdaQuery() - .select(this.getEntityClass(),MpUtil::excludeBigField) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); + QueryWrapper<${entityUpName}> wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(${entityUpName}::getId)); + return this.page(mpPage,wrapper); } -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/mapper.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/mapper.java.vm index ff2a74d63..908e15ec8 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/mapper.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/mapper.java.vm @@ -7,8 +7,8 @@ import org.apache.ibatis.annotations.Mapper; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Mapper public interface ${entityUpName}Mapper extends BaseMapper<${entityUpName}> { -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/param.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/param.java.vm index 370556415..6a294adfe 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/param.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/param.java.vm @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalDate; +import cn.bootx.platform.common.core.annotation.QueryParam; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -11,8 +12,9 @@ import lombok.experimental.Accessors; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ +@QueryParam(type = QueryParam.CompareTypeEnum.LIKE) @Data @Schema(title = "${comments}") @Accessors(chain = true) @@ -26,4 +28,4 @@ public class ${entityUpName}Param { private $column.javaType $column.name; #end -} \ No newline at end of file +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/service.java.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/service.java.vm index 6c564c77f..69dd17725 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/service.java.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/java/service.java.vm @@ -1,25 +1,26 @@ package ${corePack}.service; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; import ${dtoPack}.${entityUpName}Dto; import ${paramPack}.${entityUpName}Param; import ${corePack}.convert.${entityUpName}Convert; import ${corePack}.entity.${entityUpName}; import ${corePack}.dao.${entityUpName}Manager; -import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import java.util.List; /** * ${comments} * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Slf4j @Service @@ -48,8 +49,8 @@ public class ${entityUpName}Service { /** * 分页 */ - public PageResult<${entityUpName}Dto> page(PageParam pageParam,${entityUpName}Param ${entityLowName}Param){ - return MpUtil.convert2DtoPageResult(${entityLowName}Manager.page(pageParam,${entityLowName}Param)); + public PageResult<${entityUpName}Dto> page(PageParam pageParam,${entityUpName}Param query){ + return MpUtil.convert2DtoPageResult(${entityLowName}Manager.page(pageParam,query)); } /** @@ -72,4 +73,12 @@ public class ${entityUpName}Service { public void delete(Long id){ ${entityLowName}Manager.deleteById(id); } -} \ No newline at end of file + + + /** + * 批量删除 + */ + public void deleteBatch(List ids){ + ${entityLowName}Manager.deleteByIds(ids); + } +} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/api.js.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/api.js.vm deleted file mode 100644 index 5d7e008be..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/api.js.vm +++ /dev/null @@ -1,66 +0,0 @@ -import { axios } from '@/utils/request' - -/** - * 分页 - */ -export function page (params) { - return axios({ - url: '${requestPath}/page', - method: 'GET', - params: params - }) -} - -/** - * 查询全部 - */ -export function list () { - return axios({ - url: '${requestPath}/findAll', - method: 'GET' - }) -} - -/** - * 获取单条 - */ -export function get (id) { - return axios({ - url: '${requestPath}/findById', - method: 'GET', - params: { id } - }) -} - -/** - * 添加 - */ -export function add (obj) { - return axios({ - url: '${requestPath}/add', - method: 'POST', - data: obj - }) -} - -/** - * 更新 - */ -export function update (obj) { - return axios({ - url: '${requestPath}/update', - method: 'POST', - data: obj - }) -} - -/** - * 删除 - */ -export function del (id) { - return axios({ - url: '${requestPath}/delete', - params: { id }, - method: 'DELETE' - }) -} diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/edit.vue.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/edit.vue.vm deleted file mode 100644 index 146d022a5..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/edit.vue.vm +++ /dev/null @@ -1,108 +0,0 @@ - - - - - diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/list.vue.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/list.vue.vm deleted file mode 100644 index 5039c8623..000000000 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue2/list.vue.vm +++ /dev/null @@ -1,111 +0,0 @@ - - - - - diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/api.ts.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/api.ts.vm index 225f4b7d8..880972f86 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/api.ts.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/api.ts.vm @@ -61,6 +61,16 @@ export function del(id) { }) } +/** + * 批量删除 + */ +export function deleteBatch(ids) { + return defHttp.delete({ + url: '${requestPath}/template/delete', + data: ids, + }) +} + /** * ${comments} */ diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/edit.vue.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/edit.vue.vm index 833f003ac..a97b146b0 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/edit.vue.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/edit.vue.vm @@ -33,7 +33,7 @@ :label-col="labelCol" :wrapper-col="wrapperCol" > - + #foreach ($column in $columns) @@ -98,13 +98,19 @@ const rules = reactive({} as Record) // 事件 const emits = defineEmits(['ok']) - // 入口 + + /** + * 入口 + */ function init(id, editType: FormEditType) { initFormEditType(editType) resetForm() getInfo(id, editType) } - // 获取信息 + + /** + * 获取信息 + */ function getInfo(id, editType: FormEditType) { if ([FormEditType.Edit, FormEditType.Show].includes(editType)) { confirmLoading.value = true @@ -116,7 +122,10 @@ confirmLoading.value = false } } - // 保存 + + /** + * 保存 + */ function handleOk() { formRef?.validate().then(async () => { confirmLoading.value = true @@ -131,7 +140,9 @@ }) } - // 重置表单 + /** + * 重置表单 + */ function resetForm() { nextTick(() => { formRef?.resetFields() diff --git a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/list.vue.vm b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/list.vue.vm index adfcfdb9c..2b9a671c5 100644 --- a/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/list.vue.vm +++ b/bootx-common-starters/common-starter-code-gen/src/main/resources/codegen/template/vue3/list.vue.vm @@ -4,15 +4,32 @@

- + - - + + #foreach ($column in $columns) #end @@ -28,7 +45,9 @@ #if($deleteType == "confirm") - 删除 + + 删除 + #end #if($deleteType == "popconfirm") @@ -54,17 +73,19 @@ diff --git a/bootx-common-starters/common-starter-data-perm/pom.xml b/bootx-common-starters/common-starter-data-perm/pom.xml index e20e1c6c0..7752648f2 100644 --- a/bootx-common-starters/common-starter-data-perm/pom.xml +++ b/bootx-common-starters/common-starter-data-perm/pom.xml @@ -5,7 +5,7 @@ bootx-common-starters cn.bootx.platform - 1.2.3 + 1.3.6.2 4.0.0 diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/DataPermAutoConfiguration.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/DataPermAutoConfiguration.java similarity index 88% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/DataPermAutoConfiguration.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/DataPermAutoConfiguration.java index 19afb878b..2758dab61 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/DataPermAutoConfiguration.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/DataPermAutoConfiguration.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.data.perm; +package cn.bootx.platform.starter.data.perm; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -10,7 +10,7 @@ * 数据权限 * * @author xxm - * @date 2021/11/23 + * @since 2021/11/23 */ @ComponentScan @ConfigurationPropertiesScan diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/code/DataScopeEnum.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/code/DataScopeEnum.java new file mode 100644 index 000000000..d0b0d601c --- /dev/null +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/code/DataScopeEnum.java @@ -0,0 +1,49 @@ +package cn.bootx.platform.starter.data.perm.code; + +import cn.bootx.platform.common.core.exception.BizException; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Objects; + +/** + * 数据范围权限类型 + * + * @author xxm + * @since 2021/12/22 + */ +@Getter +@AllArgsConstructor +public enum DataScopeEnum { + + /** 自己的数据 */ + SELF("self"), + /** 指定用户级别 */ + USER_SCOPE("user"), + /** 指定部门级别 */ + DEPT_SCOPE("dept"), + /** 指定部门和下级部门 */ + DEPT_SCOPE_AND_SUB("dept_sub"), + /** 指定部门与用户级别 */ + DEPT_AND_USER_SCOPE("dept_and_user"), + /** 全部数据 */ + ALL_SCOPE("all"), + /** 所在部门 */ + SELF_DEPT("self_dept"), + /** 所在及下级部门 */ + SELF_DEPT_AND_SUB("self_dept_sub"); + + private final String code; + + /** + * 根据数字编号获取 + */ + public static DataScopeEnum findByCode(String code) { + return Arrays.stream(DataScopeEnum.values()) + .filter(e -> Objects.equals(e.getCode(), code)) + .findFirst() + .orElseThrow(() -> new BizException("不支持的数据权限类型")); + } + +} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DataPermProperties.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DataPermProperties.java new file mode 100644 index 000000000..2972e6155 --- /dev/null +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DataPermProperties.java @@ -0,0 +1,57 @@ +package cn.bootx.platform.starter.data.perm.configuration; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 数据权限配置 + * + * @author xxm + * @since 2021/12/3 + */ +@Getter +@Setter +@ConfigurationProperties("bootx.starter.data-perm") +public class DataPermProperties { + + /** 开启字段加密 */ + private boolean enableFieldDecrypt = true; + + /** 字段加密key 需要符合AES秘钥的要求 */ + private String fieldDecryptKey = "UCrtxSCwYZNCIlav"; + + /** 开启数据权限 */ + private boolean enableDataPerm = true; + + /** 部门关联类型数据权限关联表配置 */ + private DataPerm deptDataPerm = new DataPerm("iam_user_dept", "user_id", "dept_id"); + + /** 角色关联类型数据权限关联表配置 */ + private DataPerm roleDataPerm = new DataPerm("iam_user_role", "user_id", "role _id"); + + /** 开启查询字段权限 */ + private boolean enableSelectFieldPerm = true; + + /** + * 部门相关数据权限 + */ + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class DataPerm { + + /** 关联表名 */ + private String table; + + /** 查询字段(输出字段名, 通常为用户字段, 用于筛选出子查询的结果) */ + private String queryField; + + /** 条件字段(筛选条件字段名) */ + private String whereField; + } + +} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DatePermConfiguration.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DatePermConfiguration.java similarity index 78% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DatePermConfiguration.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DatePermConfiguration.java index 3f14f7cee..c324b05cf 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DatePermConfiguration.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/configuration/DatePermConfiguration.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.data.perm.configuration; +package cn.bootx.platform.starter.data.perm.configuration; -import cn.bootx.common.mybatisplus.interceptor.MpInterceptor; -import cn.bootx.starter.data.perm.scope.DataScopeInterceptor; -import cn.bootx.starter.data.perm.select.SelectFieldPermInterceptor; +import cn.bootx.platform.common.mybatisplus.interceptor.MpInterceptor; +import cn.bootx.platform.starter.data.perm.scope.DataScopeInterceptor; +import cn.bootx.platform.starter.data.perm.select.SelectFieldPermInterceptor; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; @@ -12,7 +12,7 @@ * 数据权限配置 * * @author xxm - * @date 2021/12/21 + * @since 2021/12/21 */ @Configuration @RequiredArgsConstructor diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/DecryptInterceptor.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/DecryptInterceptor.java similarity index 91% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/DecryptInterceptor.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/DecryptInterceptor.java index e680cfc28..560f2f8ea 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/DecryptInterceptor.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/DecryptInterceptor.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.data.perm.dbencrypt; +package cn.bootx.platform.starter.data.perm.dbencrypt; -import cn.bootx.common.core.annotation.EncryptionField; -import cn.bootx.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.common.core.annotation.EncryptionField; import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ReflectUtil; import cn.hutool.crypto.SecureUtil; @@ -26,7 +26,7 @@ * 数据字段解密插件 * * @author xxm - * @date 2021/11/23 + * @since 2021/11/23 */ @Slf4j @Intercepts(@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = { Statement.class })) @@ -79,9 +79,7 @@ public Object decryptValue(Object fieldValue) { if (fieldValue instanceof String) { AES aes = SecureUtil.aes(dataPermProperties.getFieldDecryptKey().getBytes(StandardCharsets.UTF_8)); return new String(aes.decrypt(Base64.decode((String) fieldValue)), StandardCharsets.UTF_8); - } - - else { + } else { return fieldValue; } } diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/EncryptInterceptor.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/EncryptInterceptor.java similarity index 92% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/EncryptInterceptor.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/EncryptInterceptor.java index af63ff289..2dfb9c396 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/dbencrypt/EncryptInterceptor.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/dbencrypt/EncryptInterceptor.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.data.perm.dbencrypt; +package cn.bootx.platform.starter.data.perm.dbencrypt; -import cn.bootx.common.core.annotation.EncryptionField; -import cn.bootx.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.common.core.annotation.EncryptionField; import cn.hutool.core.util.ReflectUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; @@ -24,7 +24,7 @@ * 数据字段解密插件 * * @author xxm - * @date 2021/11/23 + * @since 2021/11/23 */ @Slf4j @Intercepts(@Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class })) diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/exception/NotLoginPermException.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/exception/NotLoginPermException.java new file mode 100644 index 000000000..74abcb998 --- /dev/null +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/exception/NotLoginPermException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.starter.data.perm.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +/** + * 未登录无法进行数据鉴权异常 + * + * @author xxm + * @since 2022/5/5 + */ +public class NotLoginPermException extends BizException { + + public NotLoginPermException() { + super("未登录, 无法获取数据"); + } + +} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/handler/DataPermAspectHandler.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/handler/DataPermAspectHandler.java similarity index 84% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/handler/DataPermAspectHandler.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/handler/DataPermAspectHandler.java index 2b7d5af2a..cee97214a 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/handler/DataPermAspectHandler.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/handler/DataPermAspectHandler.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.data.perm.handler; +package cn.bootx.platform.starter.data.perm.handler; -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.annotation.Permission; -import cn.bootx.common.spring.util.AopUtil; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.bootx.starter.data.perm.local.DataPermContextHolder; +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.annotation.Permission; +import cn.bootx.platform.common.spring.util.AopUtil; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.data.perm.local.DataPermContextHolder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -18,7 +18,7 @@ * 忽略权限控制切面处理类 * * @author xxm - * @date 2021/12/22 + * @since 2021/12/22 */ @Slf4j @Aspect diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/local/DataPermContextHolder.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/local/DataPermContextHolder.java similarity index 87% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/local/DataPermContextHolder.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/local/DataPermContextHolder.java index 64ff5e7fb..b9e424173 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/local/DataPermContextHolder.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/local/DataPermContextHolder.java @@ -1,8 +1,8 @@ -package cn.bootx.starter.data.perm.local; +package cn.bootx.platform.starter.data.perm.local; -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.annotation.Permission; -import cn.bootx.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.annotation.Permission; +import cn.bootx.platform.common.core.entity.UserDetail; import com.alibaba.ttl.TransmittableThreadLocal; import java.util.Optional; @@ -11,7 +11,7 @@ * 忽略鉴权数据上下文 * * @author xxm - * @date 2021/12/22 + * @since 2021/12/22 */ public class DataPermContextHolder { diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScope.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScope.java similarity index 76% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScope.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScope.java index f943be339..a0867cd8b 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScope.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScope.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.data.perm.scope; +package cn.bootx.platform.starter.data.perm.scope; -import cn.bootx.starter.data.perm.code.DataScopeEnum; +import cn.bootx.platform.starter.data.perm.code.DataScopeEnum; import lombok.Data; import lombok.experimental.Accessors; @@ -10,7 +10,7 @@ * 数据权限范围参数 * * @author xxm - * @date 2021/12/22 + * @since 2021/12/22 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScopeHandler.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScopeHandler.java new file mode 100644 index 000000000..8e9dac81b --- /dev/null +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataPermScopeHandler.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.starter.data.perm.scope; + +/** + * 数据范围权限业务实现接口 + * + * @author xxm + * @since 2021/12/22 + */ +public interface DataPermScopeHandler { + + /** + * 返回数据权限查询条件的集合 + */ + DataPermScope getDataPermScope(); + +} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataScopeInterceptor.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataScopeInterceptor.java similarity index 89% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataScopeInterceptor.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataScopeInterceptor.java index f8125decc..457703e5b 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataScopeInterceptor.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/scope/DataScopeInterceptor.java @@ -1,16 +1,16 @@ -package cn.bootx.starter.data.perm.scope; +package cn.bootx.platform.starter.data.perm.scope; -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.annotation.Permission; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.data.perm.code.DataScopeEnum; -import cn.bootx.starter.data.perm.configuration.DataPermProperties; -import cn.bootx.starter.data.perm.exception.NotLoginPermException; -import cn.bootx.starter.data.perm.local.DataPermContextHolder; +import cn.bootx.platform.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.starter.data.perm.exception.NotLoginPermException; +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.annotation.Permission; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.data.perm.code.DataScopeEnum; +import cn.bootx.platform.starter.data.perm.local.DataPermContextHolder; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; @@ -47,7 +47,7 @@ * 数据权限处理器 * * @author xxm - * @date 2021/12/22 + * @since 2021/12/22 */ @Slf4j @Component @@ -170,6 +170,7 @@ protected Expression dataScope(Expression where, String mainTableName) { queryExpression = this.selfScope(mainTableName); break; } + case DEPT_SCOPE_AND_SUB: case DEPT_SCOPE: { Expression deptScopeExpression = this.deptScope(dataPermScope.getDeptScopeIds(), mainTableName); // 追加查询自身的数据 @@ -177,16 +178,18 @@ protected Expression dataScope(Expression where, String mainTableName) { break; } case USER_SCOPE: { + // 包含自身的数据 queryExpression = this.userScope(dataPermScope.getUserScopeIds(), mainTableName); break; } case DEPT_AND_USER_SCOPE: { + // 包含自身的数据 queryExpression = this.deptAndUserScope(dataPermScope.getDeptScopeIds(), dataPermScope.getUserScopeIds(), mainTableName); break; } - case BELONG_DEPT: - case BELONG_DEPT_AND_SUB: { + case SELF_DEPT: + case SELF_DEPT_AND_SUB: { queryExpression = this.deptScope(dataPermScope.getDeptScopeIds(), mainTableName); break; } @@ -234,17 +237,17 @@ protected Expression userScope(Set userScopeIds, String mainTableName) { * 查询部门范围的数据 */ protected Expression deptScope(Set deptIds, String mainTableName) { - DataPermProperties.DataPerm dataPerm = dataPermProperties.getDataPerm(); + DataPermProperties.DataPerm deptDataPerm = dataPermProperties.getDeptDataPerm(); // 创建嵌套子查询 PlainSelect plainSelect = new PlainSelect(); // 设置查询字段 SelectExpressionItem selectItem = new SelectExpressionItem(); - selectItem.setExpression(new Column(dataPerm.getQueryField())); + selectItem.setExpression(new Column(deptDataPerm.getQueryField())); plainSelect.addSelectItems(selectItem); // 过滤重复的子查询结果 plainSelect.setDistinct(new Distinct()); // 设置所查询表 - plainSelect.setFromItem(new Table(dataPerm.getTable())); + plainSelect.setFromItem(new Table(deptDataPerm.getTable())); // 构建查询条件 List deptExpressions = Optional.ofNullable(deptIds) @@ -253,12 +256,12 @@ protected Expression deptScope(Set deptIds, String mainTableName) { .map(LongValue::new) .collect(Collectors.toList()); // 构造空查询 - if (deptExpressions.size() == 0) { + if (deptExpressions.isEmpty()) { deptExpressions.add(null); } // 设置查询条件 plainSelect - .setWhere(new InExpression(new Column(dataPerm.getWhereField()), new ExpressionList(deptExpressions))); + .setWhere(new InExpression(new Column(deptDataPerm.getWhereField()), new ExpressionList(deptExpressions))); // 拼接子查询 SubSelect subSelect = new SubSelect(); diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermHandler.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermHandler.java similarity index 84% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermHandler.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermHandler.java index 359fe5fed..c8ba8f06c 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermHandler.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermHandler.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.data.perm.select; +package cn.bootx.platform.starter.data.perm.select; import net.sf.jsqlparser.statement.select.SelectItem; @@ -8,7 +8,7 @@ * 数据字段权限业务实现接口 * * @author xxm - * @date 2023/1/21 + * @since 2023/1/21 */ public interface SelectFieldPermHandler { diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermInterceptor.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermInterceptor.java similarity index 82% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermInterceptor.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermInterceptor.java index 294cce011..fcf43c085 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/select/SelectFieldPermInterceptor.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/select/SelectFieldPermInterceptor.java @@ -1,17 +1,12 @@ -package cn.bootx.starter.data.perm.select; +package cn.bootx.platform.starter.data.perm.select; -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.annotation.Permission; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.data.perm.configuration.DataPermProperties; -import cn.bootx.starter.data.perm.exception.NotLoginPermException; -import cn.bootx.starter.data.perm.local.DataPermContextHolder; -import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import cn.bootx.platform.starter.data.perm.configuration.DataPermProperties; +import cn.bootx.platform.starter.data.perm.exception.NotLoginPermException; +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.annotation.Permission; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.starter.data.perm.local.DataPermContextHolder; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; @@ -35,7 +30,7 @@ * 查询字段权限处理器 * * @author xxm - * @date 2022/12/29 + * @since 2022/12/29 */ @Slf4j @Component diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfo.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfo.java similarity index 94% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfo.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfo.java index a092fdf57..863133be6 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfo.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfo.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.data.perm.sensitive; +package cn.bootx.platform.starter.data.perm.sensitive; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -10,7 +10,7 @@ * 敏感信息过滤 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @@ -36,7 +36,7 @@ * 敏感信息 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ enum SensitiveType { diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfoSerialize.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfoSerialize.java similarity index 98% rename from bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfoSerialize.java rename to bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfoSerialize.java index 137b5578f..9e8f9d40f 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/sensitive/SensitiveInfoSerialize.java +++ b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/platform/starter/data/perm/sensitive/SensitiveInfoSerialize.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.data.perm.sensitive; +package cn.bootx.platform.starter.data.perm.sensitive; import cn.hutool.core.util.DesensitizedUtil; import cn.hutool.core.util.StrUtil; @@ -19,7 +19,7 @@ * 敏感信息脱敏序列化 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ @AllArgsConstructor @NoArgsConstructor diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/code/DataScopeEnum.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/code/DataScopeEnum.java deleted file mode 100644 index 8ccd5e0f0..000000000 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/code/DataScopeEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.starter.data.perm.code; - -import cn.bootx.common.core.exception.BizException; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Arrays; - -/** - * 数据范围权限类型 - * - * @author xxm - * @date 2021/12/22 - */ -@Getter -@AllArgsConstructor -public enum DataScopeEnum { - - /** 自己的数据 */ - SELF(1), - /** 指定用户级别 */ - USER_SCOPE(2), - /** 指定部门级别 */ - DEPT_SCOPE(3), - /** 指定部门与用户级别 */ - DEPT_AND_USER_SCOPE(4), - /** 全部数据 */ - ALL_SCOPE(5), - /** 所在部门 */ - BELONG_DEPT(6), - /** 所在及下级部门 */ - BELONG_DEPT_AND_SUB(7); - - private final int code; - - /** - * 根据数字编号获取 - */ - public static DataScopeEnum findByCode(int code) { - return Arrays.stream(DataScopeEnum.values()) - .filter(e -> e.getCode() == code) - .findFirst() - .orElseThrow(() -> new BizException("不支持的数据权限类型")); - } - -} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DataPermProperties.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DataPermProperties.java deleted file mode 100644 index 71f4d53bf..000000000 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/configuration/DataPermProperties.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.bootx.starter.data.perm.configuration; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * 数据权限配置 - * - * @author xxm - * @date 2021/12/3 - */ -@Getter -@Setter -@ConfigurationProperties("bootx.starter.data-perm") -public class DataPermProperties { - - /** 开启字段加密 */ - private boolean enableFieldDecrypt = true; - - /** 字段加密key 需要符合AES秘钥的要求 */ - private String fieldDecryptKey = "UCrtxSCwYZNCIlav"; - - /** 开启数据权限 */ - private boolean enableDataPerm = true; - - /** 数据权限配置 */ - private DataPerm dataPerm = new DataPerm(); - - /** 开启查询字段权限 */ - private boolean enableSelectFieldPerm = true; - - /** - * 数据权限(通常是用户/部门关联表) - */ - @Getter - @Setter - public static class DataPerm { - - /** 关联表名 */ - private String table = "iam_user_dept"; - - /** 查询字段(用户字段名) */ - private String queryField = "user_id"; - - /** 条件字段(筛选条件字段名) */ - private String whereField = "dept_id"; - - } - -} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/exception/NotLoginPermException.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/exception/NotLoginPermException.java deleted file mode 100644 index 7c16a3b37..000000000 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/exception/NotLoginPermException.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.starter.data.perm.exception; - -import cn.bootx.common.core.exception.BizException; - -/** - * 未登录无法进行数据鉴权异常 - * - * @author xxm - * @date 2022/5/5 - */ -public class NotLoginPermException extends BizException { - - public NotLoginPermException() { - super("未登录, 无法获取数据"); - } - -} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScopeHandler.java b/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScopeHandler.java deleted file mode 100644 index 44bf17881..000000000 --- a/bootx-common-starters/common-starter-data-perm/src/main/java/cn/bootx/starter/data/perm/scope/DataPermScopeHandler.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.starter.data.perm.scope; - -/** - * 数据范围权限业务实现接口 - * - * @author xxm - * @date 2021/12/22 - */ -public interface DataPermScopeHandler { - - /** - * 返回数据权限查询条件的集合 - */ - DataPermScope getDataPermScope(); - -} diff --git a/bootx-common-starters/common-starter-data-perm/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-data-perm/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index ebb40e84a..39c0ace1c 100644 --- a/bootx-common-starters/common-starter-data-perm/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-common-starters/common-starter-data-perm/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.starter.data.perm.DataPermAutoConfiguration +cn.bootx.platform.starter.data.perm.DataPermAutoConfiguration diff --git a/bootx-common-starters/common-starter-dingtalk/pom.xml b/bootx-common-starters/common-starter-dingtalk/pom.xml index 07a21b168..c4b69d151 100644 --- a/bootx-common-starters/common-starter-dingtalk/pom.xml +++ b/bootx-common-starters/common-starter-dingtalk/pom.xml @@ -5,7 +5,7 @@ bootx-common-starters cn.bootx.platform - 1.2.3 + 1.3.6.2 4.0.0 diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/DingTalkAutoConfiguration.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java similarity index 88% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/DingTalkAutoConfiguration.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java index 119859f01..48cdf45a2 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/DingTalkAutoConfiguration.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk; +package cn.bootx.platform.starter.dingtalk; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -10,7 +10,7 @@ * 钉钉对接 * * @author xxm - * @date 2022/4/2 + * @since 2022/4/2 */ @ComponentScan @ConfigurationPropertiesScan diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkCode.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java similarity index 97% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkCode.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java index 92a5abb39..85f12e81e 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkCode.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.dingtalk.code; +package cn.bootx.platform.starter.dingtalk.code; /** * 钉钉消息类型 * * @author xxm - * @date 2020/11/30 + * @since 2020/11/30 */ public interface DingTalkCode { diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkNoticeCode.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java similarity index 89% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkNoticeCode.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java index 348138713..45e942666 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/code/DingTalkNoticeCode.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.dingtalk.code; +package cn.bootx.platform.starter.dingtalk.code; /** * 钉钉通知消息常量 * * @author xxm - * @date 2022/4/2 + * @since 2022/4/2 */ public interface DingTalkNoticeCode { diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/configuration/DingTalkProperties.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java similarity index 84% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/configuration/DingTalkProperties.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java index cef7154e6..ee8f4aff7 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/configuration/DingTalkProperties.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.configuration; +package cn.bootx.platform.starter.dingtalk.configuration; import lombok.Getter; import lombok.Setter; @@ -8,7 +8,7 @@ * 钉钉应用配置 * * @author xxm - * @date 2022/7/15 + * @since 2022/7/15 */ @Getter @Setter diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/controller/DingRobotConfigController.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java similarity index 80% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/controller/DingRobotConfigController.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java index ca8362d7c..07d8806ba 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/controller/DingRobotConfigController.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java @@ -1,12 +1,12 @@ -package cn.bootx.starter.dingtalk.controller; +package cn.bootx.platform.starter.dingtalk.controller; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.starter.dingtalk.core.robot.service.DingRobotConfigService; -import cn.bootx.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.bootx.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.dingtalk.core.robot.service.DingRobotConfigService; +import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; +import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -16,7 +16,7 @@ /** * @author xxm - * @date 2021/9/25 + * @since 2021/9/25 */ @Tag(name = "钉钉机器人配置") @RestController diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/AccessTokenResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java similarity index 90% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/AccessTokenResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java index ece6681ee..a0b6f2f51 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/AccessTokenResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.base.result; +package cn.bootx.platform.starter.dingtalk.core.base.result; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/DingTalkResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java similarity index 89% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/DingTalkResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java index 14e6daf0e..ceb76aad3 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/DingTalkResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.base.result; +package cn.bootx.platform.starter.dingtalk.core.base.result; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -11,7 +11,7 @@ * 钉钉响应结果 * * @author xxm - * @date 2020/11/30 + * @since 2020/11/30 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/MediaResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java similarity index 91% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/MediaResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java index b1c443db8..c9cc56982 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/result/MediaResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.base.result; +package cn.bootx.platform.starter.dingtalk.core.base.result; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,7 +9,7 @@ * 钉钉媒体上传返回类 * * @author xxm - * @date 2022/7/25 + * @since 2022/7/25 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/service/DingAccessService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java similarity index 84% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/service/DingAccessService.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java index 03302e66d..c5d658d5e 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/base/service/DingAccessService.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.dingtalk.core.base.service; +package cn.bootx.platform.starter.dingtalk.core.base.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.common.spring.exception.RetryableException; -import cn.bootx.starter.dingtalk.configuration.DingTalkProperties; -import cn.bootx.starter.dingtalk.core.base.result.AccessTokenResult; +import cn.bootx.platform.starter.dingtalk.configuration.DingTalkProperties; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.common.spring.exception.RetryableException; +import cn.bootx.platform.starter.dingtalk.core.base.result.AccessTokenResult; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import cn.hutool.http.HttpException; @@ -20,13 +20,13 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import static cn.bootx.starter.dingtalk.code.DingTalkCode.*; +import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; /** * 钉钉访问凭证 * * @author xxm - * @date 2022/4/2 + * @since 2022/4/2 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java new file mode 100644 index 000000000..1ba98a15e --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.starter.dingtalk.core.media.dao; + +import cn.bootx.platform.starter.dingtalk.core.media.entity.DingMediaMd5; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * 钉钉 + * + * @author xxm + * @since 2022/7/26 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class DingMediaMd5Manager extends BaseManager { + + /** + * 根据md5查询 + */ + public Optional findByMd5(String md5) { + return findByField(DingMediaMd5::getMd5, md5); + } + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java new file mode 100644 index 000000000..6d9ae7c6f --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.starter.dingtalk.core.media.dao; + +import cn.bootx.platform.starter.dingtalk.core.media.entity.DingMediaMd5; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2022/7/26 + */ +@Mapper +public interface DingMediaMd5Mapper extends BaseMapper { + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/entity/DingMediaMd5.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java similarity index 80% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/entity/DingMediaMd5.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java index 28b7d7ee6..6b9800f49 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/entity/DingMediaMd5.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.core.media.entity; +package cn.bootx.platform.starter.dingtalk.core.media.entity; -import cn.bootx.common.mybatisplus.base.MpCreateEntity; +import cn.bootx.platform.common.mybatisplus.base.MpCreateEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; @@ -12,7 +12,7 @@ * 钉钉媒体文件MD5值关联关系 * * @author xxm - * @date 2022/7/26 + * @since 2022/7/26 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java new file mode 100644 index 000000000..cd4c27d11 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.starter.dingtalk.core.media.service; + +import cn.bootx.platform.starter.dingtalk.core.media.dao.DingMediaMd5Manager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author xxm + * @since 2022/7/26 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingMediaMd5Service { + + private final DingMediaMd5Manager dingMediaMd5Manager; + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java similarity index 82% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaService.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java index e9866aebf..0bd7b1dd2 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaService.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java @@ -1,12 +1,12 @@ -package cn.bootx.starter.dingtalk.core.media.service; +package cn.bootx.platform.starter.dingtalk.core.media.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.FileUtil; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.code.DingTalkCode; -import cn.bootx.starter.dingtalk.core.base.result.MediaResult; -import cn.bootx.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.starter.dingtalk.core.media.dao.DingMediaMd5Manager; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.FileUtil; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.starter.dingtalk.code.DingTalkCode; +import cn.bootx.platform.starter.dingtalk.core.base.result.MediaResult; +import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; +import cn.bootx.platform.starter.dingtalk.core.media.dao.DingMediaMd5Manager; import cn.hutool.core.io.FileTypeUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; @@ -23,13 +23,13 @@ import java.io.InputStream; import java.util.Objects; -import static cn.bootx.starter.dingtalk.code.DingTalkCode.*; +import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; /** * 钉钉媒体文件管理 * * @author xxm - * @date 2022/7/25 + * @since 2022/7/25 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/ChatNoticeResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java similarity index 87% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/ChatNoticeResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java index 4b539be28..6494bc73d 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/ChatNoticeResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.notice.result; +package cn.bootx.platform.starter.dingtalk.core.notice.result; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,7 +7,7 @@ /** * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/CorpNoticeResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java similarity index 89% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/CorpNoticeResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java index 230481c1a..89a42eeb3 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/result/CorpNoticeResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.notice.result; +package cn.bootx.platform.starter.dingtalk.core.notice.result; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,7 +9,7 @@ * 钉钉消息响应 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/service/DingNoticeService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java similarity index 78% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/service/DingNoticeService.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java index 8c0b19c6e..34d689ee3 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/notice/service/DingNoticeService.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java @@ -1,27 +1,27 @@ -package cn.bootx.starter.dingtalk.core.notice.service; +package cn.bootx.platform.starter.dingtalk.core.notice.service; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.starter.dingtalk.core.notice.result.ChatNoticeResult; -import cn.bootx.starter.dingtalk.core.notice.result.CorpNoticeResult; -import cn.bootx.starter.dingtalk.param.notice.ChatNotice; -import cn.bootx.starter.dingtalk.param.notice.CorpNotice; -import cn.bootx.starter.dingtalk.param.notice.RecallCorpNotice; -import cn.bootx.starter.dingtalk.param.notice.UpdateCorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.ChatNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.CorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.RecallCorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.UpdateCorpNotice; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; +import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; +import cn.bootx.platform.starter.dingtalk.core.notice.result.ChatNoticeResult; +import cn.bootx.platform.starter.dingtalk.core.notice.result.CorpNoticeResult; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import static cn.bootx.starter.dingtalk.code.DingTalkCode.*; +import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; /** * 钉钉通知发送服务 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java new file mode 100644 index 000000000..a6b586b61 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.starter.dingtalk.core.robot.convert; + +import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; +import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 钉钉相关类转换 + * + * @author xxm + * @since 2021/8/5 + */ +@Mapper +public interface DingRobotConvert { + + DingRobotConvert CONVERT = Mappers.getMapper(DingRobotConvert.class); + + DingRobotConfig convert(DingRobotConfigParam in); + + DingRobotConfigDto convert(DingRobotConfig in); + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java new file mode 100644 index 000000000..be0f01b21 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java @@ -0,0 +1,47 @@ +package cn.bootx.platform.starter.dingtalk.core.robot.dao; + +import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; +import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * 钉钉机器人 + * + * @author xxm + * @since 2020/11/29 + */ +@Repository +@RequiredArgsConstructor +public class DingRobotConfigManager extends BaseManager { + + public Optional findByCode(String code) { + return findByField(DingRobotConfig::getCode, code); + } + + public boolean existsByCode(String code) { + return existedByField(DingRobotConfig::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return lambdaQuery().eq(DingRobotConfig::getCode, code).ne(MpIdEntity::getId, id).exists(); + } + + public Page page(PageParam pageParam, DingRobotConfigParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, DingRobotConfig.class); + return lambdaQuery().orderByDesc(MpIdEntity::getId) + .like(StrUtil.isNotBlank(param.getCode()), DingRobotConfig::getCode, param.getCode()) + .like(StrUtil.isNotBlank(param.getName()), DingRobotConfig::getName, param.getName()) + .like(StrUtil.isNotBlank(param.getAccessToken()), DingRobotConfig::getAccessToken, param.getAccessToken()) + .page(mpPage); + } + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java new file mode 100644 index 000000000..f15141791 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.starter.dingtalk.core.robot.dao; + +import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 钉钉机器人配置 + * + * @author xxm + * @since 2021/8/5 + */ +@Mapper +public interface DingRobotConfigMapper extends BaseMapper { + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java new file mode 100644 index 000000000..2532efee0 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java @@ -0,0 +1,52 @@ +package cn.bootx.platform.starter.dingtalk.core.robot.entity; + +import cn.bootx.platform.starter.dingtalk.core.robot.convert.DingRobotConvert; +import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 钉钉机器人配置 + * + * @author xxm + * @since 2020/11/29 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("starter_ding_robot_config") +public class DingRobotConfig extends MpBaseEntity implements EntityBaseFunction { + + /** 机器人编号编号 */ + private String code; + + /** 机器人配置名称 */ + private String name; + + /** 钉钉机器人的accessToken */ + private String accessToken; + + /** 是否开启验签 */ + private boolean enableSignatureCheck; + + /** 验签秘钥 */ + private String signSecret; + + /** 备注 */ + private String remark; + + public static DingRobotConfig init(DingRobotConfigParam in) { + return DingRobotConvert.CONVERT.convert(in); + } + + @Override + public DingRobotConfigDto toDto() { + return DingRobotConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotConfigService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java similarity index 76% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotConfigService.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java index 9d7d0ae70..72d4781e9 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotConfigService.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java @@ -1,15 +1,15 @@ -package cn.bootx.starter.dingtalk.core.robot.service; +package cn.bootx.platform.starter.dingtalk.core.robot.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.dingtalk.core.robot.dao.DingRobotConfigManager; -import cn.bootx.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.bootx.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.dingtalk.core.robot.dao.DingRobotConfigManager; +import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; +import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.RequiredArgsConstructor; @@ -23,7 +23,7 @@ * 钉钉机器人消息发送 * * @author xxm - * @date 2020/11/29 + * @since 2020/11/29 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java new file mode 100644 index 000000000..3cf127843 --- /dev/null +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java @@ -0,0 +1,68 @@ +package cn.bootx.platform.starter.dingtalk.core.robot.service; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.util.DingTalkUtil; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.starter.dingtalk.code.DingTalkCode; +import cn.bootx.platform.starter.dingtalk.core.robot.dao.DingRobotConfigManager; +import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; +import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.SUCCESS_CODE; + +/** + * 钉钉机器人消息发送 + * + * @author xxm + * @since 2020/11/29 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingRobotSendService { + + private final DingRobotConfigManager dingRobotConfigManager; + + /** + * 发送钉钉机器人消息 + */ + public void sendNotice(String code, Msg body) { + DingRobotConfig dingRobotConfig = dingRobotConfigManager.findByCode(code) + .orElseThrow(() -> new DataNotExistException("钉钉机器人配置不存在")); + long timestamp = System.currentTimeMillis(); + + Map map = new HashMap<>(3); + map.put(DingTalkCode.ACCESS_TOKEN, dingRobotConfig.getAccessToken()); + String url; + // 验签 + if (dingRobotConfig.isEnableSignatureCheck()) { + url = DingTalkCode.ROBOT_SEND_SIGN_URL; + map.put(DingTalkCode.SIGN, DingTalkUtil.generateSign(timestamp, dingRobotConfig.getSignSecret())); + map.put(DingTalkCode.TIMESTAMP, timestamp); + } + else { + url = DingTalkCode.ROBOT_SEND_NOT_SIGN_URL; + } + + // 请求消息 + String responseBody = HttpUtil.createPost(StrUtil.format(url, map)) + .body(JacksonUtil.toJson(body)) + .execute() + .body(); + DingTalkResult dingTalkResult = JacksonUtil.toBean(responseBody, DingTalkResult.class); + if (!Objects.equals(SUCCESS_CODE, dingTalkResult.getCode())) { + log.error("钉钉机器人发送消息失败: {}", dingTalkResult.getMsg()); + } + } + +} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/entity/UserIdResult.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java similarity index 85% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/entity/UserIdResult.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java index fb480535e..82bb8f864 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/entity/UserIdResult.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.core.user.entity; +package cn.bootx.platform.starter.dingtalk.core.user.entity; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,7 +7,7 @@ /** * @author xxm - * @date 2022/7/21 + * @since 2022/7/21 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/service/DingUserService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java similarity index 76% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/service/DingUserService.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java index 2e1e2db6c..83a409027 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/user/service/DingUserService.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java @@ -1,10 +1,10 @@ -package cn.bootx.starter.dingtalk.core.user.service; +package cn.bootx.platform.starter.dingtalk.core.user.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.starter.dingtalk.core.user.entity.UserIdResult; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; +import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; +import cn.bootx.platform.starter.dingtalk.core.user.entity.UserIdResult; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.fasterxml.jackson.core.type.TypeReference; @@ -16,13 +16,13 @@ import java.util.Map; import java.util.Objects; -import static cn.bootx.starter.dingtalk.code.DingTalkCode.*; +import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; /** * 钉钉用户信息 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Slf4j @Service diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/dto/robot/DingRobotConfigDto.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java similarity index 83% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/dto/robot/DingRobotConfigDto.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java index c67c96f87..d9042be1e 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/dto/robot/DingRobotConfigDto.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.dingtalk.dto.robot; +package cn.bootx.platform.starter.dingtalk.dto.robot; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/ChatNotice.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java similarity index 78% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/ChatNotice.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java index 597b6b0e8..6d8c0e3a5 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/ChatNotice.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.dingtalk.param.notice; +package cn.bootx.platform.starter.dingtalk.param.notice; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.common.jackson.util.JacksonUtil; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -13,7 +13,7 @@ * 钉钉发送企业群消息参数 * * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/CorpNotice.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java similarity index 88% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/CorpNotice.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java index 1bee60518..7023a4d40 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/CorpNotice.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java @@ -1,7 +1,7 @@ -package cn.bootx.starter.dingtalk.param.notice; +package cn.bootx.platform.starter.dingtalk.param.notice; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.common.jackson.util.JacksonUtil; import cn.hutool.core.lang.Opt; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +15,7 @@ * 钉钉发送工作通知参数 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/RecallCorpNotice.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java similarity index 85% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/RecallCorpNotice.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java index 83ab2b868..805cbe728 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/RecallCorpNotice.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice; +package cn.bootx.platform.starter.dingtalk.param.notice; -import cn.bootx.common.jackson.util.JacksonUtil; +import cn.bootx.platform.common.jackson.util.JacksonUtil; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -12,7 +12,7 @@ * 钉钉撤回工作通知 * * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/UpdateCorpNotice.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java similarity index 87% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/UpdateCorpNotice.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java index 54174214e..d6e036304 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/UpdateCorpNotice.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice; +package cn.bootx.platform.starter.dingtalk.param.notice; -import cn.bootx.common.jackson.util.JacksonUtil; +import cn.bootx.platform.common.jackson.util.JacksonUtil; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 钉钉 更新工作通知状态栏 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ActionCardMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java similarity index 95% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ActionCardMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java index d866f79ae..20ee7b85a 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ActionCardMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,7 +12,7 @@ * 钉钉卡片消息 * * @author xxm - * @date 2022/7/19 + * @since 2022/7/19 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/At.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java similarity index 93% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/At.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java index 1a83d7c72..3aef39823 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/At.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; import cn.hutool.core.collection.CollUtil; import io.swagger.v3.oas.annotations.media.Schema; @@ -13,7 +13,7 @@ * 钉钉At * * @author xxm - * @date 2020/11/29 + * @since 2020/11/29 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/DingMedia.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java similarity index 86% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/DingMedia.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java index 370100a5c..28012efd3 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/DingMedia.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -11,7 +11,7 @@ * 钉钉图片 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/FileMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java similarity index 83% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/FileMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java index 42b213900..d948b44d5 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/FileMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 钉钉图片通知 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ImageMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java similarity index 83% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ImageMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java index 0bdbeefb2..a1fa6cb82 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/ImageMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 钉钉图片通知 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/LinkMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java similarity index 93% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/LinkMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java index 0e301fbae..20b1ab0c7 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/LinkMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,7 +13,7 @@ * 钉钉链接消息 * * @author xxm - * @date 2020/11/30 + * @since 2020/11/30 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/MarkdownMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java similarity index 91% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/MarkdownMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java index d4b48503f..40548c1d5 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/MarkdownMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,7 +14,7 @@ * 钉钉markdown消息 * * @author xxm - * @date 2020/11/30 + * @since 2020/11/30 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/Msg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java similarity index 87% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/Msg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java index e728ea8a6..656371c4b 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/Msg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,7 +14,7 @@ * 钉钉消息 * * @author xxm - * @date 2020/11/30 + * @since 2020/11/30 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/OaMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java similarity index 97% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/OaMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java index 1a906f132..fbaab9131 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/OaMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,7 +14,7 @@ * 钉钉OA消息 * * @author xxm - * @date 2022/7/19 + * @since 2022/7/19 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/TextMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java similarity index 88% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/TextMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java index c11cac636..72e71d042 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/TextMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -12,7 +12,7 @@ /** * @author xxm - * @date 2020/11/29 + * @since 2020/11/29 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/VoiceMsg.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java similarity index 89% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/VoiceMsg.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java index 431033172..d4b95c511 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/notice/msg/VoiceMsg.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java @@ -1,6 +1,6 @@ -package cn.bootx.starter.dingtalk.param.notice.msg; +package cn.bootx.platform.starter.dingtalk.param.notice.msg; -import cn.bootx.starter.dingtalk.code.DingTalkNoticeCode; +import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -15,7 +15,7 @@ * 钉钉语音消息 * * @author xxm - * @date 2022/7/17 + * @since 2022/7/17 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/robot/DingRobotConfigParam.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java similarity index 92% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/robot/DingRobotConfigParam.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java index 8acbdddbb..620604d8c 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/param/robot/DingRobotConfigParam.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.param.robot; +package cn.bootx.platform.starter.dingtalk.param.robot; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ @Data @Accessors(chain = true) diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/util/DingTalkUtil.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java similarity index 94% rename from bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/util/DingTalkUtil.java rename to bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java index 08598a4f5..ba4494ed0 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/util/DingTalkUtil.java +++ b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java @@ -1,4 +1,4 @@ -package cn.bootx.starter.dingtalk.util; +package cn.bootx.platform.starter.dingtalk.util; import cn.hutool.crypto.digest.HmacAlgorithm; import lombok.experimental.UtilityClass; @@ -15,7 +15,7 @@ * 钉钉工具类 * * @author xxm - * @date 2022/4/2 + * @since 2022/4/2 */ @Slf4j @UtilityClass diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java deleted file mode 100644 index 968f64ee1..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.starter.dingtalk.core.media.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.starter.dingtalk.core.media.entity.DingMediaMd5; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 钉钉 - * - * @author xxm - * @date 2022/7/26 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class DingMediaMd5Manager extends BaseManager { - - /** - * 根据md5查询 - */ - public Optional findByMd5(String md5) { - return findByField(DingMediaMd5::getMd5, md5); - } - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java deleted file mode 100644 index d166cd275..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.starter.dingtalk.core.media.dao; - -import cn.bootx.starter.dingtalk.core.media.entity.DingMediaMd5; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/7/26 - */ -@Mapper -public interface DingMediaMd5Mapper extends BaseMapper { - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaMd5Service.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaMd5Service.java deleted file mode 100644 index 09d3ca009..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/media/service/DingMediaMd5Service.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.starter.dingtalk.core.media.service; - -import cn.bootx.starter.dingtalk.core.media.dao.DingMediaMd5Manager; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @author xxm - * @date 2022/7/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingMediaMd5Service { - - private final DingMediaMd5Manager dingMediaMd5Manager; - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/convert/DingRobotConvert.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/convert/DingRobotConvert.java deleted file mode 100644 index 7bccd8722..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/convert/DingRobotConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.starter.dingtalk.core.robot.convert; - -import cn.bootx.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.bootx.starter.dingtalk.param.robot.DingRobotConfigParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 钉钉相关类转换 - * - * @author xxm - * @date 2021/8/5 - */ -@Mapper -public interface DingRobotConvert { - - DingRobotConvert CONVERT = Mappers.getMapper(DingRobotConvert.class); - - DingRobotConfig convert(DingRobotConfigParam in); - - DingRobotConfigDto convert(DingRobotConfig in); - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java deleted file mode 100644 index bf8c0d032..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.starter.dingtalk.core.robot.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.starter.dingtalk.param.robot.DingRobotConfigParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 钉钉机器人 - * - * @author xxm - * @date 2020/11/29 - */ -@Repository -@RequiredArgsConstructor -public class DingRobotConfigManager extends BaseManager { - - public Optional findByCode(String code) { - return findByField(DingRobotConfig::getCode, code); - } - - public boolean existsByCode(String code) { - return existedByField(DingRobotConfig::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return lambdaQuery().eq(DingRobotConfig::getCode, code).ne(MpIdEntity::getId, id).exists(); - } - - public Page page(PageParam pageParam, DingRobotConfigParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, DingRobotConfig.class); - return lambdaQuery().orderByDesc(MpIdEntity::getId) - .like(StrUtil.isNotBlank(param.getCode()), DingRobotConfig::getCode, param.getCode()) - .like(StrUtil.isNotBlank(param.getName()), DingRobotConfig::getName, param.getName()) - .like(StrUtil.isNotBlank(param.getAccessToken()), DingRobotConfig::getAccessToken, param.getAccessToken()) - .page(mpPage); - } - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java deleted file mode 100644 index 3ad527600..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.starter.dingtalk.core.robot.dao; - -import cn.bootx.starter.dingtalk.core.robot.entity.DingRobotConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 钉钉机器人配置 - * - * @author xxm - * @date 2021/8/5 - */ -@Mapper -public interface DingRobotConfigMapper extends BaseMapper { - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/entity/DingRobotConfig.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/entity/DingRobotConfig.java deleted file mode 100644 index d4f073af0..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/entity/DingRobotConfig.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.bootx.starter.dingtalk.core.robot.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.starter.dingtalk.core.robot.convert.DingRobotConvert; -import cn.bootx.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.bootx.starter.dingtalk.param.robot.DingRobotConfigParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 钉钉机器人配置 - * - * @author xxm - * @date 2020/11/29 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("starter_ding_robot_config") -public class DingRobotConfig extends MpBaseEntity implements EntityBaseFunction { - - /** 机器人编号编号 */ - private String code; - - /** 机器人配置名称 */ - private String name; - - /** 钉钉机器人的accessToken */ - private String accessToken; - - /** 是否开启验签 */ - private boolean enableSignatureCheck; - - /** 验签秘钥 */ - private String signSecret; - - /** 备注 */ - private String remark; - - public static DingRobotConfig init(DingRobotConfigParam in) { - return DingRobotConvert.CONVERT.convert(in); - } - - @Override - public DingRobotConfigDto toDto() { - return DingRobotConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotSendService.java b/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotSendService.java deleted file mode 100644 index ea18b9235..000000000 --- a/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/starter/dingtalk/core/robot/service/DingRobotSendService.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.bootx.starter.dingtalk.core.robot.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.starter.dingtalk.code.DingTalkCode; -import cn.bootx.starter.dingtalk.core.robot.dao.DingRobotConfigManager; -import cn.bootx.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.starter.dingtalk.util.DingTalkUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static cn.bootx.starter.dingtalk.code.DingTalkCode.SUCCESS_CODE; - -/** - * 钉钉机器人消息发送 - * - * @author xxm - * @date 2020/11/29 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingRobotSendService { - - private final DingRobotConfigManager dingRobotConfigManager; - - /** - * 发送钉钉机器人消息 - */ - public void sendNotice(String code, Msg body) { - DingRobotConfig dingRobotConfig = dingRobotConfigManager.findByCode(code) - .orElseThrow(() -> new DataNotExistException("钉钉机器人配置不存在")); - long timestamp = System.currentTimeMillis(); - - Map map = new HashMap<>(3); - map.put(DingTalkCode.ACCESS_TOKEN, dingRobotConfig.getAccessToken()); - String url; - // 验签 - if (dingRobotConfig.isEnableSignatureCheck()) { - url = DingTalkCode.ROBOT_SEND_SIGN_URL; - map.put(DingTalkCode.SIGN, DingTalkUtil.generateSign(timestamp, dingRobotConfig.getSignSecret())); - map.put(DingTalkCode.TIMESTAMP, timestamp); - } - else { - url = DingTalkCode.ROBOT_SEND_NOT_SIGN_URL; - } - - // 请求消息 - String responseBody = HttpUtil.createPost(StrUtil.format(url, map)) - .body(JacksonUtil.toJson(body)) - .execute() - .body(); - DingTalkResult dingTalkResult = JacksonUtil.toBean(responseBody, DingTalkResult.class); - if (!Objects.equals(SUCCESS_CODE, dingTalkResult.getCode())) { - log.error("钉钉机器人发送消息失败: {}", dingTalkResult.getMsg()); - } - } - -} diff --git a/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 1b307d4b9..73283971c 100644 --- a/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.starter.dingtalk.DingTalkAutoConfiguration \ No newline at end of file +cn.bootx.platform.starter.dingtalk.DingTalkAutoConfiguration diff --git a/bootx-common-starters/common-starter-file/pom.xml b/bootx-common-starters/common-starter-file/pom.xml index b8c620a06..1f8875360 100644 --- a/bootx-common-starters/common-starter-file/pom.xml +++ b/bootx-common-starters/common-starter-file/pom.xml @@ -5,7 +5,7 @@ bootx-common-starters cn.bootx.platform - 1.2.3 + 1.3.6.2 4.0.0 @@ -25,16 +25,40 @@ spring-boot-starter-data-mongodb true + + cn.bootx + table-modify-mysql-boot-starter + provided + + cn.bootx.platform common-mybatis-plus true + + + org.dromara.x-file-storage + x-file-storage-spring + ${x-file-storage.version} + + io.minio minio ${minio.version} + true + + + com.qcloud + cos_api + ${cos_api.version} + + + com.qcloud + cos-sts_api + ${cos-sts_api.version} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/FileAutoConfiguration.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/FileAutoConfiguration.java similarity index 81% rename from bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/FileAutoConfiguration.java rename to bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/FileAutoConfiguration.java index de9daaab3..2f201cbd3 100644 --- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/FileAutoConfiguration.java +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/FileAutoConfiguration.java @@ -1,6 +1,7 @@ -package cn.bootx.starter.file; +package cn.bootx.platform.starter.file; import org.apache.ibatis.annotations.Mapper; +import org.dromara.x.file.storage.spring.EnableFileStorage; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; @@ -11,11 +12,12 @@ * 文件管理 * * @author xxm - * @date 2022/1/12 + * @since 2022/1/12 */ @ComponentScan @ConfigurationPropertiesScan @EnableMongoRepositories +@EnableFileStorage @AutoConfiguration @MapperScan(annotationClass = Mapper.class) public class FileAutoConfiguration { diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/UploadFileParam.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/UploadFileParam.java new file mode 100644 index 000000000..8c69f0863 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/UploadFileParam.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.starter.file; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * 上传文件查询参数 + * @author xxm + * @since 2023/11/15 + */ +@Data +@Accessors(chain = true) +@Schema(title = "上传文件查询参数") +public class UploadFileParam { + + /** 原始文件名 */ + @Schema(description = "原始文件名") + private String originalFilename; + + /** 开始时间 */ + @Schema(description = "开始时间") + private LocalDateTime startTime; + + /** 结束时间 */ + @Schema(description = "结束时间") + private LocalDateTime endTime; + + /** 文件扩展名 */ + @Schema(description = "文件扩展名") + private String ext; + + /** MIME 类型 */ + @Schema(description = "MIME 类型") + private String contentType; + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/code/FileUploadTypeEnum.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/code/FileUploadTypeEnum.java new file mode 100644 index 000000000..f2bebea42 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/code/FileUploadTypeEnum.java @@ -0,0 +1,25 @@ +package cn.bootx.platform.starter.file.code; + +/** + * 文件上传类型 + * + * @author xxm + * @since 2022/1/14 + */ +public enum FileUploadTypeEnum { + + /** 本地存储 */ + LOCAL, + /** 数据库存储 */ + JDBC, + /** Mongo存储 */ + MONGO, + /** minio存储 */ + MINIO, + /** 阿里云 oss存储 */ + ALIYUN_OSS, + + /** 腾讯云 oss存储 */ + TENCENT_OSS + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/configuration/FileUploadProperties.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/configuration/FileUploadProperties.java new file mode 100644 index 000000000..ef17f63c8 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/configuration/FileUploadProperties.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.starter.file.configuration; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 文件上传配置 + * + * @author xxm + * @since 2022/1/14 + */ +@Data +@Accessors(chain = true) +@ConfigurationProperties(prefix = "bootx.starter.file-upload") +public class FileUploadProperties { + + /** + * 是否通过后端服务进行文件访问的代理 + * 开启 Web -> 后端服务 -> 具体的的文件服务 + */ + private boolean serviceProxy = true; + + /** + * 文件服务访问地址 + */ + private String serverUrl = "http://127.0.0.1:9999"; + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/controller/FIleUpLoadController.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/controller/FIleUpLoadController.java new file mode 100644 index 000000000..3ab35b888 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/controller/FIleUpLoadController.java @@ -0,0 +1,94 @@ +package cn.bootx.platform.starter.file.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.starter.file.UploadFileParam; +import cn.bootx.platform.starter.file.dto.UploadFileDto; +import cn.bootx.platform.starter.file.service.FileUploadService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 文件上传 + * + * @author xxm + * @since 2022/1/12 + */ +@IgnoreAuth +@Tag(name = "文件上传") +@RestController +@RequestMapping("/file") +@RequiredArgsConstructor +public class FIleUpLoadController { + + private final FileUploadService uploadService; + + @IgnoreAuth(ignore = false) + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(PageParam pageParam, UploadFileParam param) { + return Res.ok(uploadService.page(pageParam,param)); + } + + @IgnoreAuth(ignore = false) + @Operation(summary = "获取单条详情") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(uploadService.findById(id)); + } + + @Operation(summary = "删除") + @DeleteMapping("/delete") + public ResResult delete(Long id) { + uploadService.delete(id); + return Res.ok(); + } + + @IgnoreAuth(ignore = false, login = true) + @Operation(summary = "上传") + @PostMapping("/upload") + public ResResult local(MultipartFile file, String fileName) throws IOException { + return Res.ok(uploadService.upload(file, fileName)); + } + + @Operation(summary = "获取文件预览地址(流量会经过后端)") + @GetMapping("getFilePreviewUrl") + public ResResult getFilePreviewUrl(Long id) { + return Res.ok(uploadService.getFilePreviewUrl(id)); + } + + @Operation(summary = "获取文件预览地址前缀") + @GetMapping("getFilePreviewUrlPrefix") + public ResResult getFilePreviewUrlPrefix() { + return Res.ok(uploadService.getFilePreviewUrlPrefix()); + } + + @Operation(summary = "获取文件下载地址(流量会经过后端)") + @GetMapping("getFileDownloadUrl") + public ResResult getFileDownloadUrl(Long id) { + return Res.ok(uploadService.getFileDownloadUrl(id)); + } + + @Operation(summary = "预览文件(流量会经过后端)") + @GetMapping("/preview/{id}") + public void preview(@PathVariable Long id, HttpServletResponse response) { + uploadService.preview(id, response); + } + + @Operation(summary = "下载文件(流量会经过后端)") + @GetMapping("/download/{id}") + public ResponseEntity download(@PathVariable Long id) { + return uploadService.download(id); + } + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/convert/FileConvert.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/convert/FileConvert.java new file mode 100644 index 000000000..129d0ef2d --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/convert/FileConvert.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.starter.file.convert; + +import cn.bootx.platform.starter.file.dto.UploadFileDto; +import cn.bootx.platform.starter.file.entity.UploadFileInfo; +import org.dromara.x.file.storage.core.FileInfo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author xxm + * @since 2022/1/12 + */ +@Mapper +public interface FileConvert { + + FileConvert CONVERT = Mappers.getMapper(FileConvert.class); + + UploadFileDto convert(UploadFileInfo in); + + UploadFileInfo convert(FileInfo in); + + FileInfo toFileInfo(UploadFileInfo in); + + UploadFileDto toDto(FileInfo in); + + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataManager.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataManager.java new file mode 100644 index 000000000..352843fe9 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataManager.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.starter.file.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.starter.file.entity.JdbcFileData; +import org.springframework.stereotype.Repository; + +/** + * + * @author xxm + * @since 2023/8/5 + */ +@Repository +public class JdbcFileDataManager extends BaseManager { +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataMapper.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataMapper.java new file mode 100644 index 000000000..61a6deca4 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/JdbcFileDataMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.starter.file.dao; + +import cn.bootx.platform.starter.file.entity.JdbcFileData; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * @author xxm + * @since 2023/8/5 + */ +@Mapper +public interface JdbcFileDataMapper extends BaseMapper { +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileManager.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileManager.java new file mode 100644 index 000000000..16683cfb1 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileManager.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.starter.file.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.file.UploadFileParam; +import cn.bootx.platform.starter.file.entity.UploadFileInfo; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +/** + * @author xxm + * @since 2022/1/12 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class UploadFileManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, UploadFileParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, UploadFileInfo.class); + return lambdaQuery() + .like(StrUtil.isNotBlank(param.getOriginalFilename()), UploadFileInfo::getOriginalFilename, param.getOriginalFilename()) + .like(StrUtil.isNotBlank(param.getExt()), UploadFileInfo::getExt, param.getExt()) + .like(StrUtil.isNotBlank(param.getContentType()), UploadFileInfo::getContentType, param.getContentType()) + .ge(Objects.nonNull(param.getStartTime()), UploadFileInfo::getCreateTime, param.getStartTime()) + .le(Objects.nonNull(param.getEndTime()), UploadFileInfo::getCreateTime, param.getEndTime()) + .orderByDesc(UploadFileInfo::getId).page(mpPage); + } + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileMapper.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileMapper.java new file mode 100644 index 000000000..508fa55e0 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dao/UploadFileMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.starter.file.dao; + +import cn.bootx.platform.starter.file.entity.UploadFileInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2022/1/12 + */ +@Mapper +public interface UploadFileMapper extends BaseMapper { + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UpLoadOptions.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UpLoadOptions.java new file mode 100644 index 000000000..c94d00e9c --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UpLoadOptions.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.starter.file.dto; + +import lombok.Data; + +import java.util.TreeMap; + +@Data +public class UpLoadOptions { + private String tmpSecretId; + private String tmpSecretKey; + private String sessionToken; + + private Long expiredTime; + + private TreeMap formData; + + private String uploadUrl; + + private String key; + +} diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UploadFileDto.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UploadFileDto.java new file mode 100644 index 000000000..223897fa3 --- /dev/null +++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/dto/UploadFileDto.java @@ -0,0 +1,168 @@ +package cn.bootx.platform.starter.file.dto; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Dict; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.x.file.storage.core.FileInfo; +import org.dromara.x.file.storage.core.constant.Constant; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 上传文件信息 + * + * @author xxm + * @since 2022/1/12 + */ +@Data +@Accessors(chain = true) +public class UploadFileDto { + + /** + * 文件id + */ + private Long id; + + /** + * 文件访问地址 + */ + private String url; + + /** + * 文件大小,单位字节 + */ + private Long size; + + /** + * 文件名称 + */ + private String filename; + + /** + * 原始文件名 + */ + private String originalFilename; + + /** + * 基础存储路径 + */ + private String basePath; + + /** + * 存储路径 + */ + private String path; + + /** + * 文件扩展名 + */ + private String ext; + + /** + * MIME 类型 + */ + private String contentType; + + /** + * 存储平台 + */ + private String platform; + + /** + * 缩略图访问路径 + */ + private String thUrl; + + /** + * 缩略图名称 + */ + private String thFilename; + + /** + * 缩略图大小,单位字节 + */ + private Long thSize; + + /** + * 缩略图 MIME 类型 + */ + private String thContentType; + + /** + * 文件所属对象id + */ + private String objectId; + + /** + * 文件所属对象类型,例如用户头像,评价图片 + */ + private String objectType; + + /** + * 文件元数据 + */ + private Map metadata; + + /** + * 文件用户元数据 + */ + private Map userMetadata; + + /** + * 缩略图元数据 + */ + private Map thMetadata; + + /** + * 缩略图用户元数据 + */ + private Map thUserMetadata; + + /** + * 附加属性字典 + */ + private Dict attr; + + /** + * 文件的访问控制列表,一般情况下只有对象存储支持该功能,支持 String 或对应存储平台的 ACL 对象 + *
+     * //方式一,通过字符串设置通用的 ACL 详情:{@link Constant.ACL }
+     * setFileAcl(ACL.PUBLIC_READ);
+     * //方式二,针对指定存储平台设置更复杂的权限控制,以华为云 OBS 为例
+     * AccessControlList acl = new AccessControlList();
+     * Owner owner = new Owner();
+     * owner.setId("ownerid");
+     * acl.setOwner(owner);
+     * // 保留Owner的完全控制权限(注:如果不设置该权限,该对象Owner自身将没有访问权限)
+     * acl.grantPermission(new CanonicalGrantee("ownerid"), Permission.PERMISSION_FULL_CONTROL);
+     * // 为指定用户设置完全控制权限
+     * acl.grantPermission(new CanonicalGrantee("userid"), Permission.PERMISSION_FULL_CONTROL);
+     * // 为所有用户设置读权限
+     * acl.grantPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ);
+     * setFileAcl(acl);
+     * 
+     */
+    private Object fileAcl;
+
+    /**
+     * 缩略图的访问控制列表,一般情况下只有对象存储支持该功能
+     * 详情见{@link FileInfo#setFileAcl}
+     */
+    private Object thFileAcl;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+
+    /**
+     * 文件大小
+     */
+    public String getFileSize() {
+        return FileUtil.readableFileSize(size);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/JdbcFileData.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/JdbcFileData.java
new file mode 100644
index 000000000..7d8daf1e8
--- /dev/null
+++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/JdbcFileData.java
@@ -0,0 +1,28 @@
+package cn.bootx.platform.starter.file.entity;
+
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.table.modify.annotation.DbColumn;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 数据库存储上传的文件数据
+ * @author xxm
+ * @since 2023/8/5
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("starter_file_data")
+public class JdbcFileData extends MpIdEntity {
+
+    /** base64方式存储 */
+    @DbColumn(comment = "base64方式存储")
+    private String base64;
+
+    /** 数据方式存储 */
+    @DbColumn(comment = "数据方式存储")
+    private byte[] data;
+}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/UploadFileInfo.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/UploadFileInfo.java
new file mode 100644
index 000000000..44db35a2c
--- /dev/null
+++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/entity/UploadFileInfo.java
@@ -0,0 +1,190 @@
+package cn.bootx.platform.starter.file.entity;
+
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.handler.JacksonRawTypeHandler;
+import cn.bootx.platform.starter.file.convert.FileConvert;
+import cn.bootx.platform.starter.file.dto.UploadFileDto;
+import cn.hutool.core.lang.Dict;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.dromara.x.file.storage.core.FileInfo;
+import org.dromara.x.file.storage.core.constant.Constant;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * 上传文件信息
+ *
+ * @author xxm
+ * @since 2022/1/12
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName(value = "starter_file_upload_info", autoResultMap = true)
+public class UploadFileInfo extends MpIdEntity implements EntityBaseFunction {
+
+    /**
+     * 文件访问地址
+     */
+    private String url;
+
+    /**
+     * 文件大小,单位字节
+     */
+    private Long size;
+
+    /**
+     * 文件名称
+     */
+    private String filename;
+
+    /**
+     * 原始文件名
+     */
+    private String originalFilename;
+
+    /**
+     * 基础存储路径
+     */
+    private String basePath;
+
+    /**
+     * 存储路径
+     */
+    private String path;
+
+    /**
+     * 文件扩展名
+     */
+    private String ext;
+
+    /**
+     * MIME 类型
+     */
+    private String contentType;
+
+    /**
+     * 存储平台
+     */
+    private String platform;
+
+    /**
+     * 缩略图访问路径
+     */
+    private String thUrl;
+
+    /**
+     * 缩略图名称
+     */
+    private String thFilename;
+
+    /**
+     * 缩略图大小,单位字节
+     */
+    private Long thSize;
+
+    /**
+     * 缩略图 MIME 类型
+     */
+    private String thContentType;
+
+    /**
+     * 文件所属对象id
+     */
+    private String objectId;
+
+    /**
+     * 文件所属对象类型,例如用户头像,评价图片
+     */
+    private String objectType;
+
+    /**
+     * 文件元数据
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Map metadata;
+
+    /**
+     * 文件用户元数据
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Map userMetadata;
+
+    /**
+     * 缩略图元数据
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Map thMetadata;
+
+    /**
+     * 缩略图用户元数据
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Map thUserMetadata;
+
+    /**
+     * 附加属性字典
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Dict attr;
+
+    /**
+     * 文件的访问控制列表,一般情况下只有对象存储支持该功能,支持 String 或对应存储平台的 ACL 对象
+     * 
+     * //方式一,通过字符串设置通用的 ACL 详情:{@link Constant.ACL }
+     * setFileAcl(ACL.PUBLIC_READ);
+     * //方式二,针对指定存储平台设置更复杂的权限控制,以华为云 OBS 为例
+     * AccessControlList acl = new AccessControlList();
+     * Owner owner = new Owner();
+     * owner.setId("ownerid");
+     * acl.setOwner(owner);
+     * // 保留Owner的完全控制权限(注:如果不设置该权限,该对象Owner自身将没有访问权限)
+     * acl.grantPermission(new CanonicalGrantee("ownerid"), Permission.PERMISSION_FULL_CONTROL);
+     * // 为指定用户设置完全控制权限
+     * acl.grantPermission(new CanonicalGrantee("userid"), Permission.PERMISSION_FULL_CONTROL);
+     * // 为所有用户设置读权限
+     * acl.grantPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ);
+     * setFileAcl(acl);
+     * 
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Object fileAcl;
+
+    /**
+     * 缩略图的访问控制列表,一般情况下只有对象存储支持该功能
+     * 详情见{@link FileInfo#setFileAcl}
+     */
+    @TableField(typeHandler = JacksonRawTypeHandler.class)
+    private Object thFileAcl;
+
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @Override
+    public UploadFileDto toDto() {
+        return FileConvert.CONVERT.convert(this);
+    }
+
+    /**
+     * 初始化创建
+     */
+    public static UploadFileInfo init(FileInfo fileInfo){
+        return FileConvert.CONVERT.convert(fileInfo);
+    }
+
+    /**
+     * 转换为 x.file.storage 的文件信息对象
+     */
+    public FileInfo toFileInfo(){
+        return FileConvert.CONVERT.toFileInfo(this);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/handler/FileDetailRecordHandler.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/handler/FileDetailRecordHandler.java
new file mode 100644
index 000000000..ce5048eb7
--- /dev/null
+++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/handler/FileDetailRecordHandler.java
@@ -0,0 +1,58 @@
+package cn.bootx.platform.starter.file.handler;
+
+import cn.bootx.platform.common.core.exception.BizException;
+import cn.bootx.platform.starter.file.dao.UploadFileManager;
+import cn.bootx.platform.starter.file.entity.UploadFileInfo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.x.file.storage.core.FileInfo;
+import org.dromara.x.file.storage.core.recorder.FileRecorder;
+import org.springframework.stereotype.Service;
+
+/**
+ * x.file.storage 文件上传信息储存
+ * @author xxm
+ * @since 2023/11/13
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class FileDetailRecordHandler implements FileRecorder {
+    private final UploadFileManager uploadFileManager;
+
+    /**
+     * 保存文件记录
+     */
+    @Override
+    public boolean save(FileInfo fileInfo) {
+        UploadFileInfo save = uploadFileManager.save(UploadFileInfo.init(fileInfo));
+        fileInfo.setId(String.valueOf(save.getId()));
+        return true;
+    }
+
+    /**
+     * 根据 ID(Long) 获取文件记录, 注意不是根据URL
+     */
+    @Override
+    public FileInfo getByUrl(String url) {
+        try {
+            Long id = Long.valueOf(url);
+            return uploadFileManager.findById(id).map(UploadFileInfo::toFileInfo).orElse(null);
+        } catch (NumberFormatException e) {
+            throw new BizException("URL是文件的ID,注意不要传错参数");
+        }
+    }
+
+    /**
+     * 根据  ID(Long) 删除文件记录, 注意不是根据URL
+     */
+    @Override
+    public boolean delete(String url) {
+        try {
+            Long id = Long.valueOf(url);
+            return uploadFileManager.deleteById(id);
+        } catch (NumberFormatException e) {
+            return false;
+        }
+    }
+}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/service/FileUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/service/FileUploadService.java
new file mode 100644
index 000000000..5a9daa174
--- /dev/null
+++ b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/platform/starter/file/service/FileUploadService.java
@@ -0,0 +1,157 @@
+package cn.bootx.platform.starter.file.service;
+
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.file.UploadFileParam;
+import cn.bootx.platform.starter.file.configuration.FileUploadProperties;
+import cn.bootx.platform.starter.file.convert.FileConvert;
+import cn.bootx.platform.starter.file.dao.UploadFileManager;
+import cn.bootx.platform.starter.file.dto.UploadFileDto;
+import cn.bootx.platform.starter.file.entity.UploadFileInfo;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.StrUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.dromara.x.file.storage.core.FileInfo;
+import org.dromara.x.file.storage.core.FileStorageService;
+import org.dromara.x.file.storage.core.UploadPretreatment;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.net.URLEncoder;
+
+/**
+ * 文件上传管理类
+ *
+ * @author xxm
+ * @since 2022/1/14
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class FileUploadService {
+    private final UploadFileManager uploadFileManager;
+    private final FileStorageService fileStorageService;
+    private final FileUploadProperties fileUploadProperties;
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam, UploadFileParam param) {
+        return MpUtil.convert2DtoPageResult(uploadFileManager.page(pageParam,param));
+    }
+
+    /**
+     * 获取单条详情
+     */
+    public UploadFileDto findById(Long id){
+        return uploadFileManager.findById(id)
+                .map(UploadFileInfo::toDto)
+               .orElseThrow(DataNotExistException::new);
+    }
+
+    /**
+     * 文件删除
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(Long id){
+        UploadFileInfo uploadFileInfo = uploadFileManager.findById(id)
+                .orElseThrow(DataNotExistException::new);
+        fileStorageService.delete(FileConvert.CONVERT.toFileInfo(uploadFileInfo));
+    }
+
+    /**
+     * 文件上传
+     * @param file 文件
+     * @param fileName 文件名称
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public UploadFileDto upload(MultipartFile file, String fileName) {
+        UploadPretreatment uploadPretreatment = fileStorageService.of(file);
+        if (StrUtil.isNotBlank(fileName)){
+            uploadPretreatment.setOriginalFilename(fileName);
+        }
+        FileInfo upload =uploadPretreatment.upload();
+        return FileConvert.CONVERT.toDto(upload);
+    }
+
+    /**
+     * 浏览
+     */
+    @SneakyThrows
+    public void preview(Long id, HttpServletResponse response) {
+        FileInfo info = fileStorageService.getFileInfoByUrl(String.valueOf(id));
+        byte[] bytes = fileStorageService.download(info).bytes();
+        val is = new ByteArrayInputStream(bytes);
+        // 获取响应输出流
+        ServletOutputStream os = response.getOutputStream();
+        IoUtil.copy(is, os);
+        response.addHeader(HttpHeaders.CONTENT_DISPOSITION, info.getContentType());
+        IoUtil.close(is);
+        IoUtil.close(os);
+    }
+
+    /**
+     * 文件下载
+     */
+    @SneakyThrows
+    public ResponseEntity download(Long id) {
+        FileInfo fileInfo = fileStorageService.getFileInfoByUrl(String.valueOf(id));
+        byte[] bytes = fileStorageService.download(fileInfo).bytes();
+        // 设置header信息
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+        String fileName = fileInfo.getOriginalFilename();
+        headers.setContentDispositionFormData("attachment", URLEncoder.encode(fileName, CharsetUtil.UTF_8));
+        return new ResponseEntity<>(bytes,headers,HttpStatus.OK);
+    }
+
+    /**
+     * 获取文件预览地址
+     */
+    public String getFilePreviewUrl(Long id) {
+        if (fileUploadProperties.isServiceProxy()){
+            return this.getServerUrl() + "/file/preview/" + id;
+        } else {
+            return "";
+        }
+    }
+
+    /**
+     * 获取文件预览地址前缀
+     */
+    public String getFilePreviewUrlPrefix() {
+        return this.getServerUrl() + "/file/preview/";
+    }
+
+    /**
+     * 获取文件地址
+     */
+    public String getFileDownloadUrl(Long id) {
+        if (fileUploadProperties.isServiceProxy()){
+            return this.getServerUrl() + "/file/download/" + id;
+        } else {
+            return "";
+        }
+    }
+
+    /**
+     * 服务地址
+     */
+    private String getServerUrl() {
+        return fileUploadProperties.getServerUrl();
+    }
+}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/code/FileUploadTypeEnum.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/code/FileUploadTypeEnum.java
deleted file mode 100644
index 5e6b022c9..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/code/FileUploadTypeEnum.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.bootx.starter.file.code;
-
-/**
- * 文件上传类型
- *
- * @author xxm
- * @date 2022/1/14
- */
-public enum FileUploadTypeEnum {
-
-    /** 本地存储 */
-    LOCAL,
-    /** Mongo存储 */
-    MONGO,
-    /** minio存储 */
-    MINIO,
-    /** 阿里云 oss存储 */
-    ALIYUN_OSS
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadConfiguration.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadConfiguration.java
deleted file mode 100644
index 009e2bc44..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadConfiguration.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.file.configuration;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.mongodb.MongoDatabaseFactory;
-import org.springframework.data.mongodb.core.convert.MongoConverter;
-import org.springframework.data.mongodb.gridfs.GridFsTemplate;
-
-/**
- * 文件上传配置
- *
- * @author xxm
- * @date 2022/2/15
- */
-@Configuration
-@RequiredArgsConstructor
-public class FileUploadConfiguration {
-
-    private final FileUploadProperties properties;
-
-    /**
-     * 自定义 GridFsTemplate
-     */
-    @Bean
-    public GridFsTemplate gridFsTemplate(MongoDatabaseFactory dbFactory, MongoConverter converter) {
-        return new GridFsTemplate(dbFactory, converter, properties.getMongo().getBucket());
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadProperties.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadProperties.java
deleted file mode 100644
index d65d27e3a..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/configuration/FileUploadProperties.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package cn.bootx.starter.file.configuration;
-
-import cn.bootx.starter.file.code.FileUploadTypeEnum;
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * 文件上传配置
- *
- * @author xxm
- * @date 2022/1/14
- */
-@Data
-@Accessors(chain = true)
-@ConfigurationProperties(prefix = "bootx.starter.file-upload")
-public class FileUploadProperties {
-
-    /**
-     * 上传文件类型 默认为本地
-     */
-    private FileUploadTypeEnum uploadType = FileUploadTypeEnum.LOCAL;
-
-    /** 服务器地址,优先级低于系统参数配置 */
-    private String serverUrl = "http://127.0.0.1:9999";
-
-    /** 本地存储 */
-    private Local local = new Local();
-
-    /** mongo存储配置 */
-    private Mongo mongo = new Mongo();
-
-    /** minio存储配置 */
-    private Minio minio = new Minio();
-
-    /**
-     * 本地存储
-     */
-    @Getter
-    @Setter
-    public static class Local {
-
-        /** 本地存储路径 */
-        private String localPath = "/data/file/";
-
-    }
-
-    /**
-     * mongo存储配置
-     */
-    @Getter
-    @Setter
-    public static class Mongo {
-
-        /** 存储桶 */
-        private String bucket = "fs";
-
-    }
-
-    /**
-     * Minio存储配置
-     */
-    @Getter
-    @Setter
-    public static class Minio {
-
-        /** 端点地址 */
-        private String endpoint;
-
-        /** 区域 */
-        private String region;
-
-        /** 访问 key */
-        private String accessKey;
-
-        /** 访问 Secret */
-        private String accessSecret;
-
-        /** 存储桶 需要至少三位 */
-        private String bucket = "bootx";
-
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/controller/FIleUpLoadController.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/controller/FIleUpLoadController.java
deleted file mode 100644
index b89c2fe43..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/controller/FIleUpLoadController.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package cn.bootx.starter.file.controller;
-
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.file.dto.UpdateFileDto;
-import cn.bootx.starter.file.service.FileUploadService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 文件上传
- *
- * @author xxm
- * @date 2022/1/12
- */
-@IgnoreAuth
-@Tag(name = "文件上传")
-@RestController
-@RequestMapping("/file")
-@RequiredArgsConstructor
-public class FIleUpLoadController {
-
-    private final FileUploadService uploadService;
-
-    @IgnoreAuth(ignore = false)
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(PageParam pageParam) {
-        return Res.ok(uploadService.page(pageParam));
-    }
-
-    @IgnoreAuth(ignore = false, login = true)
-    @Operation(summary = "上传")
-    @PostMapping("/upload")
-    public ResResult local(MultipartFile file, String fileName) throws IOException {
-        return Res.ok(uploadService.upload(file, fileName));
-    }
-
-    @Operation(summary = "获取文件预览地址")
-    @GetMapping("getFilePreviewUrl")
-    public ResResult getFilePreviewUrl(Long id) {
-        return Res.ok(uploadService.getFilePreviewUrl(id));
-    }
-
-    @Operation(summary = "获取文件预览地址前缀")
-    @GetMapping("getFilePreviewUrlPrefix")
-    public ResResult getFilePreviewUrlPrefix() {
-        return Res.ok(uploadService.getFilePreviewUrlPrefix());
-    }
-
-    @Operation(summary = "获取文件下载地址")
-    @GetMapping("getFileDownloadUrl")
-    public ResResult getFileDownloadUrl(Long id) {
-        return Res.ok(uploadService.getFileDownloadUrl(id));
-    }
-
-    @Operation(summary = "预览文件")
-    @GetMapping("/preview/{id}")
-    public void preview(@PathVariable Long id, HttpServletResponse response) {
-        uploadService.preview(id, response);
-    }
-
-    @Operation(summary = "下载文件")
-    @GetMapping("/download/{id}")
-    public ResponseEntity download(@PathVariable Long id) {
-        return uploadService.download(id);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/convert/FileConvert.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/convert/FileConvert.java
deleted file mode 100644
index 429c34ee2..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/convert/FileConvert.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.starter.file.convert;
-
-import cn.bootx.starter.file.dto.UpdateFileDto;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * @author xxm
- * @date 2022/1/12
- */
-@Mapper
-public interface FileConvert {
-
-    FileConvert CONVERT = Mappers.getMapper(FileConvert.class);
-
-    UpdateFileDto convert(UpdateFileInfo in);
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileManager.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileManager.java
deleted file mode 100644
index e4d072164..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.file.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xxm
- * @date 2022/1/12
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class UpdateFileManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam) {
-        Page mpPage = MpUtil.getMpPage(pageParam, UpdateFileInfo.class);
-        return lambdaQuery().orderByDesc(UpdateFileInfo::getId).page(mpPage);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileMapper.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileMapper.java
deleted file mode 100644
index 8795669c7..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dao/UpdateFileMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.starter.file.dao;
-
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2022/1/12
- */
-@Mapper
-public interface UpdateFileMapper extends BaseMapper {
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dto/UpdateFileDto.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dto/UpdateFileDto.java
deleted file mode 100644
index 359bf6c90..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/dto/UpdateFileDto.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cn.bootx.starter.file.dto;
-
-import cn.hutool.core.io.FileUtil;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-
-/**
- * 上传文件信息
- *
- * @author xxm
- * @date 2022/1/12
- */
-@Data
-@Accessors(chain = true)
-public class UpdateFileDto {
-
-    /** 主键 */
-    private Long id;
-
-    /** 存储位置 */
-    private String filePath;
-
-    /** 文件名称 */
-    private String fileName;
-
-    /** 文件后缀 */
-    private String fileSuffix;
-
-    /** 文件类型 */
-    private String fileType;
-
-    /** 文件大小 */
-    private Long fileSize;
-
-    /** 外部存储id */
-    private String externalStorageId;
-
-    /** 创建者ID */
-    @TableField(fill = FieldFill.INSERT)
-    private Long creator;
-
-    /** 创建时间 */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    public String getFileSize() {
-        return FileUtil.readableFileSize(fileSize);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UpdateFileInfo.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UpdateFileInfo.java
deleted file mode 100644
index 0ec5c16ce..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UpdateFileInfo.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cn.bootx.starter.file.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.starter.file.convert.FileConvert;
-import cn.bootx.starter.file.dto.UpdateFileDto;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-
-/**
- * 上传文件信息
- *
- * @author xxm
- * @date 2022/1/12
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("starter_file_upload_info")
-public class UpdateFileInfo extends MpIdEntity implements EntityBaseFunction {
-
-    /** 存储位置 */
-    private String filePath;
-
-    /** 文件名称 */
-    private String fileName;
-
-    /** 文件类型 */
-    private String fileType;
-
-    /** 文件后缀 */
-    private String fileSuffix;
-
-    /** 文件大小 */
-    private Long fileSize;
-
-    /** 外部存储id */
-    private String externalStorageId;
-
-    /** 创建者ID */
-    @TableField(fill = FieldFill.INSERT)
-    private Long creator;
-
-    /** 创建时间 */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    @Override
-    public UpdateFileDto toDto() {
-        return FileConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UploadFileContext.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UploadFileContext.java
deleted file mode 100644
index 3349d86eb..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/entity/UploadFileContext.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.starter.file.entity;
-
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * 上传文件上下文
- *
- * @author xxm
- * @date 2022/1/20
- */
-@Data
-@Accessors(chain = true)
-public class UploadFileContext {
-
-    /** 文件id */
-    private Long fileId;
-
-    /** 文件名称 */
-    private String fileName;
-
-    /** 文件后缀名 */
-    private String fileSuffix;
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/FileUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/FileUploadService.java
deleted file mode 100644
index 7ad60e59a..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/FileUploadService.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package cn.bootx.starter.file.service;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.function.ParamService;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.file.configuration.FileUploadProperties;
-import cn.bootx.starter.file.dao.UpdateFileManager;
-import cn.bootx.starter.file.dto.UpdateFileDto;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.bootx.starter.file.entity.UploadFileContext;
-import cn.hutool.core.io.FileTypeUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
-
-/**
- * 文件上传管理类
- *
- * @author xxm
- * @date 2022/1/14
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class FileUploadService {
-
-    private final List uploadServices;
-
-    private final UpdateFileManager updateFileManager;
-
-    private final FileUploadProperties fileUploadProperties;
-
-    private final ParamService paramService;
-
-    /**
-     * 文件上传
-     * @param file 文件
-     * @param fileName 文件名称
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public UpdateFileDto upload(MultipartFile file, String fileName) throws IOException {
-        val uploadType = fileUploadProperties.getUploadType();
-        UploadService uploadService = uploadServices.stream()
-            .filter(s -> s.enable(uploadType))
-            .findFirst()
-            .orElseThrow(() -> new BizException("未找到该类的上传处理器"));
-        if (file.isEmpty()) {
-            throw new BizException("文件不可为空");
-        }
-        // 上传文件信息
-        if (StrUtil.isBlank(fileName)) {
-            fileName = file.getOriginalFilename();
-        }
-        String fileType = FileTypeUtil.getType(file.getInputStream(), fileName);
-        String fileSuffix = fileType;
-
-        // 获取不到类型名,后缀名使用上传文件名称的后缀
-        if (StrUtil.isBlank(fileSuffix)) {
-            fileSuffix = StrUtil.subAfter(fileName, ".", true);
-        }
-        UploadFileContext context = new UploadFileContext().setFileId(IdUtil.getSnowflakeNextId())
-            .setFileName(fileName)
-            .setFileSuffix(fileSuffix);
-
-        UpdateFileInfo uploadInfo = uploadService.upload(file, context);
-        uploadInfo.setFileSuffix(fileSuffix).setFileType(fileType).setFileName(fileName);
-        uploadInfo.setId(context.getFileId());
-        updateFileManager.save(uploadInfo);
-        return uploadInfo.toDto();
-    }
-
-    /**
-     * 浏览
-     */
-    public void preview(Long id, HttpServletResponse response) {
-        val uploadType = fileUploadProperties.getUploadType();
-        UploadService uploadService = uploadServices.stream()
-            .filter(s -> s.enable(uploadType))
-            .findFirst()
-            .orElseThrow(() -> new BizException("未找到该类的上传处理器"));
-        UpdateFileInfo updateFileInfo = updateFileManager.findById(id).orElseThrow(() -> new BizException("文件不存在"));
-        uploadService.preview(updateFileInfo, response);
-    }
-
-    /**
-     * 文件下载
-     */
-    public ResponseEntity download(Long id) {
-        val uploadType = fileUploadProperties.getUploadType();
-        UploadService uploadService = uploadServices.stream()
-            .filter(s -> s.enable(uploadType))
-            .findFirst()
-            .orElseThrow(() -> new BizException("未找到该类文件的处理器"));
-        UpdateFileInfo updateFileInfo = updateFileManager.findById(id).orElseThrow(() -> new BizException("文件不存在"));
-        InputStream inputStream = uploadService.download(updateFileInfo);
-        // 设置header信息
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
-        headers.setContentDispositionFormData("attachment",
-                new String(updateFileInfo.getFileName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
-        return new ResponseEntity<>(IoUtil.readBytes(inputStream), headers, HttpStatus.OK);
-    }
-
-    /**
-     * 获取文件字节数组
-     */
-    public byte[] getFileBytes(Long id) {
-        val uploadType = fileUploadProperties.getUploadType();
-        UploadService uploadService = uploadServices.stream()
-            .filter(s -> s.enable(uploadType))
-            .findFirst()
-            .orElseThrow(() -> new BizException("未找到该类文件的处理器"));
-        UpdateFileInfo updateFileInfo = updateFileManager.findById(id).orElseThrow(() -> new BizException("文件不存在"));
-        InputStream inputStream = uploadService.download(updateFileInfo);
-        return IoUtil.readBytes(inputStream);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2DtoPageResult(updateFileManager.page(pageParam));
-    }
-
-    /**
-     * 获取文件预览地址
-     */
-    public String getFilePreviewUrl(Long id) {
-        return this.getServerUrl() + "/file/preview/" + id;
-    }
-
-    /**
-     * 获取文件预览地址前缀
-     */
-    public String getFilePreviewUrlPrefix() {
-        return this.getServerUrl() + "/file/preview/";
-    }
-
-    /**
-     * 获取文件地址
-     */
-    public String getFileDownloadUrl(Long id) {
-        return this.getServerUrl() + "/file/download/" + id;
-    }
-
-    /**
-     * 服务地址
-     */
-    private String getServerUrl() {
-        String serverUrl = paramService.getValue("FileServerUrl");
-        if (StrUtil.isBlank(serverUrl)) {
-            serverUrl = fileUploadProperties.getServerUrl();
-        }
-        return serverUrl;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/UploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/UploadService.java
deleted file mode 100644
index 648893f52..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/UploadService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package cn.bootx.starter.file.service;
-
-import cn.bootx.starter.file.code.FileUploadTypeEnum;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.bootx.starter.file.entity.UploadFileContext;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-
-/**
- * 文件上传接口
- *
- * @author xxm
- * @date 2022/1/14
- */
-public interface UploadService {
-
-    /**
-     * 判断启用
-     */
-    boolean enable(FileUploadTypeEnum type);
-
-    /**
-     * 上传文件
-     */
-    UpdateFileInfo upload(MultipartFile file, UploadFileContext context);
-
-    /**
-     * 预览文件
-     */
-    void preview(UpdateFileInfo updateFileInfo, HttpServletResponse response);
-
-    /**
-     * 下载文件
-     */
-    InputStream download(UpdateFileInfo updateFileInfo);
-
-    /**
-     * 删除文件
-     */
-    void delete(UpdateFileInfo updateFileInfo);
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/LocalUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/LocalUploadService.java
deleted file mode 100644
index 99a8a1b15..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/LocalUploadService.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package cn.bootx.starter.file.service.impl;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.starter.file.code.FileUploadTypeEnum;
-import cn.bootx.starter.file.configuration.FileUploadProperties;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.bootx.starter.file.entity.UploadFileContext;
-import cn.bootx.starter.file.service.UploadService;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.IdUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.util.Optional;
-
-/**
- * 上传文件本地存储
- *
- * @author xxm
- * @date 2022/1/12
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class LocalUploadService implements UploadService {
-
-    private final FileUploadProperties fileUploadProperties;
-
-    @Override
-    public boolean enable(FileUploadTypeEnum type) {
-        return type == FileUploadTypeEnum.LOCAL;
-    }
-
-    /**
-     * 文件上传
-     */
-    @SneakyThrows
-    @Override
-    public UpdateFileInfo upload(MultipartFile file, UploadFileContext context) {
-        String fileSuffix = Optional.ofNullable(context.getFileSuffix()).map(s -> "." + s).orElse("");
-        String filePath = DateUtil.today() + "/" + IdUtil.getSnowflakeNextIdStr() + fileSuffix;
-        String storePath = fileUploadProperties.getLocal().getLocalPath() + filePath;
-        FileUtil.writeFromStream(file.getInputStream(), storePath);
-        return new UpdateFileInfo().setFilePath(filePath).setFileSize(file.getSize());
-    }
-
-    /**
-     * 浏览
-     */
-    @SneakyThrows
-    @Override
-    public void preview(UpdateFileInfo updateFileInfo, HttpServletResponse response) {
-        String storePath = fileUploadProperties.getLocal().getLocalPath() + updateFileInfo.getFilePath();
-        File file = new File(storePath);
-        if (!file.exists()) {
-            throw new BizException("文件不存在");
-        }
-        FileInputStream is = new FileInputStream(file);
-        // 获取响应输出流
-        ServletOutputStream os = response.getOutputStream();
-        IoUtil.copy(is, os);
-        response.addHeader(HttpHeaders.CONTENT_DISPOSITION, updateFileInfo.getFileType());
-        IoUtil.close(is);
-        IoUtil.close(os);
-    }
-
-    /**
-     * 下载
-     */
-    @SneakyThrows
-    @Override
-    public InputStream download(UpdateFileInfo updateFileInfo) {
-        String storePath = fileUploadProperties.getLocal().getLocalPath() + updateFileInfo.getFilePath();
-        File file = new File(storePath);
-        if (!file.exists()) {
-            throw new BizException("文件不存在");
-        }
-        return Files.newInputStream(file.toPath());
-    }
-
-    /**
-     * 删除文件
-     */
-    @Override
-    public void delete(UpdateFileInfo updateFileInfo) {
-        String storePath = fileUploadProperties.getLocal().getLocalPath() + updateFileInfo.getFilePath();
-        FileUtil.del(storePath);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MinioUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MinioUploadService.java
deleted file mode 100644
index d1ae8ef6c..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MinioUploadService.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package cn.bootx.starter.file.service.impl;
-
-import cn.bootx.starter.file.code.FileUploadTypeEnum;
-import cn.bootx.starter.file.configuration.FileUploadProperties;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.bootx.starter.file.entity.UploadFileContext;
-import cn.bootx.starter.file.service.UploadService;
-import cn.hutool.core.io.IoUtil;
-import io.minio.*;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.util.Objects;
-
-/**
- * minio方式存储文件
- *
- * @author xxm
- * @date 2022/1/12
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class MinioUploadService implements UploadService {
-
-    private final FileUploadProperties fileUploadProperties;
-
-    private MinioClient client;
-
-    /**
-     * 判断启用
-     */
-    @Override
-    public boolean enable(FileUploadTypeEnum type) {
-        boolean b = type == FileUploadTypeEnum.MINIO;
-        if (b) {
-            this.doInit();
-        }
-        return b;
-    }
-
-    /**
-     * 上传文件
-     */
-    @SneakyThrows
-    @Override
-    public UpdateFileInfo upload(MultipartFile file, UploadFileContext context) {
-        FileUploadProperties.Minio minio = fileUploadProperties.getMinio();
-        PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-            .bucket(minio.getBucket()) // bucket
-                                       // 必须传递
-            .contentType(file.getContentType())
-            .object(context.getFileId() + "." + context.getFileSuffix())
-            .stream(file.getInputStream(), file.getSize(), -1) // 文件内容
-            .build();
-        // 执行上传
-        client.putObject(putObjectArgs);
-        return new UpdateFileInfo().setExternalStorageId(putObjectArgs.object()).setFileSize(file.getSize());
-    }
-
-    /**
-     * 预览文件
-     */
-    @SneakyThrows
-    @Override
-    public void preview(UpdateFileInfo updateFileInfo, HttpServletResponse response) {
-        FileUploadProperties.Minio minio = fileUploadProperties.getMinio();
-        String storageId = updateFileInfo.getExternalStorageId();
-        GetObjectResponse inputStream = client
-            .getObject(GetObjectArgs.builder().bucket(minio.getBucket()).object(storageId).build());
-        // 获取响应输出流
-        ServletOutputStream os = response.getOutputStream();
-        IoUtil.copy(inputStream, os);
-        response.addHeader(HttpHeaders.CONTENT_DISPOSITION, updateFileInfo.getFileType());
-        IoUtil.close(inputStream);
-        IoUtil.close(os);
-    }
-
-    /**
-     * 下载文件
-     */
-    @SneakyThrows
-    @Override
-    public InputStream download(UpdateFileInfo updateFileInfo) {
-        FileUploadProperties.Minio minio = fileUploadProperties.getMinio();
-        String storageId = updateFileInfo.getExternalStorageId();
-        return client.getObject(GetObjectArgs.builder()
-            .bucket(minio.getBucket()) // bucket
-                                       // 必须传递
-            .object(storageId) // 相对路径作为 key
-            .build());
-    }
-
-    /**
-     * 删除文件
-     */
-    @SneakyThrows
-    @Override
-    public void delete(UpdateFileInfo updateFileInfo) {
-        FileUploadProperties.Minio minio = fileUploadProperties.getMinio();
-        client.removeObject(RemoveObjectArgs.builder()
-            .bucket(minio.getBucket()) // bucket
-                                       // 必须传递
-            .object(updateFileInfo.getExternalStorageId()) // 相对路径作为 key
-            .build());
-    }
-
-    /**
-     * 初始化
-     */
-    protected void doInit() {
-        if (Objects.nonNull(client)) {
-            return;
-        }
-        FileUploadProperties.Minio minio = fileUploadProperties.getMinio();
-        // 初始化客户端
-        client = MinioClient.builder()
-            .endpoint(minio.getEndpoint()) // Endpoint URL
-            .region(minio.getRegion()) // Region
-            .credentials(minio.getAccessKey(), minio.getAccessSecret()) // 认证密钥
-            .build();
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MongoUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MongoUploadService.java
deleted file mode 100644
index fda3531ff..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/MongoUploadService.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package cn.bootx.starter.file.service.impl;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.starter.file.code.FileUploadTypeEnum;
-import cn.bootx.starter.file.entity.UpdateFileInfo;
-import cn.bootx.starter.file.entity.UploadFileContext;
-import cn.bootx.starter.file.service.UploadService;
-import cn.hutool.core.io.IoUtil;
-import com.mongodb.client.gridfs.model.GridFSFile;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.bson.types.ObjectId;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.data.mongodb.gridfs.GridFsResource;
-import org.springframework.data.mongodb.gridfs.GridFsTemplate;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
-import java.util.Optional;
-
-/**
- * mongo方式存储文件
- *
- * @author xxm
- * @date 2022/1/12
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class MongoUploadService implements UploadService {
-
-    private final GridFsTemplate gridFsTemplate;
-
-    @Override
-    public boolean enable(FileUploadTypeEnum type) {
-        return type == FileUploadTypeEnum.MONGO;
-    }
-
-    /**
-     * 上传
-     */
-    @SneakyThrows
-    @Override
-    public UpdateFileInfo upload(MultipartFile file, UploadFileContext context) {
-        ObjectId store = gridFsTemplate.store(file.getInputStream(), context.getFileName(), file.getContentType());
-        return new UpdateFileInfo().setExternalStorageId(store.toString()).setFileSize(file.getSize());
-    }
-
-    @SneakyThrows
-    @Override
-    public void preview(UpdateFileInfo updateFileInfo, HttpServletResponse response) {
-        Criteria criteria = Criteria.where("_id").is(updateFileInfo.getExternalStorageId());
-        Query query = new Query(criteria);
-
-        GridFSFile gridFSFile = Optional.ofNullable(gridFsTemplate.findOne(query))
-            .orElseThrow(DataNotExistException::new);
-        GridFsResource resource = gridFsTemplate.getResource(gridFSFile);
-        InputStream inputStream = resource.getInputStream();
-
-        // 获取响应输出流
-        ServletOutputStream os = response.getOutputStream();
-        IoUtil.copy(inputStream, os);
-        response.addHeader(HttpHeaders.CONTENT_DISPOSITION, updateFileInfo.getFileType());
-        IoUtil.close(inputStream);
-        IoUtil.close(os);
-    }
-
-    @SneakyThrows
-    @Override
-    public InputStream download(UpdateFileInfo updateFileInfo) {
-        Criteria criteria = Criteria.where("_id").is(new ObjectId(updateFileInfo.getExternalStorageId()));
-        Query query = new Query(criteria);
-
-        GridFSFile gridFSFile = Optional.ofNullable(gridFsTemplate.findOne(query))
-            .orElseThrow(DataNotExistException::new);
-        GridFsResource resource = gridFsTemplate.getResource(gridFSFile);
-        return resource.getInputStream();
-    }
-
-    /**
-     * 删除文件
-     */
-    @Override
-    public void delete(UpdateFileInfo updateFileInfo) {
-        Criteria criteria = Criteria.where("_id").is(new ObjectId(updateFileInfo.getExternalStorageId()));
-        Query query = new Query(criteria);
-        gridFsTemplate.delete(query);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/OssUploadService.java b/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/OssUploadService.java
deleted file mode 100644
index 7e3a43f24..000000000
--- a/bootx-common-starters/common-starter-file/src/main/java/cn/bootx/starter/file/service/impl/OssUploadService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.starter.file.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * 阿里云OSS上传文件
- *
- * @author xxm
- * @date 2022/1/12
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class OssUploadService {
-
-}
diff --git a/bootx-common-starters/common-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 08cbdeedc..279f8e239 100644
--- a/bootx-common-starters/common-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-common-starters/common-starter-file/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.file.FileAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.starter.file.FileAutoConfiguration
diff --git a/bootx-common-starters/common-starter-flowable/pom.xml b/bootx-common-starters/common-starter-flowable/pom.xml
deleted file mode 100644
index 73bb2135c..000000000
--- a/bootx-common-starters/common-starter-flowable/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-    
-        bootx-common-starters
-        cn.bootx.platform
-        1.2.3
-    
-    4.0.0
-
-    common-starter-flowable
-
-    
-        
-        
-            cn.bootx.platform
-            common-starter-auth
-        
-        
-        
-            cn.bootx.platform
-            common-mybatis-plus
-        
-        
-        
-            org.flowable
-            flowable-spring-boot-starter-process
-            ${flowable.version}
-            
-                
-                    org.mybatis
-                    mybatis
-                
-            
-        
-        
-            org.flowable
-            flowable-spring-boot-starter-actuator
-            ${flowable.version}
-        
-    
-
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/FlowableAutoConfiguration.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/FlowableAutoConfiguration.java
deleted file mode 100644
index 706dd31ab..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/FlowableAutoConfiguration.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable;
-
-import org.apache.ibatis.annotations.Mapper;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * 工作流
- *
- * @author xxm
- * @date 2022/8/22
- */
-@ComponentScan
-@ConfigurationPropertiesScan
-@AutoConfiguration
-@MapperScan(annotationClass = Mapper.class)
-public class FlowableAutoConfiguration {
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/BpmnCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/BpmnCode.java
deleted file mode 100644
index c71ca9fb0..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/BpmnCode.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 流程
- *
- * @author xxm
- * @date 2022/9/6
- */
-public interface BpmnCode {
-
-    /** collectionString(候选人集合) */
-    String MULTI_COLLECTION = "assignees";
-
-    /** collectionElementVariable(迭代出来的处理人) */
-    String MULTI_COLLECTION_ELEMENT = "assign";
-
-    /** 下一步标志 */
-    String NEXT_NODE_FLAG = "nextNode";
-
-    /** 多实例任务标示 */
-    String MULTI_TASK_ID = "multiId";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/CachingCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/CachingCode.java
deleted file mode 100644
index a16ff4c87..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/CachingCode.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 缓存key常量
- *
- * @author xxm
- * @date 2022/9/4
- */
-public interface CachingCode {
-
-    /* 流程节点扩展 */
-    /** 定义和节点id */
-    String NODE_DEF_AND_NODE = "flowable:model:node";
-
-    /** 缓存列表, 使用模型id/modelId */
-    String NODE_MODEL_ID = "flowable:model:nodes";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/InstanceCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/InstanceCode.java
deleted file mode 100644
index 8e39d850b..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/InstanceCode.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 流程实例的状态
- *
- * @author xxm
- * @date 2022/8/23
- */
-public interface InstanceCode {
-
-    /** 运行中 */
-    String STATE_RUNNING = "running";
-
-    /** 已完成 */
-    String STATE_FINISH = "finish";
-
-    /** 取消 */
-    String STATE_CANCEL = "cancel";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelCode.java
deleted file mode 100644
index b1cb80baa..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelCode.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 工作流模型代码
- *
- * @author xxm
- * @date 2022/8/23
- */
-public interface ModelCode {
-
-    /** 流程定义已发布 */
-    String PUBLISHED = "published";
-
-    /** 流程定义未发布 */
-    String UNPUBLISHED = "unpublished";
-
-    /** 默认的bpmn20.xml */
-    String DEFAULT_XML = "\n"
-            + "\n"
-            + "  \n" + "  \n"
-            + "    \n"
-            + "  \n" + "";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelNodeCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelNodeCode.java
deleted file mode 100644
index 64fda90b5..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/ModelNodeCode.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 模型节点配置
- *
- * @author xxm
- * @date 2022/9/4
- */
-public interface ModelNodeCode {
-
-    /* 用户分配类型 */
-    /** 发起人 */
-    String ASSIGN_SPONSOR = "sponsor";
-
-    /** 用户手动选择 */
-    String ASSIGN_SELECT = "select";
-
-    /** 单用户 */
-    String ASSIGN_USER = "user";
-
-    /** 用户组 */
-    String ASSIGN_USER_GROUP = "userGroup";
-
-    /** 角色 */
-    String ASSIGN_ROLE = "role";
-
-    /** 角色组 */
-    String ASSIGN_GROUP = "roleGroup";
-
-    /** 部门成员 */
-    String ASSIGN_DEPT_MEMBER = "deptMember";
-
-    /** 部门的负责人 */
-    String ASSIGN_DEPT_LEADER = "deptLeader";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/TaskCode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/TaskCode.java
deleted file mode 100644
index 15b676599..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/code/TaskCode.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package cn.bootx.starter.flowable.code;
-
-/**
- * 流程任务常量
- *
- * @author xxm
- * @date 2022/9/4
- */
-public interface TaskCode {
-
-    /* 处理状态 */
-    /** 处理中 */
-    String STATE_PROCESS = "running";
-
-    /** 通过 */
-    String STATE_PASS = "pass";
-
-    /** 驳回 */
-    String STATE_REJECT = "reject";
-
-    /** 退回 */
-    String STATE_BACK = "back";
-
-    /** 取回 */
-    String STATE_RETRIEVE = "retrieve";
-
-    /** 跳过 */
-    String STATE_SKIP = "skip";
-
-    /** 取消 */
-    String STATE_CANCEL = "cancel";
-
-    /* 处理结果 */
-    /** 通过 */
-    String RESULT_PASS = "pass";
-
-    /** 不通过 */
-    String RESULT_NOT_PASS = "notPass";
-
-    /** 弃权 */
-    String RESULT_ABSTAIN = "abstain";
-
-    /** 驳回 */
-    String RESULT_REJECT = "reject";
-
-    /** 自动完成 */
-    String RESULT_AUTO_FINISH = "autoFinish";
-
-    /** 退回 */
-    String RESULT_BACK = "back";
-
-    /** 取回 */
-    String RESULT_RETRIEVE = "retrieve";
-
-    /** 取消 */
-    String RESULT_CANCEL = "cancel";
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/config/FlowableConfiguration.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/config/FlowableConfiguration.java
deleted file mode 100644
index 6753d3198..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/config/FlowableConfiguration.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.bootx.starter.flowable.config;
-
-import cn.bootx.starter.flowable.handler.behavior.BpmActivityBehaviorFactory;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.util.IdUtil;
-import org.flowable.common.engine.api.delegate.event.FlowableEventListener;
-import org.flowable.spring.SpringProcessEngineConfiguration;
-import org.flowable.spring.boot.EngineConfigurationConfigurer;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Flowable 配置类
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Configuration
-public class FlowableConfiguration {
-
-    /**
-     * 1. 设置各种监听器 2. 设置自定义的 ActivityBehaviorFactory 实现 3. 其他的一些配置
-     */
-    @Bean
-    public EngineConfigurationConfigurer bpmProcessEngineConfigurationConfigurer(
-            ObjectProvider listeners, BpmActivityBehaviorFactory bpmActivityBehaviorFactory) {
-        return configuration -> {
-            // 注册监听器
-            configuration.setEventListeners(ListUtil.toList(listeners.iterator()));
-            // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义
-            configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory);
-            // 注册id生成器, 使用雪花id
-            configuration.setIdGenerator(IdUtil::getSnowflakeNextIdStr);
-            // 部署时不生成流程图图片
-            configuration.setCreateDiagramOnDeploy(false);
-        };
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmAssistControl.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmAssistControl.java
deleted file mode 100644
index 3d37b86bc..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmAssistControl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.starter.flowable.core.model.service.BpmAssistService;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 工作流基础支撑接口
- * @author xxm
- * @date 2023/3/28
- */
-@Tag(name = "工作流基础支撑接口")
-@RestController
-@RequestMapping("/bpm/assist")
-@RequiredArgsConstructor
-public class BpmAssistControl {
-    private final BpmAssistService bpmAssistService;
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceAdminController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceAdminController.java
deleted file mode 100644
index afa32de9a..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceAdminController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.core.instance.service.BpmInstanceAdminService;
-import cn.bootx.starter.flowable.dto.instance.InstanceInfo;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springdoc.api.annotations.ParameterObject;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 流程实例管理服务
- *
- * @author xxm
- * @date 2022/9/17
- */
-@Tag(name = "流程实例管理服务")
-@RestController
-@RequestMapping("/bpm/admin/instance")
-@RequiredArgsConstructor
-public class BpmInstanceAdminController {
-
-    private final BpmInstanceAdminService adminService;
-
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(@ParameterObject PageParam pageParam) {
-        return Res.ok(adminService.page(pageParam));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceController.java
deleted file mode 100644
index c853ca8cb..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmInstanceController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.core.instance.service.BpmInstanceQueryService;
-import cn.bootx.starter.flowable.core.instance.service.BpmInstanceOperateService;
-import cn.bootx.starter.flowable.dto.instance.ActivityInstanceChart;
-import cn.bootx.starter.flowable.dto.instance.BpmInstanceDto;
-import cn.bootx.starter.flowable.dto.instance.InstanceInfo;
-import cn.bootx.starter.flowable.param.instance.InstanceStartParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springdoc.api.annotations.ParameterObject;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 流程实例
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Tag(name = "流程实例")
-@RestController
-@RequestMapping("/bpm/instance")
-@RequiredArgsConstructor
-public class BpmInstanceController {
-
-    private final BpmInstanceOperateService operateService;
-
-    private final BpmInstanceQueryService queryService;
-
-    @Operation(summary = "启动任务")
-    @PostMapping("/start")
-    public ResResult start(@RequestBody InstanceStartParam instanceParam) {
-        operateService.start(instanceParam);
-        return Res.ok();
-    }
-
-    @Operation(summary = "挂起流程")
-    @PostMapping("/suspend")
-    public ResResult suspend(String instanceId) {
-        operateService.suspend(instanceId);
-        return Res.ok();
-    }
-
-    @Operation(summary = "激活流程")
-    @PostMapping("/activate")
-    public ResResult activate(String instanceId) {
-        operateService.activate(instanceId);
-        return Res.ok();
-    }
-
-    @Operation(summary = "关闭流程")
-    @PostMapping("/close")
-    public ResResult close(String instanceId) {
-        operateService.close(instanceId);
-        return Res.ok();
-    }
-
-    @Operation(summary = "根据流程Id获取详情")
-    @GetMapping("/findByInstanceId")
-    public ResResult findByInstanceId(String instanceId) {
-        return Res.ok(queryService.findByInstanceId(instanceId));
-    }
-
-    @Operation(summary = "获取当前正在执行的节点")
-    @GetMapping("/getCurrentNodes")
-    public ResResult> getCurrentNodes(String instanceId) {
-        return Res.ok(queryService.getCurrentNodes(instanceId));
-    }
-
-    @Operation(summary = "获取可回退节点")
-    @GetMapping("/getBackNodes")
-    public ResResult> getBackNodes(String instanceId) {
-        return Res.ok(queryService.getBackNodes(instanceId));
-    }
-
-    @Operation(summary = "获取流程执行的节点, 用于绘制流程图")
-    @GetMapping("/getFlowNodes")
-    public ResResult> getFlowNodes(String instanceId) {
-        return Res.ok(queryService.getFlowNodes(instanceId));
-    }
-
-    @Operation(summary = "我发起的流程(分页)")
-    @GetMapping("/pageMyApply")
-    public ResResult> pageMyApply(@ParameterObject PageParam pageParam) {
-        return Res.ok(queryService.pageMyApply(pageParam));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelController.java
deleted file mode 100644
index fa323969d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelController.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.core.model.service.BpmModelService;
-import cn.bootx.starter.flowable.dto.model.BpmModelDto;
-import cn.bootx.starter.flowable.param.model.BpmModelParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Tag(name = "流程模型")
-@RestController
-@RequestMapping("/bpm/model")
-@RequiredArgsConstructor
-public class BpmModelController {
-
-    private final BpmModelService bpmModelService;
-
-    @Operation(summary = "增加流程模型")
-    @PostMapping("/add")
-    public ResResult add(@RequestBody BpmModelParam flowModelParam) {
-        bpmModelService.add(flowModelParam);
-        return Res.ok();
-    }
-
-    @Operation(summary = "上传BPMN文件")
-    @PostMapping("/uploadBpmn")
-    public ResResult uploadBpmn(@RequestBody BpmModelParam bpmModelParam) {
-        bpmModelService.uploadBpmn(bpmModelParam);
-        return Res.ok();
-    }
-
-    @Operation(summary = "上传BPMN文件")
-    @PostMapping("/copy")
-    public ResResult uploadBpmn(Long id) {
-        bpmModelService.copy(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "发布")
-    @PostMapping("/publish")
-    public ResResult publish(Long id) {
-        bpmModelService.publish(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "校验流程")
-    @GetMapping("/verifyModel")
-    public ResResult verifyModel(Long id) {
-        bpmModelService.verifyModel(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "更新")
-    @PostMapping("/update")
-    public ResResult update(@RequestBody BpmModelParam param) {
-        bpmModelService.update(param);
-        return Res.ok();
-    }
-
-    @Operation(summary = "删除")
-    @DeleteMapping(value = "/delete")
-    public ResResult delete(Long id) {
-        bpmModelService.delete(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "通过ID查询")
-    @GetMapping(value = "/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(bpmModelService.findById(id));
-    }
-
-    @Operation(summary = "分页查询")
-    @GetMapping(value = "/page")
-    public ResResult> page(PageParam pageParam, BpmModelParam bpmModelParam) {
-        return Res.ok(bpmModelService.page(pageParam, bpmModelParam));
-    }
-
-    @Operation(summary = "获取生效并部署的主流程列表")
-    @GetMapping("/findMainProcess")
-    public ResResult> findMainProcess() {
-        return Res.ok(bpmModelService.findMainProcess());
-    }
-
-    @Operation(summary = "根据流程定义id获取模型信息")
-    @GetMapping("/findByDefId")
-    public ResResult findByDefId(String defId) {
-        return Res.ok(bpmModelService.findByDefId(defId));
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelNodeController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelNodeController.java
deleted file mode 100644
index f099718a2..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmModelNodeController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.starter.flowable.core.model.service.BpmModelNodeService;
-import cn.bootx.starter.flowable.dto.model.BpmModelNodeDto;
-import cn.bootx.starter.flowable.param.model.BpmModelNodeParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.constraints.NotNull;
-import java.util.List;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@Validated
-@Tag(name = "模型任务节点配置")
-@RestController
-@RequestMapping("/bpm/model/node")
-@RequiredArgsConstructor
-public class BpmModelNodeController {
-
-    private final BpmModelNodeService bpmModelNodeService;
-
-    @Operation(summary = "添加")
-    @PostMapping(value = "/add")
-    public ResResult add(@RequestBody BpmModelNodeParam param) {
-        bpmModelNodeService.add(param);
-        return Res.ok();
-    }
-
-    @Operation(summary = "修改")
-    @PostMapping(value = "/update")
-    public ResResult update(@RequestBody BpmModelNodeParam param) {
-        bpmModelNodeService.update(param);
-        return Res.ok();
-    }
-
-    @Operation(summary = "删除")
-    @DeleteMapping(value = "/delete")
-    public ResResult delete(Long id) {
-        bpmModelNodeService.delete(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "通过ID查询")
-    @GetMapping(value = "/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(bpmModelNodeService.findById(id));
-    }
-
-    @Operation(summary = "查询任务节点配置项")
-    @GetMapping(value = "/findByDefIdAndTaskId")
-    public ResResult findByDefIdAndTaskId(String defId, String nodeId) {
-        return Res.ok(bpmModelNodeService.findByDefIdAndTaskId(defId, nodeId));
-    }
-
-    @Operation(summary = "获取下一步节点列表")
-    @GetMapping(value = "/getNextNodes")
-    public ResResult> getNextNodes(String defId, String nodeId) {
-        return Res.ok(bpmModelNodeService.getNextNodes(defId, nodeId));
-    }
-
-    @Operation(summary = "根据模型Id查询所有")
-    @GetMapping(value = "/findAllByModelId")
-    public ResResult> findAllByModelId(@NotNull(message = "模型ID不能为空") Long modelId) {
-        return Res.ok(bpmModelNodeService.findAllByModelId(modelId));
-    }
-
-    @Operation(summary = "同步")
-    @PostMapping("/sync")
-    public ResResult sync(Long modelId) {
-        bpmModelNodeService.sync(modelId);
-        return Res.ok();
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskAdminController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskAdminController.java
deleted file mode 100644
index 9105be184..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskAdminController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.core.instance.service.BpmTaskAdminService;
-import cn.bootx.starter.flowable.dto.task.TaskInfo;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 流程任务管理服务
- *
- * @author xxm
- * @date 2022/9/13
- */
-@Tag(name = "流程任务管理服务")
-@RestController
-@RequestMapping("/bpm/admin/task")
-@RequiredArgsConstructor
-public class BpmTaskAdminController {
-
-    private final BpmTaskAdminService bpmTaskAdminService;
-
-    @Operation(summary = "待处理任务")
-    @GetMapping("/pageByTodo")
-    public ResResult> pageByTodo(PageParam pageParam) {
-        return Res.ok(bpmTaskAdminService.pageByTodo(pageParam));
-    }
-
-    @Operation(summary = "已处理任务")
-    @GetMapping("/pageByDone")
-    public ResResult> pageByDone(PageParam pageParam) {
-        return Res.ok(bpmTaskAdminService.pageByDone(pageParam));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskController.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskController.java
deleted file mode 100644
index fc2af613d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/controller/BpmTaskController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package cn.bootx.starter.flowable.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.core.instance.service.BpmTaskOperateService;
-import cn.bootx.starter.flowable.core.instance.service.BpmTaskQueryService;
-import cn.bootx.starter.flowable.dto.task.BpmTaskDto;
-import cn.bootx.starter.flowable.dto.task.TaskInfo;
-import cn.bootx.starter.flowable.param.task.TaskApproveParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author xxm
- * @date 2022/8/24
- */
-@Tag(name = "流程任务")
-@RestController
-@RequestMapping("/bpm/task")
-@RequiredArgsConstructor
-public class BpmTaskController {
-
-    private final BpmTaskOperateService operateService;
-
-    private final BpmTaskQueryService queryService;
-
-    @Operation(summary = "我的待办")
-    @GetMapping("/pageMyTodo")
-    public ResResult> pageMyTodo(PageParam pageParam) {
-        return Res.ok(queryService.pageMyTodo(pageParam));
-    }
-
-    @Operation(summary = "我的已办")
-    @GetMapping("/pageMyDone")
-    public ResResult> pageMyDone(PageParam pageParam) {
-        return Res.ok(queryService.pageMyDone(pageParam));
-    }
-
-    @Operation(summary = "处理任务")
-    @PostMapping("/approve")
-    public ResResult approve(@RequestBody TaskApproveParam param) {
-        operateService.approve(param);
-        return Res.ok();
-    }
-
-    @Operation(summary = "根据任务实例ID查询任务列表")
-    @GetMapping("/findAllByInstanceId")
-    public ResResult> findAllByInstanceId(String instanceId) {
-        return Res.ok(queryService.findAllByInstanceId(instanceId));
-    }
-
-    @Operation(summary = "获取流程节点的分组任务信息")
-    @GetMapping("/getNodeTasks")
-    public ResResult>> getNodeTasks(String instanceId) {
-        return Res.ok(queryService.getNodeTasks(instanceId));
-    }
-
-    @Operation(summary = "重新分配人员")
-    @PostMapping("/assignee")
-    public ResResult assignee(String taskId, Long userId) {
-        operateService.assignee(taskId, userId);
-        return Res.ok();
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmActivityConvert.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmActivityConvert.java
deleted file mode 100644
index 8bc7349a3..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmActivityConvert.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.convert;
-
-import cn.bootx.starter.flowable.dto.instance.ActivityInstanceChart;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.List;
-
-/**
- * 流程活动转换
- *
- * @author xxm
- * @date 2022/8/31
- */
-@Mapper
-public interface BpmActivityConvert {
-
-    BpmActivityConvert CONVERT = Mappers.getMapper(BpmActivityConvert.class);
-
-    List convert(List in);
-
-    ActivityInstanceChart convert(HistoricActivityInstance in);
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmInstanceConvert.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmInstanceConvert.java
deleted file mode 100644
index 330057355..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmInstanceConvert.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.convert;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import cn.bootx.starter.flowable.dto.instance.BpmInstanceDto;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 流程实例扩展
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Mapper
-public interface BpmInstanceConvert {
-
-    BpmInstanceConvert CONVERT = Mappers.getMapper(BpmInstanceConvert.class);
-
-    BpmInstanceDto convert(BpmInstance in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmTaskConvert.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmTaskConvert.java
deleted file mode 100644
index 2b9761a15..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/convert/BpmTaskConvert.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.convert;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import cn.bootx.starter.flowable.dto.task.BpmTaskDto;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 流程任务扩展
- *
- * @author xxm
- * @date 2022-09-01
- */
-@Mapper
-public interface BpmTaskConvert {
-
-    BpmTaskConvert CONVERT = Mappers.getMapper(BpmTaskConvert.class);
-
-    BpmTaskDto convert(BpmTask in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceManager.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceManager.java
deleted file mode 100644
index 22b97c8ff..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.dao;
-
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * 流程实例扩展
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Repository
-@RequiredArgsConstructor
-public class BpmInstanceManager extends BaseManager {
-
-    /**
-     * 根据流程实例ID查询
-     */
-    public Collection findAllByInstanceIds(List ids) {
-        return findAllByFields(BpmInstance::getInstanceId, ids);
-    }
-
-    /**
-     * 根据流程id进行查询
-     */
-    public Optional findByInstanceId(String instanceId) {
-        return findByField(BpmInstance::getInstanceId, instanceId);
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceMapper.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceMapper.java
deleted file mode 100644
index f0a75bedd..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmInstanceMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.dao;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 流程实例扩展
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Mapper
-public interface BpmInstanceMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskManager.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskManager.java
deleted file mode 100644
index 660fd31b4..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskManager.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.dao;
-
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Optional;
-
-import static cn.bootx.starter.flowable.code.TaskCode.STATE_PROCESS;
-
-/**
- * 流程任务扩展
- *
- * @author xxm
- * @date 2022-08-27
- */
-@Repository
-@RequiredArgsConstructor
-public class BpmTaskManager extends BaseManager {
-
-    /**
-     * 根据任务id查询
-     */
-    public Optional findByTaskId(String taskId) {
-        return findByField(BpmTask::getTaskId, taskId);
-    }
-
-    /**
-     * 根据任务id查询
-     */
-    public List findAllByTaskIds(List taskIds) {
-        return findAllByFields(BpmTask::getTaskId, taskIds);
-    }
-
-    /**
-     * 根据实例id和任务id查询
-     */
-    public Optional findByInstanceIdAndTaskId(String instanceId, String taskId) {
-        return lambdaQuery().eq(BpmTask::getInstanceId, instanceId).eq(BpmTask::getTaskId, taskId).oneOpt();
-    }
-
-    /**
-     * 根据实例id和节点id查询
-     */
-    public List findByInstanceIdAndNodeId(String instanceId, String nodeId) {
-        return lambdaQuery().eq(BpmTask::getInstanceId, instanceId).eq(BpmTask::getNodeId, nodeId).list();
-    }
-
-    public List findAllByInstanceId(String instanceId) {
-        return lambdaQuery().eq(BpmTask::getInstanceId, instanceId).orderByDesc(MpIdEntity::getId).list();
-    }
-
-    /**
-     * 获取执行中任务
-     */
-    public List findRunningByInstanceId(String instanceId) {
-        return lambdaQuery().eq(BpmTask::getInstanceId, instanceId).eq(BpmTask::getState, STATE_PROCESS).list();
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskMapper.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskMapper.java
deleted file mode 100644
index 9929206e4..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/dao/BpmTaskMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.dao;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 流程任务扩展
- *
- * @author xxm
- * @date 2022-08-27
- */
-@Mapper
-public interface BpmTaskMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmInstance.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmInstance.java
deleted file mode 100644
index e57773eeb..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmInstance.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.flowable.core.instance.convert.BpmInstanceConvert;
-import cn.bootx.starter.flowable.dto.instance.BpmInstanceDto;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * 流程实例扩展
- *
- * @author xxm
- * @date 2022-08-23
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName(value = "bpm_instance", autoResultMap = true)
-public class BpmInstance extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 流程实例的id */
-    private String instanceId;
-
-    /** 流程实例名称 */
-    private String instanceName;
-
-    /** 模型id */
-    private Long modelId;
-
-    /** 流程定义ID */
-    private String defId;
-
-    /** 流程定义名称 */
-    private String defName;
-
-    /** 发起人 */
-    private Long startUserId;
-
-    /** 发起人名称 */
-    private String startUserName;
-
-    /** 流程实例的状态 */
-    private String state;
-
-    /** 开始时间 */
-    private LocalDateTime startTime;
-
-    /** 结束时间 */
-    private LocalDateTime endTime;
-
-    /** 提交的表单值 */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private Map formVariables;
-
-    /** 转换成dto */
-    @Override
-    public BpmInstanceDto toDto() {
-        return BpmInstanceConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmTask.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmTask.java
deleted file mode 100644
index ff0bac335..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/entity/BpmTask.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpDelEntity;
-import cn.bootx.starter.flowable.core.instance.convert.BpmTaskConvert;
-import cn.bootx.starter.flowable.dto.task.BpmTaskDto;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * 任务扩展存储
- *
- * @author xxm
- * @date 2022/8/23
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName(value = "bpm_task", autoResultMap = true)
-public class BpmTask extends MpDelEntity implements EntityBaseFunction {
-
-    /** 任务id */
-    private String taskId;
-
-    /** 任务节点id */
-    private String nodeId;
-
-    /** 任务节点名称 */
-    private String nodeName;
-
-    /** 执行 ID */
-    private String executionId;
-
-    /** 多实例关联 ID */
-    private Long multiId;
-
-    /** 流程id */
-    private String instanceId;
-
-    /** 流程标题(业务标题) */
-    private String instanceName;
-
-    /** 流程名称(流程定义标题) */
-    private String defName;
-
-    /**
-     * 任务执行状态
-     * @see cn.bootx.starter.flowable.code.TaskCode#STATE_PROCESS
-     */
-    private String state;
-
-    /**
-     * 处理结果
-     * @see cn.bootx.starter.flowable.code.TaskCode#RESULT_PASS
-     */
-    private String result;
-
-    /** 开始时间 */
-    private LocalDateTime startTime;
-
-    /** 结束时间 */
-    private LocalDateTime endTime;
-
-    /** 处理意见 */
-    private String reason;
-
-    /** 提交的表单值 */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private Map formVariables;
-
-    /** 当前处理人 */
-    private Long userId;
-
-    /** 当前处理人 */
-    private String userName;
-
-    /** 流程发起人id */
-    private Long startUserId;
-
-    /** 流程发起人名称 */
-    private String startUserName;
-
-    /** 转换成dto */
-    @Override
-    public BpmTaskDto toDto() {
-        return BpmTaskConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceAdminService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceAdminService.java
deleted file mode 100644
index 6171d998c..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceAdminService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.flowable.dto.instance.InstanceInfo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 流程实例管理
- *
- * @author xxm
- * @date 2022/9/17
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmInstanceAdminService {
-
-    private final HistoryService historyService;
-
-    private final BpmInstanceQueryService queryService;
-
-    /**
-     * 我的发起分页
-     */
-    public PageResult page(PageParam pageParam) {
-        val instanceQuery = historyService.createHistoricProcessInstanceQuery()
-            .orderByProcessInstanceStartTime()
-            .desc();
-        val historicProcessInstances = instanceQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = instanceQuery.count();
-
-        List instanceId = historicProcessInstances.stream()
-            .map(HistoricProcessInstance::getId)
-            .collect(Collectors.toList());
-        List instanceInfos = queryService.convertInstanceInfo(instanceId);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(instanceInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceOperateService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceOperateService.java
deleted file mode 100644
index fe81eff41..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceOperateService.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.entity.UserDetail;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelManager;
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import cn.bootx.starter.flowable.exception.InstanceNotExistException;
-import cn.bootx.starter.flowable.exception.ModelNotExistException;
-import cn.bootx.starter.flowable.exception.ModelNotPublishException;
-import cn.bootx.starter.flowable.local.BpmContext;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.bootx.starter.flowable.param.instance.InstanceStartParam;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.EndEvent;
-import org.flowable.bpmn.model.FlowElement;
-import org.flowable.bpmn.model.Process;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.runtime.Execution;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static cn.bootx.starter.flowable.code.InstanceCode.STATE_CANCEL;
-import static cn.bootx.starter.flowable.code.ModelCode.PUBLISHED;
-
-/**
- * 流程实例
- *
- * @author xxm
- * @date 2022/8/23
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmInstanceOperateService {
-
-    private final BpmModelManager bpmModelManager;
-
-    private final RuntimeService runtimeService;
-
-    private final RepositoryService repositoryService;
-
-    /**
-     * 启动一个流程
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void start(InstanceStartParam instanceParam) {
-        BpmModel bpmModel = bpmModelManager.findById(instanceParam.getModelId())
-            .orElseThrow(ModelNotExistException::new);
-        // 未发布
-        if (!Objects.equals(bpmModel.getPublish(), PUBLISHED)) {
-            throw new ModelNotPublishException();
-        }
-        Optional currentUser = SecurityUtil.getCurrentUser();
-        String userName = currentUser.map(UserDetail::getName).orElse("未知");
-
-        String title = instanceParam.getName();
-        if (StrUtil.isBlank(title)) {
-            title = bpmModel.getName() + "[" + userName + "]";
-        }
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setFormVariables(instanceParam.getFormVariables())
-            .setModelId(bpmModel.getId())
-            .setStartUser(currentUser);
-        BpmContextLocal.put(bpmContext);
-
-        runtimeService.createProcessInstanceBuilder().processDefinitionId(bpmModel.getDefId()).name(title).start();
-    }
-
-    /**
-     * 挂起实例
-     */
-    public void suspend(String instanceId) {
-        // 激活状态
-        runtimeService.suspendProcessInstanceById(instanceId);
-    }
-
-    /**
-     * 激活流程
-     */
-    public void activate(String instanceId) {
-        // 非激活状态
-        runtimeService.activateProcessInstanceById(instanceId);
-    }
-
-    /**
-     * 关闭流程
-     */
-    public void close(String instanceId) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setInstanceState(STATE_CANCEL);
-        BpmContextLocal.put(bpmContext);
-        ProcessInstance processInstance = Optional
-            .ofNullable(runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult())
-            .orElseThrow(InstanceNotExistException::new);
-        // 1、获取终止节点
-        List endNodes = getEndNode(processInstance.getProcessDefinitionId());
-        String endId = endNodes.get(0).getId();
-        // 2、执行终止
-        List executions = runtimeService.createExecutionQuery().parentId(instanceId).list();
-        List executionIds = executions.stream().map(Execution::getId).collect(Collectors.toList());
-        runtimeService.createChangeActivityStateBuilder()
-            .moveExecutionsToSingleActivityId(executionIds, endId)
-            .changeState();
-    }
-
-    /**
-     * 获取结束节点
-     */
-    private List getEndNode(String processDefId) {
-        Process mainProcess = Optional.ofNullable(repositoryService.getBpmnModel(processDefId).getMainProcess())
-            .orElseThrow(ModelNotExistException::new);
-        Collection list = mainProcess.getFlowElements();
-        if (CollUtil.isEmpty(list)) {
-            return new ArrayList<>(0);
-        }
-        return list.stream()
-            .filter(f -> f instanceof EndEvent)
-            .map(flowElement -> (EndEvent) flowElement)
-            .collect(Collectors.toList());
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceQueryService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceQueryService.java
deleted file mode 100644
index ba36b2c79..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmInstanceQueryService.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.core.instance.convert.BpmActivityConvert;
-import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelManager;
-import cn.bootx.starter.flowable.dto.instance.ActivityInstanceChart;
-import cn.bootx.starter.flowable.dto.instance.BpmInstanceDto;
-import cn.bootx.starter.flowable.dto.instance.InstanceInfo;
-import cn.bootx.starter.flowable.exception.ModelNotExistException;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.Task;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.history.HistoricProcessInstance;
-import org.flowable.engine.runtime.Execution;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * 实例查询
- *
- * @author xxm
- * @date 2022/8/31
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmInstanceQueryService {
-
-    private final BpmInstanceManager bpmInstanceManager;
-
-    private final BpmModelManager bpmModelManager;
-
-    private final RuntimeService runtimeService;
-
-    private final HistoryService historyService;
-
-    private final RepositoryService repositoryService;
-
-    /**
-     * 我的发起分页
-     */
-    public PageResult pageMyApply(PageParam pageParam) {
-        val instanceQuery = historyService.createHistoricProcessInstanceQuery()
-            .startedBy(String.valueOf(SecurityUtil.getUserId()))
-            .orderByProcessInstanceStartTime()
-            .desc();
-        val historicProcessInstances = instanceQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = instanceQuery.count();
-
-        List instanceId = historicProcessInstances.stream()
-            .map(HistoricProcessInstance::getId)
-            .collect(Collectors.toList());
-        List instanceInfos = this.convertInstanceInfo(instanceId);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(instanceInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-    /**
-     * 获取流程实例详情
-     */
-    public BpmInstanceDto findByInstanceId(String instanceId) {
-        return bpmInstanceManager.findByInstanceId(instanceId)
-            .map(BpmInstance::toDto)
-            .orElseThrow(() -> new DataNotExistException("流程实例不存在"));
-    }
-
-    /**
-     * 获取流程执行的节点, 用于绘制流程进展图
-     */
-    public List getFlowNodes(String instanceId) {
-        List activityList = historyService.createHistoricActivityInstanceQuery()
-            .processInstanceId(instanceId)
-            .list();
-
-        return activityList.stream().map(BpmActivityConvert.CONVERT::convert).distinct().collect(Collectors.toList());
-    }
-
-    /**
-     * 获取当前执行的节点
-     */
-    public List getCurrentNodes(String instanceId) {
-
-        return runtimeService.createExecutionQuery()
-            .processInstanceId(instanceId)
-            .list()
-            .stream()
-            .map(Execution::getActivityId)
-            .distinct()
-            .filter(Objects::nonNull)
-            .collect(Collectors.toList());
-    }
-
-    /**
-     * 获取可回退节点
-     */
-    public List getBackNodes(String instanceId) {
-        BpmInstance bpmInstance = bpmInstanceManager.findByInstanceId(instanceId)
-            .orElseThrow(() -> new DataNotExistException("流程实例不存在"));
-        BpmnModel bpmnModel = Optional.ofNullable(repositoryService.getBpmnModel(bpmInstance.getDefId()))
-            .orElseThrow(ModelNotExistException::new);
-        Process process = bpmnModel.getMainProcess();
-        // 走过的历史记录
-        List historicActivityList = historyService.createHistoricActivityInstanceQuery()
-            .processInstanceId(instanceId)
-            .list();
-        List historicActivities = historicActivityList.stream()
-            .map(HistoricActivityInstance::getActivityId)
-            .collect(Collectors.toList());
-        // 当前执行的节点
-        List currentNodes = this.getCurrentNodes(instanceId);
-
-        return process.getFlowElements()
-            .stream()
-            .filter(flowElement -> flowElement instanceof Task)
-            .filter(flowElement -> historicActivities.contains(flowElement.getId()))
-            .filter(flowElement -> !currentNodes.contains(flowElement.getId()))
-            .map(o -> (Task) o)
-            .map(o -> new LabelValue(o.getName(), o.getId()))
-            .collect(Collectors.toList());
-    }
-
-    /**
-     * 转换 processInstances 为 系统中的对象
-     */
-    public List convertInstanceInfo(List instanceIds) {
-        Map bpmInstanceMap = bpmInstanceManager.findAllByInstanceIds(instanceIds)
-            .stream()
-            .collect(Collectors.toMap(BpmInstance::getInstanceId, Function.identity()));
-        return instanceIds.stream().map(instanceId -> {
-            BpmInstance bpmInstance = Optional.ofNullable(bpmInstanceMap.get(instanceId)).orElse(new BpmInstance());
-            return new InstanceInfo().setName(bpmInstance.getInstanceName())
-                .setInstanceId(bpmInstance.getInstanceId())
-                .setState(bpmInstance.getState())
-                .setStartTime(bpmInstance.getStartTime())
-                .setEndTime(bpmInstance.getEndTime())
-                .setStartUserId(bpmInstance.getStartUserId())
-                .setStartUserName(bpmInstance.getStartUserName())
-                .setDefMame(bpmInstance.getDefName());
-        }).collect(Collectors.toList());
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskAdminService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskAdminService.java
deleted file mode 100644
index 49d1bd395..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskAdminService.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager;
-import cn.bootx.starter.flowable.dto.task.TaskInfo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.task.api.Task;
-import org.flowable.task.api.TaskQuery;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 流程任务管理服务
- *
- * @author xxm
- * @date 2022/9/11
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmTaskAdminService {
-
-    private final BpmInstanceManager bpmInstanceManager;
-
-    private final RuntimeService runtimeService;
-
-    private final TaskService taskService;
-
-    private final HistoryService historyService;
-
-    private final BpmTaskQueryService queryService;
-
-    /**
-     * 待处理任务
-     */
-    public PageResult pageByTodo(PageParam pageParam) {
-        // 查询待办任务
-        TaskQuery taskQuery = taskService.createTaskQuery().orderByTaskCreateTime().desc(); // 创建时间倒序
-        List tasks = taskQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = taskQuery.count();
-        List ids = tasks.stream().map(Task::getId).collect(Collectors.toList());
-        List taskInfos = queryService.convertInstanceInfo(ids);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(taskInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-    /**
-     * 已处理任务
-     */
-    public PageResult pageByDone(PageParam pageParam) {
-        // 查询已办任务
-        HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
-            .finished()
-            .taskAssignee(String.valueOf(SecurityUtil.getUserId()))
-            .orderByHistoricTaskInstanceStartTime()
-            .desc();
-        List tasks = taskQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = taskQuery.count();
-        List ids = tasks.stream().map(HistoricTaskInstance::getId).collect(Collectors.toList());
-        List taskInfos = queryService.convertInstanceInfo(ids);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(taskInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-    /**
-     * 取消任务
-     */
-    public void cancel() {
-
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskOperateService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskOperateService.java
deleted file mode 100644
index ac616414e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskOperateService.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.code.BpmnCode;
-import cn.bootx.starter.flowable.code.TaskCode;
-import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import cn.bootx.starter.flowable.event.BpmEventService;
-import cn.bootx.starter.flowable.exception.TaskNotExistException;
-import cn.bootx.starter.flowable.handler.reject.TaskRejectHandler;
-import cn.bootx.starter.flowable.local.BpmContext;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.bootx.starter.flowable.param.task.TaskApproveParam;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.TaskService;
-import org.flowable.task.api.Task;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static cn.bootx.starter.flowable.code.TaskCode.*;
-
-/**
- * 流程任务接口
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmTaskOperateService {
-
-    private final TaskService taskService;
-
-    private final BpmTaskManager bpmTaskManager;
-
-    private final BpmEventService bpmEventService;
-
-    private final TaskRejectHandler taskRejectHandler;
-
-    /**
-     * 处理任务
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void approve(TaskApproveParam param) {
-        // 查询到任务和扩展属性
-        Task task = Optional.ofNullable(taskService.createTaskQuery().taskId(param.getTaskId()).singleResult())
-            .orElseThrow(TaskNotExistException::new);
-        // 实际处理人与设置处理人不一致进行更改
-        String userId = String.valueOf(SecurityUtil.getUserId());
-        if (!Objects.equals(task.getAssignee(), String.valueOf(userId))) {
-            taskService.setAssignee(task.getId(), userId);
-        }
-
-        switch (param.getType()) {
-            case RESULT_PASS: {
-                this.pass(param, task);
-                break;
-            }
-            case RESULT_NOT_PASS: {
-                this.notPass(param, task);
-                break;
-            }
-            case RESULT_ABSTAIN: {
-                this.abstain(param, task);
-                break;
-            }
-            case RESULT_REJECT: {
-                this.reject(param, task);
-                break;
-            }
-            case RESULT_BACK: {
-                this.back(param, task);
-                break;
-            }
-            default:
-                throw new BizException("不存在的流程服务处理类型");
-        }
-    }
-
-    /**
-     * 通过
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void pass(TaskApproveParam param, Task task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskReason(param.getReason())
-            .setTaskState(TaskCode.STATE_PASS)
-            .setTaskResult(RESULT_PASS)
-            .setNextAssign(param.getNextAssign())
-            .setFormVariables(param.getFormVariables());
-        BpmContextLocal.put(bpmContext);
-
-        if (Objects.nonNull(param.getNextNodeId())) {
-            Map map = new HashMap<>();
-            map.put(BpmnCode.NEXT_NODE_FLAG, param.getNextNodeId());
-            taskService.complete(task.getId(), null, map);
-        }
-        else {
-            taskService.complete(task.getId());
-        }
-    }
-
-    /**
-     * 弃权
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void abstain(TaskApproveParam param, Task task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskReason(param.getReason())
-            .setTaskState(TaskCode.STATE_PASS)
-            .setTaskResult(TaskCode.RESULT_ABSTAIN)
-            .setNextAssign(param.getNextAssign())
-            .setFormVariables(param.getFormVariables());
-        BpmContextLocal.put(bpmContext);
-        if (Objects.nonNull(param.getNextNodeId())) {
-            Map map = new HashMap<>();
-            map.put(BpmnCode.NEXT_NODE_FLAG, param.getNextNodeId());
-            taskService.complete(task.getId(), null, map);
-        }
-        else {
-            taskService.complete(task.getId());
-        }
-    }
-
-    /**
-     * 不同意
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void notPass(TaskApproveParam param, Task task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskReason(param.getReason())
-            .setTaskState(TaskCode.STATE_PASS)
-            .setTaskResult(TaskCode.RESULT_NOT_PASS)
-            .setNextAssign(param.getNextAssign())
-            .setFormVariables(param.getFormVariables());
-        BpmContextLocal.put(bpmContext);
-        if (Objects.nonNull(param.getNextNodeId())) {
-            Map map = new HashMap<>();
-            map.put(BpmnCode.NEXT_NODE_FLAG, param.getNextNodeId());
-            taskService.complete(task.getId(), null, map);
-        }
-        else {
-            taskService.complete(task.getId());
-        }
-    }
-
-    /**
-     * 驳回
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void reject(TaskApproveParam param, Task task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskState(TaskCode.STATE_REJECT);
-        BpmContextLocal.put(bpmContext);
-
-        taskRejectHandler.rejectTalk(task);
-
-        // 更新驳回任务的记录
-        this.rejectOrBackAfter(task, param.getReason(), STATE_REJECT);
-    }
-
-    /**
-     * 流程回退
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void back(TaskApproveParam param, Task task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskState(STATE_BACK);
-        taskRejectHandler.flowReturn(task, param.getBackNodeId());
-
-        // 更新回退任务的记录
-        this.rejectOrBackAfter(task, param.getReason(), STATE_BACK);
-    }
-
-    /**
-     * 任务回退或驳回后处理
-     * @param reason 原因
-     * @param result 处理结果 STATE_BACK/STATE_BACK
-     */
-    private void rejectOrBackAfter(Task task, String reason, String result) {
-        // 更新驳回任务的记录
-        List tasks = bpmTaskManager.findByInstanceIdAndNodeId(task.getProcessInstanceId(),
-                task.getTaskDefinitionKey());
-        // 当前任务状态为驳回, 其他的为取消
-        Optional first = tasks.stream()
-            .filter(bpmTask -> Objects.equals(bpmTask.getTaskId(), task.getId()))
-            .findFirst();
-        first.ifPresent(bpmTask -> {
-            bpmTask.setReason(reason).setState(result).setResult(result).setEndTime(LocalDateTime.now());
-            bpmTaskManager.updateById(bpmTask);
-        });
-        // 其他的设置为取消
-        List bpmTasks = tasks.stream()
-            .filter(bpmTask -> !Objects.equals(bpmTask.getTaskId(), task.getId()))
-            .peek(bpmTask -> bpmTask.setState(result).setResult(RESULT_CANCEL).setEndTime(LocalDateTime.now()))
-            .collect(Collectors.toList());
-        bpmTaskManager.updateAllById(bpmTasks);
-        bpmEventService.taskCancel(tasks);
-    }
-
-    /**
-     * 重新分配人员
-     */
-    public void assignee(String taskId, Long userId) {
-        taskService.setAssignee(taskId, String.valueOf(userId));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskQueryService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskQueryService.java
deleted file mode 100644
index 35209879a..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/instance/service/BpmTaskQueryService.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package cn.bootx.starter.flowable.core.instance.service;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ResultConvertUtil;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import cn.bootx.starter.flowable.dto.task.BpmTaskDto;
-import cn.bootx.starter.flowable.dto.task.TaskInfo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.TaskService;
-import org.flowable.task.api.Task;
-import org.flowable.task.api.TaskQuery;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * 流程任务查询
- *
- * @author xxm
- * @date 2022/9/1
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmTaskQueryService {
-
-    private final TaskService taskService;
-
-    private final HistoryService historyService;
-
-    private final BpmTaskManager bpmTaskManager;
-
-    /**
-     * 获取自己的代办任务
-     */
-    public PageResult pageMyTodo(PageParam pageParam) {
-        // 查询待办任务
-        TaskQuery taskQuery = taskService.createTaskQuery()
-            .taskAssignee(String.valueOf(SecurityUtil.getUserId())) // 分配给自己
-            .orderByTaskCreateTime()
-            .desc(); // 创建时间倒序
-        List tasks = taskQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = taskQuery.count();
-        List ids = tasks.stream().map(Task::getId).collect(Collectors.toList());
-        List taskInfos = this.convertInstanceInfo(ids);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(taskInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-    /**
-     * 获取自己已处理的任务
-     */
-    public PageResult pageMyDone(PageParam pageParam) {
-        // 查询已办任务
-        HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
-            .finished()
-            .taskAssignee(String.valueOf(SecurityUtil.getUserId()))
-            .orderByHistoricTaskInstanceStartTime()
-            .desc();
-        List tasks = taskQuery.listPage(pageParam.start(), pageParam.getSize());
-        long total = taskQuery.count();
-        List ids = tasks.stream().map(HistoricTaskInstance::getId).collect(Collectors.toList());
-        List taskInfos = this.convertInstanceInfo(ids);
-        return new PageResult().setCurrent(pageParam.getCurrent())
-            .setRecords(taskInfos)
-            .setSize(pageParam.getSize())
-            .setTotal(total);
-    }
-
-    /**
-     * 根据实例id查询关联的任务 历史记录显示用
-     */
-    public List findAllByInstanceId(String instanceId) {
-        return ResultConvertUtil.dtoListConvert(bpmTaskManager.findAllByInstanceId(instanceId));
-    }
-
-    /**
-     * 获取流程节点的分组任务信息
-     */
-    public Map> getNodeTasks(String instanceId) {
-        return this.findAllByInstanceId(instanceId).stream().collect(Collectors.groupingBy(BpmTaskDto::getNodeId));
-    }
-
-    /**
-     * 转换
-     */
-    public List convertInstanceInfo(List taskIds) {
-        Map bpmTaskMap = bpmTaskManager.findAllByTaskIds(taskIds)
-            .stream()
-            .collect(Collectors.toMap(BpmTask::getTaskId, Function.identity()));
-        return taskIds.stream().map(taskId -> {
-            BpmTask bpmTask = Optional.ofNullable(bpmTaskMap.get(taskId)).orElse(new BpmTask());
-            return new TaskInfo().setTaskId(bpmTask.getTaskId())
-                .setNodeName(bpmTask.getNodeName())
-                .setExecutionId(bpmTask.getExecutionId())
-                .setInstanceId(bpmTask.getInstanceId())
-                .setInstanceName(bpmTask.getInstanceName())
-                .setDefName(bpmTask.getDefName())
-                .setStartTime(bpmTask.getStartTime())
-                .setEndTime(bpmTask.getEndTime())
-                .setStartUserId(bpmTask.getStartUserId())
-                .setStartUserName(bpmTask.getStartUserName());
-        }).collect(Collectors.toList());
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelConvert.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelConvert.java
deleted file mode 100644
index 0ddff8ce3..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelConvert.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.core.model.convert;
-
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import cn.bootx.starter.flowable.dto.model.BpmModelDto;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Mapper
-public interface BpmModelConvert {
-
-    BpmModelConvert CONVERT = Mappers.getMapper(BpmModelConvert.class);
-
-    BpmModelDto convert(BpmModel in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelNodeConvert.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelNodeConvert.java
deleted file mode 100644
index 5621d02bc..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/convert/BpmModelNodeConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.starter.flowable.core.model.convert;
-
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import cn.bootx.starter.flowable.dto.model.BpmModelNodeDto;
-import cn.bootx.starter.flowable.param.model.BpmModelNodeParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@Mapper
-public interface BpmModelNodeConvert {
-
-    BpmModelNodeConvert CONVERT = Mappers.getMapper(BpmModelNodeConvert.class);
-
-    BpmModelNode convert(BpmModelNodeParam in);
-
-    BpmModelNodeDto convert(BpmModelNode in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelManager.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelManager.java
deleted file mode 100644
index 9bbb2f14d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelManager.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.bootx.starter.flowable.core.model.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import cn.bootx.starter.flowable.param.model.BpmModelParam;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Optional;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Repository
-@RequiredArgsConstructor
-public class BpmModelManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, BpmModelParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, BpmModel.class);
-        return this.lambdaQuery()
-            .select(this.getEntityClass(), MpUtil::excludeBigField)
-            .like(StrUtil.isNotBlank(param.getName()), BpmModel::getName, param.getName())
-            .orderByDesc(MpIdEntity::getId)
-            .page(mpPage);
-    }
-
-    /**
-     * 取消主流程
-     */
-    public void cancelMainProcessByDefKey(String defKey) {
-        lambdaUpdate().set(BpmModel::getMainProcess, false).eq(BpmModel::getDefKey, defKey).update();
-
-    }
-
-    /**
-     * 获取生效并部署的主流程列表
-     */
-    public List findMainProcess() {
-        return findAllByField(BpmModel::getMainProcess, true);
-    }
-
-    /**
-     * 根据流程定义id获取模型信息
-     */
-    public Optional findByDefId(String defId) {
-        return findByField(BpmModel::getDefId, defId);
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelMapper.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelMapper.java
deleted file mode 100644
index fc9dacb17..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.flowable.core.model.dao;
-
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022-08-23
- */
-@Mapper
-public interface BpmModelMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeManager.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeManager.java
deleted file mode 100644
index fedddabdd..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package cn.bootx.starter.flowable.core.model.dao;
-
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import lombok.RequiredArgsConstructor;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Optional;
-
-import static cn.bootx.starter.flowable.code.CachingCode.*;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@Repository
-@RequiredArgsConstructor
-public class BpmModelNodeManager extends BaseManager {
-
-    /**
-     * 根据ModelId查询
-     */
-    @Cacheable(value = NODE_MODEL_ID, key = "#modelId")
-    public List findAllByModelId(Long modelId) {
-        return findAllByField(BpmModelNode::getModelId, modelId);
-    }
-
-    /**
-     * 查询任务节点配置项
-     * @param defId 定义id
-     * @param nodeId 任务节点id
-     */
-    @Cacheable(value = NODE_DEF_AND_NODE, key = "#defId+':'+#nodeId")
-    public Optional findByDefIdAndNodeId(String defId, String nodeId) {
-        return lambdaQuery().eq(BpmModelNode::getDefId, defId).eq(BpmModelNode::getNodeId, nodeId).oneOpt();
-    }
-
-    /**
-     * 根据模型id删除
-     */
-    public void deleteByModelId(Long modelId) {
-        deleteByField(BpmModelNode::getModelId, modelId);
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeMapper.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeMapper.java
deleted file mode 100644
index 254f5a368..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/dao/BpmModelNodeMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.flowable.core.model.dao;
-
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@Mapper
-public interface BpmModelNodeMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModel.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModel.java
deleted file mode 100644
index 321ecae5f..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModel.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package cn.bootx.starter.flowable.core.model.entity;
-
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.flowable.core.model.convert.BpmModelConvert;
-import cn.bootx.starter.flowable.dto.model.BpmModelDto;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2020/2/28 19:44
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("bpm_model")
-public class BpmModel extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 名称 */
-    private String name;
-
-    /** 流程类型 */
-    private String modelType;
-
-    /** 关联表单id */
-    private Long formId;
-
-    /** 发布状态 */
-    private String publish;
-
-    /** 启用状态 */
-    private Boolean enable;
-
-    /** 部署id */
-    private String deployId;
-
-    /** 流程定义id */
-    private String defId;
-
-    /** 流程key */
-    private String defKey;
-
-    /** 流程名称 */
-    private String defName;
-
-    /** 流程备注 */
-    private String defRemark;
-
-    /** 是否主流程 */
-    private Boolean mainProcess;
-
-    /** 流程版本号 */
-    private Integer processVersion;
-
-    /** 流程xml */
-    @BigField
-    private String modelEditorXml;
-
-    /** 备注 */
-    private String remark;
-
-    /** 转换成dto */
-    @Override
-    public BpmModelDto toDto() {
-        return BpmModelConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModelNode.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModelNode.java
deleted file mode 100644
index 3069d57b7..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/entity/BpmModelNode.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package cn.bootx.starter.flowable.core.model.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpDelEntity;
-import cn.bootx.common.mybatisplus.handler.JacksonRawTypeHandler;
-import cn.bootx.starter.flowable.core.model.convert.BpmModelNodeConvert;
-import cn.bootx.starter.flowable.dto.model.BpmModelNodeDto;
-import cn.bootx.starter.flowable.param.model.BpmModelNodeParam;
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldNameConstants;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@FieldNameConstants
-@TableName(value = "bpm_model_node", autoResultMap = true)
-public class BpmModelNode extends MpDelEntity implements EntityBaseFunction {
-
-    /** 关联模型id */
-    private Long modelId;
-
-    /** 流程定义id */
-    private String defId;
-
-    /** 流程key */
-    private String defKey;
-
-    /** 关联表单id */
-    private Long formId;
-
-    /** 任务节点id */
-    private String nodeId;
-
-    /** 任务节点名称 */
-    private String nodeName;
-
-    /** 是否多实例 */
-    private boolean multi;
-
-    /** 是否串签 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Boolean sequential;
-
-    /** 是否是或签, 会签情况下使用,一个同意的直接通过这个任务 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Boolean orSign;
-
-    /** 是否比例通过 会签情况下使用 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Boolean ratioPass;
-
-    /** 通过比例 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private Double passRatio;
-
-    /** 是否自动跳过当前节点(通常用于开始节点) */
-    private boolean skip;
-
-    /** 是否允许驳回 */
-    private boolean reject;
-
-    /** 是否允许回退 */
-    private boolean back;
-
-    /** 是否允许取回 */
-    private boolean retrieve;
-
-    /**
-     * 分配类型
-     * @see cn.bootx.starter.flowable.code.ModelNodeCode
-     */
-    private String assignType;
-
-    /** 分配的原始数据 */
-    @TableField(typeHandler = JacksonRawTypeHandler.class, updateStrategy = FieldStrategy.IGNORED)
-    private Object assignRaw;
-
-    /** 分配的数据的展示 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private String assignShow;
-
-    /** 创建对象 */
-    public static BpmModelNode init(BpmModelNodeParam in) {
-        return BpmModelNodeConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public BpmModelNodeDto toDto() {
-        return BpmModelNodeConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmAssistService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmAssistService.java
deleted file mode 100644
index 74e55a9c8..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmAssistService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.bootx.starter.flowable.core.model.service;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * 工作流基础支撑接口
- * @author xxm
- * @date 2023/3/28
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmAssistService {
-
-    /**
-     * 判断是传入的类否是监听器
-     */
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelNodeService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelNodeService.java
deleted file mode 100644
index 57f509919..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelNodeService.java
+++ /dev/null
@@ -1,252 +0,0 @@
-package cn.bootx.starter.flowable.core.model.service;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.common.core.util.ResultConvertUtil;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelManager;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelNodeManager;
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import cn.bootx.starter.flowable.dto.model.BpmModelNodeDto;
-import cn.bootx.starter.flowable.exception.ModelNotExistException;
-import cn.bootx.starter.flowable.param.model.BpmModelNodeParam;
-import cn.bootx.starter.flowable.util.BpmXmlUtil;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.bean.copier.CopyOptions;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.*;
-import org.flowable.engine.RepositoryService;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static cn.bootx.starter.flowable.code.CachingCode.NODE_MODEL_ID;
-import static cn.bootx.starter.flowable.code.ModelNodeCode.ASSIGN_SELECT;
-import static cn.bootx.starter.flowable.code.ModelNodeCode.ASSIGN_SPONSOR;
-
-/**
- * 模型任务节点服务
- *
- * @author xxm
- * @date 2022/8/25
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmModelNodeService {
-
-    private final BpmModelManager bpmModelManager;
-
-    private final BpmModelNodeManager bpmModelNodeManager;
-
-    private final RepositoryService repositoryService;
-
-    private final List nodeAssignTypes = CollUtil.toList(ASSIGN_SPONSOR, ASSIGN_SELECT);
-
-    /**
-     * 添加
-     */
-    @CacheEvict(value = NODE_MODEL_ID, key = "#param.modelId")
-    public void add(BpmModelNodeParam param) {
-        BpmModelNode bpmModelNode = BpmModelNode.init(param);
-        bpmModelNodeManager.save(bpmModelNode);
-    }
-
-    /**
-     * 修改
-     */
-    @CacheEvict(value = NODE_MODEL_ID, key = "#param.modelId")
-    public void update(BpmModelNodeParam param) {
-        BpmModelNode bpmModelNode = bpmModelNodeManager.findById(param.getId()).orElseThrow(DataNotExistException::new);
-
-        BeanUtil.copyProperties(param, bpmModelNode, CopyOptions.create().ignoreNullValue());
-
-        // 预防脏数据
-        if (nodeAssignTypes.contains(bpmModelNode.getAssignType())) {
-            bpmModelNode.setAssignRaw(null);
-            bpmModelNode.setAssignShow(null);
-        }
-
-        bpmModelNodeManager.updateById(bpmModelNode);
-    }
-
-    /**
-     * 查询任务节点配置项
-     */
-    public BpmModelNodeDto findByDefIdAndTaskId(String defId, String nodeId) {
-        return bpmModelNodeManager.findByDefIdAndNodeId(defId, nodeId)
-            .map(BpmModelNode::toDto)
-            .orElseThrow(DataNotExistException::new);
-    }
-
-    /**
-     * 获取下一步节点列表
-     */
-    public List getNextNodes(String defId, String nodeId) {
-
-        BpmnModel bpmnModel = Optional.ofNullable(repositoryService.getBpmnModel(defId))
-            .orElseThrow(ModelNotExistException::new);
-        Process process = bpmnModel.getMainProcess();
-        Task taskNode = process.getFlowElements()
-            .stream()
-            .filter(o -> Objects.equals(nodeId, o.getId()))
-            .findFirst()
-            .map(o -> (Task) o)
-            .orElseThrow(() -> new BizException("节点不存在"));
-        List outgoingFlows = taskNode.getOutgoingFlows();
-        if (outgoingFlows.size() == 1) {
-            FlowElement flowElement = outgoingFlows.get(0).getTargetFlowElement();
-            if (flowElement instanceof Gateway) {
-                Gateway gateway = (Gateway) flowElement;
-                return gateway.getOutgoingFlows()
-                    .stream()
-                    .map(SequenceFlow::getTargetFlowElement)
-                    .map(o -> new LabelValue(o.getName(), o.getId()))
-                    .collect(Collectors.toList());
-            }
-            else {
-                return Collections.singletonList(new LabelValue(flowElement.getName(), flowElement.getId()));
-            }
-        }
-        else if (outgoingFlows.size() > 1) {
-            return outgoingFlows.stream()
-                .map(SequenceFlow::getTargetFlowElement)
-                .map(o -> new LabelValue(o.getName(), o.getId()))
-                .collect(Collectors.toList());
-        }
-        else {
-            return new ArrayList<>(0);
-        }
-    }
-
-    /**
-     * 获取单条
-     */
-    public BpmModelNodeDto findById(Long id) {
-        return bpmModelNodeManager.findById(id).map(BpmModelNode::toDto).orElseThrow(DataNotExistException::new);
-    }
-
-    /**
-     * 获取全部
-     */
-    public List findAllByModelId(Long modelId) {
-        return ResultConvertUtil.dtoListConvert(bpmModelNodeManager.findAllByModelId(modelId));
-    }
-
-    /**
-     * 删除
-     */
-    @CacheEvict(value = NODE_MODEL_ID, allEntries = true)
-    public void delete(Long id) {
-        bpmModelNodeManager.deleteById(id);
-    }
-
-    /**
-     * 同步节点
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @CacheEvict(value = NODE_MODEL_ID, key = "#modelId")
-    public void sync(Long modelId) {
-        // 已经配置的
-        List taskNodes = bpmModelNodeManager.findAllByModelId(modelId);
-        List taskNodeIds = taskNodes.stream().map(BpmModelNode::getNodeId).collect(Collectors.toList());
-        // bpmn文件中的
-        List flowNodes = this.getFlowNodes(modelId);
-        List flowNodeIds = flowNodes.stream().map(BpmModelNode::getNodeId).collect(Collectors.toList());
-        Map flowNodeMap = flowNodes.stream()
-            .collect(Collectors.toMap(BpmModelNode::getNodeId, Function.identity()));
-        // bpmn中有列表没有的添加, 双方都有的不动
-        List saves = flowNodes.stream()
-            .filter(o -> !taskNodeIds.contains(o.getNodeId()))
-            .peek(o -> o.setModelId(modelId))
-            .collect(Collectors.toList());
-
-        // bpmn中没有列表有的删除
-        List deleteIds = taskNodes.stream()
-            .filter(o -> !flowNodeIds.contains(o.getNodeId()))
-            .map(MpIdEntity::getId)
-            .collect(Collectors.toList());
-        // 双方都有的查看数据是否需要更新
-        List updates = taskNodes.stream()
-            .filter(taskNode -> flowNodeIds.contains(taskNode.getNodeId()))
-            .filter(taskNode -> {
-                BpmModelNode node = flowNodeMap.get(taskNode.getNodeId());
-                // 注意, 这里对任务做了处理
-                return comparisonAndUpdateNodeAttr(node, taskNode);
-            })
-            .collect(Collectors.toList());
-        bpmModelNodeManager.saveAll(saves);
-        bpmModelNodeManager.updateAllById(updates);
-        bpmModelNodeManager.deleteByIds(deleteIds);
-    }
-
-    /**
-     * 查询流程定义各节点 后期需要修改成根据不同节点做不同的处理
-     */
-    private List getFlowNodes(Long id) {
-        BpmModel bpmModel = bpmModelManager.findById(id).orElseThrow(ModelNotExistException::new);
-
-        String modelEditorXml = bpmModel.getModelEditorXml();
-        BpmnModel bpmnModel = BpmXmlUtil.convertByte2BpmnModel(modelEditorXml.getBytes());
-        Process process = bpmnModel.getMainProcess();
-        List userTasks = process.findFlowElementsOfType(UserTask.class);
-
-        return userTasks.stream().map(userTask -> convert(userTask, bpmModel)).collect(Collectors.toList());
-    }
-
-    /**
-     * 比较节点属性并更新任务节点不一致的属性
-     * @return 是否进行了处理
-     */
-    private boolean comparisonAndUpdateNodeAttr(BpmModelNode node, BpmModelNode userTask) {
-        boolean flag = false;
-        // 名称
-        if (!StrUtil.equals(node.getNodeName(), userTask.getNodeName())) {
-            userTask.setNodeName(node.getNodeName());
-            flag = true;
-        }
-        // 是否多任务
-        if (node.isMulti() != userTask.isMulti()) {
-            userTask.setMulti(node.isMulti());
-            flag = true;
-        }
-        // 是否串行任务
-        if (node.getSequential() != userTask.getSequential()) {
-            userTask.setSequential(node.getSequential());
-            flag = true;
-        }
-        return flag;
-    }
-
-    /**
-     * 节点转换
-     * @param userTask flowable 任务节点
-     * @param bpmModel
-     */
-    public BpmModelNode convert(UserTask userTask, BpmModel bpmModel) {
-        BpmModelNode modelNode = new BpmModelNode().setModelId(bpmModel.getId())
-            .setDefId(bpmModel.getDefId())
-            .setDefKey(bpmModel.getDefKey())
-            .setNodeId(userTask.getId())
-            .setNodeName(userTask.getName());
-        // 多实例(循环任务)处理
-        val loopCharacteristics = userTask.getLoopCharacteristics();
-        if (Objects.nonNull(loopCharacteristics)) {
-            modelNode.setMulti(true);
-            modelNode.setSequential(loopCharacteristics.isSequential());
-        }
-        return modelNode;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelService.java
deleted file mode 100644
index 8ee44f16e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/core/model/service/BpmModelService.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package cn.bootx.starter.flowable.core.model.service;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.dto.LabelValue;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpCreateEntity.Create;
-import cn.bootx.common.mybatisplus.base.MpDelEntity.Del;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelManager;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelNodeManager;
-import cn.bootx.starter.flowable.core.model.entity.BpmModel;
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import cn.bootx.starter.flowable.dto.model.BpmModelDto;
-import cn.bootx.starter.flowable.exception.ModelNotExistException;
-import cn.bootx.starter.flowable.param.model.BpmModelParam;
-import cn.bootx.starter.flowable.util.BpmXmlUtil;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.bean.copier.CopyOptions;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.UserTask;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.repository.Deployment;
-import org.flowable.engine.repository.DeploymentBuilder;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static cn.bootx.starter.flowable.code.ModelCode.*;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022/8/23
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmModelService {
-
-    private final RepositoryService repositoryService;
-
-    private final BpmModelManager bpmModelManager;
-
-    private final BpmModelNodeManager bpmModelNodeManager;
-
-    /**
-     * 创建模型
-     */
-    public void add(BpmModelParam bpmModelParam) {
-
-        String xml = StrUtil.format(DEFAULT_XML, RandomUtil.randomString(8), RandomUtil.randomString(8));
-        BpmModel bpmModel = new BpmModel().setName(bpmModelParam.getName())
-            .setModelType(bpmModelParam.getModelType())
-            .setMainProcess(false)
-            .setPublish(UNPUBLISHED)
-            .setModelEditorXml(xml)
-            .setEnable(false)
-            .setRemark(bpmModelParam.getRemark());
-        bpmModelManager.save(bpmModel);
-    }
-
-    /**
-     * 上传bpm文件
-     */
-    public void uploadBpmn(BpmModelParam bpmModelParam) {
-        String modelEditorXml = bpmModelParam.getModelEditorXml();
-        BpmModel bpmModel = bpmModelManager.findById(bpmModelParam.getId()).orElseThrow(ModelNotExistException::new);
-        bpmModel.setModelEditorXml(modelEditorXml);
-        bpmModelManager.updateById(bpmModel);
-    }
-
-    /**
-     * 复制
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void copy(Long id) {
-        BpmModel bpmModel = bpmModelManager.findById(id).orElseThrow(ModelNotExistException::new);
-        BpmModel newBpmModel = new BpmModel().setName(bpmModel.getName())
-            .setFormId(bpmModel.getFormId())
-            .setModelType(bpmModel.getModelType())
-            .setMainProcess(false)
-            .setPublish(UNPUBLISHED)
-            .setModelEditorXml(bpmModel.getModelEditorXml())
-            .setEnable(false)
-            .setRemark(bpmModel.getRemark());
-        bpmModelManager.save(newBpmModel);
-        List bpmModelNodes = bpmModelNodeManager.findAllByModelId(id);
-
-        List newModelTasks = bpmModelNodes.stream().map(bpmModelNode -> {
-            BpmModelNode node = new BpmModelNode();
-            BeanUtil.copyProperties(bpmModelNode, node, BpmModelNode.Fields.modelId, BpmModelNode.Fields.defId,
-                    BpmModelNode.Fields.defKey, MpIdEntity.Id.id, Create.createTime, Create.creator,
-                    Del.lastModifiedTime, Del.lastModifier, Del.version);
-            node.setModelId(newBpmModel.getId());
-            return node;
-        }).collect(Collectors.toList());
-        bpmModelNodeManager.saveAll(newModelTasks);
-    }
-
-    /**
-     * 修改
-     */
-    public void update(BpmModelParam param) {
-        BpmModel flowBpmModel = bpmModelManager.findById(param.getId()).orElseThrow(ModelNotExistException::new);
-
-        BeanUtil.copyProperties(param, flowBpmModel, CopyOptions.create().ignoreNullValue());
-        bpmModelManager.updateById(flowBpmModel);
-    }
-
-    /**
-     * 发布流程
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void publish(Long id) {
-        BpmModel bpmModel = bpmModelManager.findById(id).orElseThrow(ModelNotExistException::new);
-
-        // 校验检查
-        this.verifyModel(bpmModel);
-        // 部署
-        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
-
-        Deployment deploy = deploymentBuilder.name(bpmModel.getName())
-            // 文件后缀名有要求
-            .addString(bpmModel.getName() + ".bpmn", bpmModel.getModelEditorXml())
-            .key(bpmModel.getDefKey())
-            .category(bpmModel.getModelType())
-            .deploy();
-        // 流程定义
-        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
-            .deploymentId(deploy.getId())
-            .singleResult();
-        // 回填属性
-        bpmModel.setDeployId(deploy.getId())
-            .setDefId(processDefinition.getId())
-            .setDefKey(processDefinition.getKey())
-            .setDefName(processDefinition.getName())
-            .setDefRemark(processDefinition.getDescription())
-            .setMainProcess(true)
-            .setPublish(PUBLISHED)
-            .setEnable(true)
-            .setProcessVersion(processDefinition.getVersion());
-        bpmModelManager.cancelMainProcessByDefKey(bpmModel.getDefKey());
-        bpmModelManager.updateById(bpmModel);
-        this.updateTaskNodes(bpmModel);
-    }
-
-    /**
-     * 删除
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void delete(Long id) {
-        BpmModel flowBpmModel = bpmModelManager.findById(id).orElseThrow(() -> new DataNotExistException(""));
-
-        // 发布状态删除
-        if (Objects.equals(PUBLISHED, flowBpmModel.getPublish())) {
-            throw new BizException("流程已发布, 无法删除");
-            // 先删除部署以及对应的流程
-            // repositoryService.deleteDeployment(flowBpmModel.getDeployId(),true);
-            // bpmModelManager.deleteById(id);
-        }
-        bpmModelNodeManager.deleteByModelId(id);
-        bpmModelManager.deleteById(id);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam, BpmModelParam bpmModelParam) {
-        return MpUtil.convert2DtoPageResult(bpmModelManager.page(pageParam, bpmModelParam));
-    }
-
-    /**
-     * 获取单条
-     */
-    public BpmModelDto findById(Long id) {
-        return bpmModelManager.findById(id).map(BpmModel::toDto).orElseThrow(ModelNotExistException::new);
-    }
-
-    /**
-     * 根据流程定义id获取模型信息
-     */
-    public BpmModelDto findByDefId(String defId) {
-        return bpmModelManager.findByDefId(defId).map(BpmModel::toDto).orElseThrow(ModelNotExistException::new);
-    }
-
-    /**
-     * 获取生效并部署的主流程列表
-     */
-    public List findMainProcess() {
-        return bpmModelManager.findMainProcess()
-            .stream()
-            .map(bpmModel -> new LabelValue(bpmModel.getName(), bpmModel.getId()))
-            .collect(Collectors.toList());
-    }
-
-    /**
-     * 更新关联任务节点信息
-     */
-    private void updateTaskNodes(BpmModel bpmModel) {
-        bpmModelNodeManager.lambdaUpdate()
-            .set(BpmModelNode::getDefId, bpmModel.getDefId())
-            .set(BpmModelNode::getDefKey, bpmModel.getDefKey())
-            .eq(BpmModelNode::getModelId, bpmModel.getId())
-            .update();
-    }
-
-    /**
-     * 校验流程
-     */
-    public void verifyModel(Long modelId) {
-        BpmModel bpmModel = bpmModelManager.findById(modelId).orElseThrow(ModelNotExistException::new);
-        this.verifyModel(bpmModel);
-    }
-
-    /**
-     * 校验流程
-     */
-    public void verifyModel(BpmModel bpmModel) {
-        // 校验是否已经发布
-        if (Objects.equals(bpmModel.getPublish(), PUBLISHED)) {
-            throw new BizException("流程模型已经发布");
-        }
-
-        // 校验对应的任务节点是否已经被配置
-        String modelEditorXml = bpmModel.getModelEditorXml();
-        BpmnModel bpmnModel = BpmXmlUtil.convertByte2BpmnModel(modelEditorXml.getBytes());
-        Process process = bpmnModel.getMainProcess();
-        List userTasks = process.findFlowElementsOfType(UserTask.class);
-        List bpmModelNodes = bpmModelNodeManager.findAllByModelId(bpmModel.getId());
-
-        val bpmModelNodeMap = bpmModelNodes.stream()
-            .collect(Collectors.toMap(BpmModelNode::getNodeId, Function.identity()));
-
-        for (val userTask : userTasks) {
-            BpmModelNode modelTask = bpmModelNodeMap.get(userTask.getId());
-            if (Objects.isNull(modelTask)) {
-                throw new BizException("流程有任务节点未进行配置,请进行配置");
-            }
-            if (StrUtil.isBlank(modelTask.getAssignType())) {
-                throw new BizException(modelTask.getNodeName() + " 任务节点未配置处理人员类型");
-            }
-        }
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/ActivityInstanceChart.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/ActivityInstanceChart.java
deleted file mode 100644
index d0c381b3e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/ActivityInstanceChart.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.starter.flowable.dto.instance;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * @author xxm
- * @date 2022/8/31
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程活动实例(用于绘制流程图)")
-public class ActivityInstanceChart {
-
-    @Schema(description = "流程活动的id")
-    private String activityId;
-
-    @Schema(description = "流程活动的类型")
-    private String activityType;
-
-    @Schema(description = "运行中")
-    private boolean running;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/BpmInstanceDto.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/BpmInstanceDto.java
deleted file mode 100644
index 2bb561855..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/BpmInstanceDto.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cn.bootx.starter.flowable.dto.instance;
-
-import cn.bootx.common.core.rest.dto.BaseDto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * 流程实例扩展
- *
- * @author xxm
- * @date 2022-08-23
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Schema(title = "流程实例扩展")
-@Accessors(chain = true)
-public class BpmInstanceDto extends BaseDto {
-
-    @Schema(description = "流程实例的id")
-    private String instanceId;
-
-    @Schema(description = "流程实例名称")
-    private String instanceName;
-
-    @Schema(description = "模型id")
-    private Long modelId;
-
-    @Schema(description = "流程定义的id")
-    private String defId;
-
-    @Schema(description = "流程定义的名称")
-    private String defName;
-
-    @Schema(description = "流程分类")
-    private String modelType;
-
-    @Schema(description = "发起人")
-    private Long startUserId;
-
-    @Schema(description = "发起人名称")
-    private String startUserName;
-
-    @Schema(description = "流程实例的状态")
-    private String state;
-
-    @Schema(description = "流程实例的执行结果")
-    private String result;
-
-    @Schema(description = "开始时间")
-    private LocalDateTime startTime;
-
-    @Schema(description = "结束时间")
-    private LocalDateTime endTime;
-
-    @Schema(description = "提交的表单值")
-    private Map formVariables;
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/InstanceInfo.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/InstanceInfo.java
deleted file mode 100644
index 235dba155..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/instance/InstanceInfo.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package cn.bootx.starter.flowable.dto.instance;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-
-/**
- * 流程实例信息
- *
- * @author xxm
- * @date 2022/8/27
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程实例信息")
-public class InstanceInfo {
-
-    @Schema(description = "标题")
-    private String name;
-
-    @Schema(description = "实例ID")
-    private String instanceId;
-
-    @Schema(description = "流程定义名称")
-    private String defMame;
-
-    @Schema(description = "流程实例的状态")
-    private String state;
-
-    @Schema(description = "开始时间")
-    private LocalDateTime startTime;
-
-    @Schema(description = "结束时间")
-    private LocalDateTime endTime;
-
-    @Schema(description = "发起人id")
-    private Long startUserId;
-
-    @Schema(description = "发起人名称")
-    private String startUserName;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelDto.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelDto.java
deleted file mode 100644
index baadd807d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelDto.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cn.bootx.starter.flowable.dto.model;
-
-import cn.bootx.common.core.rest.dto.BaseDto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 流程模型
- *
- * @author xxm
- * @date 2022-08-23
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Schema(title = "流程模型")
-@Accessors(chain = true)
-public class BpmModelDto extends BaseDto {
-
-    @Schema(description = "名称")
-    private String name;
-
-    @Schema(description = "流程类型")
-    private String modelType;
-
-    @Schema(description = "关联表单id")
-    private Long formId;
-
-    @Schema(description = "发布状态")
-    private String publish;
-
-    @Schema(description = "启用状态")
-    private Boolean enable;
-
-    @Schema(description = "部署id")
-    private String deployId;
-
-    @Schema(description = "流程定义id")
-    private String defId;
-
-    @Schema(description = "流程key")
-    private String defKey;
-
-    @Schema(description = "流程名称")
-    private String defName;
-
-    @Schema(description = "流程备注")
-    private String defRemark;
-
-    @Schema(description = "是否主流程")
-    private Boolean mainProcess;
-
-    @Schema(description = "流程版本号")
-    private Integer processVersion;
-
-    @Schema(description = "流程xml")
-    private String modelEditorXml;
-
-    @Schema(description = "备注")
-    private String remark;
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelNodeDto.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelNodeDto.java
deleted file mode 100644
index e550d1798..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/model/BpmModelNodeDto.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package cn.bootx.starter.flowable.dto.model;
-
-import cn.bootx.common.core.rest.dto.BaseDto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Schema(title = "模型任务节点配置")
-@Accessors(chain = true)
-public class BpmModelNodeDto extends BaseDto {
-
-    @Schema(description = "关联模型id")
-    private Long modelId;
-
-    @Schema(description = "流程定义id")
-    private String defId;
-
-    @Schema(description = "流程key")
-    private String defKey;
-
-    @Schema(description = "任务节点id")
-    private String nodeId;
-
-    @Schema(description = "任务节点名称")
-    private String nodeName;
-
-    @Schema(description = "是否多任务")
-    private boolean multi;
-
-    @Schema(description = "是否串签")
-    private Boolean sequential;
-
-    /** 是否是或签, 会签情况下使用,一个同意的直接通过这个任务 */
-    private Boolean orSign;
-
-    /** 是否比例通过 会签情况下使用 */
-    private Boolean ratioPass;
-
-    /** 通过比例 */
-    private Double passRatio;
-
-    @Schema(description = "是否自动跳过当前节点(通常用于开始节点)")
-    private boolean skip;
-
-    @Schema(description = "是否允许驳回")
-    private boolean reject;
-
-    @Schema(description = "是否允许回退")
-    private boolean back;
-
-    @Schema(description = "是否允许取回")
-    private boolean retrieve;
-
-    @Schema(description = "分配类型")
-    private String assignType;
-
-    @Schema(description = "分配的原始数据")
-    private Object assignRaw;
-
-    @Schema(description = "分配的数据的展示")
-    private String assignShow;
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/BpmTaskDto.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/BpmTaskDto.java
deleted file mode 100644
index e3593815e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/BpmTaskDto.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package cn.bootx.starter.flowable.dto.task;
-
-import cn.bootx.common.core.rest.dto.BaseDto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * 流程任务扩展
- *
- * @author xxm
- * @date 2022-09-01
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Schema(title = "流程任务扩展")
-@Accessors(chain = true)
-public class BpmTaskDto extends BaseDto {
-
-    @Schema(description = "任务ID")
-    private String taskId;
-
-    @Schema(description = "任务执行 ID")
-    private String executionId;
-
-    @Schema(description = "流程实例的id")
-    private String instanceId;
-
-    @Schema(description = "流程名称(业务标题)")
-    private String instanceName;
-
-    @Schema(description = "流程定义名称")
-    private String defName;
-
-    @Schema(description = "任务节点id")
-    private String nodeId;
-
-    @Schema(description = "任务节点名称")
-    private String nodeName;
-
-    @Schema(description = "流程任务的状态")
-    private String state;
-
-    /**
-     * @see cn.bootx.starter.flowable.code.TaskCode#RESULT_PASS
-     */
-    @Schema(description = "处理结果")
-    private String result;
-
-    @Schema(description = "处理意见")
-    private String reason;
-
-    @Schema(description = "开始时间")
-    private LocalDateTime startTime;
-
-    @Schema(description = "结束时间")
-    private LocalDateTime endTime;
-
-    @Schema(description = "当前处理人")
-    private Long userId;
-
-    @Schema(description = "当前处理人")
-    private String userName;
-
-    @Schema(description = "发起人")
-    private Long startUserId;
-
-    @Schema(description = "发起人名称")
-    private String startUserName;
-
-    @Schema(description = "提交的表单值")
-    private Map formVariables;
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/TaskInfo.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/TaskInfo.java
deleted file mode 100644
index 2791a6c8e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/dto/task/TaskInfo.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cn.bootx.starter.flowable.dto.task;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-
-/**
- * 流程任务扩展
- *
- * @author xxm
- * @date 2022/8/28
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程任务信息")
-public class TaskInfo {
-
-    @Schema(description = "任务id")
-    private String taskId;
-
-    @Schema(description = "执行 ID")
-    private String executionId;
-
-    @Schema(description = "实例ID")
-    private String instanceId;
-
-    @Schema(description = "流程名称(业务标题)")
-    private String instanceName;
-
-    @Schema(description = "流程定义名称")
-    private String defName;
-
-    @Schema(description = "当前环节名称")
-    private String nodeName;
-
-    @Schema(description = "流程任务的状态")
-    private String state;
-
-    @Schema(description = "处理人")
-    private Long userId;
-
-    @Schema(description = "处理人")
-    private String userName;
-
-    @Schema(description = "流程发起人id")
-    private Long startUserId;
-
-    @Schema(description = "流程发起人名称")
-    private String startUserName;
-
-    @Schema(description = "开始时间")
-    private LocalDateTime startTime;
-
-    @Schema(description = "结束时间")
-    private LocalDateTime endTime;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/BpmEventService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/BpmEventService.java
deleted file mode 100644
index acae99e6b..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/BpmEventService.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.support.TransactionSynchronization;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-
-import java.util.List;
-
-/**
- * 流程时间发送器
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmEventService {
-
-    private final ApplicationEventPublisher eventPublisher;
-
-    /**
-     * 注册 事务提交成功后的回调操作
-     * @param runnable 回调函数
-     */
-    private void afterCommit(Runnable runnable) {
-        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
-            @Override
-            public void afterCommit() {
-                runnable.run();
-            }
-        });
-    }
-
-    /**
-     * 流程创建事件
-     */
-    public void processCreated(BpmInstance bpmInstance) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new ProcessCreatedEvent(this, bpmInstance));
-        });
-    }
-
-    /**
-     * 流程完成事件
-     */
-    public void processCompleted(BpmInstance bpmInstance) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new ProcessCompletedEvent(this, bpmInstance));
-        });
-    }
-
-    /**
-     * 流程取消事件
-     */
-    public void processCancel(BpmInstance bpmInstance) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new ProcessCancelEvent(this, bpmInstance));
-        });
-    }
-
-    /**
-     * 任务创建事件
-     */
-    public void taskCreated(BpmTask task) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new TaskCreatedEvent(this, task));
-        });
-    }
-
-    /**
-     * 任务完成事件
-     */
-    public void taskCompleted(List tasks, boolean multi) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new TaskCompletedEvent(this, tasks, multi));
-        });
-    }
-
-    /**
-     * 任务分配人员事件
-     */
-    public void taskAssign(BpmTask task, Long oldAssign, String oldAssignName, Long newAssign, String newAssignName) {
-        this.afterCommit(() -> {
-            eventPublisher
-                .publishEvent(new TaskAssignEvent(this, task, oldAssign, oldAssignName, newAssign, newAssignName));
-        });
-    }
-
-    /**
-     * 任务取消事件
-     */
-    public void taskCancel(List tasks) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new TaskCancelEvent(this, tasks));
-        });
-    }
-
-    /**
-     * 驳回
-     */
-    public void taskReject(BpmTask task) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new TaskRejectEvent(this, task));
-        });
-    }
-
-    /**
-     * 退回回
-     */
-    public void taskBack(BpmTask task) {
-        this.afterCommit(() -> {
-            eventPublisher.publishEvent(new TaskBackEvent(this, task));
-        });
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCancelEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCancelEvent.java
deleted file mode 100644
index bb0bb2f30..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCancelEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程实例取消事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class ProcessCancelEvent extends ApplicationEvent {
-
-    private final BpmInstance bpmInstance;
-
-    public ProcessCancelEvent(Object source, BpmInstance bpmInstance) {
-        super(source);
-        this.bpmInstance = bpmInstance;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCompletedEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCompletedEvent.java
deleted file mode 100644
index a56be043b..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCompletedEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程实例完成事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class ProcessCompletedEvent extends ApplicationEvent {
-
-    private final BpmInstance bpmInstance;
-
-    public ProcessCompletedEvent(Object source, BpmInstance bpmInstance) {
-        super(source);
-        this.bpmInstance = bpmInstance;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCreatedEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCreatedEvent.java
deleted file mode 100644
index 8d3faaf31..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/ProcessCreatedEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程实例创建事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class ProcessCreatedEvent extends ApplicationEvent {
-
-    private final BpmInstance bpmInstance;
-
-    public ProcessCreatedEvent(Object source, BpmInstance bpmInstance) {
-        super(source);
-        this.bpmInstance = bpmInstance;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskAssignEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskAssignEvent.java
deleted file mode 100644
index a5783a310..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskAssignEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程任务人员分配事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskAssignEvent extends ApplicationEvent {
-
-    private final BpmTask bpmTask;
-
-    private final Long oldAssign;
-
-    private final String oldAssignName;
-
-    private final Long newAssign;
-
-    private final String newAssignName;
-
-    public TaskAssignEvent(Object source, BpmTask bpmTask, Long oldAssign, String oldAssignName, Long newAssign,
-            String newAssignName) {
-        super(source);
-        this.bpmTask = bpmTask;
-        this.oldAssign = oldAssign;
-        this.oldAssignName = oldAssignName;
-        this.newAssign = newAssign;
-        this.newAssignName = newAssignName;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskBackEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskBackEvent.java
deleted file mode 100644
index 1c9daac87..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskBackEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程任务退回事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskBackEvent extends ApplicationEvent {
-
-    private final BpmTask bpmTask;
-
-    public TaskBackEvent(Object source, BpmTask bpmTask) {
-        super(source);
-        this.bpmTask = bpmTask;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCancelEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCancelEvent.java
deleted file mode 100644
index 4cf14ee25..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCancelEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-import java.util.List;
-
-/**
- * 流程任务取消事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskCancelEvent extends ApplicationEvent {
-
-    private final List bpmTasks;
-
-    public TaskCancelEvent(Object source, List bpmTasks) {
-        super(source);
-        this.bpmTasks = bpmTasks;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCompletedEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCompletedEvent.java
deleted file mode 100644
index 5046fdabd..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCompletedEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-import java.util.List;
-
-/**
- * 流程任务完成事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskCompletedEvent extends ApplicationEvent {
-
-    private final List bpmTasks;
-
-    private final boolean multi;
-
-    public TaskCompletedEvent(Object source, List bpmTasks, boolean multi) {
-        super(source);
-        this.bpmTasks = bpmTasks;
-        this.multi = multi;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCreatedEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCreatedEvent.java
deleted file mode 100644
index 2bf4210a5..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskCreatedEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程任务创建事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskCreatedEvent extends ApplicationEvent {
-
-    private final BpmTask bpmTask;
-
-    public TaskCreatedEvent(Object source, BpmTask bpmTask) {
-        super(source);
-        this.bpmTask = bpmTask;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskRejectEvent.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskRejectEvent.java
deleted file mode 100644
index ffe9ce31f..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/event/TaskRejectEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.starter.flowable.event;
-
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import lombok.Getter;
-import org.springframework.context.ApplicationEvent;
-
-/**
- * 流程任务驳回事件
- *
- * @author xxm
- * @date 2022/9/18
- */
-@Getter
-public class TaskRejectEvent extends ApplicationEvent {
-
-    private final BpmTask bpmTask;
-
-    public TaskRejectEvent(Object source, BpmTask bpmTask) {
-        super(source);
-        this.bpmTask = bpmTask;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/InstanceNotExistException.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/InstanceNotExistException.java
deleted file mode 100644
index 31defb06d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/InstanceNotExistException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 流程实例不存在
- *
- * @author xxm
- * @date 2020/3/1 15:28
- */
-public class InstanceNotExistException extends BizException {
-
-    public InstanceNotExistException(String message) {
-        super(message);
-    }
-
-    public InstanceNotExistException() {
-        super("流程实例不存在");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNodeNotExistException.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNodeNotExistException.java
deleted file mode 100644
index 1d1920eaa..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNodeNotExistException.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.bootx.starter.flowable.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 流程模型节点定义不存在
- *
- * @author xxm
- * @date 2022/9/4
- */
-public class ModelNodeNotExistException extends BizException {
-
-    public ModelNodeNotExistException() {
-        super("流程模型节点定义不存在");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotExistException.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotExistException.java
deleted file mode 100644
index 1ad844b4e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotExistException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 流程模型定义不存在
- *
- * @author xxm
- * @date 2020/3/1 13:33
- */
-public class ModelNotExistException extends BizException {
-
-    public ModelNotExistException(String message) {
-        super(message);
-    }
-
-    public ModelNotExistException() {
-        super("流程模型定义不存在");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotPublishException.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotPublishException.java
deleted file mode 100644
index 28cfc58cb..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/ModelNotPublishException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 流程模型未发布
- *
- * @author xxm
- * @date 2020/3/1 19:25
- */
-public class ModelNotPublishException extends BizException {
-
-    public ModelNotPublishException(String message) {
-        super(message);
-    }
-
-    public ModelNotPublishException() {
-        super("流程模型未发布");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/TaskNotExistException.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/TaskNotExistException.java
deleted file mode 100644
index a57f976ba..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/exception/TaskNotExistException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.starter.flowable.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 流程任务不存在
- *
- * @author xxm
- * @date 2022/9/12
- */
-public class TaskNotExistException extends BizException {
-
-    public TaskNotExistException(String message) {
-        super(message);
-    }
-
-    public TaskNotExistException() {
-        super("流程任务不存在");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmActivityBehaviorFactory.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmActivityBehaviorFactory.java
deleted file mode 100644
index 48fe40b98..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmActivityBehaviorFactory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.Activity;
-import org.flowable.bpmn.model.UserTask;
-import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
-import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
-import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
-import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
-import org.flowable.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * Bpm 活动行为工厂
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory {
-
-    private final BpmUserTaskAssignService bpmUserTaskAssignService;
-
-    private final BpmMultiInstanceBehaviorService assistService;
-
-    /**
-     * 任务人员分配
-     */
-    @Override
-    public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) {
-        return new BpmUserTaskActivityBehavior(userTask, bpmUserTaskAssignService);
-    }
-
-    /**
-     * 创建并行多实例行为
-     */
-    @Override
-    public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(Activity activity,
-            AbstractBpmnActivityBehavior innerActivityBehavior) {
-        return new BpmParallelMultiInstanceBehavior(activity, innerActivityBehavior, assistService);
-    }
-
-    /**
-     * 创建串行多实例行为
-     */
-    @Override
-    public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(Activity activity,
-            AbstractBpmnActivityBehavior innerActivityBehavior) {
-        return new BpmSequentialMultiInstanceBehavior(activity, innerActivityBehavior, assistService);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmMultiInstanceBehaviorService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmMultiInstanceBehaviorService.java
deleted file mode 100644
index d3b39460e..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmMultiInstanceBehaviorService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import org.flowable.engine.delegate.DelegateExecution;
-import org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
-
-import java.util.List;
-
-/**
- * Bpm 多实例行为服务
- *
- * @author xxm
- * @date 2022/9/4
- */
-public interface BpmMultiInstanceBehaviorService {
-
-    /**
-     * 计算当前执行任务的处理人id集合
-     */
-    List getTaskUsers(DelegateExecution execution, MultiInstanceActivityBehavior multiInstanceActivityBehavior);
-
-    /**
-     * 是否满足结束条件
-     */
-    boolean completionConditionSatisfied(DelegateExecution execution, MultiInstanceActivityBehavior behavior);
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmParallelMultiInstanceBehavior.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmParallelMultiInstanceBehavior.java
deleted file mode 100644
index 9230d7642..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmParallelMultiInstanceBehavior.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import cn.bootx.starter.flowable.local.BpmContext;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.hutool.core.util.IdUtil;
-import org.flowable.bpmn.model.Activity;
-import org.flowable.engine.delegate.DelegateExecution;
-import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
-import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
-
-import java.util.List;
-
-import static cn.bootx.starter.flowable.code.BpmnCode.*;
-
-/**
- * Bpm 并行多实例行为
- *
- * @author xxm
- * @date 2022/8/28
- */
-public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehavior {
-
-    private final BpmMultiInstanceBehaviorService behaviorService;
-
-    public BpmParallelMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior originalActivityBehavior,
-            BpmMultiInstanceBehaviorService bpmMultiInstanceBehaviorService) {
-        super(activity, originalActivityBehavior);
-        this.behaviorService = bpmMultiInstanceBehaviorService;
-    }
-
-    /**
-     * 忽略原有的 collectionString、collectionElementVariable 表达式,而是采用自己定义的 获得任务的处理人,并设置到
-     * collectionVariable 中,用于 BpmUserTaskActivityBehavior 从中可以获取任务的处理人
-     * 多个任务实例,每个任务实例对应一个处理人,所以返回的数量就是任务处理人的数量
-     */
-    @Override
-    protected int resolveNrOfInstances(DelegateExecution execution) {
-        // 清空collectionExpression , 它和 collectionVariable 是互斥的
-        super.setCollectionExpression(null);
-        // 设置 collectionElementVariable(迭代出来的处理人) 和 collectionString(候选人集合)
-        super.setCollectionString(MULTI_COLLECTION);
-        super.setCollectionElementVariable(MULTI_COLLECTION_ELEMENT);
-
-        List taskUsers = behaviorService.getTaskUsers(execution, this);
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmContext.setTaskMultiId(IdUtil.getSnowflakeNextId());
-        BpmContextLocal.put(bpmContext);
-        execution.setVariable(super.collectionString, taskUsers);
-        return taskUsers.size();
-    }
-
-    /**
-     * 是否满足结束条件
-     */
-    @Override
-    public boolean completionConditionSatisfied(DelegateExecution execution) {
-        // 先进行自定义判断处理, 不通过调用原生的处理
-        boolean conditionSatisfied = behaviorService.completionConditionSatisfied(execution, this)
-                || super.completionConditionSatisfied(execution);
-        if (conditionSatisfied) {
-            // 删除多实例id
-            execution.removeVariable(MULTI_TASK_ID);
-        }
-        return conditionSatisfied;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmSequentialMultiInstanceBehavior.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmSequentialMultiInstanceBehavior.java
deleted file mode 100644
index 7406af746..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmSequentialMultiInstanceBehavior.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import cn.hutool.core.util.IdUtil;
-import org.flowable.bpmn.model.Activity;
-import org.flowable.engine.delegate.DelegateExecution;
-import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
-import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
-
-import java.util.List;
-
-import static cn.bootx.starter.flowable.code.BpmnCode.*;
-
-/**
- * Bpm 顺序多实例行为
- *
- * @author xxm
- * @date 2022/9/6
- */
-public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceBehavior {
-
-    private final BpmMultiInstanceBehaviorService behaviorService;
-
-    public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior,
-            BpmMultiInstanceBehaviorService behaviorService) {
-        super(activity, innerActivityBehavior);
-        this.behaviorService = behaviorService;
-    }
-
-    /**
-     * 多实例创建
-     */
-    @Override
-    protected int resolveNrOfInstances(DelegateExecution execution) {
-        // 清空collectionExpression , 它和 collectionVariable 是互斥的
-        super.setCollectionExpression(null);
-        // 设置 collectionElementVariable(迭代出来的处理人) 和 collectionString(候选人集合)
-        super.setCollectionString(MULTI_COLLECTION);
-        super.setCollectionElementVariable(MULTI_COLLECTION_ELEMENT);
-
-        List taskUsers = behaviorService.getTaskUsers(execution, this);
-        execution.setVariable(super.collectionString, taskUsers);
-        execution.setVariable(MULTI_TASK_ID, IdUtil.getSnowflakeNextId());
-        return taskUsers.size();
-    }
-
-    /**
-     * 是否满足结束条件
-     */
-    @Override
-    public boolean completionConditionSatisfied(DelegateExecution execution) {
-        // 先进行自定义判断处理, 不通过调用原生的处理
-        boolean conditionSatisfied = behaviorService.completionConditionSatisfied(execution, this)
-                || super.completionConditionSatisfied(execution);
-        if (conditionSatisfied) {
-            // 删除多实例id
-            execution.removeVariable(MULTI_TASK_ID);
-        }
-        return conditionSatisfied;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskActivityBehavior.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskActivityBehavior.java
deleted file mode 100644
index 98ad62e51..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskActivityBehavior.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.UserTask;
-import org.flowable.common.engine.impl.el.ExpressionManager;
-import org.flowable.engine.delegate.DelegateExecution;
-import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
-import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
-import org.flowable.task.service.TaskService;
-import org.flowable.task.service.impl.persistence.entity.TaskEntity;
-
-import java.util.List;
-
-/**
- * Bpm 自定义单个任务人员分配
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Slf4j
-public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior {
-
-    private final BpmUserTaskAssignService bpmUserTaskAssignService;
-
-    public BpmUserTaskActivityBehavior(UserTask userTask, BpmUserTaskAssignService bpmUserTaskAssignService) {
-        super(userTask);
-        this.bpmUserTaskAssignService = bpmUserTaskAssignService;
-    }
-
-    /**
-     * 处理作业, 分配人员
-     */
-    @Override
-    protected void handleAssignments(TaskService taskService, String assignee, String owner,
-            List candidateUsers, List candidateGroups, TaskEntity task,
-            ExpressionManager expressionManager, DelegateExecution execution,
-            ProcessEngineConfigurationImpl processEngineConfiguration) {
-
-        bpmUserTaskAssignService.handleAssignments(taskService, assignee, owner, candidateUsers, candidateGroups, task,
-                expressionManager, execution, processEngineConfiguration, this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskAssignService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskAssignService.java
deleted file mode 100644
index 050546914..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/behavior/BpmUserTaskAssignService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.starter.flowable.handler.behavior;
-
-import org.flowable.common.engine.impl.el.ExpressionManager;
-import org.flowable.engine.delegate.DelegateExecution;
-import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
-import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
-import org.flowable.task.service.TaskService;
-import org.flowable.task.service.impl.persistence.entity.TaskEntity;
-
-import java.util.List;
-
-/**
- * 处理普通任务人员分配
- *
- * @author xxm
- * @date 2022/9/4
- */
-public interface BpmUserTaskAssignService {
-
-    /**
-     * 处理任务人员分配
-     */
-    void handleAssignments(TaskService taskService, String assignee, String owner, List candidateUsers,
-            List candidateGroups, TaskEntity task, ExpressionManager expressionManager,
-            DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration,
-            UserTaskActivityBehavior userTaskActivityBehavior);
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/cmd/TaskRetrieveCmd.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/cmd/TaskRetrieveCmd.java
deleted file mode 100644
index f6f500531..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/cmd/TaskRetrieveCmd.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package cn.bootx.starter.flowable.handler.cmd;
-
-import com.google.common.collect.Lists;
-import org.flowable.common.engine.impl.interceptor.Command;
-import org.flowable.common.engine.impl.interceptor.CommandContext;
-import org.flowable.engine.impl.ActivityInstanceQueryImpl;
-import org.flowable.engine.impl.util.CommandContextUtil;
-import org.flowable.engine.runtime.ActivityInstance;
-import org.flowable.task.service.TaskService;
-import org.flowable.task.service.impl.persistence.entity.TaskEntity;
-
-import java.util.List;
-
-/**
- * 取回任务命令类
- *
- * @author xxm
- * @date 2020/3/18 11:03
- */
-public class TaskRetrieveCmd implements Command {
-
-    /**
-     * 任务id
-     */
-    protected String taskId;
-
-    public TaskRetrieveCmd(String taskId) {
-        this.taskId = taskId;
-    }
-
-    @Override
-    public Void execute(CommandContext commandContext) {
-        TaskService taskService = CommandContextUtil.getTaskService();
-
-        TaskEntity taskEntity = taskService.getTask(taskId);
-
-        List activityInstancesByQueryCriteria = CommandContextUtil.getActivityInstanceEntityManager()
-            .findActivityInstancesByQueryCriteria(
-                    new ActivityInstanceQueryImpl().processInstanceId(taskEntity.getProcessInstanceId())
-                        .orderByActivityInstanceStartTime());
-
-        List reverse = Lists.reverse(activityInstancesByQueryCriteria);
-
-        return null;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmInstanceEventListener.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmInstanceEventListener.java
deleted file mode 100644
index c9f644a86..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmInstanceEventListener.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package cn.bootx.starter.flowable.handler.listener;
-
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.starter.flowable.handler.service.BpmInstanceEvenListenerService;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
-import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
-import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
-import org.flowable.engine.delegate.event.FlowableCancelledEvent;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springframework.stereotype.Component;
-
-import java.util.Set;
-
-import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.*;
-
-/**
- * @author xxm
- * @date 2022/8/28
- */
-@Slf4j
-@Component
-public class BpmInstanceEventListener extends AbstractFlowableEngineEventListener {
-
-    private final BpmInstanceEvenListenerService bpmInstanceEvenListenerService;
-
-    /** 处理的事件 */
-    private static final Set TASK_EVENTS = CollUtil.newHashSet(PROCESS_CREATED,
-            PROCESS_CANCELLED, PROCESS_COMPLETED);
-
-    public BpmInstanceEventListener(BpmInstanceEvenListenerService bpmInstanceEvenListenerService) {
-        super(TASK_EVENTS);
-        this.bpmInstanceEvenListenerService = bpmInstanceEvenListenerService;
-    }
-
-    /**
-     * 流程创建
-     */
-    @Override
-    protected void processCreated(FlowableEngineEntityEvent event) {
-        ProcessInstance instance = (ProcessInstance) event.getEntity();
-        bpmInstanceEvenListenerService.processCreated(instance);
-    }
-
-    /**
-     * 流程取消(被删除) 一个进程已被取消。在数据库删除之前由
-     * org.flowable.engine.impl.RuntimeServiceImpl#deleteProcessInstance(java.lang.String,
-     * java.lang.String) 删除流程实例时调度。
-     */
-    @Override
-    protected void processCancelled(FlowableCancelledEvent event) {
-    }
-
-    /**
-     * 流程完成
-     */
-    @Override
-    protected void processCompleted(FlowableEngineEntityEvent event) {
-        ProcessInstance instance = (ProcessInstance) event.getEntity();
-        bpmInstanceEvenListenerService.processCompleted(instance);
-
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmTaskEventListener.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmTaskEventListener.java
deleted file mode 100644
index b8e7ec42f..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/listener/BpmTaskEventListener.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package cn.bootx.starter.flowable.handler.listener;
-
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.starter.flowable.handler.service.BpmTaskEventListenerService;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
-import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
-import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
-import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCompletedEvent;
-import org.flowable.task.service.impl.persistence.entity.TaskEntity;
-import org.springframework.stereotype.Component;
-
-import java.util.Set;
-
-import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.*;
-
-/**
- * Bpm 任务事件监听器
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Slf4j
-@Component
-public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
-
-    private final BpmTaskEventListenerService bpmTaskEventListenerService;
-
-    /** 处理的事件 */
-    private static final Set TASK_EVENTS = CollUtil.newHashSet(TASK_CREATED, TASK_ASSIGNED,
-            TASK_COMPLETED, MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION);
-
-    public BpmTaskEventListener(BpmTaskEventListenerService bpmTaskEventListenerService) {
-        super(TASK_EVENTS);
-        this.bpmTaskEventListenerService = bpmTaskEventListenerService;
-    }
-
-    /**
-     * 存储扩展内容
-     */
-    @Override
-    protected void taskCreated(FlowableEngineEntityEvent event) {
-        TaskEntity task = (TaskEntity) event.getEntity();
-        bpmTaskEventListenerService.taskCreated(task);
-    }
-
-    /**
-     * 任务完成
-     */
-    @Override
-    protected void taskCompleted(FlowableEngineEntityEvent event) {
-        TaskEntity task = (TaskEntity) event.getEntity();
-        bpmTaskEventListenerService.taskCompleted(task);
-    }
-
-    /**
-     * 任务分配处理人
-     */
-    @Override
-    protected void taskAssigned(FlowableEngineEntityEvent event) {
-        TaskEntity task = (TaskEntity) event.getEntity();
-        bpmTaskEventListenerService.taskAssigned(task);
-    }
-
-    /**
-     * 多实例活动完成
-     */
-    @Override
-    protected void multiInstanceActivityCompletedWithCondition(FlowableMultiInstanceActivityCompletedEvent event) {
-        bpmTaskEventListenerService.multiInstanceActivityCompletedWithCondition(event);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/reject/TaskRejectHandler.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/reject/TaskRejectHandler.java
deleted file mode 100644
index a08cb1e21..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/reject/TaskRejectHandler.java
+++ /dev/null
@@ -1,264 +0,0 @@
-package cn.bootx.starter.flowable.handler.reject;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.starter.flowable.util.FlowableUtil;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.BaseElement;
-import org.flowable.bpmn.model.FlowElement;
-import org.flowable.bpmn.model.Process;
-import org.flowable.bpmn.model.UserTask;
-import org.flowable.common.engine.api.FlowableException;
-import org.flowable.common.engine.api.FlowableObjectNotFoundException;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
-import org.flowable.engine.repository.ProcessDefinition;
-import org.flowable.task.api.Task;
-import org.flowable.task.api.TaskInfo;
-import org.flowable.task.api.history.HistoricTaskInstance;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * 方法不支持多对多跳转 回退不能够直接回退到子流程上,我这里按照只能回退到用户任务节点处理的 驳回可以直接驳回到子流程开始
- *
- * @author linjinp
- * @date 2020/4/3 10:37
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class TaskRejectHandler {
-
-    private final TaskService taskService;
-
-    private final RuntimeService runtimeService;
-
-    private final RepositoryService repositoryService;
-
-    private final HistoryService historyService;
-
-    /**
-     * 驳回, 返回驳回到的任务节点id
-     */
-    public void rejectTalk(Task task) {
-        if (task.isSuspended()) {
-            throw new BizException("任务处于挂起状态");
-        }
-        // 获取全部节点列表,包含子节点
-        Process process = repositoryService.getBpmnModel(task.getProcessDefinitionId()).getMainProcess();
-        Collection flowNodes = FlowableUtil.getAllElements(process.getFlowElements(), null);
-        // 获取当前任务节点元素
-        FlowElement currentNode = flowNodes.stream()
-            .filter(flowElement -> Objects.equals(flowElement.getId(), task.getTaskDefinitionKey()))
-            .findAny()
-            .orElse(null);
-
-        // 上级任务列表 目的获取所有跳转到的节点 targetIds
-        List lastUserTaskList = FlowableUtil.findParentUserTasks(currentNode, null, null);
-        if (CollUtil.isEmpty(lastUserTaskList)) {
-            throw new BizException("当前节点为初始任务节点,不能驳回");
-        }
-        // 上级任务节点列表 节点 Key
-        List lastUserTaskNodeIds = lastUserTaskList.stream()
-            .map(BaseElement::getId)
-            .collect(Collectors.toList());
-
-        // 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序
-        List historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
-            .processInstanceId(task.getProcessInstanceId())
-            .orderByHistoricTaskInstanceStartTime()
-            .asc()
-            .list();
-
-        // 数据清洗,将回滚导致的脏数据清洗掉
-        List lastHistoricTaskNodeIds = FlowableUtil.historicTaskInstanceClean(flowNodes,
-                historicTaskInstanceList);
-        // 此时历史任务实例为倒序,获取最后走的节点
-        List rejectIds = new ArrayList<>();
-        // 循环结束标识,遇到当前目标节点的次数
-        int number = 0;
-        String lastHistoricTaskNodeId = null;
-        for (String historicTaskNodeId : lastHistoricTaskNodeIds) {
-            // 当会签时候会出现特殊的,连续都是同一个节点历史数据的情况,这种时候跳过
-            if (Objects.equals(lastHistoricTaskNodeId, historicTaskNodeId)) {
-                continue;
-            }
-            lastHistoricTaskNodeId = historicTaskNodeId;
-            if (Objects.equals(historicTaskNodeId, task.getTaskDefinitionKey())) {
-                number++;
-            }
-            // 在数据清洗后,历史节点就是唯一一条从起始到当前节点的历史记录,理论上每个点只会出现一次
-            // 在流程中如果出现循环,那么每次循环中间的点也只会出现一次,再出现就是下次循环
-            // number == 1,第一次遇到当前节点
-            // number == 2,第二次遇到,代表最后一次的循环范围
-            if (number == 2) {
-                break;
-            }
-            // 如果当前历史节点,属于父级的节点,说明最后一次经过了这个点,需要退回这个点
-            if (lastUserTaskNodeIds.contains(historicTaskNodeId)) {
-                rejectIds.add(historicTaskNodeId);
-            }
-        }
-
-        // 目的获取所有需要被跳转的节点 currentIds
-        // 取其中一个父级任务,因为后续要么存在公共网关,要么就是串行公共线路
-        UserTask oneUserTask = lastUserTaskList.get(0);
-        // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务
-        List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
-        List runTaskKeyList = runTaskList.stream()
-            .map(TaskInfo::getTaskDefinitionKey)
-            .collect(Collectors.toList());
-
-        // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务
-        List currentUserTaskList = FlowableUtil.findChildUserTasks(oneUserTask, runTaskKeyList, null, null);
-        // 需驳回任务列表
-        List currentIds = currentUserTaskList.stream().map(BaseElement::getId).collect(Collectors.toList());
-        // 规定:并行网关之前节点必须需存在唯一用户任务节点,如果出现多个任务节点,则并行网关节点默认为结束节点,原因为不考虑多对多情况
-        if (rejectIds.size() > 1 && currentIds.size() > 1) {
-            throw new BizException("任务出现多对多情况,无法撤回");
-        }
-
-        try {
-            // 如果父级任务多于 1 个,说明当前节点不是并行节点,原因为不考虑多对多情况
-            if (rejectIds.size() > 1) {
-                // 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多)
-                runtimeService.createChangeActivityStateBuilder()
-                    .processInstanceId(task.getProcessInstanceId())
-                    .moveSingleActivityIdToActivityIds(currentIds.get(0), rejectIds)
-                    .changeState();
-            }
-            // 如果父级任务只有一个,因此当前任务可能为网关中的任务
-            if (rejectIds.size() == 1) {
-                // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1)
-                runtimeService.createChangeActivityStateBuilder()
-                    .processInstanceId(task.getProcessInstanceId())
-                    .moveActivityIdsToSingleActivityId(currentIds, rejectIds.get(0))
-                    .changeState();
-            }
-        }
-        catch (FlowableObjectNotFoundException e) {
-            log.error(e.getMessage(), e);
-            throw new BizException("未找到流程实例,流程可能已发生变化");
-        }
-        catch (FlowableException e) {
-            log.error(e.getMessage(), e);
-            throw new BizException("无法取消或开始活动");
-        }
-    }
-
-    /**
-     * 流程回退
-     * @param task 当前任务
-     * @param targetKey 要回退的任务 Key
-     */
-    public void flowReturn(Task task, String targetKey) {
-        if (task.isSuspended()) {
-            throw new BizException("任务处于挂起状态");
-        }
-        // 获取流程定义信息
-        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
-            .processDefinitionId(task.getProcessDefinitionId())
-            .singleResult();
-        // 获取所有节点信息
-        Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0);
-        // 获取全部节点列表,包含子节点
-        Collection allElements = FlowableUtil.getAllElements(process.getFlowElements(), null);
-        // 获取当前任务节点元素
-        FlowElement source = null;
-        // 获取跳转的节点元素
-        FlowElement target = null;
-        if (allElements != null) {
-            for (FlowElement flowElement : allElements) {
-                // 当前任务节点元素
-                if (flowElement.getId().equals(task.getTaskDefinitionKey())) {
-                    source = flowElement;
-                }
-                // 跳转的节点元素
-                if (flowElement.getId().equals(targetKey)) {
-                    target = flowElement;
-                }
-            }
-        }
-
-        // 从当前节点向前扫描
-        // 如果存在路线上不存在目标节点,说明目标节点是在网关上或非同一路线上,不可跳转
-        // 否则目标节点相对于当前节点,属于串行
-        Boolean isSequential = FlowableUtil.iteratorCheckSequentialReferTarget(source, targetKey, null, null);
-        if (!isSequential) {
-            throw new BizException("当前节点相对于目标节点,不属于串行关系,无法回退");
-        }
-
-        // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务
-        List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
-        List runTaskKeyList = new ArrayList<>();
-        runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey()));
-        // 需退回任务列表
-        List currentIds = new ArrayList<>();
-        // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务
-        List currentUserTaskList = FlowableUtil.findChildUserTasks(target, runTaskKeyList, null, null);
-        currentUserTaskList.forEach(item -> currentIds.add(item.getId()));
-
-        try {
-            // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetKey 跳转到的节点(1)
-            runtimeService.createChangeActivityStateBuilder()
-                .processInstanceId(task.getProcessInstanceId())
-                .moveActivityIdsToSingleActivityId(currentIds, targetKey)
-                .changeState();
-        }
-        catch (FlowableObjectNotFoundException e) {
-            log.error(e.getMessage(), e);
-            throw new BizException("未找到流程实例,流程可能已发生变化");
-        }
-        catch (FlowableException e) {
-            log.error(e.getMessage(), e);
-            throw new BizException("无法取消或开始活动");
-        }
-    }
-
-    /**
-     * 获取所有可回退的节点
-     */
-    public List findReturnUserTask(String taskId) {
-        // 当前任务 task
-        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
-        // 获取流程定义信息
-        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
-            .processDefinitionId(task.getProcessDefinitionId())
-            .singleResult();
-        // 获取所有节点信息,暂不考虑子流程情况
-        Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0);
-        Collection flowElements = process.getFlowElements();
-        // 获取当前任务节点元素
-        UserTask source = null;
-        if (flowElements != null) {
-            for (FlowElement flowElement : flowElements) {
-                // 类型为用户节点
-                if (flowElement.getId().equals(task.getTaskDefinitionKey())) {
-                    source = (UserTask) flowElement;
-                }
-            }
-        }
-        // 获取节点的所有路线
-        List> roads = FlowableUtil.findRoad(source, null, null, null);
-        // 可回退的节点列表
-        List userTaskList = new ArrayList<>();
-        for (List road : roads) {
-            if (userTaskList.size() == 0) {
-                // 还没有可回退节点直接添加
-                userTaskList = road;
-            }
-            else {
-                // 如果已有回退节点,则比对取交集部分
-                userTaskList.retainAll(road);
-            }
-        }
-        return userTaskList;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmInstanceEvenListenerService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmInstanceEvenListenerService.java
deleted file mode 100644
index 27ba300b1..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmInstanceEvenListenerService.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package cn.bootx.starter.flowable.handler.service;
-
-import cn.bootx.common.core.util.LocalDateTimeUtil;
-import cn.bootx.starter.flowable.code.TaskCode;
-import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager;
-import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import cn.bootx.starter.flowable.event.BpmEventService;
-import cn.bootx.starter.flowable.local.BpmContext;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import static cn.bootx.starter.flowable.code.InstanceCode.*;
-
-/**
- * 流程实例事件处理类
- *
- * @author xxm
- * @date 2022/9/16
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmInstanceEvenListenerService {
-
-    private final BpmInstanceManager bpmInstanceManager;
-
-    private final BpmTaskManager bpmTaskManager;
-
-    private final BpmEventService messageService;
-
-    /**
-     * 流程创建
-     */
-    public void processCreated(ProcessInstance instance) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        BpmInstance bpmInstance = new BpmInstance().setInstanceId(instance.getProcessInstanceId())
-            .setInstanceName(instance.getName())
-            .setModelId(bpmContext.getModelId())
-            .setDefId(instance.getProcessDefinitionId())
-            .setDefName(instance.getProcessDefinitionName())
-            .setStartTime(LocalDateTimeUtil.of(instance.getStartTime()))
-            .setFormVariables(bpmContext.getFormVariables())
-            .setState(STATE_RUNNING);
-
-        // 发起人信息
-        bpmContext.getStartUser()
-            .ifPresent(userDetail -> bpmInstance.setStartUserId(userDetail.getId())
-                .setStartUserName(userDetail.getName()));
-
-        bpmInstanceManager.save(bpmInstance);
-        messageService.processCreated(bpmInstance);
-    }
-
-    /**
-     * 任务完成
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void processCompleted(ProcessInstance instance) {
-        Optional bpmInstanceOpt = bpmInstanceManager.findByInstanceId(instance.getProcessInstanceId());
-        BpmContext bpmContext = BpmContextLocal.get();
-        String instanceState = bpmContext.getInstanceState();
-        bpmInstanceOpt.ifPresent(bpmInstance -> {
-            String state = STATE_FINISH;
-            if (StrUtil.isNotBlank(instanceState)) {
-                state = instanceState;
-            }
-            bpmInstance.setEndTime(LocalDateTime.now()).setState(state);
-            bpmInstanceManager.updateById(bpmInstance);
-            if (Objects.equals(STATE_FINISH, state)) {
-                messageService.processCompleted(bpmInstance);
-            }
-            else {
-                messageService.processCancel(bpmInstance);
-            }
-        });
-        if (Objects.equals(instanceState, STATE_CANCEL)) {
-            List tasks = bpmTaskManager.findRunningByInstanceId(instance.getProcessInstanceId());
-            tasks.forEach(task -> task.setState(TaskCode.STATE_CANCEL)
-                .setResult(TaskCode.RESULT_CANCEL)
-                .setEndTime(LocalDateTime.now()));
-            bpmTaskManager.updateAllById(tasks);
-            messageService.taskCancel(tasks);
-        }
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmTaskEventListenerService.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmTaskEventListenerService.java
deleted file mode 100644
index e017e014a..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/handler/service/BpmTaskEventListenerService.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package cn.bootx.starter.flowable.handler.service;
-
-import cn.bootx.common.core.entity.UserDetail;
-import cn.bootx.common.core.function.UserDetailService;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.common.core.util.LocalDateTimeUtil;
-import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager;
-import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager;
-import cn.bootx.starter.flowable.core.instance.entity.BpmInstance;
-import cn.bootx.starter.flowable.core.instance.entity.BpmTask;
-import cn.bootx.starter.flowable.core.model.dao.BpmModelNodeManager;
-import cn.bootx.starter.flowable.core.model.entity.BpmModelNode;
-import cn.bootx.starter.flowable.event.BpmEventService;
-import cn.bootx.starter.flowable.exception.ModelNodeNotExistException;
-import cn.bootx.starter.flowable.local.BpmContext;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCompletedEvent;
-import org.flowable.engine.impl.util.CommandContextUtil;
-import org.flowable.engine.impl.util.TaskHelper;
-import org.flowable.task.service.impl.persistence.entity.TaskEntity;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static cn.bootx.starter.flowable.code.TaskCode.*;
-
-/**
- * 任务时间处理
- *
- * @author xxm
- * @date 2022/9/4
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class BpmTaskEventListenerService {
-
-    private final BpmModelNodeManager bpmModelNodeManager;
-
-    private final BpmTaskManager bpmTaskManager;
-
-    private final BpmInstanceManager bpmInstanceManager;
-
-    private final UserDetailService userDetailService;
-
-    private final BpmEventService eventService;
-
-    // 正常执行的状态
-    private final List normalTaskStates = CollUtil.newArrayList(null, "", STATE_PROCESS, STATE_PASS);
-
-    /**
-     * 任务创建处理
-     */
-    public void taskCreated(TaskEntity task) {
-        BpmContext bpmContext = BpmContextLocal.get();
-        BpmInstance bpmInstance = bpmInstanceManager.findByInstanceId(task.getProcessInstanceId())
-            .orElse(new BpmInstance());
-        BpmModelNode modelTask = bpmModelNodeManager
-            .findByDefIdAndNodeId(task.getProcessDefinitionId(), task.getTaskDefinitionKey())
-            .orElseThrow(ModelNodeNotExistException::new);
-
-        BpmTask bpmTask = this.convert(task, bpmInstance);
-
-        // 是多实例
-        if (Objects.nonNull(bpmContext.getTaskMultiId())) {
-            bpmTask.setMultiId(bpmContext.getTaskMultiId());
-        }
-
-        // 是否跳过该节点, 且是正常情况下
-        if (modelTask.isSkip() && normalTaskStates.contains(bpmContext.getTaskState())) {
-            TaskHelper.completeTask(task, null, null, null, null, CommandContextUtil.getCommandContext());
-            bpmTask.setState(STATE_SKIP).setResult(STATE_SKIP).setEndTime(LocalDateTime.now());
-        }
-
-        // 是否分配了用户
-        if (StrUtil.isNotBlank(task.getAssignee())) {
-            UserDetail userDetail = userDetailService.findByUserId(Long.valueOf(task.getAssignee()))
-                .orElse(new UserDetail());
-            bpmTask.setUserId(userDetail.getId()).setUserName(userDetail.getName());
-        }
-
-        bpmTaskManager.save(bpmTask);
-        // 驳回/退回还是普通创建
-        if (Objects.equals(bpmContext.getTaskState(), STATE_REJECT)) {
-            eventService.taskReject(bpmTask);
-        }
-        else if (Objects.equals(bpmContext.getTaskState(), RESULT_BACK)) {
-            eventService.taskBack(bpmTask);
-        }
-        else {
-            eventService.taskCreated(bpmTask);
-        }
-    }
-
-    /**
-     * 任务完成
-     */
-    public void taskCompleted(TaskEntity task) {
-        Optional bpmTaskOpt = bpmTaskManager.findByInstanceIdAndTaskId(task.getProcessInstanceId(),
-                task.getId());
-        BpmContext bpmContext = BpmContextLocal.get();
-        bpmTaskOpt.ifPresent(bpmTask -> {
-            bpmTask.setEndTime(LocalDateTime.now())
-                .setState(bpmContext.getTaskState())
-                .setResult(bpmContext.getTaskResult())
-                .setReason(bpmContext.getTaskReason())
-                .setFormVariables(bpmContext.getFormVariables());
-            bpmTaskManager.updateById(bpmTask);
-            eventService.taskCompleted(Collections.singletonList(bpmTask), false);
-        });
-    }
-
-    /**
-     * 任务人员分配
-     */
-    public void taskAssigned(TaskEntity task) {
-        // 判断扩展内容是否存在, 存的的话进行更新
-        Optional bpmTaskOpt = bpmTaskManager.findByInstanceIdAndTaskId(task.getProcessInstanceId(),
-                task.getId());
-        bpmTaskOpt.ifPresent(bpmTask -> {
-            if (StrUtil.isNotBlank(task.getAssignee())) {
-                Long userId = Long.valueOf(task.getAssignee());
-                UserDetail userDetail = userDetailService.findByUserId(userId).orElse(new UserDetail());
-                Long oldAssign = bpmTask.getUserId();
-                String oldAssignName = bpmTask.getUserName();
-                bpmTask.setUserId(userId).setUserName(userDetail.getName());
-                bpmTaskManager.updateById(bpmTask);
-                eventService.taskAssign(bpmTask, oldAssign, oldAssignName, userId, userDetail.getName());
-            }
-        });
-    }
-
-    /**
-     * 转换
-     */
-    private BpmTask convert(TaskEntity task, BpmInstance bpmInstance) {
-        return new BpmTask().setTaskId(task.getId())
-            .setNodeId(task.getTaskDefinitionKey())
-            .setNodeName(task.getName())
-            .setState(STATE_PROCESS)
-            .setFormVariables(task.getCaseVariables())
-            .setExecutionId(task.getExecutionId())
-            .setInstanceId(task.getProcessInstanceId())
-            .setInstanceName(bpmInstance.getInstanceName())
-            .setDefName(bpmInstance.getDefName())
-            .setStartUserId(bpmInstance.getStartUserId())
-            .setStartUserName(bpmInstance.getStartUserName())
-            .setStartTime(LocalDateTimeUtil.of(task.getCreateTime()));
-    }
-
-    /**
-     * 活动取消
-     */
-    public void activityCancelled(String executionId) {
-        System.out.println(executionId);
-    }
-
-    /**
-     * 多实例活动完成 更新被自动处理的类
-     */
-    public void multiInstanceActivityCompletedWithCondition(FlowableMultiInstanceActivityCompletedEvent event) {
-
-        List tasks = bpmTaskManager.findByInstanceIdAndNodeId(event.getProcessInstanceId(),
-                event.getActivityId());
-        List updateTasks = tasks.stream()
-            .filter(o -> Objects.equals(o.getState(), STATE_PROCESS))
-            .peek(bpmTask -> bpmTask.setResult(RESULT_AUTO_FINISH).setState(STATE_PASS))
-            .collect(Collectors.toList());
-        bpmTaskManager.updateAllById(updateTasks);
-        eventService.taskCompleted(updateTasks, true);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContext.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContext.java
deleted file mode 100644
index 6067979b5..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContext.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cn.bootx.starter.flowable.local;
-
-import cn.bootx.common.core.entity.UserDetail;
-import cn.bootx.starter.flowable.code.InstanceCode;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * 流程处理时上下文
- *
- * @author xxm
- * @date 2022/8/28
- */
-@Getter
-@Setter
-@Accessors(chain = true)
-public class BpmContext {
-
-    /** 流程模型id */
-    private Long modelId;
-
-    /** 提交的表单值 */
-    private Map formVariables;
-
-    /** 启动任务的用户 */
-    private Optional startUser = Optional.empty();
-
-    /**
-     * 实例处理状态
-     * @see InstanceCode#STATE_RUNNING
-     */
-    private String instanceState;
-
-    /** 处理任务时的审批意见 */
-    private String taskReason;
-
-    /**
-     * 当前任务处理状态
-     * @see cn.bootx.starter.flowable.code.TaskCode#STATE_PROCESS
-     */
-    private String taskState;
-
-    /**
-     * 当前任务处理结果
-     * @see cn.bootx.starter.flowable.code.TaskCode#RESULT_PASS
-     */
-    private String taskResult;
-
-    /**
-     * 多实例id, 用于串联起多实例任务
-     */
-    private Long taskMultiId;
-
-    /**
-     * 下一步执行人
-     */
-    private Object nextAssign;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContextLocal.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContextLocal.java
deleted file mode 100644
index 516f4b8ce..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/local/BpmContextLocal.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.bootx.starter.flowable.local;
-
-import com.alibaba.ttl.TransmittableThreadLocal;
-
-import java.util.Optional;
-
-/**
- * 流程任务处理缓存类
- *
- * @author xxm
- * @date 2022/8/28
- */
-public class BpmContextLocal {
-
-    private static final ThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>();
-
-    /**
-     * TTL 设置数据
-     */
-    public static void put(BpmContext bpmContext) {
-        THREAD_LOCAL.set(bpmContext);
-    }
-
-    /**
-     * 获取TTL中的数据
-     */
-    public static BpmContext get() {
-        BpmContext bpmContext = Optional.ofNullable(THREAD_LOCAL.get()).orElse(new BpmContext());
-        THREAD_LOCAL.set(bpmContext);
-        return bpmContext;
-    }
-
-    /**
-     * 清除
-     */
-    public static void clear() {
-        THREAD_LOCAL.remove();
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/instance/InstanceStartParam.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/instance/InstanceStartParam.java
deleted file mode 100644
index a2d045788..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/instance/InstanceStartParam.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.flowable.param.instance;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.util.Map;
-
-/**
- * @author xxm
- * @date 2020/3/1 13:47
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程启动参数")
-public class InstanceStartParam {
-
-    @Schema(description = "流程实例id")
-    private Long modelId;
-
-    @Schema(description = "实例名称")
-    private String name;
-
-    @Schema(description = "外部key")
-    private String businessKey;
-
-    @Schema(description = "表单信息")
-    private Map formVariables;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelNodeParam.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelNodeParam.java
deleted file mode 100644
index e5a9da3d3..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelNodeParam.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package cn.bootx.starter.flowable.param.model;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * 模型任务节点配置
- *
- * @author xxm
- * @date 2022-08-25
- */
-@Data
-@Schema(title = "模型任务节点配置")
-@Accessors(chain = true)
-public class BpmModelNodeParam {
-
-    @Schema(description = "主键")
-    private Long id;
-
-    @Schema(description = "关联模型id")
-    private Long modelId;
-
-    @Schema(description = "流程定义id")
-    private String defId;
-
-    @Schema(description = "流程key")
-    private String defKey;
-
-    @Schema(description = "任务节点id")
-    private String nodeId;
-
-    @Schema(description = "任务节点名称")
-    private String nodeName;
-
-    @Schema(description = "是否多实例")
-    private boolean multi;
-
-    @Schema(description = "是否串签")
-    private boolean sequential;
-
-    /** 是否是或签, 会签情况下使用,一个同意的直接通过这个任务 */
-    private Boolean orSign;
-
-    /** 是否比例通过 会签情况下使用 */
-    private Boolean ratioPass;
-
-    /** 通过比例 */
-    private Double passRatio;
-
-    @Schema(description = "是否自动跳过当前节点(通常用于开始节点)")
-    private boolean skip;
-
-    @Schema(description = "是否允许驳回")
-    private boolean reject;
-
-    @Schema(description = "是否允许回退")
-    private boolean back;
-
-    @Schema(description = "是否允许取回")
-    private boolean retrieve;
-
-    @Schema(description = "分配类型")
-    private String assignType;
-
-    @Schema(description = "分配的原始数据")
-    private Object assignRaw;
-
-    @Schema(description = "分配的数据的展示")
-    private String assignShow;
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelParam.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelParam.java
deleted file mode 100644
index 220ea6975..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/model/BpmModelParam.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.bootx.starter.flowable.param.model;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * @author xxm
- * @date 2022/8/23
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程模型参数")
-public class BpmModelParam {
-
-    @Schema(description = "主键")
-    private Long id;
-
-    @Schema(description = "流程名称")
-    private String name;
-
-    @Schema(description = "流程类型(相当于flowable的分类)")
-    private String modelType;
-
-    @Schema(description = "关联动态表单id")
-    private Long formId;
-
-    @Schema(description = "备注")
-    private String remark;
-
-    @Schema(description = "流程xml")
-    private String modelEditorXml;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskApproveParam.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskApproveParam.java
deleted file mode 100644
index 0d5df1136..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskApproveParam.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.starter.flowable.param.task;
-
-import cn.bootx.starter.flowable.code.TaskCode;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.util.Map;
-
-/**
- * 流程任务审批参数
- *
- * @author xxm
- * @date 2022/8/26
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程任务审批参数")
-public class TaskApproveParam {
-
-    /**
-     * @see TaskCode#RESULT_PASS
-     */
-    @Schema(description = "处理结果")
-    private String type;
-
-    @Schema(description = "任务id")
-    private String taskId;
-
-    @Schema(description = "下一步节点")
-    private String nextNodeId;
-
-    @Schema(description = "退回节点节点")
-    private String backNodeId;
-
-    @Schema(description = "下一步执行人")
-    private Object nextAssign;
-
-    @Schema(description = "表单数据")
-    private Map formVariables;
-
-    @Schema(description = "审批意见")
-    private String reason;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskReturnParam.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskReturnParam.java
deleted file mode 100644
index 7c8a6af6d..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/param/task/TaskReturnParam.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.starter.flowable.param.task;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * 流程回退参数
- *
- * @author xxm
- * @date 2022/8/30
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "流程回退参数")
-public class TaskReturnParam {
-
-    @Schema(description = "任务id")
-    private String taskId;
-
-    @Schema(description = "回退到的节点key")
-    private String targetKey;
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/BpmXmlUtil.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/BpmXmlUtil.java
deleted file mode 100644
index f40e6e2a0..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/BpmXmlUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package cn.bootx.starter.flowable.util;
-
-import cn.hutool.core.collection.CollUtil;
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.bpmn.model.ItemDefinition;
-import org.flowable.bpmn.model.Process;
-import org.flowable.validation.ProcessValidator;
-import org.flowable.validation.ProcessValidatorFactory;
-import org.flowable.validation.ValidationError;
-
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.ByteArrayInputStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * bpmnXml对象转换工具类
- *
- * @author xxm
- * @date 2020/3/27 15:21
- */
-@Slf4j
-@UtilityClass
-public class BpmXmlUtil {
-
-    /**
-     * 将字节转换成Bpmn对象
-     */
-    public BpmnModel convertByte2BpmnModel(byte[] bytes) {
-        // 创建转换对象
-        try {
-            // 将xml文件转换成BpmnModel
-            BpmnXMLConverter converter = new BpmnXMLConverter();
-            XMLInputFactory factory = XMLInputFactory.newInstance();
-            XMLStreamReader reader = factory.createXMLStreamReader(new ByteArrayInputStream(bytes));
-            BpmnModel bpmnModel = converter.convertToBpmnModel(reader);
-
-            // 进行模型校验
-            ProcessValidatorFactory processValidatorFactory = new ProcessValidatorFactory();
-            ProcessValidator processValidator = processValidatorFactory.createDefaultProcessValidator();
-            List validate = processValidator.validate(bpmnModel);
-            if (CollUtil.isNotEmpty(validate)) {
-                validate.forEach(error -> log.error(error.toString()));
-                throw new RuntimeException("Bpmn文件校验失败");
-            }
-            return bpmnModel;
-        }
-        catch (XMLStreamException e) {
-            log.error(e.getMessage(), e);
-            throw new RuntimeException("Bpmn文件解析失败");
-        }
-    }
-
-    /**
-     * 将Bpmn对象转换xml字符串
-     */
-    public String convertBpmnModel2Str(BpmnModel bpmnModel) {
-        BpmnXMLConverter converter = new BpmnXMLConverter();
-        byte[] bytes = converter.convertToXML(bpmnModel);
-        return new String(bytes);
-    }
-
-    public static void main(String[] args) {
-        BpmnModel bpmnModel = new BpmnModel();
-        Process mainProcess = new Process();
-        // bpmnModel.addNamespace("extA1","http://www.a1bpm.com/schema/1.0/A1");
-        mainProcess.setName("xxm");
-        mainProcess.setId("xxaaa");
-
-        bpmnModel.addNamespace("extA1", "http://www.a1bpm.com/schema/1.0/A1");
-
-        Map itemDefinitionMap = new HashMap<>();
-
-        bpmnModel.addProcess(mainProcess);
-        System.out.println(convertBpmnModel2Str(bpmnModel));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/FlowableUtil.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/FlowableUtil.java
deleted file mode 100644
index bb687ef0a..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/util/FlowableUtil.java
+++ /dev/null
@@ -1,640 +0,0 @@
-package cn.bootx.starter.flowable.util;
-
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-import org.flowable.bpmn.model.*;
-import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
-import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
-import org.flowable.task.api.history.HistoricTaskInstance;
-
-import java.util.*;
-
-/**
- * 流程引擎工具类封装
- *
- * @author linjinp
- * @date 2019-12-24 13:51
- */
-@Slf4j
-@UtilityClass
-public class FlowableUtil {
-
-    /**
-     * 根据节点,获取入口连线
-     * @param source
-     * @return
-     */
-    public List getElementIncomingFlows(FlowElement source) {
-        List sequenceFlows = null;
-        if (source instanceof Task) {
-            sequenceFlows = ((Task) source).getIncomingFlows();
-        }
-        else if (source instanceof Gateway) {
-            sequenceFlows = ((Gateway) source).getIncomingFlows();
-        }
-        else if (source instanceof SubProcess) {
-            sequenceFlows = ((SubProcess) source).getIncomingFlows();
-        }
-        else if (source instanceof StartEvent) {
-            sequenceFlows = ((StartEvent) source).getIncomingFlows();
-        }
-        else if (source instanceof EndEvent) {
-            sequenceFlows = ((EndEvent) source).getIncomingFlows();
-        }
-        return sequenceFlows;
-    }
-
-    /**
-     * 根据节点,获取出口连线
-     * @param source
-     * @return
-     */
-    public List getElementOutgoingFlows(FlowElement source) {
-        List sequenceFlows = null;
-        if (source instanceof Task) {
-            sequenceFlows = ((Task) source).getOutgoingFlows();
-        }
-        else if (source instanceof Gateway) {
-            sequenceFlows = ((Gateway) source).getOutgoingFlows();
-        }
-        else if (source instanceof SubProcess) {
-            sequenceFlows = ((SubProcess) source).getOutgoingFlows();
-        }
-        else if (source instanceof StartEvent) {
-            sequenceFlows = ((StartEvent) source).getOutgoingFlows();
-        }
-        else if (source instanceof EndEvent) {
-            sequenceFlows = ((EndEvent) source).getOutgoingFlows();
-        }
-        return sequenceFlows;
-    }
-
-    /**
-     * 获取全部节点列表,包含子流程节点
-     * @param flowElements
-     * @param allElements
-     * @return
-     */
-    public Collection getAllElements(Collection flowElements,
-            Collection allElements) {
-        allElements = allElements == null ? new ArrayList<>() : allElements;
-
-        for (FlowElement flowElement : flowElements) {
-            allElements.add(flowElement);
-            if (flowElement instanceof SubProcess) {
-                // 继续深入子流程,进一步获取子流程
-                allElements = FlowableUtil.getAllElements(((SubProcess) flowElement).getFlowElements(), allElements);
-            }
-        }
-        return allElements;
-    }
-
-    /**
-     * 迭代获取父级任务节点列表,向前找 获取当前节点的所有父级用户任务节点, 深度优先算法思想:延边迭代深入
-     * @param source 起始节点
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param userTaskList 已找到的用户任务节点
-     * @return
-     */
-    public List findParentUserTasks(FlowElement source, Set hasSequenceFlow,
-            List userTaskList) {
-        userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList;
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-
-        // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-        if (source instanceof StartEvent && source.getSubProcess() != null) {
-            userTaskList = findParentUserTasks(source.getSubProcess(), hasSequenceFlow, userTaskList);
-        }
-
-        // 根据类型,获取入口连线
-        List sequenceFlows = getElementIncomingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 类型为用户节点,则新增父级节点
-                if (sequenceFlow.getSourceFlowElement() instanceof UserTask) {
-                    userTaskList.add((UserTask) sequenceFlow.getSourceFlowElement());
-                    continue;
-                }
-                // 类型为子流程,则添加子流程开始节点出口处相连的节点
-                if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) {
-                    // 获取子流程用户任务节点
-                    List childUserTaskList = findChildProcessUserTasks(
-                            (StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
-                                .toArray()[0],
-                            null, null);
-                    // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
-                    if (childUserTaskList != null && childUserTaskList.size() > 0) {
-                        userTaskList.addAll(childUserTaskList);
-                        continue;
-                    }
-                }
-                // 继续迭代
-                userTaskList = findParentUserTasks(sequenceFlow.getSourceFlowElement(), hasSequenceFlow, userTaskList);
-            }
-        }
-        return userTaskList;
-    }
-
-    /**
-     * 根据正在运行的任务节点,迭代获取子级任务节点列表,向后找
-     * @param source 起始节点
-     * @param runTaskKeyList 正在运行的任务 Key,用于校验任务节点是否是正在运行的节点
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param userTaskList 需要撤回的用户任务列表
-     * @return
-     */
-    public List findChildUserTasks(FlowElement source, List runTaskKeyList,
-            Set hasSequenceFlow, List userTaskList) {
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-        userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList;
-
-        // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-        if (source instanceof EndEvent && source.getSubProcess() != null) {
-            userTaskList = findChildUserTasks(source.getSubProcess(), runTaskKeyList, hasSequenceFlow, userTaskList);
-        }
-
-        // 根据类型,获取出口连线
-        List sequenceFlows = getElementOutgoingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加
-                if (sequenceFlow.getTargetFlowElement() instanceof UserTask
-                        && runTaskKeyList.contains((sequenceFlow.getTargetFlowElement()).getId())) {
-                    userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement());
-                    continue;
-                }
-                // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取
-                if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
-                    List childUserTaskList = findChildUserTasks(
-                            (FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
-                                .toArray()[0]),
-                            runTaskKeyList, hasSequenceFlow, null);
-                    // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
-                    if (childUserTaskList != null && childUserTaskList.size() > 0) {
-                        userTaskList.addAll(childUserTaskList);
-                        continue;
-                    }
-                }
-                // 继续迭代
-                userTaskList = findChildUserTasks(sequenceFlow.getTargetFlowElement(), runTaskKeyList, hasSequenceFlow,
-                        userTaskList);
-            }
-        }
-        return userTaskList;
-    }
-
-    /**
-     * 迭代获取子流程用户任务节点
-     * @param source 起始节点
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param userTaskList 需要撤回的用户任务列表
-     * @return
-     */
-    public List findChildProcessUserTasks(FlowElement source, Set hasSequenceFlow,
-            List userTaskList) {
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-        userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList;
-
-        // 根据类型,获取出口连线
-        List sequenceFlows = getElementOutgoingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加
-                if (sequenceFlow.getTargetFlowElement() instanceof UserTask) {
-                    userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement());
-                    continue;
-                }
-                // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取
-                if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
-                    List childUserTaskList = findChildProcessUserTasks(
-                            (FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
-                                .toArray()[0]),
-                            hasSequenceFlow, null);
-                    // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
-                    if (childUserTaskList != null && childUserTaskList.size() > 0) {
-                        userTaskList.addAll(childUserTaskList);
-                        continue;
-                    }
-                }
-                // 继续迭代
-                userTaskList = findChildProcessUserTasks(sequenceFlow.getTargetFlowElement(), hasSequenceFlow,
-                        userTaskList);
-            }
-        }
-        return userTaskList;
-    }
-
-    /**
-     * 从后向前寻路,获取所有脏线路上的点
-     * @param source 起始节点
-     * @param passRoads 已经经过的点集合
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param targets 目标脏线路终点
-     * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储
-     * @return
-     */
-    public Set findDirtyRoads(FlowElement source, List passRoads, Set hasSequenceFlow,
-            List targets, Set dirtyRoads) {
-        passRoads = passRoads == null ? new ArrayList<>() : passRoads;
-        dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads;
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-
-        // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-        if (source instanceof StartEvent && source.getSubProcess() != null) {
-            dirtyRoads = findDirtyRoads(source.getSubProcess(), passRoads, hasSequenceFlow, targets, dirtyRoads);
-        }
-
-        // 根据类型,获取入口连线
-        List sequenceFlows = getElementIncomingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 新增经过的路线
-                passRoads.add(sequenceFlow.getSourceFlowElement().getId());
-                // 如果此点为目标点,确定经过的路线为脏线路,添加点到脏线路中,然后找下个连线
-                if (targets.contains(sequenceFlow.getSourceFlowElement().getId())) {
-                    dirtyRoads.addAll(passRoads);
-                    continue;
-                }
-                // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-                if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) {
-                    dirtyRoads = findChildProcessAllDirtyRoad(
-                            (StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
-                                .toArray()[0],
-                            null, dirtyRoads);
-                    // 是否存在子流程上,true 是,false 否
-                    Boolean isInChildProcess = dirtyTargetInChildProcess(
-                            (StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
-                                .toArray()[0],
-                            null, targets, null);
-                    if (isInChildProcess) {
-                        // 已在子流程上找到,该路线结束
-                        continue;
-                    }
-                }
-                // 继续迭代
-                dirtyRoads = findDirtyRoads(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, targets,
-                        dirtyRoads);
-            }
-        }
-        return dirtyRoads;
-    }
-
-    /**
-     * 迭代获取子流程脏路线 说明,假如回退的点就是子流程,那么也肯定会回退到子流程最初的用户任务节点,因此子流程中的节点全是脏路线
-     * @param source 起始节点
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储
-     * @return
-     */
-    public Set findChildProcessAllDirtyRoad(FlowElement source, Set hasSequenceFlow,
-            Set dirtyRoads) {
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-        dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads;
-
-        // 根据类型,获取出口连线
-        List sequenceFlows = getElementOutgoingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 添加脏路线
-                dirtyRoads.add(sequenceFlow.getTargetFlowElement().getId());
-                // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取
-                if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
-                    dirtyRoads = findChildProcessAllDirtyRoad(
-                            (FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
-                                .toArray()[0]),
-                            hasSequenceFlow, dirtyRoads);
-                }
-                // 继续迭代
-                dirtyRoads = findChildProcessAllDirtyRoad(sequenceFlow.getTargetFlowElement(), hasSequenceFlow,
-                        dirtyRoads);
-            }
-        }
-        return dirtyRoads;
-    }
-
-    /**
-     * 判断脏路线结束节点是否在子流程上
-     * @param source 起始节点
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param targets 判断脏路线节点是否存在子流程上,只要存在一个,说明脏路线只到子流程为止
-     * @param inChildProcess 是否存在子流程上,true 是,false 否
-     * @return
-     */
-    public Boolean dirtyTargetInChildProcess(FlowElement source, Set hasSequenceFlow, List targets,
-            Boolean inChildProcess) {
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-        inChildProcess = inChildProcess != null && inChildProcess;
-
-        // 根据类型,获取出口连线
-        List sequenceFlows = getElementOutgoingFlows(source);
-
-        if (sequenceFlows != null && !inChildProcess) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 如果发现目标点在子流程上存在,说明只到子流程为止
-                if (targets.contains(sequenceFlow.getTargetFlowElement().getId())) {
-                    inChildProcess = true;
-                    break;
-                }
-                // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取
-                if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
-                    inChildProcess = dirtyTargetInChildProcess(
-                            (FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
-                                .toArray()[0]),
-                            hasSequenceFlow, targets, inChildProcess);
-                }
-                // 继续迭代
-                inChildProcess = dirtyTargetInChildProcess(sequenceFlow.getTargetFlowElement(), hasSequenceFlow,
-                        targets, inChildProcess);
-            }
-        }
-        return inChildProcess;
-    }
-
-    /**
-     * 迭代从后向前扫描,判断目标节点相对于当前节点是否是串行 不存在直接回退到子流程中的情况,但存在从子流程出去到父流程情况
-     * @param source 起始节点
-     * @param isSequential 是否串行
-     * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复
-     * @param targetKsy 目标节点
-     * @return
-     */
-    public Boolean iteratorCheckSequentialReferTarget(FlowElement source, String targetKsy, Set hasSequenceFlow,
-            Boolean isSequential) {
-        isSequential = isSequential == null || isSequential;
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-
-        // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-        if (source instanceof StartEvent && source.getSubProcess() != null) {
-            isSequential = iteratorCheckSequentialReferTarget(source.getSubProcess(), targetKsy, hasSequenceFlow,
-                    isSequential);
-        }
-
-        // 根据类型,获取入口连线
-        List sequenceFlows = getElementIncomingFlows(source);
-
-        if (sequenceFlows != null) {
-            // 循环找到目标元素
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 如果目标节点已被判断为并行,后面都不需要执行,直接返回
-                if (!isSequential) {
-                    break;
-                }
-                // 这条线路存在目标节点,这条线路完成,进入下个线路
-                if (targetKsy.equals(sequenceFlow.getSourceFlowElement().getId())) {
-                    continue;
-                }
-                if (sequenceFlow.getSourceFlowElement() instanceof StartEvent) {
-                    isSequential = false;
-                    break;
-                }
-                // 否则就继续迭代
-                isSequential = iteratorCheckSequentialReferTarget(sequenceFlow.getSourceFlowElement(), targetKsy,
-                        hasSequenceFlow, isSequential);
-            }
-        }
-        return isSequential;
-    }
-
-    /**
-     * 从后向前寻路,获取到达节点的所有路线 不存在直接回退到子流程,但是存在回退到父级流程的情况
-     * @param source 起始节点
-     * @param passRoads 已经经过的点集合
-     * @param roads 路线
-     */
-    public List> findRoad(FlowElement source, List passRoads, Set hasSequenceFlow,
-            List> roads) {
-        passRoads = passRoads == null ? new ArrayList<>() : passRoads;
-        roads = roads == null ? new ArrayList<>() : roads;
-        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
-
-        // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代
-        if (source instanceof StartEvent && source.getSubProcess() != null) {
-            roads = findRoad(source.getSubProcess(), passRoads, hasSequenceFlow, roads);
-        }
-
-        // 根据类型,获取入口连线
-        List sequenceFlows = getElementIncomingFlows(source);
-
-        if (sequenceFlows != null && sequenceFlows.size() != 0) {
-            for (SequenceFlow sequenceFlow : sequenceFlows) {
-                // 如果发现连线重复,说明循环了,跳过这个循环
-                if (hasSequenceFlow.contains(sequenceFlow.getId())) {
-                    continue;
-                }
-                // 添加已经走过的连线
-                hasSequenceFlow.add(sequenceFlow.getId());
-                // 添加经过路线
-                if (sequenceFlow.getSourceFlowElement() instanceof UserTask) {
-                    passRoads.add((UserTask) sequenceFlow.getSourceFlowElement());
-                }
-                // 继续迭代
-                roads = findRoad(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, roads);
-            }
-        }
-        else {
-            // 添加路线
-            roads.add(passRoads);
-        }
-        return roads;
-    }
-
-    /**
-     * 历史节点数据清洗,清洗掉又回滚导致的脏数据
-     * @param allElements 全部节点信息
-     * @param historicTaskInstanceList 历史任务实例信息,数据采用开始时间升序
-     */
-    public List historicTaskInstanceClean(Collection allElements,
-            List historicTaskInstanceList) {
-        // 会签节点收集
-        List multiTask = new ArrayList<>();
-        allElements.forEach(flowElement -> {
-            if (flowElement instanceof UserTask) {
-                // 如果该节点的行为为会签行为,说明该节点为会签节点
-                if (((UserTask) flowElement).getBehavior() instanceof ParallelMultiInstanceBehavior
-                        || ((UserTask) flowElement).getBehavior() instanceof SequentialMultiInstanceBehavior) {
-                    multiTask.add(flowElement.getId());
-                }
-            }
-        });
-        // 循环放入栈,栈 LIFO:后进先出
-        Stack stack = new Stack<>();
-        historicTaskInstanceList.forEach(stack::push);
-        // 清洗后的历史任务实例
-        List lastHistoricTaskInstanceList = new ArrayList<>();
-        // 网关存在可能只走了部分分支情况,且还存在跳转废弃数据以及其他分支数据的干扰,因此需要对历史节点数据进行清洗
-        // 临时用户任务 key
-        StringBuilder userTaskKey = null;
-        // 临时被删掉的任务 key,存在并行情况
-        List deleteKeyList = new ArrayList<>();
-        // 临时脏数据线路
-        List> dirtyDataLineList = new ArrayList<>();
-        // 由某个点跳到会签点,此时出现多个会签实例对应 1 个跳转情况,需要把这些连续脏数据都找到
-        // 会签特殊处理下标
-        int multiIndex = -1;
-        // 会签特殊处理 key
-        StringBuilder multiKey = null;
-        // 会签特殊处理操作标识
-        boolean multiOpera = false;
-        while (!stack.empty()) {
-            // 从这里开始 userTaskKey 都还是上个栈的 key
-            // 是否是脏数据线路上的点
-            final boolean[] isDirtyData = { false };
-            for (Set oldDirtyDataLine : dirtyDataLineList) {
-                if (oldDirtyDataLine.contains(stack.peek().getTaskDefinitionKey())) {
-                    isDirtyData[0] = true;
-                }
-            }
-            // 删除原因不为空,说明从这条数据开始回跳或者回退的
-            // MI_END:会签完成后,其他未签到节点的删除原因,不在处理范围内
-            if (stack.peek().getDeleteReason() != null && !"MI_END".equals(stack.peek().getDeleteReason())) {
-                // 可以理解为脏线路起点
-                String dirtyPoint = "";
-                if (stack.peek().getDeleteReason().contains("Change activity to ")) {
-                    dirtyPoint = stack.peek().getDeleteReason().replace("Change activity to ", "");
-                }
-                // 会签回退删除原因有点不同
-                if (stack.peek().getDeleteReason().contains("Change parent activity to ")) {
-                    dirtyPoint = stack.peek().getDeleteReason().replace("Change parent activity to ", "");
-                }
-                FlowElement dirtyTask = null;
-                // 获取变更节点的对应的入口处连线
-                // 如果是网关并行回退情况,会变成两条脏数据路线,效果一样
-                for (FlowElement flowElement : allElements) {
-                    if (flowElement.getId().equals(stack.peek().getTaskDefinitionKey())) {
-                        dirtyTask = flowElement;
-                    }
-                }
-                // 获取脏数据线路
-                Set dirtyDataLine = FlowableUtil.findDirtyRoads(dirtyTask, null, null,
-                        Arrays.asList(dirtyPoint.split(",")), null);
-                // 自己本身也是脏线路上的点,加进去
-                dirtyDataLine.add(stack.peek().getTaskDefinitionKey());
-                log.info(stack.peek().getTaskDefinitionKey() + "点脏路线集合:" + dirtyDataLine);
-                // 是全新的需要添加的脏线路
-                boolean isNewDirtyData = true;
-                for (Set strings : dirtyDataLineList) {
-                    // 如果发现他的上个节点在脏线路内,说明这个点可能是并行的节点,或者连续驳回
-                    // 这时,都以之前的脏线路节点为标准,只需合并脏线路即可,也就是路线补全
-                    if (strings.contains(userTaskKey.toString())) {
-                        isNewDirtyData = false;
-                        strings.addAll(dirtyDataLine);
-                    }
-                }
-                // 已确定时全新的脏线路
-                if (isNewDirtyData) {
-                    // deleteKey 单一路线驳回到并行,这种同时生成多个新实例记录情况,这时 deleteKey 其实是由多个值组成
-                    // 按照逻辑,回退后立刻生成的实例记录就是回退的记录
-                    // 至于驳回所生成的 Key,直接从删除原因中获取,因为存在驳回到并行的情况
-                    deleteKeyList.add(dirtyPoint + ",");
-                    dirtyDataLineList.add(dirtyDataLine);
-                }
-                // 添加后,现在这个点变成脏线路上的点了
-                isDirtyData[0] = true;
-            }
-            // 如果不是脏线路上的点,说明是有效数据,添加历史实例 Key
-            if (!isDirtyData[0]) {
-                lastHistoricTaskInstanceList.add(stack.peek().getTaskDefinitionKey());
-            }
-            // 校验脏线路是否结束
-            for (int i = 0; i < deleteKeyList.size(); i++) {
-                // 如果发现脏数据属于会签,记录下下标与对应 Key,以备后续比对,会签脏数据范畴开始
-                if (multiKey == null && multiTask.contains(stack.peek().getTaskDefinitionKey())
-                        && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) {
-                    multiIndex = i;
-                    multiKey = new StringBuilder(stack.peek().getTaskDefinitionKey());
-                }
-                // 会签脏数据处理,节点退回会签清空
-                // 如果在会签脏数据范畴中发现 Key改变,说明会签脏数据在上个节点就结束了,可以把会签脏数据删掉
-                if (multiKey != null && !multiKey.toString().equals(stack.peek().getTaskDefinitionKey())) {
-                    deleteKeyList.set(multiIndex,
-                            deleteKeyList.get(multiIndex).replace(stack.peek().getTaskDefinitionKey() + ",", ""));
-                    multiKey = null;
-                    // 结束进行下校验删除
-                    multiOpera = true;
-                }
-                // 其他脏数据处理
-                // 发现该路线最后一条脏数据,说明这条脏数据线路处理完了,删除脏数据信息
-                // 脏数据产生的新实例中是否包含这条数据
-                if (multiKey == null && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) {
-                    // 删除匹配到的部分
-                    deleteKeyList.set(i, deleteKeyList.get(i).replace(stack.peek().getTaskDefinitionKey() + ",", ""));
-                }
-                // 如果每组中的元素都以匹配过,说明脏数据结束
-                if ("".equals(deleteKeyList.get(i))) {
-                    // 同时删除脏数据
-                    deleteKeyList.remove(i);
-                    dirtyDataLineList.remove(i);
-                    break;
-                }
-            }
-            // 会签数据处理需要在循环外处理,否则可能导致溢出
-            // 会签的数据肯定是之前放进去的所以理论上不会溢出,但还是校验下
-            if (multiOpera && deleteKeyList.size() > multiIndex && "".equals(deleteKeyList.get(multiIndex))) {
-                // 同时删除脏数据
-                deleteKeyList.remove(multiIndex);
-                dirtyDataLineList.remove(multiIndex);
-                multiIndex = -1;
-                multiOpera = false;
-            }
-            // pop() 方法与 peek() 方法不同,在返回值的同时,会把值从栈中移除
-            // 保存新的 userTaskKey 在下个循环中使用
-            userTaskKey = new StringBuilder(stack.pop().getTaskDefinitionKey());
-        }
-        log.info("清洗后的历史节点数据:" + lastHistoricTaskInstanceList);
-        return lastHistoricTaskInstanceList;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/web/FlowableWebFilter.java b/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/web/FlowableWebFilter.java
deleted file mode 100644
index f55aa43f2..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/java/cn/bootx/starter/flowable/web/FlowableWebFilter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package cn.bootx.starter.flowable.web;
-
-import cn.bootx.common.core.entity.UserDetail;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.flowable.local.BpmContextLocal;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import org.flowable.common.engine.impl.identity.Authentication;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.stereotype.Component;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * flowable Web 过滤器,将 userId 设置到工作流里
- *
- * @author xxm
- * @date 2022/8/24
- */
-@Component
-@RequiredArgsConstructor
-@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
-public class FlowableWebFilter extends OncePerRequestFilter {
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
-            throws ServletException, IOException {
-        try {
-            // 设置工作流的用户
-            String userId = SecurityUtil.getCurrentUser().map(UserDetail::getId).map(String::valueOf).orElse(null);
-            if (StrUtil.isNotBlank(userId)) {
-                Authentication.setAuthenticatedUserId(String.valueOf(userId));
-            }
-            // 过滤
-            chain.doFilter(request, response);
-        }
-        finally {
-            BpmContextLocal.clear();
-            // 清理
-            Authentication.setAuthenticatedUserId(null);
-
-        }
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-flowable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-flowable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 789d667a5..000000000
--- a/bootx-common-starters/common-starter-flowable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-cn.bootx.starter.flowable.FlowableAutoConfiguration
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-monitor/pom.xml b/bootx-common-starters/common-starter-monitor/pom.xml
index 6024f7bdc..345d9e56d 100644
--- a/bootx-common-starters/common-starter-monitor/pom.xml
+++ b/bootx-common-starters/common-starter-monitor/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-common-starters
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
     jar
@@ -21,6 +21,7 @@
         
             cn.bootx.platform
             common-mongo
+            true
         
     
 
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/MonitorAutoConfiguration.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/MonitorAutoConfiguration.java
similarity index 80%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/MonitorAutoConfiguration.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/MonitorAutoConfiguration.java
index 25bf1686c..23318751d 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/MonitorAutoConfiguration.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/MonitorAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.monitor;
+package cn.bootx.platform.starter.monitor;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
@@ -7,7 +7,7 @@
  * 系统信息监控模块
  *
  * @author xxm
- * @date 2022/6/10
+ * @since 2022/6/10
  */
 @ComponentScan
 @AutoConfiguration
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/controller/SystemMonitorController.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/controller/SystemMonitorController.java
new file mode 100644
index 000000000..947c43058
--- /dev/null
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/controller/SystemMonitorController.java
@@ -0,0 +1,42 @@
+package cn.bootx.platform.starter.monitor.controller;
+
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.starter.monitor.entity.RedisMonitorResult;
+import cn.bootx.platform.starter.monitor.entity.SystemMonitorResult;
+import cn.bootx.platform.starter.monitor.service.RedisMonitorService;
+import cn.bootx.platform.starter.monitor.service.SystemMonitorService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xxm
+ * @since 2022/6/10
+ */
+@Tag(name = "系统信息监控")
+@RestController
+@RequestMapping("/monitor/system")
+@RequiredArgsConstructor
+public class SystemMonitorController {
+
+    private final SystemMonitorService systemMonitorService;
+
+    private final RedisMonitorService redisMonitorService;
+
+    @Operation(summary = "获取系统消息")
+    @GetMapping("/getSystemInfo")
+    public ResResult getSystemInfo() {
+        return Res.ok(systemMonitorService.getSystemInfo());
+    }
+
+    @Operation(summary = "获取Redis信息")
+    @GetMapping("/getRedisInfo")
+    public ResResult getRedisInfo() {
+        return Res.ok(redisMonitorService.getRedisInfo());
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/MongoMonitorResult.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/MongoMonitorResult.java
similarity index 79%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/MongoMonitorResult.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/MongoMonitorResult.java
index c30b6e4bc..def02d0c5 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/MongoMonitorResult.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/MongoMonitorResult.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.monitor.entity;
+package cn.bootx.platform.starter.monitor.entity;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -8,7 +8,7 @@
  * MongoDB监控信息
  *
  * @author xxm
- * @date 2022/6/12
+ * @since 2022/6/12
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/RedisMonitorResult.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/RedisMonitorResult.java
similarity index 79%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/RedisMonitorResult.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/RedisMonitorResult.java
index 1b213b824..43ae5b78c 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/RedisMonitorResult.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/RedisMonitorResult.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.monitor.entity;
+package cn.bootx.platform.starter.monitor.entity;
 
-import cn.bootx.common.core.rest.dto.KeyValue;
+import cn.bootx.platform.common.core.rest.dto.KeyValue;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -11,7 +11,7 @@
  * Redis监控信息
  *
  * @author xxm
- * @date 2022/6/12
+ * @since 2022/6/12
  */
 @Data
 @Schema(title = "Redis监控信息")
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/SystemMonitorResult.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/SystemMonitorResult.java
similarity index 98%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/SystemMonitorResult.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/SystemMonitorResult.java
index f4353659b..838e74e4f 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/entity/SystemMonitorResult.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/entity/SystemMonitorResult.java
@@ -22,7 +22,7 @@
 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy
 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package cn.bootx.starter.monitor.entity;
+package cn.bootx.platform.starter.monitor.entity;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -34,7 +34,7 @@
  * 系统属性结果
  *
  * @author xxm
- * @date 2022/6/10
+ * @since 2022/6/10
  */
 @Data
 @Schema(title = "系统属性结果")
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/RedisMonitorService.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/RedisMonitorService.java
similarity index 90%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/RedisMonitorService.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/RedisMonitorService.java
index 9b4a5b81f..e565e6539 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/RedisMonitorService.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/RedisMonitorService.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.monitor.service;
+package cn.bootx.platform.starter.monitor.service;
 
-import cn.bootx.common.core.rest.dto.KeyValue;
-import cn.bootx.starter.monitor.entity.RedisMonitorResult;
+import cn.bootx.platform.common.core.rest.dto.KeyValue;
+import cn.bootx.platform.starter.monitor.entity.RedisMonitorResult;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +19,7 @@
  * Redis监控信息
  *
  * @author xxm
- * @date 2022/6/12
+ * @since 2022/6/12
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/SystemMonitorService.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/SystemMonitorService.java
similarity index 85%
rename from bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/SystemMonitorService.java
rename to bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/SystemMonitorService.java
index bc5428984..9d74ad386 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/SystemMonitorService.java
+++ b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/platform/starter/monitor/service/SystemMonitorService.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.monitor.service;
+package cn.bootx.platform.starter.monitor.service;
 
-import cn.bootx.starter.monitor.entity.SystemMonitorResult;
-import cn.bootx.starter.monitor.entity.SystemMonitorResult.*;
+import cn.bootx.platform.starter.monitor.entity.SystemMonitorResult;
+import cn.bootx.platform.starter.monitor.entity.SystemMonitorResult.*;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.system.*;
@@ -25,7 +25,7 @@
  * 系统信息
  *
  * @author xxm
- * @date 2022/6/10
+ * @since 2022/6/10
  */
 @Slf4j
 @Service
@@ -138,15 +138,20 @@ private List getDiskInfos() {
             if (f.getTotalSpace() == 0) {
                 continue;
             }
-            SysDiskInfo sysDiskInfo = new SysDiskInfo();
-            sysDiskInfo.setName(fsv.getSystemDisplayName(f));
-            sysDiskInfo.setTotalSpace(FileUtil.readableFileSize((f.getTotalSpace())));
-            sysDiskInfo.setFreeSpace(FileUtil.readableFileSize(f.getFreeSpace()));
-            long used = f.getTotalSpace() - f.getFreeSpace();
-            sysDiskInfo.setUsedSpace(FileUtil.readableFileSize(used));
-            double restPpt = used * 100.0 / f.getTotalSpace();
-            String usedRate = new DecimalFormat("#.00").format(restPpt) + "%";
-            sysDiskInfo.setUsedRate(usedRate);
+            SysDiskInfo sysDiskInfo = null;
+            try {
+                sysDiskInfo = new SysDiskInfo();
+                sysDiskInfo.setName(fsv.getSystemDisplayName(f));
+                sysDiskInfo.setTotalSpace(FileUtil.readableFileSize((f.getTotalSpace())));
+                sysDiskInfo.setFreeSpace(FileUtil.readableFileSize(f.getFreeSpace()));
+                long used = f.getTotalSpace() - f.getFreeSpace();
+                sysDiskInfo.setUsedSpace(FileUtil.readableFileSize(used));
+                double restPpt = used * 100.0 / f.getTotalSpace();
+                String usedRate = new DecimalFormat("#.00").format(restPpt) + "%";
+                sysDiskInfo.setUsedRate(usedRate);
+            } catch (Exception e) {
+                log.warn("获取磁盘信息失败", e);
+            }
             list.add(sysDiskInfo);
         }
         return list;
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/controller/SystemMonitorController.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/controller/SystemMonitorController.java
deleted file mode 100644
index ad9675fff..000000000
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/controller/SystemMonitorController.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package cn.bootx.starter.monitor.controller;
-
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.starter.monitor.entity.MongoMonitorResult;
-import cn.bootx.starter.monitor.entity.RedisMonitorResult;
-import cn.bootx.starter.monitor.entity.SystemMonitorResult;
-import cn.bootx.starter.monitor.service.MongoMonitorService;
-import cn.bootx.starter.monitor.service.RedisMonitorService;
-import cn.bootx.starter.monitor.service.SystemMonitorService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xxm
- * @date 2022/6/10
- */
-@Tag(name = "系统信息监控")
-@RestController
-@RequestMapping("/monitor/system")
-@RequiredArgsConstructor
-public class SystemMonitorController {
-
-    private final SystemMonitorService systemMonitorService;
-
-    private final RedisMonitorService redisMonitorService;
-
-    private final MongoMonitorService mongoMonitorService;
-
-    @Operation(summary = "获取系统消息")
-    @GetMapping("/getSystemInfo")
-    public ResResult getSystemInfo() {
-        return Res.ok(systemMonitorService.getSystemInfo());
-    }
-
-    @Operation(summary = "获取Redis信息")
-    @GetMapping("/getRedisInfo")
-    public ResResult getRedisInfo() {
-        return Res.ok(redisMonitorService.getRedisInfo());
-    }
-
-    @Operation(summary = "获取MongoDB信息")
-    @GetMapping("/getMongoInfo")
-    public ResResult getMongoInfo() {
-        return Res.ok(mongoMonitorService.getMongoInfo());
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/MongoMonitorService.java b/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/MongoMonitorService.java
deleted file mode 100644
index e5188bba7..000000000
--- a/bootx-common-starters/common-starter-monitor/src/main/java/cn/bootx/starter/monitor/service/MongoMonitorService.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.monitor.service;
-
-import cn.bootx.starter.monitor.entity.MongoMonitorResult;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.stereotype.Service;
-
-/**
- * MongoDb信息监控
- *
- * @author xxm
- * @date 2022/6/12
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class MongoMonitorService {
-
-    private final MongoTemplate mongoTemplate;
-
-    /**
-     * MongoDB信息监控
-     */
-    public MongoMonitorResult getMongoInfo() {
-        MongoMonitorResult result = new MongoMonitorResult();
-        return result;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index dcf55b06d..f6e73c577 100644
--- a/bootx-common-starters/common-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-common-starters/common-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.monitor.MonitorAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.starter.monitor.MonitorAutoConfiguration
diff --git a/bootx-common-starters/common-starter-quartz/README.md b/bootx-common-starters/common-starter-quartz/README.md
index b48e6b359..08999dd43 100644
--- a/bootx-common-starters/common-starter-quartz/README.md
+++ b/bootx-common-starters/common-starter-quartz/README.md
@@ -13,7 +13,7 @@
 /**
  * 测试定时任务
  * @author xxm
- * @date 2021/11/8 
+ * @since 2021/11/8 
  */
 @Slf4j
 public class TestTask implements Job {
diff --git a/bootx-common-starters/common-starter-quartz/pom.xml b/bootx-common-starters/common-starter-quartz/pom.xml
index a8cb250f6..dfd7ccb6b 100644
--- a/bootx-common-starters/common-starter-quartz/pom.xml
+++ b/bootx-common-starters/common-starter-quartz/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-common-starters
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/QuartzJobAutoConfiguration.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/QuartzJobAutoConfiguration.java
similarity index 88%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/QuartzJobAutoConfiguration.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/QuartzJobAutoConfiguration.java
index 55d7aabe4..555d5059c 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/QuartzJobAutoConfiguration.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/QuartzJobAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.quartz;
+package cn.bootx.platform.starter.quartz;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -10,7 +10,7 @@
  * 定时任务
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @ComponentScan
 @ConfigurationPropertiesScan
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/code/QuartzJobCode.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/code/QuartzJobCode.java
new file mode 100644
index 000000000..5b3701872
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/code/QuartzJobCode.java
@@ -0,0 +1,17 @@
+package cn.bootx.platform.starter.quartz.code;
+
+/**
+ * 定时任务状态
+ *
+ * @author xxm
+ * @since 2021/11/2
+ */
+public interface QuartzJobCode {
+
+    /** 运行 */
+    int RUNNING = 1;
+
+    /** 停止 */
+    int STOP = 0;
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/configuration/QuartzProperties.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/configuration/QuartzProperties.java
similarity index 97%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/configuration/QuartzProperties.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/configuration/QuartzProperties.java
index 8aa1316ad..eefaed22a 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/configuration/QuartzProperties.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/configuration/QuartzProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.quartz.configuration;
+package cn.bootx.platform.starter.quartz.configuration;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -18,7 +18,7 @@
  * 支持配置文件自动提示
  *
  * @author xxm
- * @date 2021/12/2
+ * @since 2021/12/2
  */
 @Getter
 @Setter
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobController.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
similarity index 83%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobController.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
index 15ce104e9..e28255643 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobController.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobController.java
@@ -1,12 +1,12 @@
-package cn.bootx.starter.quartz.controller;
+package cn.bootx.platform.starter.quartz.controller;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.quartz.core.service.QuartzJobService;
-import cn.bootx.starter.quartz.dto.QuartzJobDto;
-import cn.bootx.starter.quartz.param.QuartzJobParam;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.quartz.core.service.QuartzJobService;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobDto;
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -16,7 +16,7 @@
  * 定时任务
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @Tag(name = "定时任务")
 @RestController
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobLogController.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobLogController.java
new file mode 100644
index 000000000..ae39fc9bf
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/controller/QuartzJobLogController.java
@@ -0,0 +1,41 @@
+package cn.bootx.platform.starter.quartz.controller;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.quartz.core.service.QuartzJobLogService;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobLogDto;
+import cn.bootx.platform.starter.quartz.param.QuartzJobLogQuery;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xxm
+ * @since 2022/5/2
+ */
+@Tag(name = "定时任务执行日志")
+@RestController
+@RequestMapping("/quartz/log")
+@RequiredArgsConstructor
+public class QuartzJobLogController {
+
+    private final QuartzJobLogService quartzJobLogService;
+
+    @Operation(summary = "分页")
+    @GetMapping("/page")
+    public ResResult> page(PageParam pageParam, QuartzJobLogQuery param) {
+        return Res.ok(quartzJobLogService.page(pageParam, param));
+    }
+
+    @Operation(summary = "单条")
+    @GetMapping("/findById")
+    public ResResult findById(Long id) {
+        return Res.ok(quartzJobLogService.findById(id));
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/convert/QuartzJobConvert.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/convert/QuartzJobConvert.java
new file mode 100644
index 000000000..95d6c5220
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/convert/QuartzJobConvert.java
@@ -0,0 +1,28 @@
+package cn.bootx.platform.starter.quartz.core.convert;
+
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJob;
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJobLog;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobDto;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobLogDto;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 定时任务转换
+ *
+ * @author xxm
+ * @since 2021/11/2
+ */
+@Mapper
+public interface QuartzJobConvert {
+
+    QuartzJobConvert CONVERT = Mappers.getMapper(QuartzJobConvert.class);
+
+    QuartzJobDto convert(QuartzJob in);
+
+    QuartzJob convert(QuartzJobParam in);
+
+    QuartzJobLogDto convert(QuartzJobLog in);
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogManager.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogManager.java
new file mode 100644
index 000000000..7383ff836
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogManager.java
@@ -0,0 +1,38 @@
+package cn.bootx.platform.starter.quartz.core.dao;
+
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJobLog;
+import cn.bootx.platform.starter.quartz.param.QuartzJobLogQuery;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+import java.util.Objects;
+
+/**
+ * @author xxm
+ * @since 2022/5/1
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class QuartzJobLogManager extends BaseManager {
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam, QuartzJobLogQuery query) {
+        Page mpPage = MpUtil.getMpPage(pageParam, QuartzJobLog.class);
+
+        return this.lambdaQuery()
+            .eq(QuartzJobLog::getClassName, query.getClassName())
+            .eq(Objects.nonNull(query.getSuccess()), QuartzJobLog::getSuccess, query.getSuccess())
+            .orderByDesc(MpIdEntity::getId)
+            .page(mpPage);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogMapper.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogMapper.java
new file mode 100644
index 000000000..a166cf3c2
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobLogMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.starter.quartz.core.dao;
+
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJobLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 定时任务日志
+ *
+ * @author xxm
+ * @since 2022/5/1
+ */
+@Mapper
+public interface QuartzJobLogMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobManager.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobManager.java
new file mode 100644
index 000000000..eb8cf1b19
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobManager.java
@@ -0,0 +1,42 @@
+package cn.bootx.platform.starter.quartz.core.dao;
+
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJob;
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.quartz.code.QuartzJobCode;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 定时任务
+ *
+ * @author xxm
+ * @since 2021/11/2
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class QuartzJobManager extends BaseManager {
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam, QuartzJobParam param) {
+        Page mpPage = MpUtil.getMpPage(pageParam, QuartzJob.class);
+        return lambdaQuery().orderByDesc(QuartzJob::getId).page(mpPage);
+    }
+
+    /**
+     * 查询在执行中的定时任务配置
+     */
+    public List findRunning() {
+        return findAllByField(QuartzJob::getState, QuartzJobCode.RUNNING);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobMapper.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobMapper.java
new file mode 100644
index 000000000..d8af2adac
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/dao/QuartzJobMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.starter.quartz.core.dao;
+
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJob;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 定时任务
+ *
+ * @author xxm
+ * @since 2021/11/2
+ */
+@Mapper
+public interface QuartzJobMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJob.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJob.java
new file mode 100644
index 000000000..9213e3b29
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJob.java
@@ -0,0 +1,56 @@
+package cn.bootx.platform.starter.quartz.core.entity;
+
+import cn.bootx.platform.starter.quartz.core.convert.QuartzJobConvert;
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.starter.quartz.code.QuartzJobCode;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobDto;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 定时任务
+ *
+ * @author xxm
+ * @since 2021/11/2
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("starter_quartz_job")
+public class QuartzJob extends MpBaseEntity implements EntityBaseFunction {
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务类名 */
+    private String jobClassName;
+
+    /** cron表达式 */
+    private String cron;
+
+    /** 参数 */
+    private String parameter;
+
+    /**
+     * 状态
+     * @see QuartzJobCode
+     */
+    private Integer state;
+
+    /** 备注 */
+    private String remark;
+
+    @Override
+    public QuartzJobDto toDto() {
+        return QuartzJobConvert.CONVERT.convert(this);
+    }
+
+    public static QuartzJob init(QuartzJobParam in) {
+        return QuartzJobConvert.CONVERT.convert(in);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJobLog.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJobLog.java
similarity index 75%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJobLog.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJobLog.java
index c7e98be27..35727994b 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJobLog.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/entity/QuartzJobLog.java
@@ -1,9 +1,9 @@
-package cn.bootx.starter.quartz.core.entity;
+package cn.bootx.platform.starter.quartz.core.entity;
 
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.starter.quartz.core.convert.QuartzJobConvert;
-import cn.bootx.starter.quartz.dto.QuartzJobLogDto;
+import cn.bootx.platform.starter.quartz.core.convert.QuartzJobConvert;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobLogDto;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -15,7 +15,7 @@
  * 任务执行日志
  *
  * @author xxm
- * @date 2021/8/20
+ * @since 2021/8/20
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobLogService.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobLogService.java
new file mode 100644
index 000000000..78d35dad6
--- /dev/null
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobLogService.java
@@ -0,0 +1,54 @@
+package cn.bootx.platform.starter.quartz.core.service;
+
+import cn.bootx.platform.starter.quartz.param.QuartzJobLogQuery;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.quartz.core.dao.QuartzJobLogManager;
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJobLog;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobLogDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * 定时任务日志
+ *
+ * @author xxm
+ * @since 2022/5/1
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class QuartzJobLogService {
+
+    private final QuartzJobLogManager quartzJobLogManager;
+
+    /**
+     * 添加
+     */
+    @Async("asyncExecutor")
+    public void add(QuartzJobLog quartzJobLog) {
+        quartzJobLog.setCreateTime(LocalDateTime.now());
+        quartzJobLogManager.save(quartzJobLog);
+    }
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam, QuartzJobLogQuery query) {
+        return MpUtil.convert2DtoPageResult(quartzJobLogManager.page(pageParam, query));
+    }
+
+    /**
+     * 单条
+     */
+    public QuartzJobLogDto findById(Long id) {
+        return quartzJobLogManager.findById(id).map(QuartzJobLog::toDto).orElseThrow(DataNotExistException::new);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobService.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobService.java
similarity index 86%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobService.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobService.java
index 63644f5ba..35b1c1e90 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobService.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/core/service/QuartzJobService.java
@@ -1,17 +1,17 @@
-package cn.bootx.starter.quartz.core.service;
-
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.quartz.code.QuartzJobCode;
-import cn.bootx.starter.quartz.core.dao.QuartzJobManager;
-import cn.bootx.starter.quartz.core.entity.QuartzJob;
-import cn.bootx.starter.quartz.dto.QuartzJobDto;
-import cn.bootx.starter.quartz.handler.QuartzJobScheduler;
-import cn.bootx.starter.quartz.param.QuartzJobParam;
+package cn.bootx.platform.starter.quartz.core.service;
+
+import cn.bootx.platform.starter.quartz.handler.QuartzJobScheduler;
+import cn.bootx.platform.starter.quartz.param.QuartzJobParam;
+import cn.bootx.platform.common.core.exception.BizException;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.CollUtil;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.quartz.code.QuartzJobCode;
+import cn.bootx.platform.starter.quartz.core.dao.QuartzJobManager;
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJob;
+import cn.bootx.platform.starter.quartz.dto.QuartzJobDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import lombok.RequiredArgsConstructor;
@@ -31,7 +31,7 @@
  * 定时任务
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobDto.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobDto.java
similarity index 75%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobDto.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobDto.java
index 81279d677..406209700 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobDto.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobDto.java
@@ -1,6 +1,7 @@
-package cn.bootx.starter.quartz.dto;
+package cn.bootx.platform.starter.quartz.dto;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.starter.quartz.code.QuartzJobCode;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -10,7 +11,7 @@
  * 定时任务
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -32,7 +33,7 @@ public class QuartzJobDto extends BaseDto {
 
     /**
      * 状态
-     * @see cn.bootx.starter.quartz.code.QuartzJobCode
+     * @see QuartzJobCode
      */
     private Integer state;
 
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobLogDto.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobLogDto.java
similarity index 89%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobLogDto.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobLogDto.java
index 1b29dd96d..5866a8332 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/dto/QuartzJobLogDto.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/dto/QuartzJobLogDto.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.quartz.dto;
+package cn.bootx.platform.starter.quartz.dto;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -12,7 +12,7 @@
  * 任务执行日志
  *
  * @author xxm
- * @date 2021/8/20
+ * @since 2021/8/20
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/JobLogAspectHandler.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/JobLogAspectHandler.java
similarity index 88%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/JobLogAspectHandler.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/JobLogAspectHandler.java
index 32fab698d..fd8943047 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/JobLogAspectHandler.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/JobLogAspectHandler.java
@@ -1,9 +1,9 @@
-package cn.bootx.starter.quartz.handler;
+package cn.bootx.platform.starter.quartz.handler;
 
-import cn.bootx.common.core.annotation.JobLog;
-import cn.bootx.common.core.util.LocalDateTimeUtil;
-import cn.bootx.starter.quartz.core.entity.QuartzJobLog;
-import cn.bootx.starter.quartz.core.service.QuartzJobLogService;
+import cn.bootx.platform.common.core.annotation.JobLog;
+import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
+import cn.bootx.platform.starter.quartz.core.entity.QuartzJobLog;
+import cn.bootx.platform.starter.quartz.core.service.QuartzJobLogService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -19,7 +19,7 @@
  * 定时任务日志切面
  *
  * @author xxm
- * @date 2022/5/1
+ * @since 2022/5/1
  */
 @Slf4j
 @Aspect
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/QuartzJobScheduler.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/QuartzJobScheduler.java
similarity index 97%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/QuartzJobScheduler.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/QuartzJobScheduler.java
index a2ef5df56..18fb35249 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/handler/QuartzJobScheduler.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/handler/QuartzJobScheduler.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.quartz.handler;
+package cn.bootx.platform.starter.quartz.handler;
 
-import cn.bootx.common.core.exception.BizException;
+import cn.bootx.platform.common.core.exception.BizException;
 import cn.hutool.core.util.RandomUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -18,7 +18,7 @@
  * 定时任务调度器
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobLogQuery.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobLogQuery.java
similarity index 85%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobLogQuery.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobLogQuery.java
index 8d86ba03e..3573938e2 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobLogQuery.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobLogQuery.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.quartz.param;
+package cn.bootx.platform.starter.quartz.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -6,7 +6,7 @@
 
 /**
  * @author xxm
- * @date 2022/5/2
+ * @since 2022/5/2
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobParam.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobParam.java
similarity index 91%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobParam.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobParam.java
index 3bb2a2ff4..6ffb4d28d 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/param/QuartzJobParam.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/param/QuartzJobParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.quartz.param;
+package cn.bootx.platform.starter.quartz.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -8,7 +8,7 @@
  * 定时任务
  *
  * @author xxm
- * @date 2021/11/2
+ * @since 2021/11/2
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/task/TestTask.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/task/TestTask.java
similarity index 93%
rename from bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/task/TestTask.java
rename to bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/task/TestTask.java
index ccd45baa3..0208fbcaa 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/task/TestTask.java
+++ b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/platform/starter/quartz/task/TestTask.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.quartz.task;
+package cn.bootx.platform.starter.quartz.task;
 
 import cn.hutool.core.thread.ThreadUtil;
 import lombok.RequiredArgsConstructor;
@@ -12,9 +12,8 @@
 
 /**
  * 测试定时任务
- *
  * @author xxm
- * @date 2021/11/8
+ * @since 2021/11/8
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/code/QuartzJobCode.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/code/QuartzJobCode.java
deleted file mode 100644
index 94f587322..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/code/QuartzJobCode.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.bootx.starter.quartz.code;
-
-/**
- * 定时任务状态
- *
- * @author xxm
- * @date 2021/11/2
- */
-public interface QuartzJobCode {
-
-    /** 运行 */
-    int RUNNING = 1;
-
-    /** 停止 */
-    int STOP = 0;
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobLogController.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobLogController.java
deleted file mode 100644
index 97022c2a4..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/controller/QuartzJobLogController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package cn.bootx.starter.quartz.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.quartz.core.service.QuartzJobLogService;
-import cn.bootx.starter.quartz.dto.QuartzJobLogDto;
-import cn.bootx.starter.quartz.param.QuartzJobLogQuery;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xxm
- * @date 2022/5/2
- */
-@Tag(name = "定时任务执行日志")
-@RestController
-@RequestMapping("/quartz/log")
-@RequiredArgsConstructor
-public class QuartzJobLogController {
-
-    private final QuartzJobLogService quartzJobLogService;
-
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(PageParam pageParam, QuartzJobLogQuery param) {
-        return Res.ok(quartzJobLogService.page(pageParam, param));
-    }
-
-    @Operation(summary = "单条")
-    @GetMapping("/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(quartzJobLogService.findById(id));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/convert/QuartzJobConvert.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/convert/QuartzJobConvert.java
deleted file mode 100644
index d14ea94e8..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/convert/QuartzJobConvert.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.starter.quartz.core.convert;
-
-import cn.bootx.starter.quartz.core.entity.QuartzJob;
-import cn.bootx.starter.quartz.core.entity.QuartzJobLog;
-import cn.bootx.starter.quartz.dto.QuartzJobDto;
-import cn.bootx.starter.quartz.dto.QuartzJobLogDto;
-import cn.bootx.starter.quartz.param.QuartzJobParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 定时任务转换
- *
- * @author xxm
- * @date 2021/11/2
- */
-@Mapper
-public interface QuartzJobConvert {
-
-    QuartzJobConvert CONVERT = Mappers.getMapper(QuartzJobConvert.class);
-
-    QuartzJobDto convert(QuartzJob in);
-
-    QuartzJob convert(QuartzJobParam in);
-
-    QuartzJobLogDto convert(QuartzJobLog in);
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogManager.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogManager.java
deleted file mode 100644
index 4d78b7aad..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cn.bootx.starter.quartz.core.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.quartz.core.entity.QuartzJobLog;
-import cn.bootx.starter.quartz.param.QuartzJobLogQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-import java.util.Objects;
-
-/**
- * @author xxm
- * @date 2022/5/1
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class QuartzJobLogManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, QuartzJobLogQuery query) {
-        Page mpPage = MpUtil.getMpPage(pageParam, QuartzJobLog.class);
-
-        return this.lambdaQuery()
-            .eq(QuartzJobLog::getClassName, query.getClassName())
-            .eq(Objects.nonNull(query.getSuccess()), QuartzJobLog::getSuccess, query.getSuccess())
-            .orderByDesc(MpIdEntity::getId)
-            .page(mpPage);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogMapper.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogMapper.java
deleted file mode 100644
index 1e5a6cdbe..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobLogMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.quartz.core.dao;
-
-import cn.bootx.starter.quartz.core.entity.QuartzJobLog;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 定时任务日志
- *
- * @author xxm
- * @date 2022/5/1
- */
-@Mapper
-public interface QuartzJobLogMapper extends BaseMapper {
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobManager.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobManager.java
deleted file mode 100644
index 2cc2b3338..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cn.bootx.starter.quartz.core.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.quartz.code.QuartzJobCode;
-import cn.bootx.starter.quartz.core.entity.QuartzJob;
-import cn.bootx.starter.quartz.param.QuartzJobParam;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 定时任务
- *
- * @author xxm
- * @date 2021/11/2
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class QuartzJobManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, QuartzJobParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, QuartzJob.class);
-        return lambdaQuery().orderByDesc(QuartzJob::getId).page(mpPage);
-    }
-
-    /**
-     * 查询在执行中的定时任务配置
-     */
-    public List findRunning() {
-        return findAllByField(QuartzJob::getState, QuartzJobCode.RUNNING);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobMapper.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobMapper.java
deleted file mode 100644
index 0974e2586..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/dao/QuartzJobMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.quartz.core.dao;
-
-import cn.bootx.starter.quartz.core.entity.QuartzJob;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 定时任务
- *
- * @author xxm
- * @date 2021/11/2
- */
-@Mapper
-public interface QuartzJobMapper extends BaseMapper {
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJob.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJob.java
deleted file mode 100644
index 1e9e608b2..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/entity/QuartzJob.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.bootx.starter.quartz.core.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.quartz.core.convert.QuartzJobConvert;
-import cn.bootx.starter.quartz.dto.QuartzJobDto;
-import cn.bootx.starter.quartz.param.QuartzJobParam;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 定时任务
- *
- * @author xxm
- * @date 2021/11/2
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("starter_quartz_job")
-public class QuartzJob extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 任务名称 */
-    private String name;
-
-    /** 任务类名 */
-    private String jobClassName;
-
-    /** cron表达式 */
-    private String cron;
-
-    /** 参数 */
-    private String parameter;
-
-    /**
-     * 状态
-     * @see cn.bootx.starter.quartz.code.QuartzJobCode
-     */
-    private Integer state;
-
-    /** 备注 */
-    private String remark;
-
-    @Override
-    public QuartzJobDto toDto() {
-        return QuartzJobConvert.CONVERT.convert(this);
-    }
-
-    public static QuartzJob init(QuartzJobParam in) {
-        return QuartzJobConvert.CONVERT.convert(in);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobLogService.java b/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobLogService.java
deleted file mode 100644
index 54a1a60ca..000000000
--- a/bootx-common-starters/common-starter-quartz/src/main/java/cn/bootx/starter/quartz/core/service/QuartzJobLogService.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cn.bootx.starter.quartz.core.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.quartz.core.dao.QuartzJobLogManager;
-import cn.bootx.starter.quartz.core.entity.QuartzJobLog;
-import cn.bootx.starter.quartz.dto.QuartzJobLogDto;
-import cn.bootx.starter.quartz.param.QuartzJobLogQuery;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-
-/**
- * 定时任务日志
- *
- * @author xxm
- * @date 2022/5/1
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class QuartzJobLogService {
-
-    private final QuartzJobLogManager quartzJobLogManager;
-
-    /**
-     * 添加
-     */
-    @Async("asyncExecutor")
-    public void add(QuartzJobLog quartzJobLog) {
-        quartzJobLog.setCreateTime(LocalDateTime.now());
-        quartzJobLogManager.save(quartzJobLog);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam, QuartzJobLogQuery query) {
-        return MpUtil.convert2DtoPageResult(quartzJobLogManager.page(pageParam, query));
-    }
-
-    /**
-     * 单条
-     */
-    public QuartzJobLogDto findById(Long id) {
-        return quartzJobLogManager.findById(id).map(QuartzJobLog::toDto).orElseThrow(DataNotExistException::new);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-quartz/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-quartz/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 5dc292b36..b01e338ae 100644
--- a/bootx-common-starters/common-starter-quartz/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-common-starters/common-starter-quartz/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.quartz.QuartzJobAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.starter.quartz.QuartzJobAutoConfiguration
diff --git a/bootx-common-starters/common-starter-wechat/pom.xml b/bootx-common-starters/common-starter-wechat/pom.xml
index e8be1b8c4..f2d39d7e1 100644
--- a/bootx-common-starters/common-starter-wechat/pom.xml
+++ b/bootx-common-starters/common-starter-wechat/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-common-starters
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -43,6 +43,26 @@
                 
             
         
+        
+        
+            com.github.binarywang
+            weixin-java-miniapp
+            ${wxjava.version}
+            
+                
+                    commons-io
+                    commons-io
+                
+                
+                    guava
+                    com.google.guava
+                
+                
+                    com.thoughtworks.xstream
+                    xstream
+                
+            
+        
         
         
             com.thoughtworks.xstream
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/WeChatAutoConfiguration.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/WeChatAutoConfiguration.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java
index 289e076c0..42089c6f8 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/WeChatAutoConfiguration.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat;
+package cn.bootx.platform.starter.wechat;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -10,7 +10,7 @@
  * 微信操作封装
  *
  * @author xxm
- * @date 2022/7/15
+ * @since 2022/7/15
  */
 @ComponentScan
 @MapperScan(annotationClass = Mapper.class)
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/code/WeChatCode.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java
similarity index 89%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/code/WeChatCode.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java
index 836362333..edf7660ed 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/code/WeChatCode.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java
@@ -1,10 +1,10 @@
-package cn.bootx.starter.wechat.code;
+package cn.bootx.platform.starter.wechat.code;
 
 /**
  * 微信编码
  *
  * @author xxm
- * @date 2022/8/5
+ * @since 2022/8/5
  */
 public interface WeChatCode {
 
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java
new file mode 100644
index 000000000..1a95ed7d4
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java
@@ -0,0 +1,24 @@
+package cn.bootx.platform.starter.wechat.configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 微信公众平台配置
+ *
+ * @author xxm
+ * @since 2022/7/15
+ */
+@Getter
+@Setter
+@ConfigurationProperties("bootx.starter.third.wechat-applet")
+public class WeChatAppletProperties {
+
+    /** AppKey */
+    private String appId = "?";
+
+    /** AppSecret */
+    private String appSecret = "?";
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java
new file mode 100644
index 000000000..d1bce120a
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java
@@ -0,0 +1,64 @@
+package cn.bootx.platform.starter.wechat.configuration;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import cn.binarywang.wx.miniapp.config.WxMaConfig;
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.mp.api.*;
+import me.chanjar.weixin.mp.api.impl.*;
+import me.chanjar.weixin.mp.config.WxMpConfigStorage;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 微信配置
+ *
+ * @author xxm
+ * @since 2022/7/15
+ */
+@Configuration
+@RequiredArgsConstructor
+public class WeChatConfiguration {
+
+    private final WeChatProperties weChatProperties;
+
+    private final WeChatAppletProperties weChatAppletProperties;
+
+    /**
+     * 微信公众号APIService
+     */
+    @Bean
+    public WxMpService wxMpService(WxMpConfigStorage wxMpConfigStorage) {
+        WxMpService wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpConfigStorage);
+        return wxMpService;
+    }
+
+    /**
+     * 微信配置
+     */
+    @Bean
+    public WxMpConfigStorage wxMpConfigStorage() {
+        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
+        config.setAppId(weChatProperties.getAppId()); // 设置微信公众号的appid
+        config.setSecret(weChatProperties.getAppSecret()); // 设置微信公众号的app corpSecret
+        config.setToken(weChatProperties.getToken()); // 设置微信公众号的Token
+        config.setAesKey(weChatProperties.getEncodingAesKey()); // 消息加解密密钥
+        return config;
+    }
+    @Bean
+    public WxMaService wxMaService(WxMaConfig wxMaConfigStorage) {
+        WxMaService wxMpService = new WxMaServiceImpl();
+        wxMpService.setWxMaConfig(wxMaConfigStorage);
+        return wxMpService;
+    }
+    @Bean
+    public WxMaConfig wxMaConfigStorage() {
+        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+        config.setAppid(weChatAppletProperties.getAppId()); // 设置微信公众号的appid
+        config.setSecret(weChatAppletProperties.getAppSecret()); // 设置微信公众号的app corpSecret
+        return config;
+    }
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatMessageRouterConfiguration.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java
similarity index 85%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatMessageRouterConfiguration.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java
index ea78586fe..9799789b4 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatMessageRouterConfiguration.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wechat.configuration;
+package cn.bootx.platform.starter.wechat.configuration;
 
-import cn.bootx.starter.wechat.handler.WeChatMpMessageHandler;
-import cn.bootx.starter.wechat.handler.WeChatMsgHandler;
+import cn.bootx.platform.starter.wechat.handler.WeChatMpMessageHandler;
+import cn.bootx.platform.starter.wechat.handler.WeChatMsgHandler;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.mp.api.WxMpMessageRouter;
@@ -15,7 +15,7 @@
  * 微信信息路由配置
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Configuration
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java
new file mode 100644
index 000000000..b6246580f
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java
@@ -0,0 +1,30 @@
+package cn.bootx.platform.starter.wechat.configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 微信公众平台配置
+ *
+ * @author xxm
+ * @since 2022/7/15
+ */
+@Getter
+@Setter
+@ConfigurationProperties("bootx.starter.third.wechat")
+public class WeChatProperties {
+
+    /** AppKey */
+    private String appId = "?";
+
+    /** AppSecret */
+    private String appSecret = "?";
+
+    /** token */
+    private String token = "?";
+
+    /** 消息加解密密钥 */
+    private String encodingAesKey = "?";
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java
new file mode 100644
index 000000000..29749eaa6
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java
@@ -0,0 +1,34 @@
+package cn.bootx.platform.starter.wechat.controller;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.wechat.core.article.service.WeChatArticleService;
+import cn.bootx.platform.starter.wechat.dto.article.WeChatArticleDto;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xxm
+ * @since 2022/8/11
+ */
+@Tag(name = "微信文章管理")
+@RestController
+@RequestMapping("/wechat/article")
+@RequiredArgsConstructor
+public class WeChatArticleController {
+
+    private final WeChatArticleService weChatArticleService;
+
+    @Operation(summary = "分页")
+    @GetMapping("/page")
+    public ResResult> page(PageParam pageParam) {
+        return Res.ok(weChatArticleService.page(pageParam));
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMediaController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java
similarity index 78%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMediaController.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java
index 179c4caba..bfd82f4eb 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMediaController.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java
@@ -1,11 +1,11 @@
-package cn.bootx.starter.wechat.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.wechat.core.media.service.WeChatMediaService;
-import cn.bootx.starter.wechat.dto.media.WeChatMediaDto;
+package cn.bootx.platform.starter.wechat.controller;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.wechat.core.media.service.WeChatMediaService;
+import cn.bootx.platform.starter.wechat.dto.media.WeChatMediaDto;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -16,7 +16,7 @@
 
 /**
  * @author xxm
- * @date 2022/8/9
+ * @since 2022/8/9
  */
 @Tag(name = "微信素材管理")
 @RestController
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMenuController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java
similarity index 82%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMenuController.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java
index 492799cb6..1c556776e 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatMenuController.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java
@@ -1,12 +1,12 @@
-package cn.bootx.starter.wechat.controller;
+package cn.bootx.platform.starter.wechat.controller;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.wechat.core.menu.service.WeChatMenuService;
-import cn.bootx.starter.wechat.dto.menu.WeChatMenuDto;
-import cn.bootx.starter.wechat.param.menu.WeChatMenuParam;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.wechat.core.menu.service.WeChatMenuService;
+import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto;
+import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -18,7 +18,7 @@
  * 微信菜单管理
  *
  * @author xxm
- * @date 2022/8/6
+ * @since 2022/8/6
  */
 @Tag(name = "微信菜单管理")
 @RestController
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatPortalController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatPortalController.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java
index 7b72a8d35..5028b4a09 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatPortalController.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wechat.controller;
+package cn.bootx.platform.starter.wechat.controller;
 
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.starter.wechat.core.portal.service.WeChatPortalService;
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.starter.wechat.core.portal.service.WeChatPortalService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -11,7 +11,7 @@
  * 微信工作台接入入口
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @IgnoreAuth
 @Slf4j
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java
new file mode 100644
index 000000000..825f56305
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java
@@ -0,0 +1,43 @@
+package cn.bootx.platform.starter.wechat.controller;
+
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.starter.wechat.core.login.service.WeChatQrLoginService;
+import cn.bootx.platform.starter.wechat.dto.login.WeChatLoginQrCode;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+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;
+
+/**
+ * 微信
+ *
+ * @author xxm
+ * @since 2022/8/4
+ */
+@IgnoreAuth
+@Tag(name = "微信扫码登录")
+@RestController
+@RequestMapping("/token/wechat/qr")
+@RequiredArgsConstructor
+public class WeChatQrLoginController {
+
+    private final WeChatQrLoginService weChatQrLoginService;
+
+    @Operation(summary = "申请登录用QR码")
+    @PostMapping("/applyQrCode")
+    public ResResult applyQrCode() {
+         return Res.ok(weChatQrLoginService.applyQrCode());
+    }
+
+    @Operation(summary = "获取扫码状态")
+    @GetMapping("/getStatus")
+    public ResResult getStatus(String qrCodeKey) {
+         return Res.ok(weChatQrLoginService.getStatus(qrCodeKey));
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java
new file mode 100644
index 000000000..d618de59b
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java
@@ -0,0 +1,62 @@
+package cn.bootx.platform.starter.wechat.controller;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.auth.util.SecurityUtil;
+import cn.bootx.platform.starter.wechat.core.notice.service.WeChatTemplateService;
+import cn.bootx.platform.starter.wechat.dto.notice.WeChatTemplateDto;
+import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author xxm
+ * @since 2022/7/16
+ */
+@Tag(name = "微信模板消息")
+@RestController
+@RequestMapping("/wechat/template")
+@RequiredArgsConstructor
+public class WeChatTemplateController {
+
+    private final WeChatTemplateService weChatTemplateService;
+
+    @Operation(summary = "修改")
+    @PostMapping(value = "/update")
+    public ResResult update(@RequestBody WeChatTemplateParam param) {
+        weChatTemplateService.update(param);
+        return Res.ok();
+    }
+
+    @Operation(summary = "通过ID查询")
+    @GetMapping(value = "/findById")
+    public ResResult findById(Long id) {
+        return Res.ok(weChatTemplateService.findById(id));
+    }
+
+    @Operation(summary = "分页查询")
+    @GetMapping(value = "/page")
+    public ResResult> page(PageParam pageParam, WeChatTemplateParam weChatTemplateParam) {
+        return Res.ok(weChatTemplateService.page(pageParam, weChatTemplateParam));
+    }
+
+    @Operation(summary = "编码是否被使用(不包含自己)")
+    @GetMapping("/existsByCodeNotId")
+    public ResResult existsByCode(String code, Long id) {
+        return Res.ok(weChatTemplateService.existsByCode(code, id));
+    }
+
+    @Operation(summary = "同步消息模板数据")
+    @PostMapping("/sync")
+    public ResResult sync() {
+        // 为了获取用户生效, 测试用
+        SecurityUtil.getUserId();
+        weChatTemplateService.sync();
+        return Res.ok();
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/article/service/WeChatArticleService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java
similarity index 80%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/article/service/WeChatArticleService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java
index 35f844921..ade2a2b15 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/article/service/WeChatArticleService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java
@@ -1,8 +1,8 @@
-package cn.bootx.starter.wechat.core.article.service;
+package cn.bootx.platform.starter.wechat.core.article.service;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.wechat.dto.article.WeChatArticleDto;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.wechat.dto.article.WeChatArticleDto;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -14,7 +14,7 @@
 
 /**
  * @author xxm
- * @date 2022/8/11
+ * @since 2022/8/11
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/login/service/WeChatQrLoginService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/login/service/WeChatQrLoginService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java
index 34d2f9efd..19af0f274 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/login/service/WeChatQrLoginService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java
@@ -1,8 +1,8 @@
-package cn.bootx.starter.wechat.core.login.service;
+package cn.bootx.platform.starter.wechat.core.login.service;
 
-import cn.bootx.common.redis.RedisClient;
-import cn.bootx.starter.auth.exception.LoginFailureException;
-import cn.bootx.starter.wechat.dto.login.WeChatLoginQrCode;
+import cn.bootx.platform.starter.auth.exception.LoginFailureException;
+import cn.bootx.platform.common.redis.RedisClient;
+import cn.bootx.platform.starter.wechat.dto.login.WeChatLoginQrCode;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
@@ -15,13 +15,13 @@
 
 import java.util.Objects;
 
-import static cn.bootx.starter.wechat.code.WeChatCode.*;
+import static cn.bootx.platform.starter.wechat.code.WeChatCode.*;
 
 /**
  * 扫码事件
  *
  * @author xxm
- * @date 2022/8/4
+ * @since 2022/8/4
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/media/service/WeChatMediaService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java
similarity index 92%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/media/service/WeChatMediaService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java
index fc9f255f6..bfbb2095e 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/media/service/WeChatMediaService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java
@@ -1,9 +1,9 @@
-package cn.bootx.starter.wechat.core.media.service;
+package cn.bootx.platform.starter.wechat.core.media.service;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.FileUtil;
-import cn.bootx.starter.wechat.dto.media.WeChatMediaDto;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.FileUtil;
+import cn.bootx.platform.starter.wechat.dto.media.WeChatMediaDto;
 import cn.hutool.core.io.FileTypeUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.io.file.FileNameUtil;
@@ -28,7 +28,7 @@
  * 素材管理
  *
  * @author xxm
- * @date 2022/8/9
+ * @since 2022/8/9
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java
new file mode 100644
index 000000000..0b27d7196
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java
@@ -0,0 +1,30 @@
+package cn.bootx.platform.starter.wechat.core.menu.convert;
+
+import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam;
+import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo;
+import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu;
+import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 微信自定义菜单
+ *
+ * @author xxm
+ * @since 2022-08-08
+ */
+@Mapper
+public interface WeChatMenuConvert {
+
+    WeChatMenuConvert CONVERT = Mappers.getMapper(WeChatMenuConvert.class);
+
+    WeChatMenu convert(WeChatMenuParam in);
+
+    WeChatMenuDto convert(WeChatMenu in);
+
+    WeChatMenuInfo convert(WxMenu in);
+
+    WxMenu convert(WeChatMenuInfo in);
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java
new file mode 100644
index 000000000..d60b693f8
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java
@@ -0,0 +1,42 @@
+package cn.bootx.platform.starter.wechat.core.menu.dao;
+
+import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu;
+import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 微信自定义菜单
+ *
+ * @author xxm
+ * @since 2022-08-08
+ */
+@Repository
+@RequiredArgsConstructor
+public class WeChatMenuManager extends BaseManager {
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam, WeChatMenuParam param) {
+        Page mpPage = MpUtil.getMpPage(pageParam, WeChatMenu.class);
+        return lambdaQuery().select(this.getEntityClass(), MpUtil::excludeBigField)
+            .like(StrUtil.isNotBlank(param.getName()), WeChatMenu::getName, param.getName())
+            .orderByDesc(MpIdEntity::getId)
+            .page(mpPage);
+    }
+
+    /**
+     * 清除其他发布状态
+     */
+    public void clearPublish() {
+        lambdaUpdate().eq(WeChatMenu::isPublish, true).set(WeChatMenu::isPublish, false).update();
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java
new file mode 100644
index 000000000..6934ab0e6
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.starter.wechat.core.menu.dao;
+
+import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 微信自定义菜单
+ *
+ * @author xxm
+ * @since 2022-08-08
+ */
+@Mapper
+public interface WeChatMenuMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/domin/WeChatMenuInfo.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java
similarity index 98%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/domin/WeChatMenuInfo.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java
index 6c2c29f11..aeb482c91 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/domin/WeChatMenuInfo.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.core.menu.domin;
+package cn.bootx.platform.starter.wechat.core.menu.domin;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -15,7 +15,7 @@
  * 微信自定义菜单
  *
  * @author xxm
- * @date 2022/8/8
+ * @since 2022/8/8
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/entity/WeChatMenu.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/entity/WeChatMenu.java
new file mode 100644
index 000000000..b983003c8
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/entity/WeChatMenu.java
@@ -0,0 +1,54 @@
+package cn.bootx.platform.starter.wechat.core.menu.entity;
+
+import cn.bootx.platform.starter.wechat.core.menu.convert.WeChatMenuConvert;
+import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam;
+import cn.bootx.platform.common.core.annotation.BigField;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo;
+import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 微信自定义菜单
+ *
+ * @author xxm
+ * @since 2022-08-08
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName(value = "starter_wx_menu", autoResultMap = true)
+public class WeChatMenu extends MpBaseEntity implements EntityBaseFunction {
+
+    /** 名称 */
+    private String name;
+
+    /** 菜单信息 */
+    @BigField
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private WeChatMenuInfo menuInfo;
+
+    /** 是否发布 */
+    private boolean publish;
+
+    /** 备注 */
+    private String remark;
+
+    /** 创建对象 */
+    public static WeChatMenu init(WeChatMenuParam in) {
+        return WeChatMenuConvert.CONVERT.convert(in);
+    }
+
+    /** 转换成dto */
+    @Override
+    public WeChatMenuDto toDto() {
+        return WeChatMenuConvert.CONVERT.convert(this);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/service/WeChatMenuService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/service/WeChatMenuService.java
similarity index 82%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/service/WeChatMenuService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/service/WeChatMenuService.java
index 3a316cbeb..b1b5ace73 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/service/WeChatMenuService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/service/WeChatMenuService.java
@@ -1,15 +1,15 @@
-package cn.bootx.starter.wechat.core.menu.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ResultConvertUtil;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wechat.core.menu.dao.WeChatMenuManager;
-import cn.bootx.starter.wechat.core.menu.domin.WeChatMenuInfo;
-import cn.bootx.starter.wechat.core.menu.entity.WeChatMenu;
-import cn.bootx.starter.wechat.dto.menu.WeChatMenuDto;
-import cn.bootx.starter.wechat.param.menu.WeChatMenuParam;
+package cn.bootx.platform.starter.wechat.core.menu.service;
+
+import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ResultConvertUtil;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.wechat.core.menu.dao.WeChatMenuManager;
+import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo;
+import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu;
+import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.date.DateUtil;
@@ -29,7 +29,7 @@
  * 微信菜单
  *
  * @author xxm
- * @date 2022/8/6
+ * @since 2022/8/6
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/convert/WeChatTemplateConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/convert/WeChatTemplateConvert.java
new file mode 100644
index 000000000..1b2ab3a1b
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/convert/WeChatTemplateConvert.java
@@ -0,0 +1,27 @@
+package cn.bootx.platform.starter.wechat.core.notice.convert;
+
+import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam;
+import cn.bootx.platform.starter.wechat.core.notice.entity.WeChatTemplate;
+import cn.bootx.platform.starter.wechat.dto.notice.WeChatTemplateDto;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * @author xxm
+ * @since 2022/7/17
+ */
+@Mapper
+public interface WeChatTemplateConvert {
+
+    WeChatTemplateConvert CONVERT = Mappers.getMapper(WeChatTemplateConvert.class);
+
+    @Mapping(source = "title", target = "name")
+    WeChatTemplate convert(WxMpTemplate in);
+
+    WeChatTemplate convert(WeChatTemplateParam in);
+
+    WeChatTemplateDto convert(WeChatTemplate in);
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateManager.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateManager.java
similarity index 77%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateManager.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateManager.java
index 5c0e6677c..888a9b301 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateManager.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateManager.java
@@ -1,11 +1,11 @@
-package cn.bootx.starter.wechat.core.notice.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wechat.core.notice.entity.WeChatTemplate;
-import cn.bootx.starter.wechat.param.notice.WeChatTemplateParam;
+package cn.bootx.platform.starter.wechat.core.notice.dao;
+
+import cn.bootx.platform.starter.wechat.core.notice.entity.WeChatTemplate;
+import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -16,7 +16,7 @@
 
 /**
  * @author xxm
- * @date 2022/7/17
+ * @since 2022/7/17
  */
 @Slf4j
 @Repository
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateMapper.java
new file mode 100644
index 000000000..6cafda229
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/dao/WeChatTemplateMapper.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.starter.wechat.core.notice.dao;
+
+import cn.bootx.platform.starter.wechat.core.notice.entity.WeChatTemplate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xxm
+ * @since 2022/7/17
+ */
+@Mapper
+public interface WeChatTemplateMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/entity/WeChatTemplate.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/entity/WeChatTemplate.java
similarity index 76%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/entity/WeChatTemplate.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/entity/WeChatTemplate.java
index 82d01e460..54b835f8a 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/entity/WeChatTemplate.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/entity/WeChatTemplate.java
@@ -1,12 +1,12 @@
-package cn.bootx.starter.wechat.core.notice.entity;
+package cn.bootx.platform.starter.wechat.core.notice.entity;
 
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpDelEntity;
+import cn.bootx.platform.starter.wechat.core.notice.convert.WeChatTemplateConvert;
+import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam;
+import cn.bootx.platform.common.core.annotation.BigField;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpDelEntity;
 import com.baomidou.mybatisplus.annotation.TableName;
-import cn.bootx.starter.wechat.dto.notice.WeChatTemplateDto;
-import cn.bootx.starter.wechat.param.notice.WeChatTemplateParam;
-import cn.bootx.starter.wechat.core.notice.convert.WeChatTemplateConvert;
+import cn.bootx.platform.starter.wechat.dto.notice.WeChatTemplateDto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -18,7 +18,7 @@
  * 微信消息模板
  *
  * @author xxm
- * @date 2022-08-03
+ * @since 2022-08-03
  */
 @FieldNameConstants
 @EqualsAndHashCode(callSuper = true)
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WeChatTemplateService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WeChatTemplateService.java
similarity index 80%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WeChatTemplateService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WeChatTemplateService.java
index a11d9da31..b91c75074 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WeChatTemplateService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WeChatTemplateService.java
@@ -1,18 +1,18 @@
-package cn.bootx.starter.wechat.core.notice.service;
+package cn.bootx.platform.starter.wechat.core.notice.service;
 
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ResultConvertUtil;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.common.websocket.entity.WsRes;
-import cn.bootx.common.websocket.service.UserWsNoticeService;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.wechat.core.notice.dao.WeChatTemplateManager;
-import cn.bootx.starter.wechat.core.notice.entity.WeChatTemplate;
-import cn.bootx.starter.wechat.dto.notice.WeChatTemplateDto;
-import cn.bootx.starter.wechat.param.notice.WeChatTemplateParam;
+import cn.bootx.platform.common.websocket.entity.WsRes;
+import cn.bootx.platform.common.websocket.service.UserWsNoticeService;
+import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ResultConvertUtil;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.auth.util.SecurityUtil;
+import cn.bootx.platform.starter.wechat.core.notice.dao.WeChatTemplateManager;
+import cn.bootx.platform.starter.wechat.core.notice.entity.WeChatTemplate;
+import cn.bootx.platform.starter.wechat.dto.notice.WeChatTemplateDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.util.StrUtil;
@@ -33,7 +33,7 @@
  * 微信消息模板
  *
  * @author xxm
- * @date 2022/7/15
+ * @since 2022/7/15
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WechatNoticeService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WechatNoticeService.java
similarity index 83%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WechatNoticeService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WechatNoticeService.java
index 4124e14b3..83eae983f 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/service/WechatNoticeService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/notice/service/WechatNoticeService.java
@@ -1,9 +1,9 @@
-package cn.bootx.starter.wechat.core.notice.service;
+package cn.bootx.platform.starter.wechat.core.notice.service;
 
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.dto.KeyValue;
-import cn.bootx.starter.wechat.core.notice.dao.WeChatTemplateManager;
-import cn.bootx.starter.wechat.core.notice.entity.WeChatTemplate;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.dto.KeyValue;
+import cn.bootx.platform.starter.wechat.core.notice.dao.WeChatTemplateManager;
+import cn.bootx.platform.starter.wechat.core.notice.entity.WeChatTemplate;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -20,7 +20,7 @@
  * 微信消息通知功能
  *
  * @author xxm
- * @date 2022/7/15
+ * @since 2022/7/15
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/portal/service/WeChatPortalService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/portal/service/WeChatPortalService.java
similarity index 94%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/portal/service/WeChatPortalService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/portal/service/WeChatPortalService.java
index 4b1256d09..6b8d7c233 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/portal/service/WeChatPortalService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/portal/service/WeChatPortalService.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.core.portal.service;
+package cn.bootx.platform.starter.wechat.core.portal.service;
 
-import cn.bootx.common.core.exception.ValidationFailedException;
+import cn.bootx.platform.common.core.exception.ValidationFailedException;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
  * 微信门户处理
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/convert/WechatFansConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/convert/WechatFansConvert.java
new file mode 100644
index 000000000..125f46864
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/convert/WechatFansConvert.java
@@ -0,0 +1,24 @@
+package cn.bootx.platform.starter.wechat.core.user.convert;
+
+import cn.bootx.platform.starter.wechat.param.user.WechatFansParam;
+import cn.bootx.platform.starter.wechat.core.user.entity.WechatFans;
+import cn.bootx.platform.starter.wechat.dto.user.WechatFansDto;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 微信公众号粉丝
+ *
+ * @author xxm
+ * @since 2022-07-16
+ */
+@Mapper
+public interface WechatFansConvert {
+
+    WechatFansConvert CONVERT = Mappers.getMapper(WechatFansConvert.class);
+
+    WechatFans convert(WechatFansParam in);
+
+    WechatFansDto convert(WechatFans in);
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansManager.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansManager.java
new file mode 100644
index 000000000..e526a91bb
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansManager.java
@@ -0,0 +1,45 @@
+package cn.bootx.platform.starter.wechat.core.user.dao;
+
+import cn.bootx.platform.starter.wechat.core.user.entity.WechatFans;
+import cn.bootx.platform.starter.wechat.param.user.WechatFansParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+/**
+ * 微信公众号粉丝
+ *
+ * @author xxm
+ * @since 2022-07-16
+ */
+@Repository
+@RequiredArgsConstructor
+public class WechatFansManager extends BaseManager {
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam, WechatFansParam param) {
+        Page mpPage = MpUtil.getMpPage(pageParam, WechatFans.class);
+        return lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage);
+    }
+
+    /**
+     * 获取最新的一条
+     */
+    public Optional findLatest() {
+        Page mpPage = new Page<>(0, 1);
+        Page fansPage = this.lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage);
+        if (fansPage.getTotal() > 0) {
+            return Optional.of(fansPage.getRecords().get(0));
+        }
+        return Optional.empty();
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansMapper.java
new file mode 100644
index 000000000..fcea7f9e7
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/dao/WechatFansMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.starter.wechat.core.user.dao;
+
+import cn.bootx.platform.starter.wechat.core.user.entity.WechatFans;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 微信公众号粉丝
+ *
+ * @author xxm
+ * @since 2022-07-16
+ */
+@Mapper
+public interface WechatFansMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/entity/WechatFans.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/entity/WechatFans.java
new file mode 100644
index 000000000..ce1a61eac
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/entity/WechatFans.java
@@ -0,0 +1,56 @@
+package cn.bootx.platform.starter.wechat.core.user.entity;
+
+import cn.bootx.platform.starter.wechat.core.user.convert.WechatFansConvert;
+import cn.bootx.platform.starter.wechat.param.user.WechatFansParam;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.starter.wechat.dto.user.WechatFansDto;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * 微信粉丝
+ *
+ * @author xxm
+ * @since 2022/7/15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("starter_wx_fans")
+public class WechatFans extends MpIdEntity implements EntityBaseFunction {
+
+    /** 关联OpenId */
+    private String openid;
+
+    /** unionId */
+    private String unionId;
+
+    /** 订阅状态,未关注/已关注 */
+    private Boolean subscribe;
+
+    /** 订阅时间 */
+    private LocalDateTime subscribeTime;
+
+    /** 语言 */
+    private String language;
+
+    /** 备注 */
+    private String remark;
+
+    /** 创建对象 */
+    public static WechatFans init(WechatFansParam in) {
+        return WechatFansConvert.CONVERT.convert(in);
+    }
+
+    /** 转换成dto */
+    @Override
+    public WechatFansDto toDto() {
+        return WechatFansConvert.CONVERT.convert(this);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/service/WeChatUserService.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/service/WeChatUserService.java
similarity index 90%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/service/WeChatUserService.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/service/WeChatUserService.java
index d08ee4b53..7da1a592c 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/service/WeChatUserService.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/user/service/WeChatUserService.java
@@ -1,8 +1,8 @@
-package cn.bootx.starter.wechat.core.user.service;
+package cn.bootx.platform.starter.wechat.core.user.service;
 
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.LocalDateTimeUtil;
-import cn.bootx.starter.wechat.core.user.entity.WechatFans;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
+import cn.bootx.platform.starter.wechat.core.user.entity.WechatFans;
 import cn.hutool.core.collection.CollUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -23,7 +23,7 @@
  * 微信用户相关接口 (获取不到详细信息了)
  *
  * @author xxm
- * @date 2022/7/15
+ * @since 2022/7/15
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/article/WeChatArticleDto.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/article/WeChatArticleDto.java
similarity index 94%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/article/WeChatArticleDto.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/article/WeChatArticleDto.java
index 2734d6763..c7b145a7d 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/article/WeChatArticleDto.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/article/WeChatArticleDto.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.dto.article;
+package cn.bootx.platform.starter.wechat.dto.article;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
@@ -15,7 +15,7 @@
  * 微信文章
  *
  * @author xxm
- * @date 2022/8/12
+ * @since 2022/8/12
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/login/WeChatLoginQrCode.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/login/WeChatLoginQrCode.java
similarity index 86%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/login/WeChatLoginQrCode.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/login/WeChatLoginQrCode.java
index 41a093cc1..adab6d5ff 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/login/WeChatLoginQrCode.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/login/WeChatLoginQrCode.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.dto.login;
+package cn.bootx.platform.starter.wechat.dto.login;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -8,7 +8,7 @@
 
 /**
  * @author xxm
- * @date 2022/8/4
+ * @since 2022/8/4
  */
 @Data
 @AllArgsConstructor
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/media/WeChatMediaDto.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/media/WeChatMediaDto.java
similarity index 87%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/media/WeChatMediaDto.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/media/WeChatMediaDto.java
index a959d5b40..850a30286 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/media/WeChatMediaDto.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/media/WeChatMediaDto.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.dto.media;
+package cn.bootx.platform.starter.wechat.dto.media;
 
-import cn.bootx.common.core.util.LocalDateTimeUtil;
+import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -10,7 +10,7 @@
 
 /**
  * @author xxm
- * @date 2022/8/12
+ * @since 2022/8/12
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/menu/WeChatMenuDto.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/menu/WeChatMenuDto.java
similarity index 75%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/menu/WeChatMenuDto.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/menu/WeChatMenuDto.java
index 440e486f2..e9a93a59e 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/menu/WeChatMenuDto.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/menu/WeChatMenuDto.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wechat.dto.menu;
+package cn.bootx.platform.starter.wechat.dto.menu;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
-import cn.bootx.starter.wechat.core.menu.domin.WeChatMenuInfo;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -11,7 +11,7 @@
  * 微信自定义菜单
  *
  * @author xxm
- * @date 2022-08-08
+ * @since 2022-08-08
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -31,4 +31,4 @@ public class WeChatMenuDto extends BaseDto {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/notice/WeChatTemplateDto.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/notice/WeChatTemplateDto.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/notice/WeChatTemplateDto.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/notice/WeChatTemplateDto.java
index 70eb577c9..c2a42b8d7 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/notice/WeChatTemplateDto.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/notice/WeChatTemplateDto.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.dto.notice;
+package cn.bootx.platform.starter.wechat.dto.notice;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -10,7 +10,7 @@
  * 微信消息模板
  *
  * @author xxm
- * @date 2022-08-03
+ * @since 2022-08-03
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -45,4 +45,4 @@ public class WeChatTemplateDto extends BaseDto {
     @Schema(description = "示例")
     private String example;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/user/WechatFansDto.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/user/WechatFansDto.java
similarity index 89%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/user/WechatFansDto.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/user/WechatFansDto.java
index c21c4f5c5..a0024f9ef 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/dto/user/WechatFansDto.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/dto/user/WechatFansDto.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.dto.user;
+package cn.bootx.platform.starter.wechat.dto.user;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -12,7 +12,7 @@
  * 微信公众号粉丝
  *
  * @author xxm
- * @date 2022-07-16
+ * @since 2022-07-16
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -53,4 +53,4 @@ public class WechatFansDto extends BaseDto {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/event/WeChatQrScanEvent.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/event/WeChatQrScanEvent.java
similarity index 87%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/event/WeChatQrScanEvent.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/event/WeChatQrScanEvent.java
index 5144db0e3..b055a405a 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/event/WeChatQrScanEvent.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/event/WeChatQrScanEvent.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.event;
+package cn.bootx.platform.starter.wechat.event;
 
 import lombok.Getter;
 import org.springframework.context.ApplicationEvent;
@@ -7,7 +7,7 @@
  * 微信扫码关注事件
  *
  * @author xxm
- * @date 2022/8/4
+ * @since 2022/8/4
  */
 @Getter
 public class WeChatQrScanEvent extends ApplicationEvent {
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMpMessageHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMpMessageHandler.java
similarity index 89%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMpMessageHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMpMessageHandler.java
index d66900372..c49f32a55 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMpMessageHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMpMessageHandler.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.mp.api.WxMpMessageHandler;
@@ -8,7 +8,7 @@
  * 处理微信推送消息的处理器接口 (进行微封装)
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 public interface WeChatMpMessageHandler extends WxMpMessageHandler {
 
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMsgHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMsgHandler.java
similarity index 94%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMsgHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMsgHandler.java
index c9d4cbfa3..e2aa40b40 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatMsgHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatMsgHandler.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -16,7 +16,7 @@
  * 微信接受文本消息处理
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatQrScanHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatQrScanHandler.java
similarity index 89%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatQrScanHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatQrScanHandler.java
index 7cf015b96..e7df4b35c 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatQrScanHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatQrScanHandler.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
-import cn.bootx.starter.wechat.core.login.service.WeChatQrLoginService;
-import cn.bootx.starter.wechat.handler.qrscene.WeChatQrSceneMsgHandler;
+import cn.bootx.platform.starter.wechat.handler.qrscene.WeChatQrSceneMsgHandler;
+import cn.bootx.platform.starter.wechat.core.login.service.WeChatQrLoginService;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -21,7 +21,7 @@
  * 微信扫码事件
  *
  * @author xxm
- * @date 2022/8/4
+ * @since 2022/8/4
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatSubscribeHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatSubscribeHandler.java
similarity index 89%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatSubscribeHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatSubscribeHandler.java
index 8aa39ce13..920185527 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatSubscribeHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatSubscribeHandler.java
@@ -1,7 +1,6 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
-import cn.bootx.starter.wechat.core.login.service.WeChatQrLoginService;
-import cn.bootx.starter.wechat.handler.qrscene.WeChatQrSceneMsgHandler;
+import cn.bootx.platform.starter.wechat.handler.qrscene.WeChatQrSceneMsgHandler;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -21,7 +20,7 @@
  * 新增关注订阅消息
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatUnSubscribeHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatUnSubscribeHandler.java
similarity index 93%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatUnSubscribeHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatUnSubscribeHandler.java
index bf9c1743d..e1cd0b82b 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WeChatUnSubscribeHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WeChatUnSubscribeHandler.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -15,7 +15,7 @@
  * 用户取消关注订阅消息
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WechatMenuHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WechatMenuHandler.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WechatMenuHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WechatMenuHandler.java
index 48a3a6c04..d3ebe7a17 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/WechatMenuHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/WechatMenuHandler.java
@@ -1,9 +1,8 @@
-package cn.bootx.starter.wechat.handler;
+package cn.bootx.platform.starter.wechat.handler;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.session.WxSessionManager;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
@@ -16,7 +15,7 @@
  * 菜单点击事件
  *
  * @author xxm
- * @date 2022/7/16
+ * @since 2022/7/16
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java
similarity index 82%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java
index 6cd2fa789..5e9b012a4 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrLoginHandler.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.handler.qrscene;
+package cn.bootx.platform.starter.wechat.handler.qrscene;
 
-import cn.bootx.starter.wechat.core.login.service.WeChatQrLoginService;
+import cn.bootx.platform.starter.wechat.core.login.service.WeChatQrLoginService;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -13,14 +13,14 @@
 
 import java.util.Map;
 
-import static cn.bootx.starter.wechat.code.WeChatCode.EVENT_KEY_QRSCENE;
-import static cn.bootx.starter.wechat.code.WeChatCode.QRSCENE_LOGIN;
+import static cn.bootx.platform.starter.wechat.code.WeChatCode.EVENT_KEY_QRSCENE;
+import static cn.bootx.platform.starter.wechat.code.WeChatCode.QRSCENE_LOGIN;
 
 /**
  * 微信扫码登录
  *
  * @author xxm
- * @date 2023/3/21
+ * @since 2023/3/21
  */
 @Slf4j
 @Component
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java
similarity index 88%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java
index 569b0e285..8bd427f38 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/handler/qrscene/WeChatQrSceneMsgHandler.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.handler.qrscene;
+package cn.bootx.platform.starter.wechat.handler.qrscene;
 
 import me.chanjar.weixin.common.session.WxSessionManager;
 import me.chanjar.weixin.mp.api.WxMpService;
@@ -11,7 +11,7 @@
  * 微信扫码消息处理
  *
  * @author xxm
- * @date 2023/3/21
+ * @since 2023/3/21
  */
 public interface WeChatQrSceneMsgHandler {
 
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/menu/WeChatMenuParam.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/menu/WeChatMenuParam.java
similarity index 80%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/menu/WeChatMenuParam.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/menu/WeChatMenuParam.java
index ca95df3da..22b950303 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/menu/WeChatMenuParam.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/menu/WeChatMenuParam.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wechat.param.menu;
+package cn.bootx.platform.starter.wechat.param.menu;
 
-import cn.bootx.starter.wechat.core.menu.domin.WeChatMenuInfo;
+import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -9,7 +9,7 @@
  * 微信自定义菜单
  *
  * @author xxm
- * @date 2022-08-08
+ * @since 2022-08-08
  */
 @Data
 @Schema(title = "微信自定义菜单")
@@ -31,4 +31,4 @@ public class WeChatMenuParam {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/notice/WeChatTemplateParam.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/notice/WeChatTemplateParam.java
similarity index 92%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/notice/WeChatTemplateParam.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/notice/WeChatTemplateParam.java
index ad578b0fc..53bfe8e9e 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/notice/WeChatTemplateParam.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/notice/WeChatTemplateParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.param.notice;
+package cn.bootx.platform.starter.wechat.param.notice;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -8,7 +8,7 @@
  * 微信消息模板
  *
  * @author xxm
- * @date 2022-08-03
+ * @since 2022-08-03
  */
 @Data
 @Schema(title = "微信消息模板")
@@ -45,4 +45,4 @@ public class WeChatTemplateParam {
     @Schema(description = "示例")
     private String example;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/portal/WeChatPortalParam.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/portal/WeChatPortalParam.java
new file mode 100644
index 000000000..8e3aec90b
--- /dev/null
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/portal/WeChatPortalParam.java
@@ -0,0 +1,11 @@
+package cn.bootx.platform.starter.wechat.param.portal;
+
+/**
+ * 微信返回的消息入参
+ *
+ * @author xxm
+ * @since 2022/7/16
+ */
+public class WeChatPortalParam {
+
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/user/WechatFansParam.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/user/WechatFansParam.java
similarity index 93%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/user/WechatFansParam.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/user/WechatFansParam.java
index cf8f34e1c..17b198b9e 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/user/WechatFansParam.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/param/user/WechatFansParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.param.user;
+package cn.bootx.platform.starter.wechat.param.user;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -10,7 +10,7 @@
  * 微信公众号粉丝
  *
  * @author xxm
- * @date 2022-07-16
+ * @since 2022-07-16
  */
 @Data
 @Schema(title = "微信公众号粉丝")
@@ -53,4 +53,4 @@ public class WechatFansParam {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/util/WeChatUtil.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/util/WeChatUtil.java
similarity index 83%
rename from bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/util/WeChatUtil.java
rename to bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/util/WeChatUtil.java
index 9dfe0131f..9995319cc 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/util/WeChatUtil.java
+++ b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/util/WeChatUtil.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wechat.util;
+package cn.bootx.platform.starter.wechat.util;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.experimental.UtilityClass;
@@ -7,7 +7,7 @@
  * 微信工具类
  *
  * @author xxm
- * @date 2022/8/5
+ * @since 2022/8/5
  */
 @UtilityClass
 public class WeChatUtil {
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatConfiguration.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatConfiguration.java
deleted file mode 100644
index 95509e98d..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatConfiguration.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.bootx.starter.wechat.configuration;
-
-import lombok.RequiredArgsConstructor;
-import me.chanjar.weixin.mp.api.*;
-import me.chanjar.weixin.mp.api.impl.*;
-import me.chanjar.weixin.mp.config.WxMpConfigStorage;
-import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 微信配置
- *
- * @author xxm
- * @date 2022/7/15
- */
-@Configuration
-@RequiredArgsConstructor
-public class WeChatConfiguration {
-
-    private final WeChatProperties weChatProperties;
-
-    /**
-     * 微信公众号APIService
-     */
-    @Bean
-    public WxMpService wxMpService(WxMpConfigStorage wxMpConfigStorage) {
-        WxMpService wxMpService = new WxMpServiceImpl();
-        wxMpService.setWxMpConfigStorage(wxMpConfigStorage);
-        return wxMpService;
-    }
-
-    /**
-     * 微信配置
-     */
-    @Bean
-    public WxMpConfigStorage wxMpConfigStorage() {
-        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
-        config.setAppId(weChatProperties.getAppId()); // 设置微信公众号的appid
-        config.setSecret(weChatProperties.getAppSecret()); // 设置微信公众号的app corpSecret
-        config.setToken(weChatProperties.getToken()); // 设置微信公众号的Token
-        config.setAesKey(weChatProperties.getEncodingAesKey()); // 消息加解密密钥
-        return config;
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatProperties.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatProperties.java
deleted file mode 100644
index 409a27032..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/configuration/WeChatProperties.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.wechat.configuration;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * 微信公众平台配置
- *
- * @author xxm
- * @date 2022/7/15
- */
-@Getter
-@Setter
-@ConfigurationProperties("bootx.starter.third.wechat")
-public class WeChatProperties {
-
-    /** AppKey */
-    private String appId;
-
-    /** AppSecret */
-    private String appSecret;
-
-    /** token */
-    private String token;
-
-    /** 消息加解密密钥 */
-    private String encodingAesKey;
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatArticleController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatArticleController.java
deleted file mode 100644
index e33522c13..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatArticleController.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.bootx.starter.wechat.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.wechat.core.article.service.WeChatArticleService;
-import cn.bootx.starter.wechat.dto.article.WeChatArticleDto;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xxm
- * @date 2022/8/11
- */
-@Tag(name = "微信文章管理")
-@RestController
-@RequestMapping("/wechat/article")
-@RequiredArgsConstructor
-public class WeChatArticleController {
-
-    private final WeChatArticleService weChatArticleService;
-
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(PageParam pageParam) {
-        return Res.ok(weChatArticleService.page(pageParam));
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatQrLoginController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatQrLoginController.java
deleted file mode 100644
index ade053053..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatQrLoginController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.starter.wechat.controller;
-
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.starter.wechat.core.login.service.WeChatQrLoginService;
-import cn.bootx.starter.wechat.dto.login.WeChatLoginQrCode;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-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;
-
-/**
- * 微信
- *
- * @author xxm
- * @date 2022/8/4
- */
-@IgnoreAuth
-@Tag(name = "微信扫码登录")
-@RestController
-@RequestMapping("/token/wechat/qr")
-@RequiredArgsConstructor
-public class WeChatQrLoginController {
-
-    private final WeChatQrLoginService weChatQrLoginService;
-
-    @Operation(summary = "申请登录用QR码")
-    @PostMapping("/applyQrCode")
-    public ResResult applyQrCode() {
-         return Res.ok(weChatQrLoginService.applyQrCode());
-//        return Res.ok(new WeChatLoginQrCode().setQrCodeKey("123").setQrCodeUrl("xxkl"));
-    }
-
-    @Operation(summary = "获取扫码状态")
-    @GetMapping("/getStatus")
-    public ResResult getStatus(String qrCodeKey) {
-         return Res.ok(weChatQrLoginService.getStatus(qrCodeKey));
-//        return Res.ok("wait");
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatTemplateController.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatTemplateController.java
deleted file mode 100644
index 86f49f788..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/controller/WeChatTemplateController.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package cn.bootx.starter.wechat.controller;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.bootx.starter.wechat.core.notice.service.WeChatTemplateService;
-import cn.bootx.starter.wechat.dto.notice.WeChatTemplateDto;
-import cn.bootx.starter.wechat.param.notice.WeChatTemplateParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author xxm
- * @date 2022/7/16
- */
-@Tag(name = "微信模板消息")
-@RestController
-@RequestMapping("/wechat/template")
-@RequiredArgsConstructor
-public class WeChatTemplateController {
-
-    private final WeChatTemplateService weChatTemplateService;
-
-    @Operation(summary = "修改")
-    @PostMapping(value = "/update")
-    public ResResult update(@RequestBody WeChatTemplateParam param) {
-        weChatTemplateService.update(param);
-        return Res.ok();
-    }
-
-    @Operation(summary = "通过ID查询")
-    @GetMapping(value = "/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(weChatTemplateService.findById(id));
-    }
-
-    @Operation(summary = "分页查询")
-    @GetMapping(value = "/page")
-    public ResResult> page(PageParam pageParam, WeChatTemplateParam weChatTemplateParam) {
-        return Res.ok(weChatTemplateService.page(pageParam, weChatTemplateParam));
-    }
-
-    @Operation(summary = "编码是否被使用(不包含自己)")
-    @GetMapping("/existsByCodeNotId")
-    public ResResult existsByCode(String code, Long id) {
-        return Res.ok(weChatTemplateService.existsByCode(code, id));
-    }
-
-    @Operation(summary = "同步消息模板数据")
-    @PostMapping("/sync")
-    public ResResult sync() {
-        // 为了获取用户生效, 测试用
-        SecurityUtil.getUserId();
-        weChatTemplateService.sync();
-        return Res.ok();
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/convert/WeChatMenuConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/convert/WeChatMenuConvert.java
deleted file mode 100644
index 06552d3b8..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/convert/WeChatMenuConvert.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.starter.wechat.core.menu.convert;
-
-import cn.bootx.starter.wechat.core.menu.domin.WeChatMenuInfo;
-import cn.bootx.starter.wechat.core.menu.entity.WeChatMenu;
-import cn.bootx.starter.wechat.dto.menu.WeChatMenuDto;
-import cn.bootx.starter.wechat.param.menu.WeChatMenuParam;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 微信自定义菜单
- *
- * @author xxm
- * @date 2022-08-08
- */
-@Mapper
-public interface WeChatMenuConvert {
-
-    WeChatMenuConvert CONVERT = Mappers.getMapper(WeChatMenuConvert.class);
-
-    WeChatMenu convert(WeChatMenuParam in);
-
-    WeChatMenuDto convert(WeChatMenu in);
-
-    WeChatMenuInfo convert(WxMenu in);
-
-    WxMenu convert(WeChatMenuInfo in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuManager.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuManager.java
deleted file mode 100644
index da11b7294..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cn.bootx.starter.wechat.core.menu.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wechat.core.menu.entity.WeChatMenu;
-import cn.bootx.starter.wechat.param.menu.WeChatMenuParam;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-/**
- * 微信自定义菜单
- *
- * @author xxm
- * @date 2022-08-08
- */
-@Repository
-@RequiredArgsConstructor
-public class WeChatMenuManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, WeChatMenuParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, WeChatMenu.class);
-        return lambdaQuery().select(this.getEntityClass(), MpUtil::excludeBigField)
-            .like(StrUtil.isNotBlank(param.getName()), WeChatMenu::getName, param.getName())
-            .orderByDesc(MpIdEntity::getId)
-            .page(mpPage);
-    }
-
-    /**
-     * 清除其他发布状态
-     */
-    public void clearPublish() {
-        lambdaUpdate().eq(WeChatMenu::isPublish, true).set(WeChatMenu::isPublish, false).update();
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuMapper.java
deleted file mode 100644
index 49a3393e4..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/dao/WeChatMenuMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.wechat.core.menu.dao;
-
-import cn.bootx.starter.wechat.core.menu.entity.WeChatMenu;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 微信自定义菜单
- *
- * @author xxm
- * @date 2022-08-08
- */
-@Mapper
-public interface WeChatMenuMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/entity/WeChatMenu.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/entity/WeChatMenu.java
deleted file mode 100644
index ce6187085..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/menu/entity/WeChatMenu.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cn.bootx.starter.wechat.core.menu.entity;
-
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.wechat.core.menu.convert.WeChatMenuConvert;
-import cn.bootx.starter.wechat.core.menu.domin.WeChatMenuInfo;
-import cn.bootx.starter.wechat.dto.menu.WeChatMenuDto;
-import cn.bootx.starter.wechat.param.menu.WeChatMenuParam;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 微信自定义菜单
- *
- * @author xxm
- * @date 2022-08-08
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName(value = "starter_wx_menu", autoResultMap = true)
-public class WeChatMenu extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 名称 */
-    private String name;
-
-    /** 菜单信息 */
-    @BigField
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private WeChatMenuInfo menuInfo;
-
-    /** 是否发布 */
-    private boolean publish;
-
-    /** 备注 */
-    private String remark;
-
-    /** 创建对象 */
-    public static WeChatMenu init(WeChatMenuParam in) {
-        return WeChatMenuConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public WeChatMenuDto toDto() {
-        return WeChatMenuConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/convert/WeChatTemplateConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/convert/WeChatTemplateConvert.java
deleted file mode 100644
index dc26cebb4..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/convert/WeChatTemplateConvert.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cn.bootx.starter.wechat.core.notice.convert;
-
-import cn.bootx.starter.wechat.core.notice.entity.WeChatTemplate;
-import cn.bootx.starter.wechat.dto.notice.WeChatTemplateDto;
-import cn.bootx.starter.wechat.param.notice.WeChatTemplateParam;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.factory.Mappers;
-
-/**
- * @author xxm
- * @date 2022/7/17
- */
-@Mapper
-public interface WeChatTemplateConvert {
-
-    WeChatTemplateConvert CONVERT = Mappers.getMapper(WeChatTemplateConvert.class);
-
-    @Mapping(source = "title", target = "name")
-    WeChatTemplate convert(WxMpTemplate in);
-
-    WeChatTemplate convert(WeChatTemplateParam in);
-
-    WeChatTemplateDto convert(WeChatTemplate in);
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateMapper.java
deleted file mode 100644
index d899b0bd7..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/notice/dao/WeChatTemplateMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.starter.wechat.core.notice.dao;
-
-import cn.bootx.starter.wechat.core.notice.entity.WeChatTemplate;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2022/7/17
- */
-@Mapper
-public interface WeChatTemplateMapper extends BaseMapper {
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/convert/WechatFansConvert.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/convert/WechatFansConvert.java
deleted file mode 100644
index 56ac606ab..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/convert/WechatFansConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.starter.wechat.core.user.convert;
-
-import cn.bootx.starter.wechat.core.user.entity.WechatFans;
-import cn.bootx.starter.wechat.dto.user.WechatFansDto;
-import cn.bootx.starter.wechat.param.user.WechatFansParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 微信公众号粉丝
- *
- * @author xxm
- * @date 2022-07-16
- */
-@Mapper
-public interface WechatFansConvert {
-
-    WechatFansConvert CONVERT = Mappers.getMapper(WechatFansConvert.class);
-
-    WechatFans convert(WechatFansParam in);
-
-    WechatFansDto convert(WechatFans in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansManager.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansManager.java
deleted file mode 100644
index 495005064..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.starter.wechat.core.user.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wechat.core.user.entity.WechatFans;
-import cn.bootx.starter.wechat.param.user.WechatFansParam;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-
-/**
- * 微信公众号粉丝
- *
- * @author xxm
- * @date 2022-07-16
- */
-@Repository
-@RequiredArgsConstructor
-public class WechatFansManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, WechatFansParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, WechatFans.class);
-        return lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage);
-    }
-
-    /**
-     * 获取最新的一条
-     */
-    public Optional findLatest() {
-        Page mpPage = new Page<>(0, 1);
-        Page fansPage = this.lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage);
-        if (fansPage.getTotal() > 0) {
-            return Optional.of(fansPage.getRecords().get(0));
-        }
-        return Optional.empty();
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansMapper.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansMapper.java
deleted file mode 100644
index 275764a20..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/dao/WechatFansMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.wechat.core.user.dao;
-
-import cn.bootx.starter.wechat.core.user.entity.WechatFans;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 微信公众号粉丝
- *
- * @author xxm
- * @date 2022-07-16
- */
-@Mapper
-public interface WechatFansMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/entity/WechatFans.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/entity/WechatFans.java
deleted file mode 100644
index 37db18493..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/core/user/entity/WechatFans.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package cn.bootx.starter.wechat.core.user.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.starter.wechat.core.user.convert.WechatFansConvert;
-import cn.bootx.starter.wechat.dto.user.WechatFansDto;
-import cn.bootx.starter.wechat.param.user.WechatFansParam;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.time.LocalDateTime;
-
-/**
- * 微信粉丝
- *
- * @author xxm
- * @date 2022/7/15
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("starter_wx_fans")
-public class WechatFans extends MpIdEntity implements EntityBaseFunction {
-
-    /** 关联OpenId */
-    private String openid;
-
-    /** unionId */
-    private String unionId;
-
-    /** 订阅状态,未关注/已关注 */
-    private Boolean subscribe;
-
-    /** 订阅时间 */
-    private LocalDateTime subscribeTime;
-
-    /** 语言 */
-    private String language;
-
-    /** 备注 */
-    private String remark;
-
-    /** 创建对象 */
-    public static WechatFans init(WechatFansParam in) {
-        return WechatFansConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public WechatFansDto toDto() {
-        return WechatFansConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/portal/WeChatPortalParam.java b/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/portal/WeChatPortalParam.java
deleted file mode 100644
index 1a9714d90..000000000
--- a/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/starter/wechat/param/portal/WeChatPortalParam.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package cn.bootx.starter.wechat.param.portal;
-
-/**
- * 微信返回的消息入参
- *
- * @author xxm
- * @date 2022/7/16
- */
-public class WeChatPortalParam {
-
-}
diff --git a/bootx-common-starters/common-starter-wechat/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-wechat/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 6954d87fd..21bbc2139 100644
--- a/bootx-common-starters/common-starter-wechat/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-common-starters/common-starter-wechat/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.wechat.WeChatAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.starter.wechat.WeChatAutoConfiguration
diff --git a/bootx-common-starters/common-starter-wecom/pom.xml b/bootx-common-starters/common-starter-wecom/pom.xml
index 028b74b01..95b8d19fb 100644
--- a/bootx-common-starters/common-starter-wecom/pom.xml
+++ b/bootx-common-starters/common-starter-wecom/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-common-starters
-        1.2.3
+        1.3.6.2
     
     4.0.0
     jar
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/WeComAutoConfiguration.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/WeComAutoConfiguration.java
similarity index 88%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/WeComAutoConfiguration.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/WeComAutoConfiguration.java
index 333b399ce..1f2b4f742 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/WeComAutoConfiguration.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/WeComAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wecom;
+package cn.bootx.platform.starter.wecom;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -10,7 +10,7 @@
  * 企业微信
  *
  * @author xxm
- * @date 2022/7/22
+ * @since 2022/7/22
  */
 @ComponentScan
 @ConfigurationPropertiesScan
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/code/WeComCode.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/code/WeComCode.java
similarity index 92%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/code/WeComCode.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/code/WeComCode.java
index 0b15cd82f..802a2367f 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/code/WeComCode.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/code/WeComCode.java
@@ -1,10 +1,10 @@
-package cn.bootx.starter.wecom.code;
+package cn.bootx.platform.starter.wecom.code;
 
 /**
  * 企微常量
  *
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 public interface WeComCode {
 
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComConfiguration.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComConfiguration.java
similarity index 94%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComConfiguration.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComConfiguration.java
index ce4168c21..7eb779a16 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComConfiguration.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wecom.configuration;
+package cn.bootx.platform.starter.wecom.configuration;
 
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.cp.api.WxCpService;
@@ -10,7 +10,7 @@
 
 /**
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 @Configuration
 @RequiredArgsConstructor
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComProperties.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComProperties.java
similarity index 87%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComProperties.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComProperties.java
index ce89b59f3..d3ee837a1 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/configuration/WeComProperties.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/configuration/WeComProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wecom.configuration;
+package cn.bootx.platform.starter.wecom.configuration;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -8,7 +8,7 @@
  * 企业微信配置
  *
  * @author xxm
- * @date 2022/7/22
+ * @since 2022/7/22
  */
 @Getter
 @Setter
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/controller/WecomRobotConfigController.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/controller/WecomRobotConfigController.java
similarity index 80%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/controller/WecomRobotConfigController.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/controller/WecomRobotConfigController.java
index 48e311ecc..c0cd78d42 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/controller/WecomRobotConfigController.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/controller/WecomRobotConfigController.java
@@ -1,12 +1,12 @@
-package cn.bootx.starter.wecom.controller;
+package cn.bootx.platform.starter.wecom.controller;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.starter.wecom.core.robot.service.WecomRobotConfigService;
-import cn.bootx.starter.wecom.dto.robot.WecomRobotConfigDto;
-import cn.bootx.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.starter.wecom.core.robot.service.WecomRobotConfigService;
+import cn.bootx.platform.starter.wecom.dto.robot.WecomRobotConfigDto;
+import cn.bootx.platform.starter.wecom.param.robot.WecomRobotConfigParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -16,7 +16,7 @@
 
 /**
  * @author xxm
- * @date 2022/7/26
+ * @since 2022/7/26
  */
 @Tag(name = "企业微信机器人配置")
 @RestController
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java
new file mode 100644
index 000000000..d7ea241ad
--- /dev/null
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java
@@ -0,0 +1,5 @@
+package cn.bootx.platform.starter.wecom.core.notice.domain;
+
+public class WxCpRecallNoticeResult {
+
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java
similarity index 85%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java
index 9008a5685..6283acee1 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/executor/RecallNoticeRequestExecutor.java
@@ -1,6 +1,6 @@
-package cn.bootx.starter.wecom.core.notice.executor;
+package cn.bootx.platform.starter.wecom.core.notice.executor;
 
-import cn.bootx.common.jackson.util.JacksonUtil;
+import cn.bootx.platform.common.jackson.util.JacksonUtil;
 import cn.hutool.http.HttpUtil;
 import me.chanjar.weixin.common.enums.WxType;
 import me.chanjar.weixin.common.error.WxError;
@@ -12,13 +12,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static cn.bootx.starter.wecom.code.WeComCode.NOTICE_MSG_ID;
+import static cn.bootx.platform.starter.wecom.code.WeComCode.NOTICE_MSG_ID;
 
 /**
  * 消息撤回请求执行器.
  *
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 public class RecallNoticeRequestExecutor implements RequestExecutor {
 
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/service/WeComNoticeService.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/service/WeComNoticeService.java
similarity index 86%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/service/WeComNoticeService.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/service/WeComNoticeService.java
index 544b5f3d2..9c5f7c721 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/service/WeComNoticeService.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/notice/service/WeComNoticeService.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wecom.core.notice.service;
+package cn.bootx.platform.starter.wecom.core.notice.service;
 
-import cn.bootx.starter.wecom.configuration.WeComProperties;
-import cn.bootx.starter.wecom.core.notice.executor.RecallNoticeRequestExecutor;
+import cn.bootx.platform.starter.wecom.configuration.WeComProperties;
+import cn.bootx.platform.starter.wecom.core.notice.executor.RecallNoticeRequestExecutor;
 import cn.hutool.core.io.FileTypeUtil;
 import cn.hutool.core.io.IoUtil;
 import lombok.RequiredArgsConstructor;
@@ -18,13 +18,13 @@
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
-import static cn.bootx.starter.wecom.code.WeComCode.NOTICE_RECALL_URL;
+import static cn.bootx.platform.starter.wecom.code.WeComCode.NOTICE_RECALL_URL;
 
 /**
  * 企业微信消息发送
  *
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java
new file mode 100644
index 000000000..35d481ede
--- /dev/null
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java
@@ -0,0 +1,24 @@
+package cn.bootx.platform.starter.wecom.core.robot.convert;
+
+import cn.bootx.platform.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.starter.wecom.core.robot.entity.WecomRobotConfig;
+import cn.bootx.platform.starter.wecom.dto.robot.WecomRobotConfigDto;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 企业微信机器人配置
+ *
+ * @author bootx
+ * @since 2022-07-23
+ */
+@Mapper
+public interface WecomRobotConfigConvert {
+
+    WecomRobotConfigConvert CONVERT = Mappers.getMapper(WecomRobotConfigConvert.class);
+
+    WecomRobotConfig convert(WecomRobotConfigParam in);
+
+    WecomRobotConfigDto convert(WecomRobotConfig in);
+
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigManager.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigManager.java
similarity index 76%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigManager.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigManager.java
index 8b39aabef..f69bbd123 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigManager.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigManager.java
@@ -1,11 +1,11 @@
-package cn.bootx.starter.wecom.core.robot.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wecom.core.robot.entity.WecomRobotConfig;
-import cn.bootx.starter.wecom.param.robot.WecomRobotConfigParam;
+package cn.bootx.platform.starter.wecom.core.robot.dao;
+
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.wecom.core.robot.entity.WecomRobotConfig;
+import cn.bootx.platform.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -17,7 +17,7 @@
  * 企业微信机器人配置
  *
  * @author bootx
- * @date 2022-07-23
+ * @since 2022-07-23
  */
 @Repository
 @RequiredArgsConstructor
@@ -50,4 +50,4 @@ public Page page(PageParam pageParam, WecomRobotConfigParam pa
             .page(mpPage);
     }
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java
new file mode 100644
index 000000000..3eee2d08b
--- /dev/null
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.starter.wecom.core.robot.dao;
+
+import cn.bootx.platform.starter.wecom.core.robot.entity.WecomRobotConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 企业微信机器人配置
+ *
+ * @author bootx
+ * @since 2022-07-23
+ */
+@Mapper
+public interface WecomRobotConfigMapper extends BaseMapper {
+
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/domin/UploadMedia.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/domin/UploadMedia.java
similarity index 86%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/domin/UploadMedia.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/domin/UploadMedia.java
index f914805b5..8a4bb67d2 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/domin/UploadMedia.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/domin/UploadMedia.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wecom.core.robot.domin;
+package cn.bootx.platform.starter.wecom.core.robot.domin;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -10,7 +10,7 @@
  * 企微文件上传
  *
  * @author xxm
- * @date 2022/7/24
+ * @since 2022/7/24
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/entity/WecomRobotConfig.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/entity/WecomRobotConfig.java
new file mode 100644
index 000000000..b38199c7f
--- /dev/null
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/entity/WecomRobotConfig.java
@@ -0,0 +1,57 @@
+package cn.bootx.platform.starter.wecom.core.robot.entity;
+
+import cn.bootx.platform.starter.wecom.core.robot.convert.WecomRobotConfigConvert;
+import cn.bootx.platform.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.starter.wecom.code.WeComCode;
+import cn.bootx.platform.starter.wecom.dto.robot.WecomRobotConfigDto;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 企业微信机器人配置
+ *
+ * @author bootx
+ * @since 2022-07-23
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("starter_wecom_robot_config")
+@Accessors(chain = true)
+public class WecomRobotConfig extends MpBaseEntity implements EntityBaseFunction {
+
+    /** 名称 */
+    private String name;
+
+    /** 编号 */
+    private String code;
+
+    /** webhook地址的key */
+    private String webhookKey;
+
+    /** 备注 */
+    private String remark;
+
+    /**
+     * 获取webhook的地址
+     */
+    public String toWebhookUrl() {
+        return StrUtil.format(WeComCode.ROBOT_WEBHOOK_URL, webhookKey);
+    }
+
+    /** 创建对象 */
+    public static WecomRobotConfig init(WecomRobotConfigParam in) {
+        return WecomRobotConfigConvert.CONVERT.convert(in);
+    }
+
+    /** 转换成dto */
+    @Override
+    public WecomRobotConfigDto toDto() {
+        return WecomRobotConfigConvert.CONVERT.convert(this);
+    }
+
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java
similarity index 88%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java
index e56f753c5..b8abd006a 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/executor/RobotMediaFileUploadRequestExecutor.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wecom.core.robot.executor;
+package cn.bootx.platform.starter.wecom.core.robot.executor;
 
-import cn.bootx.starter.wecom.code.WeComCode;
-import cn.bootx.starter.wecom.core.robot.domin.UploadMedia;
+import cn.bootx.platform.starter.wecom.code.WeComCode;
+import cn.bootx.platform.starter.wecom.core.robot.domin.UploadMedia;
 import cn.hutool.http.HttpUtil;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
 import me.chanjar.weixin.common.enums.WxType;
@@ -18,7 +18,7 @@
  * 机器人文件素材上传
  *
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 public class RobotMediaFileUploadRequestExecutor implements RequestExecutor {
 
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WeComRobotNoticeService.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WeComRobotNoticeService.java
similarity index 90%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WeComRobotNoticeService.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WeComRobotNoticeService.java
index e6a533360..ee14630e5 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WeComRobotNoticeService.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WeComRobotNoticeService.java
@@ -1,10 +1,10 @@
-package cn.bootx.starter.wecom.core.robot.service;
+package cn.bootx.platform.starter.wecom.core.robot.service;
 
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.starter.wecom.core.robot.dao.WecomRobotConfigManager;
-import cn.bootx.starter.wecom.core.robot.domin.UploadMedia;
-import cn.bootx.starter.wecom.core.robot.entity.WecomRobotConfig;
-import cn.bootx.starter.wecom.core.robot.executor.RobotMediaFileUploadRequestExecutor;
+import cn.bootx.platform.starter.wecom.core.robot.executor.RobotMediaFileUploadRequestExecutor;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.starter.wecom.core.robot.dao.WecomRobotConfigManager;
+import cn.bootx.platform.starter.wecom.core.robot.domin.UploadMedia;
+import cn.bootx.platform.starter.wecom.core.robot.entity.WecomRobotConfig;
 import cn.hutool.core.io.FileTypeUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.io.file.FileNameUtil;
@@ -23,13 +23,13 @@
 import java.io.InputStream;
 import java.util.List;
 
-import static cn.bootx.starter.wecom.code.WeComCode.ROBOT_UPLOAD_URL;
+import static cn.bootx.platform.starter.wecom.code.WeComCode.ROBOT_UPLOAD_URL;
 
 /**
  * 企微机器人消息通知
  *
  * @author xxm
- * @date 2022/7/23
+ * @since 2022/7/23
  */
 @Slf4j
 @Service
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WecomRobotConfigService.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WecomRobotConfigService.java
similarity index 75%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WecomRobotConfigService.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WecomRobotConfigService.java
index d12f672cf..c29ab88ed 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/service/WecomRobotConfigService.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/core/robot/service/WecomRobotConfigService.java
@@ -1,14 +1,14 @@
-package cn.bootx.starter.wecom.core.robot.service;
+package cn.bootx.platform.starter.wecom.core.robot.service;
 
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ResultConvertUtil;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.starter.wecom.core.robot.dao.WecomRobotConfigManager;
-import cn.bootx.starter.wecom.core.robot.entity.WecomRobotConfig;
-import cn.bootx.starter.wecom.dto.robot.WecomRobotConfigDto;
-import cn.bootx.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.starter.wecom.param.robot.WecomRobotConfigParam;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ResultConvertUtil;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.starter.wecom.core.robot.dao.WecomRobotConfigManager;
+import cn.bootx.platform.starter.wecom.core.robot.entity.WecomRobotConfig;
+import cn.bootx.platform.starter.wecom.dto.robot.WecomRobotConfigDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import lombok.RequiredArgsConstructor;
@@ -21,7 +21,7 @@
  * 企业微信机器人配置
  *
  * @author bootx
- * @date 2022-07-23
+ * @since 2022-07-23
  */
 @Slf4j
 @Service
@@ -91,4 +91,4 @@ public boolean existsByCode(String code, Long id) {
         return robotConfigManager.existsByCode(code, id);
     }
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/dto/robot/WecomRobotConfigDto.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/dto/robot/WecomRobotConfigDto.java
similarity index 77%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/dto/robot/WecomRobotConfigDto.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/dto/robot/WecomRobotConfigDto.java
index 7a7b4e81e..caa743431 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/dto/robot/WecomRobotConfigDto.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/dto/robot/WecomRobotConfigDto.java
@@ -1,7 +1,7 @@
-package cn.bootx.starter.wecom.dto.robot;
+package cn.bootx.platform.starter.wecom.dto.robot;
 
-import cn.bootx.common.core.rest.dto.BaseDto;
-import cn.bootx.starter.data.perm.sensitive.SensitiveInfo;
+import cn.bootx.platform.common.core.rest.dto.BaseDto;
+import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -11,7 +11,7 @@
  * 企业微信机器人配置
  *
  * @author bootx
- * @date 2022-07-23
+ * @since 2022-07-23
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -32,4 +32,4 @@ public class WecomRobotConfigDto extends BaseDto {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/param/robot/WecomRobotConfigParam.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/param/robot/WecomRobotConfigParam.java
similarity index 89%
rename from bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/param/robot/WecomRobotConfigParam.java
rename to bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/param/robot/WecomRobotConfigParam.java
index 7426182da..6207c2c6b 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/param/robot/WecomRobotConfigParam.java
+++ b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/platform/starter/wecom/param/robot/WecomRobotConfigParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.starter.wecom.param.robot;
+package cn.bootx.platform.starter.wecom.param.robot;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -8,7 +8,7 @@
  * 企业微信机器人配置
  *
  * @author bootx
- * @date 2022-07-23
+ * @since 2022-07-23
  */
 @Data
 @Schema(title = "企业微信机器人配置")
@@ -30,4 +30,4 @@ public class WecomRobotConfigParam {
     @Schema(description = "备注")
     private String remark;
 
-}
\ No newline at end of file
+}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java
deleted file mode 100644
index 888368aa5..000000000
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/notice/domain/WxCpRecallNoticeResult.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package cn.bootx.starter.wecom.core.notice.domain;
-
-public class WxCpRecallNoticeResult {
-
-}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java
deleted file mode 100644
index 5c1df3e63..000000000
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/convert/WecomRobotConfigConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.starter.wecom.core.robot.convert;
-
-import cn.bootx.starter.wecom.core.robot.entity.WecomRobotConfig;
-import cn.bootx.starter.wecom.dto.robot.WecomRobotConfigDto;
-import cn.bootx.starter.wecom.param.robot.WecomRobotConfigParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 企业微信机器人配置
- *
- * @author bootx
- * @date 2022-07-23
- */
-@Mapper
-public interface WecomRobotConfigConvert {
-
-    WecomRobotConfigConvert CONVERT = Mappers.getMapper(WecomRobotConfigConvert.class);
-
-    WecomRobotConfig convert(WecomRobotConfigParam in);
-
-    WecomRobotConfigDto convert(WecomRobotConfig in);
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java
deleted file mode 100644
index fe856a710..000000000
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/dao/WecomRobotConfigMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.starter.wecom.core.robot.dao;
-
-import cn.bootx.starter.wecom.core.robot.entity.WecomRobotConfig;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 企业微信机器人配置
- *
- * @author bootx
- * @date 2022-07-23
- */
-@Mapper
-public interface WecomRobotConfigMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/entity/WecomRobotConfig.java b/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/entity/WecomRobotConfig.java
deleted file mode 100644
index db8407200..000000000
--- a/bootx-common-starters/common-starter-wecom/src/main/java/cn/bootx/starter/wecom/core/robot/entity/WecomRobotConfig.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.bootx.starter.wecom.core.robot.entity;
-
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.wecom.code.WeComCode;
-import cn.bootx.starter.wecom.core.robot.convert.WecomRobotConfigConvert;
-import cn.bootx.starter.wecom.dto.robot.WecomRobotConfigDto;
-import cn.bootx.starter.wecom.param.robot.WecomRobotConfigParam;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 企业微信机器人配置
- *
- * @author bootx
- * @date 2022-07-23
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@TableName("starter_wecom_robot_config")
-@Accessors(chain = true)
-public class WecomRobotConfig extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 名称 */
-    private String name;
-
-    /** 编号 */
-    private String code;
-
-    /** webhook地址的key */
-    private String webhookKey;
-
-    /** 备注 */
-    private String remark;
-
-    /**
-     * 获取webhook的地址
-     */
-    public String toWebhookUrl() {
-        return StrUtil.format(WeComCode.ROBOT_WEBHOOK_URL, webhookKey);
-    }
-
-    /** 创建对象 */
-    public static WecomRobotConfig init(WecomRobotConfigParam in) {
-        return WecomRobotConfigConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public WecomRobotConfigDto toDto() {
-        return WecomRobotConfigConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-common-starters/common-starter-wecom/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-common-starters/common-starter-wecom/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index fd445ebb2..79adedc89 100644
--- a/bootx-common-starters/common-starter-wecom/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-common-starters/common-starter-wecom/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.wecom.WeComAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.starter.wecom.WeComAutoConfiguration
diff --git a/bootx-common-starters/pom.xml b/bootx-common-starters/pom.xml
index ef8d83c60..7a5b0f344 100644
--- a/bootx-common-starters/pom.xml
+++ b/bootx-common-starters/pom.xml
@@ -3,9 +3,9 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
-        bootx-platform
         cn.bootx.platform
-        1.2.3
+        bootx-platform-parent
+        1.3.6.2
     
     4.0.0
 
@@ -23,35 +23,39 @@
         common-starter-monitor
         common-starter-wechat
         common-starter-wecom
-        common-starter-flowable
     
 
     
         
             org.springframework.boot
             spring-boot-autoconfigure
+            provided
         
         
             org.springframework.boot
             spring-boot-configuration-processor
+            provided
         
 
         
         
             org.projectlombok
             lombok
+            provided
         
 
         
         
             org.projectlombok
             lombok-mapstruct-binding
+            provided
         
 
         
         
             org.mapstruct
             mapstruct-processor
+            provided
         
 
         
diff --git a/bootx-commons/common-actable/pom.xml b/bootx-commons/common-actable/pom.xml
deleted file mode 100644
index 71967399a..000000000
--- a/bootx-commons/common-actable/pom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-    4.0.0
-    
-        cn.bootx.platform
-        bootx-commons
-        1.2.3
-    
-
-    common-actable
-    通过配置model注解的方式来创建表,修改表结构
-
-    
-        
-            cn.bootx.platform
-            common-mybatis-plus
-        
-    
-
-
-
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/ActableAutoConfiguration.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/ActableAutoConfiguration.java
deleted file mode 100644
index b63df7095..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/ActableAutoConfiguration.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.common.actable;
-
-import org.apache.ibatis.annotations.Mapper;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * Actable 自动根据创建表
- *
- * @author xxm
- * @date 2022/12/18
- */
-@ComponentScan
-@ConfigurationPropertiesScan
-@AutoConfiguration
-@MapperScan(annotationClass = Mapper.class)
-public class ActableAutoConfiguration {
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/annotation/impl/ColumnImpl.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/annotation/impl/ColumnImpl.java
deleted file mode 100644
index 9f7a63a99..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/annotation/impl/ColumnImpl.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package cn.bootx.common.actable.annotation.impl;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import cn.bootx.common.core.code.actable.MySqlFieldType;
-import cn.bootx.common.actable.utils.ColumnUtils;
-
-import java.lang.annotation.Annotation;
-
-/**
- * 实现行注解
- *
- * @author xxm
- * @date 2023/1/17
- */
-public class ColumnImpl implements Column {
-
-    /**
-     * 字段名 1.4.0版本支持,类同javax.persistence.Column.name
-     * @return 字段名:不填默认使用属性名作为表字段名
-     */
-    @Override
-    public String value() {
-        return "";
-    }
-
-    /**
-     * 字段名 1.3.0版本支持,类同javax.persistence.Column.name
-     * @return 字段名:不填默认使用属性名作为表字段名
-     */
-    @Override
-    public String name() {
-        return "";
-    }
-
-    /**
-     * 数据库字段排序, 数字小的在前面
-     */
-    @Override
-    public int order() {
-        return 0;
-    }
-
-    /**
-     * 字段类型:不填默认使用属性的数据类型进行转换,转换失败的字段不会添加
-     * 仅支持cn.bootx.common.actable.constants.MySqlTypeConstant中的枚举数据类型
-     * 不填默认转换类:cn.bootx.common.actable.command.JavaToMysqlType
-     * 1.3.0版本支持,也可通过注解实现:cn.bootx.common.core.annotation.actable.ColumnType
-     * @return 字段类型
-     */
-    @Override
-    public MySqlFieldType type() {
-        return MySqlFieldType.DEFAULT;
-    }
-
-    /**
-     * 字段长度,默认是255 类型默认长度参考:cn.bootx.common.core.code.actable.MySqlFieldType
-     * 1.3.0版本支持,类同javax.persistence.Column.length
-     * @return 默认字段长度,默认是255
-     */
-    @Override
-    public int length() {
-        return 255;
-    }
-
-    /**
-     * 小数点长度,默认是0 类型默认长度参考:cn.bootx.common.core.code.actable.MySqlFieldType
-     * 1.3.0版本支持,类同javax.persistence.Column.scale
-     * @return 小数点长度,默认是0
-     */
-    @Override
-    public int decimalLength() {
-        return 0;
-    }
-
-    /**
-     * 是否为可以为null,true是可以,false是不可以,默认为true
-     * 也可通过注解实现:cn.bootx.common.core.annotation.actable.IsNotNull
-     * 1.3.0版本支持,类同javax.persistence.Column.nullable
-     * @return 是否为可以为null,true是可以,false是不可以,默认为true
-     */
-    @Override
-    public boolean isNull() {
-        return true;
-    }
-
-    /**
-     * 是否是主键,默认false 也可通过注解实现:cn.bootx.common.core.annotation.actable.IsKey
-     * 1.3.0版本支持,类同javax.persistence.Id
-     * @return 是否是主键,默认false
-     */
-    @Override
-    public boolean isKey() {
-        return false;
-    }
-
-    /**
-     * 是否自动递增,默认false 也可通过注解实现:cn.bootx.common.core.annotation.actable.IsAutoIncrement
-     * @return 是否自动递增,默认false 只有主键才能使用
-     */
-    @Override
-    public boolean isAutoIncrement() {
-        return false;
-    }
-
-    /**
-     * 默认值,默认为null
-     * @return 默认值
-     */
-    @Override
-    public String defaultValue() {
-        return ColumnUtils.DEFAULT_VALUE;
-    }
-
-    // /**
-    // * 开启默认值原生模式
-    // * 原生模式介绍:默认是false表示非原生,此时value只支持字符串形式,会将value值以字符串的形式设置到字段的默认值,例如value="aa" 即sql为
-    // DEFAULT "aa"
-    // * 如果设置isNative=true,此时如果value="current_timestamp",即sql为 DEFAULT current_timestamp
-    // *
-    // * @return
-    // */
-    // @Override
-    // public boolean isNativeDefValue() {
-    // return false;
-    // }
-
-    /**
-     * 数据表字段备注 1.3.0版本支持,也可通过注解实现:cn.bootx.common.actable.annotation.Comment
-     * @return 默认值,默认为空
-     */
-    @Override
-    public String comment() {
-        return "";
-    }
-
-    /**
-     * 是否排除该字段, 默认不排除
-     */
-    @Override
-    public boolean ignore() {
-        return false;
-    }
-
-    /**
-     * Returns the annotation type of this annotation.
-     * @return the annotation type of this annotation
-     */
-    @Override
-    public Class annotationType() {
-        return null;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/CreateTableParam.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/CreateTableParam.java
deleted file mode 100644
index ee19693e7..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/CreateTableParam.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package cn.bootx.common.actable.command;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-/**
- * 用于存放创建表的字段信息
- *
- * @author sunchenbin, Spet
- * @version 2019/07/06
- */
-@Getter
-@Setter
-public class CreateTableParam implements Cloneable {
-
-    /**
-     * 字段名
-     */
-    private String fieldName;
-
-    /**
-     * 排序
-     */
-    private int order;
-
-    /**
-     * 字段类型
-     */
-    private String fieldType;
-
-    /**
-     * 类型长度
-     */
-    private int fieldLength;
-
-    /**
-     * 类型小数长度
-     */
-    private int fieldDecimalLength;
-
-    /**
-     * 字段是否非空
-     */
-    private boolean fieldIsNull;
-
-    /**
-     * 字段是否是主键
-     */
-    private boolean fieldIsKey;
-
-    /**
-     * 主键是否自增
-     */
-    private boolean fieldIsAutoIncrement;
-
-    /**
-     * 字段默认值
-     */
-    private String fieldDefaultValue;
-
-    /**
-     * 字段默认值是否原生,原生使用$,非原生使用#
-     */
-    private boolean fieldDefaultValueNative;
-
-    /**
-     * 该类型需要几个长度(例如,需要小数位数的,那么总长度和小数长度就是2个长度)一版只有0、1、2三个可选值,自动从配置的类型中获取的
-     */
-    private int fileTypeLength;
-
-    /**
-     * 值是否唯一
-     */
-    private boolean fieldIsUnique;
-
-    /**
-     * 索引名称
-     */
-    private String filedIndexName;
-
-    /**
-     * 所有字段列表
-     */
-    private List filedIndexValue;
-
-    /**
-     * 唯一约束名称
-     */
-    private String filedUniqueName;
-
-    /**
-     * 唯一约束列表
-     */
-    private List filedUniqueValue;
-
-    /**
-     * 字段的备注
-     */
-    private String fieldComment;
-
-    /**
-     * 是否忽略更新
-     */
-    private boolean ignoreUpdate;
-
-    @Override
-    public CreateTableParam clone() {
-        CreateTableParam createTableParam = null;
-        try {
-            createTableParam = (CreateTableParam) super.clone();
-        }
-        catch (CloneNotSupportedException e) {
-            e.printStackTrace();
-        }
-        return createTableParam;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/JavaToMysqlType.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/JavaToMysqlType.java
deleted file mode 100644
index 0255dc2dd..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/JavaToMysqlType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package cn.bootx.common.actable.command;
-
-import cn.bootx.common.core.code.actable.MySqlFieldType;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author xxm
- * @date 2023/1/16
- */
-public class JavaToMysqlType {
-
-    public static Map javaToMysqlTypeMap = new HashMap();
-    static {
-        javaToMysqlTypeMap.put("class java.lang.String", MySqlFieldType.VARCHAR);
-        javaToMysqlTypeMap.put("class java.lang.Long", MySqlFieldType.BIGINT);
-        javaToMysqlTypeMap.put("class java.lang.Integer", MySqlFieldType.INT);
-        javaToMysqlTypeMap.put("class java.lang.Boolean", MySqlFieldType.BIT);
-        javaToMysqlTypeMap.put("class java.math.BigInteger", MySqlFieldType.BIGINT);
-        javaToMysqlTypeMap.put("class java.lang.Float", MySqlFieldType.FLOAT);
-        javaToMysqlTypeMap.put("class java.lang.Double", MySqlFieldType.DOUBLE);
-        javaToMysqlTypeMap.put("class java.lang.Short", MySqlFieldType.SMALLINT);
-        javaToMysqlTypeMap.put("class java.math.BigDecimal", MySqlFieldType.DECIMAL);
-        javaToMysqlTypeMap.put("class java.sql.Date", MySqlFieldType.DATETIME);
-        javaToMysqlTypeMap.put("class java.util.Date", MySqlFieldType.DATETIME);
-        javaToMysqlTypeMap.put("class java.sql.Timestamp", MySqlFieldType.DATETIME);
-        javaToMysqlTypeMap.put("class java.sql.Time", MySqlFieldType.TIME);
-        javaToMysqlTypeMap.put("class java.time.LocalDateTime", MySqlFieldType.DATETIME);
-        javaToMysqlTypeMap.put("class java.time.LocalDate", MySqlFieldType.DATE);
-        javaToMysqlTypeMap.put("class java.time.LocalTime", MySqlFieldType.TIME);
-        javaToMysqlTypeMap.put("long", MySqlFieldType.BIGINT);
-        javaToMysqlTypeMap.put("int", MySqlFieldType.INT);
-        javaToMysqlTypeMap.put("boolean", MySqlFieldType.BIT);
-        javaToMysqlTypeMap.put("float", MySqlFieldType.FLOAT);
-        javaToMysqlTypeMap.put("double", MySqlFieldType.DOUBLE);
-        javaToMysqlTypeMap.put("short", MySqlFieldType.SMALLINT);
-        javaToMysqlTypeMap.put("char", MySqlFieldType.VARCHAR);
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/MySqlTypeAndLength.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/MySqlTypeAndLength.java
deleted file mode 100644
index 0f5a38888..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/MySqlTypeAndLength.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.common.actable.command;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * Mysql 类型和长度
- *
- * @author xxm
- * @date 2023/1/16
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class MySqlTypeAndLength {
-
-    /** 长度数 */
-    private Integer lengthCount;
-
-    /** 长度 */
-    private Integer length;
-
-    /** 小数长度 */
-    private Integer decimalLength;
-
-    /** 类型 */
-    private String type;
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlColumns.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlColumns.java
deleted file mode 100644
index 32e9fb97f..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlColumns.java
+++ /dev/null
@@ -1,242 +0,0 @@
-package cn.bootx.common.actable.command;
-
-/**
- * 用于查询表中字段结构详细信息
- *
- * @author sunchenbin
- * @version 2016年6月23日 下午6:10:56
- */
-public class SysMysqlColumns {
-
-    /**
-     * 字段名
-     */
-    public static final String COLUMN_NAME_KEY = "column_name";
-
-    private String table_catalog;
-
-    /**
-     * 库名
-     */
-    private String table_schema;
-
-    /**
-     * 表名
-     */
-    private String table_name;
-
-    /**
-     * 字段名
-     */
-    private String column_name;
-
-    /**
-     * 字段位置的排序
-     */
-    private String ordinal_position;
-
-    /**
-     * 字段默认值
-     */
-    private String column_default;
-
-    /**
-     * 是否可以为null
-     */
-    private String is_nullable;
-
-    /**
-     * 字段类型
-     */
-    private String data_type;
-
-    private String character_maximum_length;
-
-    private String character_octet_length;
-
-    /**
-     * 长度
-     */
-    private String numeric_precision;
-
-    /**
-     * 小数点数
-     */
-    private String numeric_scale;
-
-    private String character_set_name;
-
-    private String collation_name;
-
-    /**
-     * 类型加长度拼接的字符串,例如varchar(100)
-     */
-    private String column_type;
-
-    /**
-     * 主键:PRI;唯一键:UNI
-     */
-    private String column_key;
-
-    /**
-     * 是否为自动增长,是的话为auto_increment
-     */
-    private String extra;
-
-    private String privileges;
-
-    private String column_comment;
-
-    public String getTable_catalog() {
-        return table_catalog;
-    }
-
-    public void setTable_catalog(String table_catalog) {
-        this.table_catalog = table_catalog;
-    }
-
-    public String getTable_schema() {
-        return table_schema;
-    }
-
-    public void setTable_schema(String table_schema) {
-        this.table_schema = table_schema;
-    }
-
-    public String getTable_name() {
-        return table_name;
-    }
-
-    public void setTable_name(String table_name) {
-        this.table_name = table_name;
-    }
-
-    public String getColumn_name() {
-        return column_name;
-    }
-
-    public void setColumn_name(String column_name) {
-        this.column_name = column_name;
-    }
-
-    public String getOrdinal_position() {
-        return ordinal_position;
-    }
-
-    public void setOrdinal_position(String ordinal_position) {
-        this.ordinal_position = ordinal_position;
-    }
-
-    public String getColumn_default() {
-        return column_default;
-    }
-
-    public void setColumn_default(String column_default) {
-        this.column_default = column_default;
-    }
-
-    public String getIs_nullable() {
-        return is_nullable;
-    }
-
-    public void setIs_nullable(String is_nullable) {
-        this.is_nullable = is_nullable;
-    }
-
-    public String getData_type() {
-        return data_type;
-    }
-
-    public void setData_type(String data_type) {
-        this.data_type = data_type;
-    }
-
-    public String getCharacter_maximum_length() {
-        return character_maximum_length;
-    }
-
-    public void setCharacter_maximum_length(String character_maximum_length) {
-        this.character_maximum_length = character_maximum_length;
-    }
-
-    public String getCharacter_octet_length() {
-        return character_octet_length;
-    }
-
-    public void setCharacter_octet_length(String character_octet_length) {
-        this.character_octet_length = character_octet_length;
-    }
-
-    public String getNumeric_precision() {
-        return numeric_precision;
-    }
-
-    public void setNumeric_precision(String numeric_precision) {
-        this.numeric_precision = numeric_precision;
-    }
-
-    public String getNumeric_scale() {
-        return numeric_scale;
-    }
-
-    public void setNumeric_scale(String numeric_scale) {
-        this.numeric_scale = numeric_scale;
-    }
-
-    public String getCharacter_set_name() {
-        return character_set_name;
-    }
-
-    public void setCharacter_set_name(String character_set_name) {
-        this.character_set_name = character_set_name;
-    }
-
-    public String getCollation_name() {
-        return collation_name;
-    }
-
-    public void setCollation_name(String collation_name) {
-        this.collation_name = collation_name;
-    }
-
-    public String getColumn_type() {
-        return column_type;
-    }
-
-    public void setColumn_type(String column_type) {
-        this.column_type = column_type;
-    }
-
-    public String getColumn_key() {
-        return column_key;
-    }
-
-    public void setColumn_key(String column_key) {
-        this.column_key = column_key;
-    }
-
-    public String getExtra() {
-        return extra;
-    }
-
-    public void setExtra(String extra) {
-        this.extra = extra;
-    }
-
-    public String getPrivileges() {
-        return privileges;
-    }
-
-    public void setPrivileges(String privileges) {
-        this.privileges = privileges;
-    }
-
-    public String getColumn_comment() {
-        return column_comment;
-    }
-
-    public void setColumn_comment(String column_comment) {
-        this.column_comment = column_comment;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlTable.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlTable.java
deleted file mode 100644
index 3d82222e0..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/SysMysqlTable.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package cn.bootx.common.actable.command;
-
-import java.util.Date;
-
-/**
- * 表注释
- *
- * @author xxm
- * @date 2023/1/16
- */
-public class SysMysqlTable {
-
-    /** 字符集的后缀 */
-    public static final String TABLE_COLLATION_SUFFIX = "_general_ci";
-
-    /** 字符集 */
-    public static final String TABLE_COLLATION_KEY = "table_collation";
-
-    /** 注释 */
-    public static final String TABLE_COMMENT_KEY = "table_comment";
-
-    /** 引擎 */
-    public static final String TABLE_ENGINE_KEY = "engine";
-
-    private String table_catalog;
-
-    private String table_schema;
-
-    private String table_name;
-
-    private String table_type;
-
-    private String engine;
-
-    private Long version;
-
-    private String row_format;
-
-    private Long table_rows;
-
-    private Long avg_row_length;
-
-    private Long data_length;
-
-    private Long max_data_length;
-
-    private Long index_length;
-
-    private Long data_free;
-
-    private Long auto_increment;
-
-    private Date create_time;
-
-    private Date update_time;
-
-    private Date check_time;
-
-    private String table_collation;
-
-    private Long checksum;
-
-    private String create_options;
-
-    private String table_comment;
-
-    public String getTable_catalog() {
-        return table_catalog;
-    }
-
-    public void setTable_catalog(String table_catalog) {
-        this.table_catalog = table_catalog;
-    }
-
-    public String getTable_schema() {
-        return table_schema;
-    }
-
-    public void setTable_schema(String table_schema) {
-        this.table_schema = table_schema;
-    }
-
-    public String getTable_name() {
-        return table_name;
-    }
-
-    public void setTable_name(String table_name) {
-        this.table_name = table_name;
-    }
-
-    public String getTable_type() {
-        return table_type;
-    }
-
-    public void setTable_type(String table_type) {
-        this.table_type = table_type;
-    }
-
-    public String getEngine() {
-        return engine;
-    }
-
-    public void setEngine(String engine) {
-        this.engine = engine;
-    }
-
-    public Long getVersion() {
-        return version;
-    }
-
-    public void setVersion(Long version) {
-        this.version = version;
-    }
-
-    public String getRow_format() {
-        return row_format;
-    }
-
-    public void setRow_format(String row_format) {
-        this.row_format = row_format;
-    }
-
-    public Long getTable_rows() {
-        return table_rows;
-    }
-
-    public void setTable_rows(Long table_rows) {
-        this.table_rows = table_rows;
-    }
-
-    public Long getAvg_row_length() {
-        return avg_row_length;
-    }
-
-    public void setAvg_row_length(Long avg_row_length) {
-        this.avg_row_length = avg_row_length;
-    }
-
-    public Long getData_length() {
-        return data_length;
-    }
-
-    public void setData_length(Long data_length) {
-        this.data_length = data_length;
-    }
-
-    public Long getMax_data_length() {
-        return max_data_length;
-    }
-
-    public void setMax_data_length(Long max_data_length) {
-        this.max_data_length = max_data_length;
-    }
-
-    public Long getIndex_length() {
-        return index_length;
-    }
-
-    public void setIndex_length(Long index_length) {
-        this.index_length = index_length;
-    }
-
-    public Long getData_free() {
-        return data_free;
-    }
-
-    public void setData_free(Long data_free) {
-        this.data_free = data_free;
-    }
-
-    public Long getAuto_increment() {
-        return auto_increment;
-    }
-
-    public void setAuto_increment(Long auto_increment) {
-        this.auto_increment = auto_increment;
-    }
-
-    public Date getCreate_time() {
-        return create_time;
-    }
-
-    public void setCreate_time(Date create_time) {
-        this.create_time = create_time;
-    }
-
-    public Date getUpdate_time() {
-        return update_time;
-    }
-
-    public void setUpdate_time(Date update_time) {
-        this.update_time = update_time;
-    }
-
-    public Date getCheck_time() {
-        return check_time;
-    }
-
-    public void setCheck_time(Date check_time) {
-        this.check_time = check_time;
-    }
-
-    public String getTable_collation() {
-        return table_collation;
-    }
-
-    public void setTable_collation(String table_collation) {
-        this.table_collation = table_collation;
-    }
-
-    public Long getChecksum() {
-        return checksum;
-    }
-
-    public void setChecksum(Long checksum) {
-        this.checksum = checksum;
-    }
-
-    public String getCreate_options() {
-        return create_options;
-    }
-
-    public void setCreate_options(String create_options) {
-        this.create_options = create_options;
-    }
-
-    public String getTable_comment() {
-        return table_comment;
-    }
-
-    public void setTable_comment(String table_comment) {
-        this.table_comment = table_comment;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/TableConfig.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/TableConfig.java
deleted file mode 100644
index 73b3ce5df..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/command/TableConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.common.actable.command;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 表配置
- *
- * @author xxm
- * @date 2023/1/16
- */
-@Getter
-@Setter
-public class TableConfig {
-
-    /** 表的全部字段 */
-    private List list = new ArrayList<>();
-
-    private Map map = new HashMap<>();
-
-    public TableConfig(List list, Map map) {
-        if (list != null) {
-            this.list = list;
-        }
-        if (map != null) {
-            this.map = map;
-        }
-    }
-
-    public TableConfig(List list) {
-        if (list != null) {
-            this.list = list;
-        }
-    }
-
-    public TableConfig(Map map) {
-        this.map = map;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/configuration/ActableProperties.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/configuration/ActableProperties.java
deleted file mode 100644
index 26ad16ac0..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/configuration/ActableProperties.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.bootx.common.actable.configuration;
-
-import cn.bootx.common.core.code.actable.DatabaseType;
-import lombok.Data;
-import lombok.experimental.Accessors;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * @author xxm
- * @date 2023/1/16
- */
-@Data
-@Accessors(chain = true)
-@ConfigurationProperties(prefix = "bootx.common.actable")
-public class ActableProperties {
-
-    /**
-     * 数据库类型
-     */
-    private DatabaseType databaseType = DatabaseType.MYSQL;
-
-    /**
-     * 更新模式
-     */
-    private UpdateType updateType = UpdateType.NONE;
-
-    /**
-     * 扫描包路径, 可以用 ,和 ; 分隔
-     */
-    private String scanPackage;
-
-    /**
-     * 指定生成索引前缀
-     */
-    private String prefixIndex = "actable_idx_";
-
-    /**
-     * 指定生成唯一约束前缀
-     */
-    private String prefixUnique = "actable_uni_";
-
-    /**
-     * 更新模式
-     *
-     * @author xxm
-     * @date 2023/1/16
-     */
-    public enum UpdateType {
-
-        /** 不进行任何操作 */
-        NONE,
-        /** 更新表结构 */
-        UPDATE,
-        /** 创建表, 已经创建的不再进行处理 */
-        CREATE,
-        /** 删除后重新创建 */
-        DROP_CREATE;
-
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/constants/Constants.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/constants/Constants.java
deleted file mode 100644
index b67d56404..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/constants/Constants.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cn.bootx.common.actable.constants;
-
-public interface Constants {
-
-    String NEW_TABLE_MAP = "newTableMap";
-
-    String MODIFY_TABLE_MAP = "modifyTableMap";
-
-    String ADD_TABLE_MAP = "addTableMap";
-
-    String REMOVE_TABLE_MAP = "removeTableMap";
-
-    String MODIFY_TABLE_PROPERTY_MAP = "modifyTablePropertyMap";
-
-    String DROPKEY_TABLE_MAP = "dropKeyTableMap";
-
-    String DROPINDEXANDUNIQUE_TABLE_MAP = "dropIndexAndUniqueTableMap";
-
-    String ADDINDEX_TABLE_MAP = "addIndexTableMap";
-
-    String ADDUNIQUE_TABLE_MAP = "addUniqueTableMap";
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/dao/system/CreateMysqlTablesMapper.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/dao/system/CreateMysqlTablesMapper.java
deleted file mode 100644
index 65c935442..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/dao/system/CreateMysqlTablesMapper.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package cn.bootx.common.actable.dao.system;
-
-import cn.bootx.common.actable.command.SysMysqlColumns;
-import cn.bootx.common.actable.command.SysMysqlTable;
-import cn.bootx.common.actable.command.TableConfig;
-import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * 创建更新表结构的Mapper
- *
- * @author sunchenbin
- *
- */
-@Mapper
-@InterceptorIgnore(tenantLine = "true")
-public interface CreateMysqlTablesMapper {
-
-    /**
-     * 根据结构注解解析出来的信息创建表
-     * @param tableMap 表结构的map
-     */
-    void createTable(@Param("tableMap") Map tableMap);
-
-    /**
-     * 根据表名查询表在库中是否存在
-     * @param tableName 表结构的map
-     * @return SysMysqlTable
-     */
-    SysMysqlTable findTableByTableName(@Param("tableName") String tableName);
-
-    /**
-     * 根据表名查询库中该表的字段结构等信息
-     * @param tableName 表结构的map
-     * @return 表的字段结构等信息
-     */
-    List findTableEnsembleByTableName(@Param("tableName") String tableName);
-
-    /**
-     * 增加字段
-     * @param tableMap 表结构的map
-     */
-    void addTableField(@Param("tableMap") Map tableMap);
-
-    /**
-     * 删除字段
-     * @param tableMap 表结构的map
-     */
-    void removeTableField(@Param("tableMap") Map tableMap);
-
-    /**
-     * 更新表属性
-     * @param tableMap 表结构的map
-     */
-    void modifyTableProperty(@Param("tableMap") Map tableMap);
-
-    /**
-     * 修改字段
-     * @param tableMap 表结构的map
-     */
-    void modifyTableField(@Param("tableMap") Map tableMap);
-
-    /**
-     * 删除主键约束,附带修改其他字段属性功能
-     * @param tableMap 表结构的map
-     */
-    void dropKeyTableField(@Param("tableMap") Map tableMap);
-
-    /**
-     * 根据表名删除表
-     * @param tableName 表名
-     */
-    void dropTableByName(@Param("tableName") String tableName);
-
-    /**
-     * 查询当前表存在的索引(除了主键索引primary)
-     * @param tableMap 表名
-     * @return 索引名列表
-     */
-    Set findTableIndexByTableName(@Param("tableMap") Map tableMap);
-
-    /**
-     * 删除表索引
-     * @param tableMap
-     */
-    void dropTabelIndex(@Param("tableMap") Map tableMap);
-
-    /**
-     * 创建索引
-     * @param tableMap
-     */
-    void addTableIndex(@Param("tableMap") Map tableMap);
-
-    /**
-     * 创建唯一约束
-     * @param tableMap
-     */
-    void addTableUnique(@Param("tableMap") Map tableMap);
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/handler/StartUpHandler.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/handler/StartUpHandler.java
deleted file mode 100644
index f29cecc2c..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/handler/StartUpHandler.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.bootx.common.actable.manager.handler;
-
-import cn.bootx.common.actable.configuration.ActableProperties;
-import cn.bootx.common.core.code.actable.DatabaseType;
-import cn.bootx.common.actable.manager.system.SysMysqlCreateTableManager;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * 启动时执行处理
- *
- * @author chenbin.sun
- *
- */
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class StartUpHandler {
-
-    private final ActableProperties actableProperties;
-
-    private final SysMysqlCreateTableManager sysMysqlCreateTableManager;
-
-    /**
-     * 建表开始
-     */
-    @PostConstruct
-    public void startHandler() {
-        // 获取配置信息
-        DatabaseType databaseType = actableProperties.getDatabaseType();
-        // 执行mysql的处理方法
-        if (DatabaseType.MYSQL == databaseType) {
-            log.debug("databaseType=mysql,开始执行mysql的处理方法");
-            sysMysqlCreateTableManager.createMysqlTable();
-        }
-        else if (DatabaseType.ORACLE == databaseType) {
-            log.debug("databaseType=oracle,开始执行oracle的处理方法");
-        }
-        else if (DatabaseType.SQLSERVER == databaseType) {
-            log.debug("databaseType=sqlserver,开始执行sqlserver的处理方法");
-        }
-        else if (DatabaseType.POSTGRESQL == databaseType) {
-            log.debug("databaseType=postgresql,开始执行postgresql的处理方法");
-        }
-        else {
-            log.debug("没有找到符合条件的处理方法!");
-        }
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/system/SysMysqlCreateTableManager.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/system/SysMysqlCreateTableManager.java
deleted file mode 100644
index ba59b05cd..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/manager/system/SysMysqlCreateTableManager.java
+++ /dev/null
@@ -1,872 +0,0 @@
-package cn.bootx.common.actable.manager.system;
-
-import cn.bootx.common.actable.command.*;
-import cn.bootx.common.actable.configuration.ActableProperties;
-import cn.bootx.common.actable.configuration.ActableProperties.UpdateType;
-import cn.bootx.common.actable.constants.Constants;
-import cn.bootx.common.actable.dao.system.CreateMysqlTablesMapper;
-import cn.bootx.common.actable.utils.ClassScanner;
-import cn.bootx.common.actable.utils.ClassTools;
-import cn.bootx.common.actable.utils.ColumnUtils;
-import cn.bootx.common.core.annotation.actable.IgnoreUpdate;
-import cn.bootx.common.core.annotation.actable.Index;
-import cn.bootx.common.core.annotation.actable.Table;
-import cn.bootx.common.core.annotation.actable.Unique;
-import cn.bootx.common.core.code.actable.MySqlCharset;
-import cn.bootx.common.core.code.actable.MySqlEngine;
-import cn.bootx.common.core.code.actable.MySqlFieldType;
-import cn.bootx.common.core.exception.FatalException;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.lang.reflect.Field;
-import java.util.*;
-
-/**
- * @author sunchenbin
- * @version 2016年6月23日 下午6:07:21
- */
-@Slf4j
-@Component
-@Transactional
-@RequiredArgsConstructor
-public class SysMysqlCreateTableManager {
-
-    private final CreateMysqlTablesMapper createMysqlTablesMapper;
-
-    private final ActableProperties actableProperties;
-
-    /**
-     * 读取配置文件的三种状态(创建表、更新表、不做任何事情)
-     */
-    public void createMysqlTable() {
-        // 要扫描的model所在的pack
-        String pack = actableProperties.getScanPackage();
-        // 自动创建模式:update表示更新,create表示删除原表重新创建
-        UpdateType updateType = actableProperties.getUpdateType();
-
-        // 不做任何事情
-        if (Objects.isNull(updateType)) {
-            log.warn("配置mybatis.table.auto错误无法识别,当前配置只支持[none/update/create/add]三种类型!");
-            return;
-        }
-
-        // 不做任何事情
-        if (updateType == UpdateType.NONE) {
-            log.info("配置mybatis.table.updateType=none,不需要做任何事情");
-            return;
-        }
-
-        // 拆成多个pack,支持多个
-        String[] packs = pack.split("[,;]");
-
-        // 从包package中获取所有的Class
-        @SuppressWarnings("unchecked")
-        Set> classes = ClassScanner.scan(packs, Table.class, TableName.class);
-
-        // 初始化用于存储各种操作表结构的容器
-        Map> baseTableMap = initTableMap();
-
-        // 表名集合
-        List tableNames = new ArrayList<>();
-
-        // 循环全部的model
-        for (Class clas : classes) {
-            // 没有打注解不需要创建表 或者配置了忽略建表的注解
-            if (!ColumnUtils.hasTableAnnotation(clas)) {
-                continue;
-            }
-            // 禁止出现重名表
-            this.checkTableName(tableNames, clas);
-            // 构建出全部表的增删改的map
-            this.buildTableMapConstruct(clas, baseTableMap, updateType);
-        }
-
-        // 根据传入的map,分别去创建或修改表结构
-        this.createOrModifyTableConstruct(baseTableMap, updateType);
-    }
-
-    /**
-     * 检查名称
-     */
-    private void checkTableName(List tableNames, Class clas) {
-        String tableName = ColumnUtils.getTableName(clas);
-        if (tableNames.contains(tableName)) {
-            throw new FatalException(tableName + "表名出现重复,禁止创建!");
-        }
-        tableNames.add(tableName);
-    }
-
-    /**
-     * 初始化用于存储各种操作表结构的容器
-     * @return 初始化map
-     */
-    private Map> initTableMap() {
-        Map> baseTableMap = new HashMap<>();
-        // 1.用于存需要创建的表名+(字段结构/表信息)
-        baseTableMap.put(Constants.NEW_TABLE_MAP, new HashMap<>());
-        // 2.用于存需要更新字段类型等的表名+结构
-        baseTableMap.put(Constants.MODIFY_TABLE_MAP, new HashMap<>());
-        // 3.用于存需要增加字段的表名+结构
-        baseTableMap.put(Constants.ADD_TABLE_MAP, new HashMap<>());
-        // 4.用于存需要删除字段的表名+结构
-        baseTableMap.put(Constants.REMOVE_TABLE_MAP, new HashMap<>());
-        // 5.用于存需要删除主键的表名+结构
-        baseTableMap.put(Constants.DROPKEY_TABLE_MAP, new HashMap<>());
-        // 6.用于存需要删除唯一约束的表名+结构
-        baseTableMap.put(Constants.DROPINDEXANDUNIQUE_TABLE_MAP, new HashMap<>());
-        // 7.用于存需要增加的索引
-        baseTableMap.put(Constants.ADDINDEX_TABLE_MAP, new HashMap<>());
-        // 8.用于存需要增加的唯一约束
-        baseTableMap.put(Constants.ADDUNIQUE_TABLE_MAP, new HashMap<>());
-        // 9.更新表注释
-        baseTableMap.put(Constants.MODIFY_TABLE_PROPERTY_MAP, new HashMap<>());
-        return baseTableMap;
-    }
-
-    /**
-     * 构建出全部表的增删改的map
-     * @param clas package中的model的Class
-     * @param baseTableMap 用于存储各种操作表结构的容器
-     */
-    private void buildTableMapConstruct(Class clas, Map> baseTableMap,
-            UpdateType updateType) {
-
-        // 获取model的tableName
-        String tableName = ColumnUtils.getTableName(clas);
-
-        // 获取表注释
-        String tableComment = ColumnUtils.getTableComment(clas);
-
-        // 获取表字符集
-        MySqlCharset tableCharset = ColumnUtils.getTableCharset(clas);
-
-        // 获取表引擎
-        MySqlEngine tableEngine = ColumnUtils.getTableEngine(clas);
-
-        // 1. 用于存表的全部字段
-        List allFieldList;
-        try {
-            allFieldList = this.getAllFields(clas);
-            if (allFieldList.size() == 0) {
-                log.warn("扫描发现" + clas.getName() + "没有建表字段请检查!");
-                return;
-            }
-        }
-        catch (Exception e) {
-            log.error("表:{},初始化字段结构失败!", tableName);
-            throw new FatalException(e.getMessage());
-        }
-
-        // 如果配置文件配置的是DROP_CREATE,表示将所有的表删掉重新创建
-        if (updateType == UpdateType.DROP_CREATE) {
-            log.info("由于配置的模式是DROP_CREATE,因此先删除表后续根据结构重建,删除表:{}", tableName);
-            createMysqlTablesMapper.dropTableByName(tableName);
-        }
-
-        // 先查该表是否以存在
-        SysMysqlTable table = createMysqlTablesMapper.findTableByTableName(tableName);
-
-        // 不存在时
-        Map map = new HashMap<>();
-        if (table == null) {
-            if (StrUtil.isNotBlank(tableComment)) {
-                map.put(SysMysqlTable.TABLE_COMMENT_KEY, tableComment);
-            }
-            if (tableCharset != null && tableCharset != MySqlCharset.DEFAULT) {
-                map.put(SysMysqlTable.TABLE_COLLATION_KEY, tableCharset.toString().toLowerCase());
-            }
-            if (tableEngine != null && tableEngine != MySqlEngine.DEFAULT) {
-                map.put(SysMysqlTable.TABLE_ENGINE_KEY, tableEngine.toString());
-            }
-            baseTableMap.get(Constants.NEW_TABLE_MAP).put(tableName, new TableConfig(allFieldList, map));
-            baseTableMap.get(Constants.ADDINDEX_TABLE_MAP)
-                .put(tableName, new TableConfig(getAddIndexList(null, allFieldList)));
-            baseTableMap.get(Constants.ADDUNIQUE_TABLE_MAP)
-                .put(tableName, new TableConfig(getAddUniqueList(null, allFieldList)));
-            return;
-        }
-        else {
-            // 判断表注释是否要更新
-            if (StrUtil.isNotBlank(tableComment) && !Objects.equals(tableComment, table.getTable_comment())) {
-                map.put(SysMysqlTable.TABLE_COMMENT_KEY, tableComment);
-            }
-            // 判断表字符集是否要更新
-            if (tableCharset != null && tableCharset != MySqlCharset.DEFAULT
-                    && !tableCharset.toString()
-                        .toLowerCase()
-                        .equals(table.getTable_collation().replace(SysMysqlTable.TABLE_COLLATION_SUFFIX, ""))) {
-                map.put(SysMysqlTable.TABLE_COLLATION_KEY, tableCharset.toString().toLowerCase());
-            }
-            // 判断表引擎是否要更新
-            if (tableEngine != null && tableEngine != MySqlEngine.DEFAULT
-                    && !tableEngine.toString().equals(table.getEngine())) {
-                map.put(SysMysqlTable.TABLE_ENGINE_KEY, tableEngine.toString());
-            }
-            baseTableMap.get(Constants.MODIFY_TABLE_PROPERTY_MAP).put(tableName, new TableConfig(map));
-        }
-
-        // 已存在时理论上做修改的操作,这里查出该表的结构
-        List tableColumnList = createMysqlTablesMapper.findTableEnsembleByTableName(tableName);
-
-        // 从sysColumns中取出我们需要比较的列的List
-        // 先取出name用来筛选出增加和删除的字段
-        List columnNames = ClassTools.getPropertyValueList(tableColumnList, SysMysqlColumns.COLUMN_NAME_KEY);
-
-        // 验证对比从model中解析的allFieldList与从数据库查出来的columnList
-        // 2. 找出增加的字段
-        List addFieldList = getAddFieldList(allFieldList, columnNames);
-
-        // 3. 找出删除的字段
-        List removeFieldList = getRemoveFieldList(columnNames, allFieldList);
-
-        // 4. 找出更新的字段
-        List modifyFieldList = getModifyFieldList(tableColumnList, allFieldList);
-
-        // 5. 找出需要删除主键的字段
-        List dropKeyFieldList = getDropKeyFieldList(tableColumnList, allFieldList);
-
-        String uniPrefix = actableProperties.getPrefixUnique();
-        String idxPrefix = actableProperties.getPrefixIndex();
-        Map paramMap = new HashMap<>();
-        paramMap.put("tableName", tableName);
-        paramMap.put("uniquePrefix", uniPrefix);
-        paramMap.put("indexPrefix", idxPrefix);
-        // 查询当前表中全部 acteble 创建的索引和唯一约束,也就是名字前缀是actable_和actable_的
-        Set allIndexAndUniqueNames = createMysqlTablesMapper.findTableIndexByTableName(paramMap);
-
-        // 6. 找出需要删除的索引和唯一约束
-        List dropIndexAndUniqueFieldList = getDropIndexAndUniqueList(allIndexAndUniqueNames, allFieldList);
-
-        // 7. 找出需要新增的索引
-        List addIndexFieldList = getAddIndexList(allIndexAndUniqueNames, allFieldList);
-
-        // 8. 找出需要新增的唯一约束
-        List addUniqueFieldList = getAddUniqueList(allIndexAndUniqueNames, allFieldList);
-
-        if (addFieldList.size() != 0) {
-            baseTableMap.get(Constants.ADD_TABLE_MAP).put(tableName, new TableConfig(addFieldList));
-        }
-        if (removeFieldList.size() != 0) {
-            baseTableMap.get(Constants.REMOVE_TABLE_MAP).put(tableName, new TableConfig(removeFieldList));
-        }
-        if (modifyFieldList.size() != 0) {
-            baseTableMap.get(Constants.MODIFY_TABLE_MAP).put(tableName, new TableConfig(modifyFieldList));
-        }
-        if (dropKeyFieldList.size() != 0) {
-            baseTableMap.get(Constants.DROPKEY_TABLE_MAP).put(tableName, new TableConfig(dropKeyFieldList));
-        }
-        if (dropIndexAndUniqueFieldList.size() != 0) {
-            baseTableMap.get(Constants.DROPINDEXANDUNIQUE_TABLE_MAP)
-                .put(tableName, new TableConfig(dropIndexAndUniqueFieldList));
-        }
-        if (addIndexFieldList.size() != 0) {
-            baseTableMap.get(Constants.ADDINDEX_TABLE_MAP).put(tableName, new TableConfig(addIndexFieldList));
-        }
-        if (addUniqueFieldList.size() != 0) {
-            baseTableMap.get(Constants.ADDUNIQUE_TABLE_MAP).put(tableName, new TableConfig(addUniqueFieldList));
-        }
-    }
-
-    /**
-     * 找出需要新建的索引
-     * @param allIndexAndUniqueNames 当前数据库的索引很约束名
-     * @param allFieldList model中的所有字段
-     * @return 需要新建的索引
-     */
-    private List getAddIndexList(Set allIndexAndUniqueNames, List allFieldList) {
-        List addIndexFieldList = new ArrayList<>();
-        if (null == allIndexAndUniqueNames) {
-            allIndexAndUniqueNames = new HashSet<>();
-        }
-        for (Object obj : allFieldList) {
-            CreateTableParam createTableParam = (CreateTableParam) obj;
-            if (null != createTableParam.getFiledIndexName()
-                    && !allIndexAndUniqueNames.contains(createTableParam.getFiledIndexName())) {
-                addIndexFieldList.add(createTableParam);
-            }
-        }
-        return addIndexFieldList;
-    }
-
-    /**
-     * 找出需要新建的唯一约束
-     * @param allIndexAndUniqueNames 当前数据库的索引很约束名
-     * @param allFieldList model中的所有字段
-     * @return 需要新建的唯一约束
-     */
-    private List getAddUniqueList(Set allIndexAndUniqueNames, List allFieldList) {
-        List addUniqueFieldList = new ArrayList<>();
-        if (null == allIndexAndUniqueNames) {
-            allIndexAndUniqueNames = new HashSet<>();
-        }
-        for (Object obj : allFieldList) {
-            CreateTableParam createTableParam = (CreateTableParam) obj;
-            if (null != createTableParam.getFiledUniqueName()
-                    && !allIndexAndUniqueNames.contains(createTableParam.getFiledUniqueName())) {
-                addUniqueFieldList.add(createTableParam);
-            }
-        }
-        return addUniqueFieldList;
-    }
-
-    /**
-     * 找出需要删除的索引和唯一约束
-     * @param allIndexAndUniqueNames 当前数据库的索引很约束名
-     * @param allFieldList model中的所有字段
-     * @return 需要删除的索引和唯一约束
-     */
-    private List getDropIndexAndUniqueList(Set allIndexAndUniqueNames, List allFieldList) {
-        List dropIndexAndUniqueFieldList = new ArrayList<>();
-        if (null == allIndexAndUniqueNames || allIndexAndUniqueNames.size() == 0) {
-            return dropIndexAndUniqueFieldList;
-        }
-        List currentModelIndexAndUnique = new ArrayList<>();
-        for (Object obj : allFieldList) {
-            CreateTableParam createTableParam = (CreateTableParam) obj;
-            if (null != createTableParam.getFiledIndexName()) {
-                currentModelIndexAndUnique.add(createTableParam.getFiledIndexName());
-            }
-            if (null != createTableParam.getFiledUniqueName()) {
-                currentModelIndexAndUnique.add(createTableParam.getFiledUniqueName());
-            }
-        }
-        for (String string : allIndexAndUniqueNames) {
-            if (!currentModelIndexAndUnique.contains(string)) {
-                dropIndexAndUniqueFieldList.add(string);
-            }
-        }
-        return dropIndexAndUniqueFieldList;
-    }
-
-    /**
-     * 返回需要删除主键的字段
-     * @param tableColumnList 表结构
-     * @param allFieldList model中的所有字段
-     * @return 需要删除主键的字段
-     */
-    private List getDropKeyFieldList(List tableColumnList, List allFieldList) {
-        Map fieldMap = getAllFieldMap(allFieldList);
-        List dropKeyFieldList = new ArrayList<>();
-        for (SysMysqlColumns sysColumn : tableColumnList) {
-            // 数据库中有该字段时
-            CreateTableParam createTableParam = fieldMap.get(sysColumn.getColumn_name().toLowerCase());
-            if (createTableParam != null) {
-                // 原本是主键,现在不是了,那么要去做删除主键的操作
-                if ("PRI".equals(sysColumn.getColumn_key()) && !createTableParam.isFieldIsKey()) {
-                    dropKeyFieldList.add(createTableParam);
-                }
-
-            }
-        }
-        return dropKeyFieldList;
-    }
-
-    /**
-     * 根据数据库中表的结构和model中表的结构对比找出修改类型默认值等属性的字段
-     * @return 需要修改的字段
-     */
-    private List getModifyFieldList(List tableColumnList, List allFieldList) {
-        Map fieldMap = getAllFieldMap(allFieldList);
-        List modifyFieldList = new ArrayList<>();
-        for (SysMysqlColumns sysColumn : tableColumnList) {
-            // 数据库中有该字段时,验证是否有更新
-            CreateTableParam createTableParam = fieldMap.get(sysColumn.getColumn_name().toLowerCase());
-            if (createTableParam != null && !createTableParam.isIgnoreUpdate()) {
-                // 该复制操作时为了解决multiple primary key defined的同时又不会drop primary key
-                CreateTableParam modifyTableParam = createTableParam.clone();
-                // 1.验证主键
-                // 原本不是主键,现在变成了主键,那么要去做更新
-                if (!"PRI".equals(sysColumn.getColumn_key()) && createTableParam.isFieldIsKey()) {
-                    modifyFieldList.add(modifyTableParam);
-                    continue;
-                }
-                // 原本是主键,现在依然主键,坚决不能在alter语句后加primary key,否则会报multiple primary
-                // key defined
-                if ("PRI".equals(sysColumn.getColumn_key()) && createTableParam.isFieldIsKey()) {
-                    modifyTableParam.setFieldIsKey(false);
-                }
-                // 2.验证类型
-                if (!sysColumn.getData_type().equalsIgnoreCase(createTableParam.getFieldType())) {
-                    modifyFieldList.add(modifyTableParam);
-                    continue;
-                }
-                // 3.验证长度个小数点位数
-                String typeAndLength = createTableParam.getFieldType().toLowerCase();
-                if (createTableParam.getFileTypeLength() == 1) {
-                    // 拼接出类型加长度,比如varchar(1)
-                    typeAndLength = typeAndLength + "(" + createTableParam.getFieldLength() + ")";
-                }
-                else if (createTableParam.getFileTypeLength() == 2) {
-                    // 拼接出类型加长度,比如varchar(1)
-                    typeAndLength = typeAndLength + "(" + createTableParam.getFieldLength() + ","
-                            + createTableParam.getFieldDecimalLength() + ")";
-                }
-
-                // 判断类型+长度是否相同
-                if (!sysColumn.getColumn_type().toLowerCase().equals(typeAndLength)) {
-                    modifyFieldList.add(modifyTableParam);
-                    continue;
-                }
-                // 5.验证自增
-                if ("auto_increment".equals(sysColumn.getExtra()) && !createTableParam.isFieldIsAutoIncrement()) {
-                    modifyFieldList.add(modifyTableParam);
-                    continue;
-                }
-                if (!"auto_increment".equals(sysColumn.getExtra()) && createTableParam.isFieldIsAutoIncrement()) {
-                    modifyFieldList.add(modifyTableParam);
-                    continue;
-                }
-                // 6.验证默认值
-                if (sysColumn.getColumn_default() == null || sysColumn.getColumn_default().equals("")) {
-                    // 数据库默认值是null,model中注解设置的默认值不为NULL时,那么需要更新该字段
-                    if (createTableParam.getFieldDefaultValue() != null
-                            && !ColumnUtils.DEFAULT_VALUE.equals(createTableParam.getFieldDefaultValue())) {
-                        modifyFieldList.add(modifyTableParam);
-                        continue;
-                    }
-                }
-                else if (!sysColumn.getColumn_default().equals(createTableParam.getFieldDefaultValue())) {
-                    if (MySqlFieldType.BIT.toString().toLowerCase().equals(createTableParam.getFieldType())
-                            && !createTableParam.isFieldDefaultValueNative()) {
-                        if (("true".equals(createTableParam.getFieldDefaultValue())
-                                || "1".equals(createTableParam.getFieldDefaultValue()))
-                                && !"b'1'".equals(sysColumn.getColumn_default())) {
-                            // 两者不相等时,需要更新该字段
-                            modifyFieldList.add(modifyTableParam);
-                            continue;
-                        }
-                        if (("false".equals(createTableParam.getFieldDefaultValue())
-                                || "0".equals(createTableParam.getFieldDefaultValue()))
-                                && !"b'0'".equals(sysColumn.getColumn_default())) {
-                            // 两者不相等时,需要更新该字段
-                            modifyFieldList.add(modifyTableParam);
-                            continue;
-                        }
-                    }
-                    else {
-                        // 两者不相等时,需要更新该字段
-                        modifyFieldList.add(modifyTableParam);
-                        continue;
-                    }
-                }
-                // 7.验证是否可以为null(主键不参与是否为null的更新)
-                if (sysColumn.getIs_nullable().equals("NO") && !createTableParam.isFieldIsKey()) {
-                    if (createTableParam.isFieldIsNull()) {
-                        // 一个是可以一个是不可用,所以需要更新该字段
-                        modifyFieldList.add(modifyTableParam);
-                        continue;
-                    }
-                }
-                else if (sysColumn.getIs_nullable().equals("YES") && !createTableParam.isFieldIsKey()) {
-                    if (!createTableParam.isFieldIsNull()) {
-                        // 一个是可以一个是不可用,所以需要更新该字段
-                        modifyFieldList.add(modifyTableParam);
-                        continue;
-                    }
-                }
-                // 8.验证注释
-                if (!sysColumn.getColumn_comment().equals(createTableParam.getFieldComment())) {
-                    modifyFieldList.add(modifyTableParam);
-                }
-            }
-        }
-        return modifyFieldList;
-    }
-
-    /**
-     * 将allFieldList转换为Map结构
-     */
-    private Map getAllFieldMap(List allFieldList) {
-        // 将fieldList转成Map类型,字段名作为主键
-        Map fieldMap = new HashMap<>();
-        for (Object obj : allFieldList) {
-            CreateTableParam createTableParam = (CreateTableParam) obj;
-            fieldMap.put(createTableParam.getFieldName().toLowerCase(), createTableParam);
-        }
-        return fieldMap;
-    }
-
-    /**
-     * 根据数据库中表的结构和model中表的结构对比找出删除的字段
-     * @param columnNames 数据库中的结构
-     * @param allFieldList model中的所有字段
-     */
-    private List getRemoveFieldList(List columnNames, List allFieldList) {
-        List toLowerCaseColumnNames = ClassTools.toLowerCase(columnNames);
-        Map fieldMap = getAllFieldMap(allFieldList);
-        // 用于存删除的字段
-        List removeFieldList = new ArrayList<>();
-        for (String fieldNm : toLowerCaseColumnNames) {
-            // 判断该字段在新的model结构中是否存在
-            if (fieldMap.get(fieldNm) == null) {
-                // 不存在,做删除处理
-                removeFieldList.add(fieldNm);
-            }
-        }
-        return removeFieldList;
-    }
-
-    /**
-     * 根据数据库中表的结构和model中表的结构对比找出新增的字段
-     * @param allFieldList model中的所有字段
-     * @param columnNames 数据库中的结构
-     * @return 新增的字段
-     */
-    private List getAddFieldList(List allFieldList, List columnNames) {
-        List toLowerCaseColumnNames = ClassTools.toLowerCase(columnNames);
-        List addFieldList = new ArrayList<>();
-        for (Object obj : allFieldList) {
-            CreateTableParam createTableParam = (CreateTableParam) obj;
-            // 循环新的model中的字段,判断是否在数据库中已经存在
-            if (!toLowerCaseColumnNames.contains(createTableParam.getFieldName().toLowerCase())) {
-                // 不存在,表示要在数据库中增加该字段
-                addFieldList.add(obj);
-            }
-        }
-        return addFieldList;
-    }
-
-    /**
-     * 迭代出所有model的所有fields
-     * @param clas 准备做为创建表依据的class
-     * @return 表的全部字段
-     */
-    public List getAllFields(Class clas) {
-        String idxPrefix = actableProperties.getPrefixIndex();
-        String uniPrefix = actableProperties.getPrefixUnique();
-        List fieldList = new ArrayList<>();
-        Field[] fields = clas.getDeclaredFields();
-
-        // 判断是否有父类,如果有拉取父类的field,这里只支持多层继承
-        fields = this.recursionParents(clas, fields);
-
-        for (Field field : fields) {
-            // 判断方法中是否有指定注解类型的注解
-            if (ColumnUtils.hasColumn(field, clas)) {
-                CreateTableParam param = new CreateTableParam();
-                param.setFieldName(ColumnUtils.getColumnName(field, clas));
-                param.setOrder(ColumnUtils.getColumnOrder(field, clas));
-                MySqlTypeAndLength mySqlTypeAndLength = ColumnUtils.getMySqlTypeAndLength(field, clas);
-                param.setFieldType(mySqlTypeAndLength.getType().toLowerCase());
-                param.setFileTypeLength(mySqlTypeAndLength.getLengthCount());
-                if (mySqlTypeAndLength.getLengthCount() == 1) {
-                    param.setFieldLength(mySqlTypeAndLength.getLength());
-                }
-                else if (mySqlTypeAndLength.getLengthCount() == 2) {
-                    param.setFieldLength(mySqlTypeAndLength.getLength());
-                    param.setFieldDecimalLength(mySqlTypeAndLength.getDecimalLength());
-                }
-                param.setFieldIsNull(ColumnUtils.isNull(field, clas));
-                param.setFieldIsKey(ColumnUtils.isKey(field, clas));
-                param.setFieldIsAutoIncrement(ColumnUtils.isAutoIncrement(field, clas));
-                param.setFieldDefaultValue(ColumnUtils.getDefaultValue(field, clas));
-                param.setFieldDefaultValueNative(ColumnUtils.getDefaultValueNative(field, clas));
-                param.setFieldComment(ColumnUtils.getComment(field, clas));
-                // 获取当前字段的@Index注解
-                Index index = field.getAnnotation(Index.class);
-                if (null != index) {
-                    String[] indexValue = index.columns();
-                    param
-                        .setFiledIndexName(
-                                (index.value() == null || index.value().equals(""))
-                                        ? (idxPrefix + ((indexValue.length == 0)
-                                                ? ColumnUtils.getColumnName(field, clas) : stringArrFormat(indexValue)))
-                                        : idxPrefix + index.value());
-                    param.setFiledIndexValue(
-                            indexValue.length == 0 ? Collections.singletonList(ColumnUtils.getColumnName(field, clas))
-                                    : Arrays.asList(indexValue));
-                }
-                // 获取当前字段的@Unique注解
-                Unique unique = field.getAnnotation(Unique.class);
-                if (null != unique) {
-                    String[] uniqueValue = unique.columns();
-                    param.setFiledUniqueName((unique.value() == null || unique.value().equals(""))
-                            ? (uniPrefix + ((uniqueValue.length == 0) ? ColumnUtils.getColumnName(field, clas)
-                                    : stringArrFormat(uniqueValue)))
-                            : uniPrefix + unique.value());
-                    param.setFiledUniqueValue(
-                            uniqueValue.length == 0 ? Collections.singletonList(ColumnUtils.getColumnName(field, clas))
-                                    : Arrays.asList(uniqueValue));
-                }
-                // 获取当前字段的@IgnoreUpdate注解
-                IgnoreUpdate ignoreUpdate = field.getAnnotation(IgnoreUpdate.class);
-                if (null != ignoreUpdate) {
-                    param.setIgnoreUpdate(ignoreUpdate.value());
-                }
-                fieldList.add(param);
-            }
-        }
-        // 进行排序
-        fieldList.sort(Comparator.comparingInt(CreateTableParam::getOrder));
-        return new ArrayList<>(fieldList);
-    }
-
-    /**
-     * String[] to format xxx_yyy_sss
-     */
-    private String stringArrFormat(String[] arr) {
-        return Arrays.toString(arr).replaceAll(",", "_").replaceAll(" ", "").replace("[", "").replace("]", "");
-    }
-
-    /**
-     * 递归扫描父类的fields
-     * @param clas 类
-     * @param fields 属性
-     */
-    @SuppressWarnings("rawtypes")
-    private Field[] recursionParents(Class clas, Field[] fields) {
-        if (clas.getSuperclass() != null) {
-            Class clsSup = clas.getSuperclass();
-            List fieldList = new ArrayList<>(Arrays.asList(fields));
-            // 获取当前class的所有fields的name列表
-            List fdNames = getFieldNames(fieldList);
-            for (Field pfd : clsSup.getDeclaredFields()) {
-                // 避免重载属性
-                if (fdNames.contains(pfd.getName())) {
-                    continue;
-                }
-                fieldList.add(pfd);
-            }
-            fields = new Field[fieldList.size()];
-            int i = 0;
-            for (Object field : fieldList.toArray()) {
-                fields[i] = (Field) field;
-                i++;
-            }
-            fields = recursionParents(clsSup, fields);
-        }
-        return fields;
-    }
-
-    private List getFieldNames(List fieldList) {
-        List fdNames = new ArrayList<>();
-        for (Field fd : fieldList) {
-            fdNames.add(fd.getName());
-        }
-        return fdNames;
-    }
-
-    /**
-     * 根据传入的map创建或修改表结构
-     * @param baseTableMap 操作sql的数据结构
-     */
-    private void createOrModifyTableConstruct(Map> baseTableMap,
-            UpdateType updateType) {
-
-        // 1. 创建表
-        createTableByMap(baseTableMap.get(Constants.NEW_TABLE_MAP));
-
-        // CREATE模式不做删除和修改操作
-        if (updateType != UpdateType.CREATE) {
-            // 2. 删除要变更主键的表的原来的字段的主键
-            dropFieldsKeyByMap(baseTableMap.get(Constants.DROPKEY_TABLE_MAP));
-        }
-
-        // CREATE模式不做删除和修改操作
-        if (updateType != UpdateType.CREATE) {
-            // 3. 删除索引和约束
-            dropIndexAndUniqueByMap(baseTableMap.get(Constants.DROPINDEXANDUNIQUE_TABLE_MAP));
-            // 4. 删除字段
-            removeFieldsByMap(baseTableMap.get(Constants.REMOVE_TABLE_MAP));
-            // 5. 修改表注释
-            modifyTableCommentByMap(baseTableMap.get(Constants.MODIFY_TABLE_PROPERTY_MAP));
-            // 6. 修改字段类型等
-            modifyFieldsByMap(baseTableMap.get(Constants.MODIFY_TABLE_MAP));
-        }
-
-        // 7. 添加新的字段
-        addFieldsByMap(baseTableMap.get(Constants.ADD_TABLE_MAP));
-
-        // 8. 创建索引
-        addIndexByMap(baseTableMap.get(Constants.ADDINDEX_TABLE_MAP));
-
-        // 9. 创建约束
-        addUniqueByMap(baseTableMap.get(Constants.ADDUNIQUE_TABLE_MAP));
-
-    }
-
-    /**
-     * 根据map结构删除索引和唯一约束
-     * @param dropIndexAndUniqueMap 用于删除索引和唯一约束
-     */
-    private void dropIndexAndUniqueByMap(Map dropIndexAndUniqueMap) {
-        if (dropIndexAndUniqueMap.size() > 0) {
-            for (Map.Entry entry : dropIndexAndUniqueMap.entrySet()) {
-                String key = entry.getKey();
-                TableConfig value = entry.getValue();
-                for (Object obj : value.getList()) {
-                    Map map = new HashMap<>();
-                    map.put(key, obj);
-                    log.info("开始删除表" + key + "中的索引" + obj);
-                    createMysqlTablesMapper.dropTabelIndex(map);
-                    log.info("完成删除表" + key + "中的索引" + obj);
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构创建索引
-     * @param addIndexMap 用于创建索引和唯一约束
-     */
-    private void addIndexByMap(Map addIndexMap) {
-        if (addIndexMap.size() > 0) {
-            for (Map.Entry entry : addIndexMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    CreateTableParam fieldProperties = (CreateTableParam) obj;
-                    if (null != fieldProperties.getFiledIndexName()) {
-                        log.info("开始创建表" + entry.getKey() + "中的索引" + fieldProperties.getFiledIndexName());
-                        createMysqlTablesMapper.addTableIndex(map);
-                        log.info("完成创建表" + entry.getKey() + "中的索引" + fieldProperties.getFiledIndexName());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构创建唯一约束
-     * @param addUniqueMap 用于创建索引和唯一约束
-     */
-    private void addUniqueByMap(Map addUniqueMap) {
-        if (addUniqueMap.size() > 0) {
-            for (Map.Entry entry : addUniqueMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    CreateTableParam fieldProperties = (CreateTableParam) obj;
-                    if (null != fieldProperties.getFiledUniqueName()) {
-                        log.info("开始创建表" + entry.getKey() + "中的唯一约束" + fieldProperties.getFiledUniqueName());
-                        createMysqlTablesMapper.addTableUnique(map);
-                        log.info("完成创建表" + entry.getKey() + "中的唯一约束" + fieldProperties.getFiledUniqueName());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构修改表中的字段类型等
-     * @param modifyTableMap 用于存需要更新字段类型等的表名+结构
-     */
-    private void modifyFieldsByMap(Map modifyTableMap) {
-        // 做修改字段操作
-        if (modifyTableMap.size() > 0) {
-            for (Map.Entry entry : modifyTableMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    CreateTableParam fieldProperties = (CreateTableParam) obj;
-                    log.info("开始修改表" + entry.getKey() + "中的字段" + fieldProperties.getFieldName());
-                    createMysqlTablesMapper.modifyTableField(map);
-                    log.info("完成修改表" + entry.getKey() + "中的字段" + fieldProperties.getFieldName());
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构删除表中的字段
-     * @param removeTableMap 用于存需要删除字段的表名+结构
-     */
-    private void removeFieldsByMap(Map removeTableMap) {
-        // 做删除字段操作
-        if (removeTableMap.size() > 0) {
-            for (Map.Entry entry : removeTableMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    String fieldName = (String) obj;
-                    log.info("开始删除表" + entry.getKey() + "中的字段" + fieldName);
-                    createMysqlTablesMapper.removeTableField(map);
-                    log.info("完成删除表" + entry.getKey() + "中的字段" + fieldName);
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构更新表的注释
-     * @param modifyTableCommentMap 用于存需要更新表名+注释
-     */
-    private void modifyTableCommentByMap(Map modifyTableCommentMap) {
-        // 做更新的表注释
-        if (modifyTableCommentMap.size() > 0) {
-            for (Map.Entry entry : modifyTableCommentMap.entrySet()) {
-                for (String property : entry.getValue().getMap().keySet()) {
-                    Map map = new HashMap<>();
-                    Map tcMap = new HashMap<>();
-                    Object value = entry.getValue().getMap().get(property);
-                    tcMap.put(property, value);
-                    map.put(entry.getKey(), new TableConfig(tcMap));
-                    log.info("开始更新表" + entry.getKey() + "的" + property + "为" + value);
-                    createMysqlTablesMapper.modifyTableProperty(map);
-                    log.info("完成更新表" + entry.getKey() + "的" + property + "为" + value);
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构对表中添加新的字段
-     * @param addTableMap 用于存需要增加字段的表名+结构
-     */
-    private void addFieldsByMap(Map addTableMap) {
-        // 做增加字段操作
-        if (addTableMap.size() > 0) {
-            for (Map.Entry entry : addTableMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    CreateTableParam fieldProperties = (CreateTableParam) obj;
-                    log.info("开始为表" + entry.getKey() + "增加字段" + fieldProperties.getFieldName());
-                    createMysqlTablesMapper.addTableField(map);
-                    log.info("完成为表" + entry.getKey() + "增加字段" + fieldProperties.getFieldName());
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构删除要变更表中字段的主键
-     * @param dropKeyTableMap 用于存需要删除主键的表名+结构
-     */
-    private void dropFieldsKeyByMap(Map dropKeyTableMap) {
-        // 先去做删除主键的操作,这步操作必须在增加和修改字段之前!
-        if (dropKeyTableMap.size() > 0) {
-            for (Map.Entry entry : dropKeyTableMap.entrySet()) {
-                for (Object obj : entry.getValue().getList()) {
-                    Map map = new HashMap<>();
-                    map.put(entry.getKey(), obj);
-                    CreateTableParam fieldProperties = (CreateTableParam) obj;
-                    log.info("开始为表" + entry.getKey() + "删除主键" + fieldProperties.getFieldName());
-                    createMysqlTablesMapper.dropKeyTableField(map);
-                    log.info("完成为表" + entry.getKey() + "删除主键" + fieldProperties.getFieldName());
-                }
-            }
-        }
-    }
-
-    /**
-     * 根据map结构创建表
-     * @param newTableMap 用于存需要创建的表名+结构
-     */
-    private void createTableByMap(Map newTableMap) {
-        // 做创建表操作
-        for (Map.Entry entry : newTableMap.entrySet()) {
-            Map map = new HashMap<>();
-            map.put(entry.getKey(), entry.getValue());
-            log.info("开始创建表:" + entry.getKey());
-            createMysqlTablesMapper.createTable(map);
-            log.info("完成创建表:" + entry.getKey());
-        }
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassScanner.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassScanner.java
deleted file mode 100644
index d5d03207c..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassScanner.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package cn.bootx.common.actable.utils;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.BeanDefinitionStoreException;
-import org.springframework.context.ResourceLoaderAware;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternUtils;
-import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.core.type.filter.AnnotationTypeFilter;
-import org.springframework.core.type.filter.TypeFilter;
-import org.springframework.util.ClassUtils;
-import org.springframework.util.SystemPropertyUtils;
-
-import java.io.IOException;
-import java.lang.annotation.Annotation;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * 类扫描器
- *
- * @author xxm
- * @date 2023/1/16
- */
-@Slf4j
-public class ClassScanner implements ResourceLoaderAware {
-
-    // 保存过滤规则要排除的注解
-    private final List includeFilters = new LinkedList<>();
-
-    private final List excludeFilters = new LinkedList<>();
-
-    private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
-
-    private MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(
-            this.resourcePatternResolver);
-
-    public static Set> scan(String[] basePackages, Class... annotations) {
-        ClassScanner cs = new ClassScanner();
-
-        if (annotations != null) {
-            for (Class anno : annotations) {
-                cs.addIncludeFilter(new AnnotationTypeFilter(anno));
-            }
-        }
-
-        Set> classes = new HashSet<>();
-        for (String basePackage : basePackages) {
-            classes.addAll(cs.doScan(basePackage));
-        }
-        return classes;
-    }
-
-    public void setResourceLoader(ResourceLoader resourceLoader) {
-        this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
-        this.metadataReaderFactory = new CachingMetadataReaderFactory(resourceLoader);
-    }
-
-    public void addIncludeFilter(TypeFilter includeFilter) {
-        this.includeFilters.add(includeFilter);
-    }
-
-    /**
-     * 搜索类
-     * @param basePackage
-     * @return
-     */
-    public Set> doScan(String basePackage) {
-        Set> classes = new HashSet<>();
-        try {
-            String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
-                    + ClassUtils.convertClassNameToResourcePath(SystemPropertyUtils.resolvePlaceholders(basePackage))
-                    + "/**/*.class";
-            Resource[] resources = this.resourcePatternResolver.getResources(packageSearchPath);
-
-            for (Resource resource : resources) {
-                if (resource.isReadable()) {
-                    MetadataReader metadataReader = this.metadataReaderFactory.getMetadataReader(resource);
-                    if ((includeFilters.size() == 0 && excludeFilters.size() == 0) || matches(metadataReader)) {
-                        try {
-                            classes.add(Class.forName(metadataReader.getClassMetadata().getClassName()));
-                        }
-                        catch (ClassNotFoundException e) {
-                            log.error("类不存在", e);
-                        }
-                    }
-                }
-            }
-        }
-        catch (IOException ex) {
-            throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);
-        }
-        return classes;
-    }
-
-    protected boolean matches(MetadataReader metadataReader) throws IOException {
-        for (TypeFilter tf : this.excludeFilters) {
-            if (tf.match(metadataReader, this.metadataReaderFactory)) {
-                return false;
-            }
-        }
-        for (TypeFilter tf : this.includeFilters) {
-            if (tf.match(metadataReader, this.metadataReaderFactory)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassTools.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassTools.java
deleted file mode 100644
index 6ee757342..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ClassTools.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.bootx.common.actable.utils;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 通过包名获取class
- *
- * @author sunchenbin
- * @version 2016年6月23日 下午5:55:18
- */
-public class ClassTools {
-
-    /**
-     * 取出list对象中的某个属性的值作为list返回
-     * @param objList
-     * @param fieldName
-     * @return
-     */
-    public static  List getPropertyValueList(List objList, String fieldName) {
-        List list = new ArrayList();
-        try {
-            for (T object : objList) {
-                Field field = object.getClass().getDeclaredField(fieldName);
-                field.setAccessible(true);
-                list.add((E) field.get(object));
-            }
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return list;
-    }
-
-    /**
-     * List中的string转换为大写
-     * @param list
-     * @return
-     */
-    public static List toLowerCase(List list) {
-        if (null == list || list.size() == 0) {
-            return list;
-        }
-        List upperList = new ArrayList();
-        for (String str : list) {
-            upperList.add(str.toLowerCase());
-        }
-        return upperList;
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ColumnUtils.java b/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ColumnUtils.java
deleted file mode 100644
index c73230904..000000000
--- a/bootx-commons/common-actable/src/main/java/cn/bootx/common/actable/utils/ColumnUtils.java
+++ /dev/null
@@ -1,411 +0,0 @@
-package cn.bootx.common.actable.utils;
-
-import cn.bootx.common.actable.annotation.impl.ColumnImpl;
-import cn.bootx.common.actable.command.JavaToMysqlType;
-import cn.bootx.common.actable.command.MySqlTypeAndLength;
-import cn.bootx.common.core.annotation.actable.*;
-import cn.bootx.common.core.code.actable.MySqlCharset;
-import cn.bootx.common.core.code.actable.MySqlEngine;
-import cn.bootx.common.core.code.actable.MySqlFieldType;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.google.common.base.CaseFormat;
-import org.apache.commons.lang3.time.DateFormatUtils;
-import org.springframework.beans.BeanUtils;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-/**
- * 行工具类
- *
- * @author xxm
- * @date 2023/1/16
- */
-public class ColumnUtils {
-
-    /** 默认值 */
-    public static final String DEFAULT_VALUE = "DEFAULT";
-
-    /** SQL 转义字符 */
-    public static final String SQL_ESCAPE_CHARACTER = "`";
-
-    /**
-     * 获取Mysql的类型,以及类型需要设置几个长度,这里构建成map的样式
-     * 构建Map(字段名(小写),需要设置几个长度(0表示不需要设置,1表示需要设置一个,2表示需要设置两个))
-     */
-    public static final Map mySqlTypeAndLengthMap;
-
-    /**
-     * 获取表名称
-     */
-    public static String getTableName(Class clazz) {
-        Table table = clazz.getAnnotation(Table.class);
-        TableName tableNamePlus = clazz.getAnnotation(TableName.class);
-        EnableTimeSuffix enableTimeSuffix = clazz.getAnnotation(EnableTimeSuffix.class);
-        if (!hasTableAnnotation(clazz)) {
-            return null;
-        }
-        String finalTableName = "";
-        if (table != null && StrUtil.isNotBlank(table.name())) {
-            finalTableName = table.name();
-        }
-        if (table != null && StrUtil.isNotBlank(table.value())) {
-            finalTableName = table.value();
-        }
-        if (tableNamePlus != null && StrUtil.isNotBlank(tableNamePlus.value())) {
-            finalTableName = tableNamePlus.value();
-        }
-        if (StrUtil.isBlank(finalTableName)) {
-            // 都为空时采用类名按照驼峰格式转会为表名
-            finalTableName = getBuildLowerName(clazz.getSimpleName());
-        }
-        if (null != enableTimeSuffix && enableTimeSuffix.value()) {
-            finalTableName = appendTimeSuffix(finalTableName, enableTimeSuffix.pattern());
-        }
-        return finalTableName;
-    }
-
-    /**
-     * 获取表备注
-     */
-    public static String getTableComment(Class clazz) {
-        Table table = clazz.getAnnotation(Table.class);
-        if (!hasTableAnnotation(clazz)) {
-            return "";
-        }
-        if (table != null && StrUtil.isNotBlank(table.comment())) {
-            return table.comment();
-        }
-        return "";
-    }
-
-    /**
-     * 获取表字符集
-     */
-    public static MySqlCharset getTableCharset(Class clazz) {
-        Table table = clazz.getAnnotation(Table.class);
-        if (!hasTableAnnotation(clazz)) {
-            return null;
-        }
-        if (table != null && table.charset() != MySqlCharset.DEFAULT) {
-            return table.charset();
-        }
-        return null;
-    }
-
-    /**
-     * 获取表引擎类型
-     */
-    public static MySqlEngine getTableEngine(Class clazz) {
-        Table table = clazz.getAnnotation(Table.class);
-        if (!hasTableAnnotation(clazz)) {
-            return null;
-        }
-        if (table != null && table.engine() != MySqlEngine.DEFAULT) {
-            return table.engine();
-        }
-        return null;
-    }
-
-    /**
-     * 获取行名称
-     * @return
-     */
-    public static String getColumnName(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        TableField tableField = field.getAnnotation(TableField.class);
-        TableId tableId = field.getAnnotation(TableId.class);
-        if (!hasColumn(field, clazz)) {
-            return null;
-        }
-        if (column != null && StrUtil.isNotBlank(column.name())) {
-            return column.name().toLowerCase().replace(SQL_ESCAPE_CHARACTER, "");
-        }
-        if (column != null && StrUtil.isNotBlank(column.value())) {
-            return column.value().toLowerCase().replace(SQL_ESCAPE_CHARACTER, "");
-        }
-        if (tableField != null && StrUtil.isNotBlank(tableField.value()) && tableField.exist()) {
-            return tableField.value().toLowerCase().replace(SQL_ESCAPE_CHARACTER, "");
-        }
-        if (tableId != null && StrUtil.isNotBlank(tableId.value())) {
-            return tableId.value().replace(SQL_ESCAPE_CHARACTER, "");
-        }
-        return getBuildLowerName(field.getName()).replace(SQL_ESCAPE_CHARACTER, "");
-    }
-
-    /**
-     * 获取数据库字段的排序
-     * @return
-     */
-    public static int getColumnOrder(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return 0;
-        }
-        return Optional.ofNullable(column).map(Column::order).orElse(0);
-    }
-
-    /**
-     * 获取构建小写表名称
-     */
-    private static String getBuildLowerName(String name) {
-        return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, name).toLowerCase();
-    }
-
-    /**
-     * 是否是主键
-     */
-    public static boolean isKey(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return false;
-        }
-        TableId tableId = field.getAnnotation(TableId.class);
-        if (column != null && column.isKey()) {
-            return true;
-        }
-        else {
-            return null != tableId;
-        }
-    }
-
-    /**
-     * 是否是自增主键
-     */
-    public static boolean isAutoIncrement(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return false;
-        }
-        return column != null && column.isAutoIncrement();
-    }
-
-    /**
-     * 是否可以为空
-     * @param field
-     * @param clazz
-     * @return
-     */
-    public static Boolean isNull(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return true;
-        }
-        boolean isKey = isKey(field, clazz);
-        // 主键默认为非空
-        if (isKey) {
-            return false;
-        }
-        if (column != null) {
-            return column.isNull();
-        }
-        return true;
-    }
-
-    /**
-     * 获取字段的备注
-     */
-    public static String getComment(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return null;
-        }
-        if (column != null && StrUtil.isNotBlank(column.comment())) {
-            return column.comment();
-        }
-        return "";
-    }
-
-    /**
-     * 获取默认值
-     */
-    public static String getDefaultValue(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            return null;
-        }
-        if (column != null && !DEFAULT_VALUE.equals(column.defaultValue())) {
-            return column.defaultValue();
-        }
-        return null;
-    }
-
-    /**
-     * 获取 开启默认值原生模式
-     */
-    public static boolean getDefaultValueNative(Field field, Class clazz) {
-        IsNativeDefValue isNativeDefValue = field.getAnnotation(IsNativeDefValue.class);
-        if (isNativeDefValue != null) {
-            return isNativeDefValue.value();
-        }
-        if (field.getGenericType().toString().equals("class java.lang.String")
-                || field.getGenericType().toString().equals("char")
-                || field.getGenericType().toString().equals("class java.lang.Boolean")
-                || field.getGenericType().toString().equals("boolean")) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Mysql 类型和长度
-     */
-    public static MySqlTypeAndLength getMySqlTypeAndLength(Field field, Class clazz) {
-        Column column = getColumn(field, clazz);
-        if (!hasColumn(field, clazz)) {
-            throw new RuntimeException("字段名:" + field.getName() + "没有字段标识的注解,异常抛出!");
-        }
-        if (column != null && column.type() != MySqlFieldType.DEFAULT) {
-            return buildMySqlTypeAndLength(field, column.type().toString().toLowerCase(), column.length(),
-                    column.decimalLength());
-        }
-        // 类型为空根据字段类型去默认匹配类型
-        MySqlFieldType mysqlType = JavaToMysqlType.javaToMysqlTypeMap.get(field.getGenericType().toString());
-        if (mysqlType == null) {
-            throw new RuntimeException("字段名:" + field.getName() + "不支持" + field.getGenericType().toString()
-                    + "类型转换到mysql类型,仅支持JavaToMysqlType类中的类型默认转换,异常抛出!");
-        }
-        String sqlType = mysqlType.toString().toLowerCase();
-        // 默认类型可以使用column来设置长度
-        if (column != null) {
-            return buildMySqlTypeAndLength(field, sqlType, column.length(), column.decimalLength());
-        }
-        return buildMySqlTypeAndLength(field, sqlType, 255, 0);
-    }
-
-    /**
-     * 构建 Mysql 类型和长度
-     */
-    private static MySqlTypeAndLength buildMySqlTypeAndLength(Field field, String type, int length, int decimalLength) {
-        MySqlTypeAndLength mySqlTypeAndLength = mySqlTypeAndLengthMap.get(type);
-        if (mySqlTypeAndLength == null) {
-            throw new RuntimeException("字段名:" + field.getName() + "使用的" + type
-                    + "类型,没有配置对应的MySqlTypeConstant,只支持创建MySqlTypeConstant中类型的字段,异常抛出!");
-        }
-        MySqlTypeAndLength targetMySqlTypeAndLength = new MySqlTypeAndLength();
-        BeanUtils.copyProperties(mySqlTypeAndLength, targetMySqlTypeAndLength);
-        if (length != 255) {
-            targetMySqlTypeAndLength.setLength(length);
-        }
-        if (decimalLength != 0) {
-            targetMySqlTypeAndLength.setDecimalLength(decimalLength);
-        }
-        return targetMySqlTypeAndLength;
-    }
-
-    /**
-     * 是否有 Table 注解
-     */
-    public static boolean hasTableAnnotation(Class clazz) {
-        Table table = clazz.getAnnotation(Table.class);
-        return table != null;
-    }
-
-    /**
-     * 本行是否需要进行处理,
-     */
-    public static boolean hasColumn(Field field, Class clazz) {
-        // 是否开启simple模式
-        boolean isSimple = isSimple(clazz);
-        // 不参与建表的字段
-        String[] excludeFields = excludeFields(clazz);
-        // 当前属性名在排除建表的字段内
-        if (Arrays.asList(excludeFields).contains(field.getName())) {
-            return false;
-        }
-        // 排除静态字段
-        if (Modifier.isStatic(field.getModifiers())) {
-            return false;
-        }
-        Column column = field.getAnnotation(Column.class);
-        TableField tableField = field.getAnnotation(TableField.class);
-        TableId tableId = field.getAnnotation(TableId.class);
-        // 判断是否忽略该字段
-        if (column != null && column.ignore()) {
-            return false;
-        }
-        // 开启了simple模式
-        if (column == null && (tableField == null || !tableField.exist()) && tableId == null) {
-            return isSimple;
-        }
-        return true;
-    }
-
-    /**
-     * 获取列注解
-     */
-    private static Column getColumn(Field field, Class clazz) {
-        // 不参与建表的字段
-        String[] excludeFields = excludeFields(clazz);
-        if (Arrays.asList(excludeFields).contains(field.getName())) {
-            return null;
-        }
-        Column column = field.getAnnotation(Column.class);
-        if (column != null) {
-            return column;
-        }
-        // 是否开启simple模式
-        // 开启了simple模式
-        if (isSimple(clazz)) {
-            return new ColumnImpl();
-        }
-        return null;
-    }
-
-    /**
-     * 排除字段
-     */
-    private static String[] excludeFields(Class clazz) {
-        String[] excludeFields = {};
-        Table tableName = clazz.getAnnotation(Table.class);
-        if (tableName != null) {
-            excludeFields = tableName.excludeFields();
-        }
-        return excludeFields;
-    }
-
-    /**
-     * 是否是简单模式
-     */
-    private static boolean isSimple(Class clazz) {
-        boolean isSimple = false;
-        Table tableName = clazz.getAnnotation(Table.class);
-        if (tableName != null) {
-            isSimple = tableName.isSimple();
-        }
-        return isSimple;
-    }
-
-    /**
-     * 添加时间后缀
-     * @param tableName 表名
-     * @param pattern 时间格式
-     * @return
-     */
-    public static String appendTimeSuffix(String tableName, String pattern) {
-        String suffix;
-        try {
-            suffix = DateFormatUtils.format(new Date(), pattern);
-        }
-        catch (Exception e) {
-            throw new RuntimeException("无法转换时间格式" + pattern);
-        }
-        return tableName + "_" + suffix;
-    }
-
-    /**
-     * 初始化 mysql的类型
-     */
-    static {
-        mySqlTypeAndLengthMap = new HashMap<>();
-        for (MySqlFieldType type : MySqlFieldType.values()) {
-            mySqlTypeAndLengthMap.put(type.toString().toLowerCase(), new MySqlTypeAndLength(type.getLengthCount(),
-                    type.getLengthDefault(), type.getDecimalLengthDefault(), type.toString().toLowerCase()));
-        }
-    }
-
-}
diff --git a/bootx-commons/common-actable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-actable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 4c025de3d..000000000
--- a/bootx-commons/common-actable/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-cn.bootx.common.actable.ActableAutoConfiguration
\ No newline at end of file
diff --git a/bootx-commons/common-actable/src/main/resources/mapper/system/CreateMysqlTablesMapper.xml b/bootx-commons/common-actable/src/main/resources/mapper/system/CreateMysqlTablesMapper.xml
deleted file mode 100644
index 00b9d2444..000000000
--- a/bootx-commons/common-actable/src/main/resources/mapper/system/CreateMysqlTablesMapper.xml
+++ /dev/null
@@ -1,315 +0,0 @@
-
-
-
-
-	
-	
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-	
-
-	
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-		
-	
-
-	
-	
-		
-			`${fields.fieldName}` ${fields.fieldType}
-		
-		
-			`${fields.fieldName}` ${fields.fieldType}(${fields.fieldLength})
-		
-		
-			`${fields.fieldName}`
-			${fields.fieldType}(${fields.fieldLength},${fields.fieldDecimalLength})
-		
-		
-			NULL
-		
-		
-			NOT NULL
-		
-		
-			AUTO_INCREMENT
-		
-		
-		
-		
-			
-				
-					DEFAULT 1
-				
-				
-					DEFAULT 0
-				
-				
-					DEFAULT 1
-				
-				
-					DEFAULT 0
-				
-			
-			
-				DEFAULT ${fields.fieldDefaultValue}
-			
-			
-				
-					DEFAULT ${fields.fieldDefaultValue}
-				
-				
-					DEFAULT #{fields.fieldDefaultValue}
-				
-			
-		
-		
-		
-		
-			
-				
-					DEFAULT 1
-				
-				
-					DEFAULT 0
-				
-				
-					DEFAULT 1
-				
-				
-					DEFAULT 0
-				
-			
-			
-				DEFAULT ${fields.fieldDefaultValue}
-			
-			
-				
-					DEFAULT ${fields.fieldDefaultValue}
-				
-				
-					DEFAULT #{fields.fieldDefaultValue}
-				
-			
-		
-		
-			COMMENT #{fields.fieldComment}
-		
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
-	
-	
-
diff --git a/bootx-commons/common-cache/pom.xml b/bootx-commons/common-cache/pom.xml
index 4dbba5ad2..e27acc13e 100644
--- a/bootx-commons/common-cache/pom.xml
+++ b/bootx-commons/common-cache/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-commons
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/CacheAutoConfiguration.java b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/CacheAutoConfiguration.java
similarity index 85%
rename from bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/CacheAutoConfiguration.java
rename to bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/CacheAutoConfiguration.java
index 9170f6517..f63761cad 100644
--- a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/CacheAutoConfiguration.java
+++ b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/CacheAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.cache;
+package cn.bootx.platform.common.cache;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@@ -8,7 +8,7 @@
  * 缓存配置
  *
  * @author xxm
- * @date 2022/12/18
+ * @since 2022/12/18
  */
 @ComponentScan
 @ConfigurationPropertiesScan
diff --git a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCache.java b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCache.java
similarity index 93%
rename from bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCache.java
rename to bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCache.java
index 0c98d1037..8952c96bb 100644
--- a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCache.java
+++ b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCache.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.cache.configuration;
+package cn.bootx.platform.common.cache.configuration;
 
 import org.springframework.data.redis.cache.RedisCache;
 import org.springframework.data.redis.cache.RedisCacheConfiguration;
@@ -11,7 +11,7 @@
  * 自定义RedisCache, 缓存值为空不报错
  *
  * @author xxm
- * @date 2021/7/6
+ * @since 2021/7/6
  */
 public class BootxRedisCache extends RedisCache {
 
diff --git a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCacheManager.java b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCacheManager.java
similarity index 97%
rename from bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCacheManager.java
rename to bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCacheManager.java
index 612f1ea68..588e0d4d3 100644
--- a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/configuration/BootxRedisCacheManager.java
+++ b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/configuration/BootxRedisCacheManager.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.cache.configuration;
+package cn.bootx.platform.common.cache.configuration;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.Setter;
@@ -16,7 +16,7 @@
  * 自定义Redis缓存管理
  *
  * @author xxm
- * @date 2021/6/11
+ * @since 2021/6/11
  */
 public class BootxRedisCacheManager extends RedisCacheManager {
 
diff --git a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingConfiguration.java b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingConfiguration.java
similarity index 96%
rename from bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingConfiguration.java
rename to bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingConfiguration.java
index 80fa16ff9..595bd9aa7 100644
--- a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingConfiguration.java
+++ b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingConfiguration.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.cache.manager;
+package cn.bootx.platform.common.cache.manager;
 
-import cn.bootx.common.cache.configuration.BootxRedisCacheManager;
+import cn.bootx.platform.common.cache.configuration.BootxRedisCacheManager;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -25,7 +25,7 @@
  * 缓存自动配置
  *
  * @author xxm
- * @date 2021/6/11
+ * @since 2021/6/11
  */
 @Configuration
 @EnableCaching
diff --git a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingProperties.java b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingProperties.java
similarity index 90%
rename from bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingProperties.java
rename to bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingProperties.java
index e1300ed43..45ddc1a60 100644
--- a/bootx-commons/common-cache/src/main/java/cn/bootx/common/cache/manager/CachingProperties.java
+++ b/bootx-commons/common-cache/src/main/java/cn/bootx/platform/common/cache/manager/CachingProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.cache.manager;
+package cn.bootx.platform.common.cache.manager;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -11,7 +11,7 @@
  * spring cache 配置
  *
  * @author xxm
- * @date 2021/6/11
+ * @since 2021/6/11
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-commons/common-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 542315e96..75ea486d6 100644
--- a/bootx-commons/common-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.cache.CacheAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.cache.CacheAutoConfiguration
diff --git a/bootx-commons/common-data-translate/pom.xml b/bootx-commons/common-data-translate/pom.xml
index 5b6005039..41565eb0b 100644
--- a/bootx-commons/common-data-translate/pom.xml
+++ b/bootx-commons/common-data-translate/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-commons
-        1.2.3
+        1.3.6.2
     
 
     4.0.0
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/ConvertInfo.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/ConvertInfo.java
deleted file mode 100644
index 9d652b09b..000000000
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/ConvertInfo.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.bootx.common.translate.domain;
-
-import cn.bootx.common.core.annotation.Translate;
-import cn.bootx.common.core.annotation.TranslationResult;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-
-import java.lang.reflect.Field;
-
-/**
- * 字段信息
- *
- * @author xxm
- * @date 2023/1/31
- */
-@Getter
-@Setter
-@Accessors(chain = true)
-public class ConvertInfo {
-
-    // 字段名
-    private String name;
-
-    // 所属字段属性
-    private Field field;
-
-    // 翻译注解
-    private Translate translate;
-
-    // 嵌套翻译注解
-    private TranslationResult translationResult;
-
-}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/TranslationHandler.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/TranslationHandler.java
deleted file mode 100644
index 7560b1079..000000000
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/TranslationHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.common.translate.handler;
-
-import cn.bootx.common.core.annotation.TranslationResult;
-
-import java.lang.reflect.Type;
-
-/**
- * 字典值翻译接口
- *
- * @author xxm
- * @date 2022/12/20
- */
-public interface TranslationHandler {
-
-    /**
-     * 匹配
-     */
-    /**
-     * openId类型是否匹配
-     */
-    boolean adaptation(Type type);
-
-    /**
-     * 翻译
-     */
-    void translation(Object object, Type type, TranslationResult translationResult);
-
-}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/DictTranslationService.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/DictTranslationService.java
deleted file mode 100644
index bac0e4ab9..000000000
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/DictTranslationService.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.common.translate.service;
-
-/**
- * @author xxm
- * @date 2023/1/29
- */
-public interface DictTranslationService {
-
-    /**
-     * 初始化字典值字段翻译缓存
-     */
-    void initDictTranslationCache();
-
-}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/DataTranslateAutoConfiguration.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/DataTranslateAutoConfiguration.java
similarity index 79%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/DataTranslateAutoConfiguration.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/DataTranslateAutoConfiguration.java
index c760d0953..812402f6f 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/DataTranslateAutoConfiguration.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/DataTranslateAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.translate;
+package cn.bootx.platform.common.translate;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
@@ -7,7 +7,7 @@
  * 数据翻译模块
  *
  * @author xxm
- * @date 2022/12/27
+ * @since 2022/12/27
  */
 @ComponentScan
 @AutoConfiguration
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationAnnotationAdvisor.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationAnnotationAdvisor.java
similarity index 86%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationAnnotationAdvisor.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationAnnotationAdvisor.java
index 6afcbbb05..87627aeea 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationAnnotationAdvisor.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationAnnotationAdvisor.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.translate.aop;
+package cn.bootx.platform.common.translate.aop;
 
-import cn.bootx.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
 import lombok.RequiredArgsConstructor;
 import org.aopalliance.aop.Advice;
 import org.springframework.aop.Pointcut;
@@ -12,7 +12,7 @@
  * 字段翻译切入点配置
  *
  * @author xxm
- * @date 2022/12/20
+ * @since 2022/12/20
  */
 @Component
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationInterceptor.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationInterceptor.java
similarity index 90%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationInterceptor.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationInterceptor.java
index b0742f9d4..ab91ded9a 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/aop/TranslationInterceptor.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/aop/TranslationInterceptor.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.translate.aop;
+package cn.bootx.platform.common.translate.aop;
 
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.translate.handler.TranslationHandler;
+import cn.bootx.platform.common.translate.handler.TranslationHandler;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
 import cn.hutool.core.util.TypeUtil;
 import lombok.RequiredArgsConstructor;
 import org.aopalliance.intercept.MethodInterceptor;
@@ -19,7 +19,7 @@
  * 字段翻译切点
  *
  * @author xxm
- * @date 2022/12/20
+ * @since 2022/12/20
  */
 @Component
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheFilter.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheFilter.java
similarity index 94%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheFilter.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheFilter.java
index b03ba3e4d..0ba55529a 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheFilter.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheFilter.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.translate.cache;
+package cn.bootx.platform.common.translate.cache;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@@ -16,7 +16,7 @@
  * session缓存,用来减少一个请求中多次获取用户信息导致的多次访问redis
  *
  * @author xxm
- * @date 2022/1/8
+ * @since 2022/1/8
  */
 @Order(value = Integer.MIN_VALUE + 1)
 @Component
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheLocal.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheLocal.java
similarity index 98%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheLocal.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheLocal.java
index 44cad977f..cdd41026c 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheLocal.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheLocal.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.translate.cache;
+package cn.bootx.platform.common.translate.cache;
 
 import com.alibaba.ttl.TransmittableThreadLocal;
 import com.google.common.base.Objects;
@@ -14,7 +14,7 @@
  * 字典翻译缓存
  *
  * @author xxm
- * @date 2023/1/29
+ * @since 2023/1/29
  */
 @Slf4j
 @Service
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheService.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheService.java
similarity index 89%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheService.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheService.java
index c5a333cc0..f2dd33c28 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/cache/TranslationCacheService.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/cache/TranslationCacheService.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.translate.cache;
+package cn.bootx.platform.common.translate.cache;
 
-import cn.bootx.common.core.annotation.Translate;
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.translate.cache.TranslationCacheLocal.Cache;
-import cn.bootx.common.translate.domain.ConvertInfo;
-import cn.bootx.common.translate.service.DictTranslationService;
+import cn.bootx.platform.common.translate.domain.ConvertInfo;
+import cn.bootx.platform.common.translate.service.DictTranslationService;
+import cn.bootx.platform.common.core.annotation.Translate;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.translate.cache.TranslationCacheLocal.Cache;
 import cn.hutool.core.annotation.AnnotationUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ClassUtil;
@@ -21,8 +21,9 @@
 import java.util.stream.Collectors;
 
 /**
+ * 翻译缓存服务
  * @author xxm
- * @date 2023/1/30
+ * @since 2023/1/30
  */
 @Slf4j
 @Service
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/Cache.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/Cache.java
similarity index 86%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/Cache.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/Cache.java
index 2c3faca05..ec82e8de2 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/domain/Cache.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/Cache.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.translate.domain;
+package cn.bootx.platform.common.translate.domain;
 
-import cn.bootx.common.translate.cache.TranslationCacheLocal;
+import cn.bootx.platform.common.translate.cache.TranslationCacheLocal;
 import lombok.Getter;
 import lombok.Setter;
 
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/ConvertInfo.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/ConvertInfo.java
new file mode 100644
index 000000000..83751d611
--- /dev/null
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/domain/ConvertInfo.java
@@ -0,0 +1,34 @@
+package cn.bootx.platform.common.translate.domain;
+
+import cn.bootx.platform.common.core.annotation.Translate;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字段信息
+ *
+ * @author xxm
+ * @since 2023/1/31
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class ConvertInfo {
+
+    // 字段名
+    private String name;
+
+    // 所属字段属性
+    private Field field;
+
+    // 翻译注解
+    private Translate translate;
+
+    // 嵌套翻译注解
+    private TranslationResult translationResult;
+
+}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/TranslationHandler.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/TranslationHandler.java
new file mode 100644
index 000000000..75c3d0858
--- /dev/null
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/TranslationHandler.java
@@ -0,0 +1,28 @@
+package cn.bootx.platform.common.translate.handler;
+
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+
+import java.lang.reflect.Type;
+
+/**
+ * 字典值翻译接口
+ *
+ * @author xxm
+ * @since 2022/12/20
+ */
+public interface TranslationHandler {
+
+    /**
+     * 匹配
+     */
+    /**
+     * openId类型是否匹配
+     */
+    boolean adaptation(Type type);
+
+    /**
+     * 翻译
+     */
+    void translation(Object object, Type type, TranslationResult translationResult);
+
+}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultObjectTranslationHandler.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultObjectTranslationHandler.java
similarity index 83%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultObjectTranslationHandler.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultObjectTranslationHandler.java
index 83760b221..de14acd86 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultObjectTranslationHandler.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultObjectTranslationHandler.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.translate.handler.impl;
+package cn.bootx.platform.common.translate.handler.impl;
 
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.translate.handler.TranslationHandler;
-import cn.bootx.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.translate.handler.TranslationHandler;
 import cn.hutool.core.util.ClassUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
@@ -16,7 +16,7 @@
  * ResResult返回类的处理, 泛型 T 不为泛型类
  *
  * @author xxm
- * @date 2022/12/20
+ * @since 2022/12/20
  */
 @Component
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageIterableTranslationHandler.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageIterableTranslationHandler.java
similarity index 85%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageIterableTranslationHandler.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageIterableTranslationHandler.java
index 91664e1d4..b9893a680 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageIterableTranslationHandler.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageIterableTranslationHandler.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.translate.handler.impl;
+package cn.bootx.platform.common.translate.handler.impl;
 
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.translate.handler.TranslationHandler;
-import cn.bootx.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.translate.handler.TranslationHandler;
 import cn.hutool.core.util.ClassUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
@@ -17,7 +17,7 @@
  * ResResult返回类的处理, 泛型 T 为 Iterable 的实现, 比如 List
  *
  * @author xxm
- * @date 2022/12/20
+ * @since 2022/12/20
  */
 @Component
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageTranslationHandler.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageTranslationHandler.java
similarity index 84%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageTranslationHandler.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageTranslationHandler.java
index 4b11a33e7..2ddff40da 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/handler/impl/ResultPageTranslationHandler.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/handler/impl/ResultPageTranslationHandler.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.translate.handler.impl;
+package cn.bootx.platform.common.translate.handler.impl;
 
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.util.CollUtil;
-import cn.bootx.common.translate.handler.TranslationHandler;
-import cn.bootx.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.translate.service.FieldTranslationService;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.util.CollUtil;
+import cn.bootx.platform.common.translate.handler.TranslationHandler;
 import cn.hutool.core.util.ClassUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.RequiredArgsConstructor;
@@ -19,7 +19,7 @@
  * ResResult返回类的处理, 泛型 T 为分页类
  *
  * @author xxm
- * @date 2022/12/20
+ * @since 2022/12/20
  */
 @Component
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/DictTranslationService.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/DictTranslationService.java
new file mode 100644
index 000000000..a97767137
--- /dev/null
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/DictTranslationService.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.common.translate.service;
+
+/**
+ * @author xxm
+ * @since 2023/1/29
+ */
+public interface DictTranslationService {
+
+    /**
+     * 初始化字典值字段翻译缓存
+     */
+    void initDictTranslationCache();
+
+}
diff --git a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/FieldTranslationService.java b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/FieldTranslationService.java
similarity index 94%
rename from bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/FieldTranslationService.java
rename to bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/FieldTranslationService.java
index e9b25f060..ba39c3de4 100644
--- a/bootx-commons/common-data-translate/src/main/java/cn/bootx/common/translate/service/FieldTranslationService.java
+++ b/bootx-commons/common-data-translate/src/main/java/cn/bootx/platform/common/translate/service/FieldTranslationService.java
@@ -1,12 +1,12 @@
-package cn.bootx.common.translate.service;
+package cn.bootx.platform.common.translate.service;
 
-import cn.bootx.common.core.annotation.Translate;
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.core.function.CollectorsFunction;
-import cn.bootx.common.translate.cache.TranslationCacheLocal;
-import cn.bootx.common.translate.cache.TranslationCacheLocal.Cache;
-import cn.bootx.common.translate.cache.TranslationCacheService;
-import cn.bootx.common.translate.domain.ConvertInfo;
+import cn.bootx.platform.common.core.annotation.Translate;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.function.CollectorsFunction;
+import cn.bootx.platform.common.translate.cache.TranslationCacheLocal;
+import cn.bootx.platform.common.translate.cache.TranslationCacheLocal.Cache;
+import cn.bootx.platform.common.translate.cache.TranslationCacheService;
+import cn.bootx.platform.common.translate.domain.ConvertInfo;
 import cn.hutool.core.annotation.AnnotationUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ClassUtil;
@@ -26,7 +26,7 @@
  * 翻译服务
  *
  * @author xxm
- * @date 2023/1/29
+ * @since 2023/1/29
  */
 @Slf4j
 @Service
@@ -63,7 +63,7 @@ private void translation0(Object object) {
         List translationResults = list.stream()
             .filter(o -> Objects.nonNull(o.getTranslationResult()))
             .collect(Collectors.toList());
-        for (cn.bootx.common.translate.domain.ConvertInfo translationResult : translationResults) {
+        for (ConvertInfo translationResult : translationResults) {
             Object fieldValue = BeanUtil.getFieldValue(object, translationResult.getName());
             if (Objects.nonNull(fieldValue)) {
                 // 是否是集合
diff --git a/bootx-commons/common-data-translate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-data-translate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index df1fb2cc8..8bc162632 100644
--- a/bootx-commons/common-data-translate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-data-translate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.translate.DataTranslateAutoConfiguration
+cn.bootx.platform.common.translate.DataTranslateAutoConfiguration
diff --git a/bootx-commons/common-eventer/pom.xml b/bootx-commons/common-eventer/pom.xml
new file mode 100644
index 000000000..1acf04570
--- /dev/null
+++ b/bootx-commons/common-eventer/pom.xml
@@ -0,0 +1,16 @@
+
+
+    4.0.0
+    
+        cn.bootx.platform
+        bootx-commons
+        1.3.6.2
+    
+
+    common-eventer
+    jar
+
+
+
diff --git a/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/EventAutoConfiguration.java b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/EventAutoConfiguration.java
new file mode 100644
index 000000000..6011e04f4
--- /dev/null
+++ b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/EventAutoConfiguration.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.common.event;
+
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * 简单事件通知封装
+ * @author xxm
+ * @since 2023/7/28
+ */
+@ComponentScan
+@ConfigurationPropertiesScan
+@AutoConfiguration
+public class EventAutoConfiguration {
+}
diff --git a/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/code/EventTyoeEnum.java b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/code/EventTyoeEnum.java
new file mode 100644
index 000000000..18e375552
--- /dev/null
+++ b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/code/EventTyoeEnum.java
@@ -0,0 +1,9 @@
+package cn.bootx.platform.common.event.code;
+
+/**   
+ * 事件消息类型
+ * @author xxm  
+ * @since 2023/7/28 
+ */
+public enum EventTyoeEnum {
+}
diff --git a/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/domain/AbsBaseEvent.java b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/domain/AbsBaseEvent.java
new file mode 100644
index 000000000..da88feb3a
--- /dev/null
+++ b/bootx-commons/common-eventer/src/main/java/cn/bootx/platform/common/event/domain/AbsBaseEvent.java
@@ -0,0 +1,9 @@
+package cn.bootx.platform.common.event.domain;
+
+/**
+ * 抽象基础时间对象定义
+ * @author xxm
+ * @since 2023/7/28
+ */
+public class AbsBaseEvent {
+}
diff --git a/bootx-commons/common-eventer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-eventer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 000000000..ed92b4ccb
--- /dev/null
+++ b/bootx-commons/common-eventer/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+cn.bootx.platform.common.event.EventAutoConfiguration
diff --git a/bootx-commons/common-exception-handler/pom.xml b/bootx-commons/common-exception-handler/pom.xml
index e40fca6e1..50d0e8bc2 100644
--- a/bootx-commons/common-exception-handler/pom.xml
+++ b/bootx-commons/common-exception-handler/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
     common-exception-handler
diff --git a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java
similarity index 83%
rename from bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java
rename to bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java
index 5f67dccab..0e7ce71c4 100644
--- a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java
+++ b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/ExceptionHandlerAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.exceptionhandler;
+package cn.bootx.platform.common.exceptionhandler;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@@ -8,7 +8,7 @@
  * 异常处理程序
  *
  * @author xxm
- * @date 2022/12/18
+ * @since 2022/12/18
  */
 @ComponentScan
 @ConfigurationPropertiesScan
diff --git a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/ExceptionHandlerProperties.java b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/ExceptionHandlerProperties.java
similarity index 81%
rename from bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/ExceptionHandlerProperties.java
rename to bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/ExceptionHandlerProperties.java
index 29196c63f..e8fb36ca7 100644
--- a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/ExceptionHandlerProperties.java
+++ b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/ExceptionHandlerProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.exceptionhandler.handler;
+package cn.bootx.platform.common.exceptionhandler.handler;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -8,7 +8,7 @@
  * 配置
  *
  * @author xxm
- * @date 2021/12/5
+ * @since 2021/12/5
  */
 @Getter
 @Setter
diff --git a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/RestExceptionHandler.java b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/RestExceptionHandler.java
similarity index 88%
rename from bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/RestExceptionHandler.java
rename to bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/RestExceptionHandler.java
index 53b5515ca..f6b84a26c 100644
--- a/bootx-commons/common-exception-handler/src/main/java/cn/bootx/common/exceptionhandler/handler/RestExceptionHandler.java
+++ b/bootx-commons/common-exception-handler/src/main/java/cn/bootx/platform/common/exceptionhandler/handler/RestExceptionHandler.java
@@ -1,12 +1,12 @@
-package cn.bootx.common.exceptionhandler.handler;
-
-import cn.bootx.common.core.code.CommonCode;
-import cn.bootx.common.core.code.CommonErrorCode;
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.exception.FatalException;
-import cn.bootx.common.core.exception.SystemException;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
+package cn.bootx.platform.common.exceptionhandler.handler;
+
+import cn.bootx.platform.common.core.code.CommonCode;
+import cn.bootx.platform.common.core.code.CommonErrorCode;
+import cn.bootx.platform.common.core.exception.BizException;
+import cn.bootx.platform.common.core.exception.FatalException;
+import cn.bootx.platform.common.core.exception.SystemException;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -21,13 +21,11 @@
 import javax.validation.ConstraintViolationException;
 import javax.validation.ValidationException;
 
-import static cn.bootx.common.core.code.CommonErrorCode.VALIDATE_PARAMETERS_ERROR;
-
 /**
  * Web 项目异常处理
  *
  * @author xxm
- * @date 2020/5/8 15:30
+ * @since 2020/5/8 15:30
  */
 @Slf4j
 @RestControllerAdvice
@@ -56,7 +54,7 @@ public ResResult handleBusinessException(ConstraintViolationException ex)
         for (ConstraintViolation violation : ex.getConstraintViolations()) {
             message.append(violation.getMessage()).append(System.lineSeparator());
         }
-        return Res.response(VALIDATE_PARAMETERS_ERROR, message.toString(), MDC.get(CommonCode.TRACE_ID));
+        return Res.response(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, message.toString(), MDC.get(CommonCode.TRACE_ID));
     }
 
     /**
@@ -85,7 +83,7 @@ public ResResult HttpRequestMethodNotSupportedException(HttpRequestMethodNotS
     @ExceptionHandler({ ValidationException.class })
     public ResResult handleBusinessException(ValidationException ex) {
         log.info(ex.getMessage(), ex);
-        return Res.response(VALIDATE_PARAMETERS_ERROR, ex.getMessage(), MDC.get(CommonCode.TRACE_ID));
+        return Res.response(CommonErrorCode.VALIDATE_PARAMETERS_ERROR, ex.getMessage(), MDC.get(CommonCode.TRACE_ID));
     }
 
     /**
diff --git a/bootx-commons/common-exception-handler/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-exception-handler/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 54fdc7686..2f95903b2 100644
--- a/bootx-commons/common-exception-handler/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-exception-handler/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.exceptionhandler.ExceptionHandlerAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.exceptionhandler.ExceptionHandlerAutoConfiguration
diff --git a/bootx-commons/common-header-holder/pom.xml b/bootx-commons/common-header-holder/pom.xml
index cbaf0aa5b..5b7a21af0 100644
--- a/bootx-commons/common-header-holder/pom.xml
+++ b/bootx-commons/common-header-holder/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/HeaderHolder.java b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/HeaderHolder.java
similarity index 85%
rename from bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/HeaderHolder.java
rename to bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/HeaderHolder.java
index 87f9bdcde..ed9b46c42 100644
--- a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/HeaderHolder.java
+++ b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/HeaderHolder.java
@@ -1,8 +1,7 @@
-package cn.bootx.common.headerholder;
+package cn.bootx.platform.common.headerholder;
 
-import cn.bootx.common.core.code.WebHeaderCode;
-import cn.bootx.common.headerholder.local.HolderContextHolder;
-import cn.bootx.common.spring.util.WebServletUtil;
+import cn.bootx.platform.common.headerholder.local.HolderContextHolder;
+import cn.bootx.platform.common.core.code.WebHeaderCode;
 import lombok.experimental.UtilityClass;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -15,7 +14,7 @@
  * 请求头获取工具类
  *
  * @author xxm
- * @date 2020/4/14 15:23
+ * @since 2020/4/14 15:23
  */
 @UtilityClass
 public class HeaderHolder {
diff --git a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/filter/WebHeaderHolderInterceptor.java b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/filter/WebHeaderHolderInterceptor.java
similarity index 89%
rename from bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/filter/WebHeaderHolderInterceptor.java
rename to bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/filter/WebHeaderHolderInterceptor.java
index 155a6140a..bf761c68a 100644
--- a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/filter/WebHeaderHolderInterceptor.java
+++ b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/filter/WebHeaderHolderInterceptor.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.headerholder.filter;
+package cn.bootx.platform.common.headerholder.filter;
 
-import cn.bootx.common.core.code.ServletCode;
-import cn.bootx.common.headerholder.local.HolderContextHolder;
+import cn.bootx.platform.common.core.code.ServletCode;
+import cn.bootx.platform.common.headerholder.local.HolderContextHolder;
 import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.web.filter.OncePerRequestFilter;
@@ -17,7 +17,7 @@
  * 请求头保存
  *
  * @author xxm
- * @date 2021/4/20
+ * @since 2021/4/20
  */
 @RequiredArgsConstructor
 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
diff --git a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/local/HolderContextHolder.java b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/local/HolderContextHolder.java
similarity index 92%
rename from bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/local/HolderContextHolder.java
rename to bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/local/HolderContextHolder.java
index 076f09d97..605cc7014 100644
--- a/bootx-commons/common-header-holder/src/main/java/cn/bootx/common/headerholder/local/HolderContextHolder.java
+++ b/bootx-commons/common-header-holder/src/main/java/cn/bootx/platform/common/headerholder/local/HolderContextHolder.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.headerholder.local;
+package cn.bootx.platform.common.headerholder.local;
 
 import cn.hutool.core.map.MapUtil;
 import com.alibaba.ttl.TransmittableThreadLocal;
@@ -11,7 +11,7 @@
  * 请求头TTL存储类
  *
  * @author xxm
- * @date 2021/4/20
+ * @since 2021/4/20
  */
 public final class HolderContextHolder {
 
diff --git a/bootx-commons/common-header-holder/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-header-holder/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 774af7d47..72c1a6b85 100644
--- a/bootx-commons/common-header-holder/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-header-holder/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.headerholder.filter.WebHeaderHolderInterceptor
\ No newline at end of file
+cn.bootx.platform.common.headerholder.filter.WebHeaderHolderInterceptor
diff --git a/bootx-commons/common-idempotency/pom.xml b/bootx-commons/common-idempotency/pom.xml
index 58b297808..2b74885c7 100644
--- a/bootx-commons/common-idempotency/pom.xml
+++ b/bootx-commons/common-idempotency/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-idempotency/src/main/java/cn/bootx/common/idempotency/aop/IdempotentAop.java b/bootx-commons/common-idempotency/src/main/java/cn/bootx/platform/common/idempotency/aop/IdempotentAop.java
similarity index 84%
rename from bootx-commons/common-idempotency/src/main/java/cn/bootx/common/idempotency/aop/IdempotentAop.java
rename to bootx-commons/common-idempotency/src/main/java/cn/bootx/platform/common/idempotency/aop/IdempotentAop.java
index 4200d289c..f62ca9f55 100644
--- a/bootx-commons/common-idempotency/src/main/java/cn/bootx/common/idempotency/aop/IdempotentAop.java
+++ b/bootx-commons/common-idempotency/src/main/java/cn/bootx/platform/common/idempotency/aop/IdempotentAop.java
@@ -1,11 +1,11 @@
-package cn.bootx.common.idempotency.aop;
+package cn.bootx.platform.common.idempotency.aop;
 
-import cn.bootx.common.core.annotation.Idempotent;
-import cn.bootx.common.core.code.WebHeaderCode;
-import cn.bootx.common.core.exception.RepetitiveOperationException;
-import cn.bootx.common.headerholder.HeaderHolder;
-import cn.bootx.common.redis.RedisClient;
-import cn.bootx.common.spring.util.WebServletUtil;
+import cn.bootx.platform.common.core.annotation.Idempotent;
+import cn.bootx.platform.common.core.code.WebHeaderCode;
+import cn.bootx.platform.common.core.exception.RepetitiveOperationException;
+import cn.bootx.platform.common.headerholder.HeaderHolder;
+import cn.bootx.platform.common.redis.RedisClient;
+import cn.bootx.platform.common.spring.util.WebServletUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.Method;
 import lombok.RequiredArgsConstructor;
@@ -23,7 +23,7 @@
  * 幂等处理器切面
  *
  * @author xxm
- * @date 2021/08/20
+ * @since 2021/08/20
  */
 @Aspect
 @Slf4j
diff --git a/bootx-commons/common-idempotency/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-idempotency/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index f7f3182de..c1044df9b 100644
--- a/bootx-commons/common-idempotency/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-idempotency/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.idempotency.aop.IdempotentAop
\ No newline at end of file
+cn.bootx.platform.common.idempotency.aop.IdempotentAop
diff --git a/bootx-commons/common-jackson/README.md b/bootx-commons/common-jackson/README.md
deleted file mode 100644
index fbdc98b31..000000000
--- a/bootx-commons/common-jackson/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
-## JackSon配置
-
-### 功能
-
-- 提供`JacksonUtil`工具类,用于需要进行`Jackson`解析的场合
-- 提供 `java8` 时间序列化类,在`Jackson`序列化时对`JDK8`新增的时间类进行支持
-- 提供`Long` 类型序列化为`String`类型的序列化类,处理前端长整形精度丢失问题
-- 提供一个默认的`ObjectMapper`序列化配置,支持`jdk8`,`LongToString`等配置
-- 提供`Jackson2ObjectMapper`相关配置(`Spring MVC`进行参数和结果转换),支持`jdk8`,`LongToString`等配置
diff --git a/bootx-commons/common-jackson/pom.xml b/bootx-commons/common-jackson/pom.xml
index 59864346f..8ef3fec21 100644
--- a/bootx-commons/common-jackson/pom.xml
+++ b/bootx-commons/common-jackson/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-commons
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/JacksonAutoConfiguration.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/JacksonAutoConfiguration.java
deleted file mode 100644
index e9f96db5a..000000000
--- a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/JacksonAutoConfiguration.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.common.jackson;
-
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * Jackson模块
- *
- * @author xxm
- * @date 2021/12/2
- */
-@ComponentScan
-@AutoConfiguration
-public class JacksonAutoConfiguration {
-
-}
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/Java8TimeModule.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/Java8TimeModule.java
deleted file mode 100644
index a1dbeee8e..000000000
--- a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/Java8TimeModule.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.bootx.common.jackson.jdk;
-
-import cn.hutool.core.date.DatePattern;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-
-/**
- * java8 时间序列化
- *
- * @author xxm
- * @date 2020/4/14 13:33
- */
-public class Java8TimeModule extends SimpleModule {
-
-    public Java8TimeModule() {
-        this.addSerializer(LocalDateTime.class,
-                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
-        this.addSerializer(LocalDate.class,
-                new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
-        this.addSerializer(LocalTime.class,
-                new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
-        this.addDeserializer(LocalDateTime.class,
-                new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
-        this.addDeserializer(LocalDate.class,
-                new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
-        this.addDeserializer(LocalTime.class,
-                new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
-    }
-
-}
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/configuration/JacksonConfiguration.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/configuration/JacksonConfiguration.java
similarity index 86%
rename from bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/configuration/JacksonConfiguration.java
rename to bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/configuration/JacksonConfiguration.java
index a117a2ded..9f9f4d327 100644
--- a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/configuration/JacksonConfiguration.java
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/configuration/JacksonConfiguration.java
@@ -1,8 +1,8 @@
-package cn.bootx.common.jackson.configuration;
+package cn.bootx.platform.common.jackson.configuration;
 
-import cn.bootx.common.jackson.jdk.Java8TimeModule;
-import cn.bootx.common.jackson.jdk.JavaLongTypeModule;
-import cn.bootx.common.jackson.util.JacksonUtil;
+import cn.bootx.platform.common.jackson.jdk.Java8TimeModule;
+import cn.bootx.platform.common.jackson.jdk.JavaLongTypeModule;
+import cn.bootx.platform.common.jackson.util.JacksonUtil;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
@@ -20,10 +20,11 @@
 import org.springframework.context.annotation.Primary;
 
 /**
- * jackson 序列化
- *
+ * jackson 序列化自动配置
+ * 要先于 JacksonAutoConfiguration 中 注入 ObjectMapper
+ * 注意: @AutoConfigureBefore 只可以用在自动配置上, 普通配置类不生效
  * @author xxm
- * @date 2020/4/23 22:28
+ * @since 2020/4/23 22:28
  */
 @Configuration
 @AutoConfigureBefore(JacksonAutoConfiguration.class)
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalDateTimeDeserializer.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalDateTimeDeserializer.java
new file mode 100644
index 000000000..f92d37e5d
--- /dev/null
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalDateTimeDeserializer.java
@@ -0,0 +1,32 @@
+package cn.bootx.platform.common.jackson.deserializer;
+
+import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeParseException;
+
+/**
+ * java8日期时间反序列化, 支持反序列化秒和毫秒级别的时间
+ * @author xxm
+ * @since 2024/1/16
+ */
+public class BootxLocalDateTimeDeserializer extends LocalDateTimeDeserializer {
+
+    /**
+     * 解析日期时间
+     */
+    @Override
+    protected LocalDateTime _fromString(JsonParser p, DeserializationContext ctxt, String string0) throws IOException {
+        // 首先解析毫秒级时间, 如果解析失败, 则解析秒级时间
+        try {
+            return LocalDateTimeUtil.parse(string0, DatePattern.NORM_DATETIME_MS_PATTERN);
+        } catch (DateTimeParseException e) {
+            return LocalDateTimeUtil.parse(string0, DatePattern.NORM_DATETIME_PATTERN);
+        }
+    }
+}
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalTimeDeserializer.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalTimeDeserializer.java
new file mode 100644
index 000000000..1f177e949
--- /dev/null
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/deserializer/BootxLocalTimeDeserializer.java
@@ -0,0 +1,31 @@
+package cn.bootx.platform.common.jackson.deserializer;
+
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
+
+import java.io.IOException;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+
+/**
+ * java时间反序列化, 支持反序列化秒和毫秒级别的时间
+ * @author xxm
+ * @since 2024/1/16
+ */
+public class BootxLocalTimeDeserializer extends LocalTimeDeserializer {
+
+    /**
+     * 反序列化
+     */
+    @Override
+    protected LocalTime _fromString(JsonParser p, DeserializationContext ctxt, String string0) throws IOException {
+        try {
+            return LocalTime.parse(string0, DateTimeFormatter.ofPattern("HH:mm:ss.SSS"));
+        } catch (DateTimeParseException e) {
+            return LocalTime.parse(string0, DatePattern.NORM_TIME_FORMATTER);
+        }
+    }
+}
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/Java8TimeModule.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/Java8TimeModule.java
new file mode 100644
index 000000000..e92978137
--- /dev/null
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/Java8TimeModule.java
@@ -0,0 +1,41 @@
+package cn.bootx.platform.common.jackson.jdk;
+
+import cn.bootx.platform.common.jackson.deserializer.BootxLocalDateTimeDeserializer;
+import cn.bootx.platform.common.jackson.deserializer.BootxLocalTimeDeserializer;
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * java8 时间序列化 受MySQL限制, 无法存储毫秒值. 只能处理到秒级别
+ * 写入时间支持毫秒格式的时间
+ * 读取时间时可以处理到秒或毫秒
+ * @author xxm
+ * @since 2020/4/14 13:33
+ */
+public class Java8TimeModule extends SimpleModule {
+
+    public Java8TimeModule() {
+        // 序列化
+        this.addSerializer(LocalDateTime.class,
+                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+        this.addSerializer(LocalDate.class,
+                new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+        this.addSerializer(LocalTime.class,
+                new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
+        // 反序列化
+        this.addDeserializer(LocalDateTime.class, new BootxLocalDateTimeDeserializer());
+        this.addDeserializer(LocalDate.class,
+                new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+        this.addDeserializer(LocalTime.class,new BootxLocalTimeDeserializer());
+    }
+
+}
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/JavaLongTypeModule.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/JavaLongTypeModule.java
similarity index 86%
rename from bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/JavaLongTypeModule.java
rename to bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/JavaLongTypeModule.java
index 9b4b81dd8..12d2cba76 100644
--- a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/jdk/JavaLongTypeModule.java
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/jdk/JavaLongTypeModule.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.jackson.jdk;
+package cn.bootx.platform.common.jackson.jdk;
 
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -7,7 +7,7 @@
  * Long 类型序列化为String
  *
  * @author xxm
- * @date 2020/4/14 13:35
+ * @since 2020/4/14 13:35
  */
 public class JavaLongTypeModule extends SimpleModule {
 
diff --git a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/util/JacksonUtil.java b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/util/JacksonUtil.java
similarity index 94%
rename from bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/util/JacksonUtil.java
rename to bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/util/JacksonUtil.java
index a01f7d907..39e73b3b5 100644
--- a/bootx-commons/common-jackson/src/main/java/cn/bootx/common/jackson/util/JacksonUtil.java
+++ b/bootx-commons/common-jackson/src/main/java/cn/bootx/platform/common/jackson/util/JacksonUtil.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.jackson.util;
+package cn.bootx.platform.common.jackson.util;
 
-import cn.bootx.common.core.exception.RepetitiveOperationException;
+import cn.bootx.platform.common.core.exception.RepetitiveOperationException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -12,7 +12,7 @@
  * jackson常用工具类封装
  *
  * @author xxm
- * @date 2020/11/29
+ * @since 2020/11/29
  */
 @Slf4j
 public class JacksonUtil {
@@ -29,6 +29,7 @@ public static void setObjectMapper(ObjectMapper objectMapper) {
         if (objectMapperFlag) {
             throw new RepetitiveOperationException();
         }
+        objectMapperFlag = true;
         JacksonUtil.objectMapper = objectMapper;
     }
 
@@ -36,6 +37,7 @@ public static void setTypeObjectMapper(ObjectMapper typeObjectMapper) {
         if (typeObjectMapperFlag) {
             throw new RepetitiveOperationException();
         }
+        typeObjectMapperFlag = true;
         JacksonUtil.typeObjectMapper = typeObjectMapper;
     }
 
diff --git a/bootx-commons/common-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 4cad475de..f830b4546 100644
--- a/bootx-commons/common-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-jackson/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.jackson.JacksonAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.jackson.configuration.JacksonConfiguration
diff --git a/bootx-commons/common-lock/pom.xml b/bootx-commons/common-lock/pom.xml
deleted file mode 100644
index 5a5098a83..000000000
--- a/bootx-commons/common-lock/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-    
-        cn.bootx.platform
-        bootx-commons
-        1.2.3
-    
-    4.0.0
-
-    common-lock
-
-    
-        
-        
-            cn.bootx.platform
-            common-redis-client
-        
-
-        
-        
-            com.baomidou
-            lock4j-redis-template-spring-boot-starter
-            ${lock4j.version}
-        
-        
-
-
-
-
-
-
-        
-            org.springframework.boot
-            spring-boot-starter-aop
-        
-    
-
-
diff --git a/bootx-commons/common-lock/src/main/java/cn/bootx/common/lock/LockCommonAutoConfiguration.java b/bootx-commons/common-lock/src/main/java/cn/bootx/common/lock/LockCommonAutoConfiguration.java
deleted file mode 100644
index ede20d389..000000000
--- a/bootx-commons/common-lock/src/main/java/cn/bootx/common/lock/LockCommonAutoConfiguration.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.common.lock;
-
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * 分布式锁
- *
- * @author xxm
- * @date 2022/5/6
- */
-@AutoConfiguration
-@ComponentScan
-@ConfigurationPropertiesScan
-public class LockCommonAutoConfiguration {
-
-}
diff --git a/bootx-commons/common-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 988f4f4ba..000000000
--- a/bootx-commons/common-lock/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-cn.bootx.common.lock.LockCommonAutoConfiguration
\ No newline at end of file
diff --git a/bootx-commons/common-log/README.md b/bootx-commons/common-log/README.md
index 42eb52977..d304c82dd 100644
--- a/bootx-commons/common-log/README.md
+++ b/bootx-commons/common-log/README.md
@@ -15,8 +15,9 @@
 
 ```xml
 
-
-
+
+
 ```
 
 如果引入默认的`Logback`xml配置,需要在这条引入语句上面声明项目名称和日志存储地址,如本项目默认的日志输出文件,如果不引入而自己进行编写日志配置文件的话,可以参照`logback-bootx-common.xml`进行编写。
diff --git a/bootx-commons/common-log/pom.xml b/bootx-commons/common-log/pom.xml
index 8d8dd678e..7b30c9372 100644
--- a/bootx-commons/common-log/pom.xml
+++ b/bootx-commons/common-log/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-commons
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -24,25 +24,12 @@
             org.springframework.boot
             spring-boot-starter-web
         
-        
+        
         
             com.plumelog
-            plumelog-lite-spring-boot-starter
-            
-                
-
-
-
-
-
-
-
-
-                
-                    guava
-                    com.google.guava
-                
-            
+            plumelog-lite
+            ${plumelog.version}
+            provided
         
 
     
diff --git a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/LogAutoConfiguration.java b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/LogAutoConfiguration.java
similarity index 86%
rename from bootx-commons/common-log/src/main/java/cn/bootx/common/log/LogAutoConfiguration.java
rename to bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/LogAutoConfiguration.java
index fcba03b59..48c04bb47 100644
--- a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/LogAutoConfiguration.java
+++ b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/LogAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.log;
+package cn.bootx.platform.common.log;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@@ -8,7 +8,7 @@
  * 日志扫描
  *
  * @author xxm
- * @date 2022/6/6
+ * @since 2022/6/6
  */
 @ComponentScan
 @ConfigurationPropertiesScan
diff --git a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/configuration/LogProperties.java b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/configuration/LogProperties.java
similarity index 87%
rename from bootx-commons/common-log/src/main/java/cn/bootx/common/log/configuration/LogProperties.java
rename to bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/configuration/LogProperties.java
index d79f8afdf..94065fcf1 100644
--- a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/configuration/LogProperties.java
+++ b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/configuration/LogProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.log.configuration;
+package cn.bootx.platform.common.log.configuration;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -7,7 +7,7 @@
 /**
  * 日志配置
  * @author xxm
- * @date 2023/3/29
+ * @since 2023/3/29
  */
 @Getter
 @Setter
diff --git a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/LogTraceHeaderHolderFilter.java b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/LogTraceHeaderHolderFilter.java
similarity index 84%
rename from bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/LogTraceHeaderHolderFilter.java
rename to bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/LogTraceHeaderHolderFilter.java
index c117d52a4..12aa194ef 100644
--- a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/LogTraceHeaderHolderFilter.java
+++ b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/LogTraceHeaderHolderFilter.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.log.handler;
+package cn.bootx.platform.common.log.handler;
 
-import cn.bootx.common.core.code.CommonCode;
+import cn.bootx.platform.common.core.code.CommonCode;
 import cn.hutool.core.util.RandomUtil;
 import com.plumelog.core.TraceId;
 import lombok.RequiredArgsConstructor;
@@ -20,7 +20,7 @@
  * 针对请求生成链路追踪ID
  *
  * @author xxm
- * @date 2021/4/20
+ * @since 2021/4/20
  */
 @Order(value = Integer.MIN_VALUE)
 @Component
@@ -34,8 +34,10 @@ public void doFilterInternal(HttpServletRequest request, HttpServletResponse res
         try {
             String traceId = RandomUtil.randomString(12);
             // 添加普通日志和 plumelog 日志的 TraceId
-            TraceId.logTraceID.set(traceId);
             MDC.put(CommonCode.TRACE_ID, traceId);
+            try {
+                TraceId.logTraceID.set(traceId);
+            } catch (NoClassDefFoundError ignored) {}
             chain.doFilter(request, response);
         }
         finally {
diff --git a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/SensitiveDataLogConverter.java b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/SensitiveDataLogConverter.java
similarity index 95%
rename from bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/SensitiveDataLogConverter.java
rename to bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/SensitiveDataLogConverter.java
index b6d64db64..8e96a3498 100644
--- a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/handler/SensitiveDataLogConverter.java
+++ b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/handler/SensitiveDataLogConverter.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.log.handler;
+package cn.bootx.platform.common.log.handler;
 
 import ch.qos.logback.classic.pattern.MessageConverter;
 import ch.qos.logback.classic.spi.ILoggingEvent;
@@ -11,7 +11,7 @@
  * 敏感数据脱敏
  *
  * @author xxm
- * @date 2021/1/4
+ * @since 2021/1/4
  */
 public class SensitiveDataLogConverter extends MessageConverter {
 
diff --git a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/plumelog/PlumeLogAutoDeleteLogs.java b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/plumelog/PlumeLogAutoDeleteLogs.java
similarity index 88%
rename from bootx-commons/common-log/src/main/java/cn/bootx/common/log/plumelog/PlumeLogAutoDeleteLogs.java
rename to bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/plumelog/PlumeLogAutoDeleteLogs.java
index 6e176fca0..db8ad73d3 100644
--- a/bootx-commons/common-log/src/main/java/cn/bootx/common/log/plumelog/PlumeLogAutoDeleteLogs.java
+++ b/bootx-commons/common-log/src/main/java/cn/bootx/platform/common/log/plumelog/PlumeLogAutoDeleteLogs.java
@@ -1,11 +1,12 @@
-package cn.bootx.common.log.plumelog;
+package cn.bootx.platform.common.log.plumelog;
 
-import cn.bootx.common.log.configuration.LogProperties;
+import cn.bootx.platform.common.log.configuration.LogProperties;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
 import com.plumelog.lite.client.IndexUtil;
 import com.plumelog.lite.client.InitConfig;
 import lombok.RequiredArgsConstructor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -18,9 +19,10 @@
 /**
  * PlumeLog日志删除定时任务的重新实现, 原有的日志清除逻辑是基于Lucene实现的, 文件夹将会残留, 同时还会创建出每个小时的新文件夹
  * @author xxm
- * @date 2023/3/29
+ * @since 2023/3/29
  */
 @Component
+@ConditionalOnClass(name = "com.plumelog.lite.client.InitConfig")
 @RequiredArgsConstructor
 public class PlumeLogAutoDeleteLogs {
     private final LogProperties logProperties;
diff --git a/bootx-commons/common-log/src/main/java/org/slf4j/impl/StaticMDCBinder.java b/bootx-commons/common-log/src/main/java/org/slf4j/impl/StaticMDCBinder.java
index 7b4baa76e..abe6c5c31 100644
--- a/bootx-commons/common-log/src/main/java/org/slf4j/impl/StaticMDCBinder.java
+++ b/bootx-commons/common-log/src/main/java/org/slf4j/impl/StaticMDCBinder.java
@@ -6,7 +6,7 @@
  * 静态 MDC 粘合剂 覆盖原始类
  *
  * @author xxm
- * @date 2021/8/4
+ * @since 2021/8/4
  */
 public class StaticMDCBinder {
 
diff --git a/bootx-commons/common-log/src/main/java/org/slf4j/impl/TtlMDCAdapter.java b/bootx-commons/common-log/src/main/java/org/slf4j/impl/TtlMDCAdapter.java
index 873c2fdde..c770e009b 100644
--- a/bootx-commons/common-log/src/main/java/org/slf4j/impl/TtlMDCAdapter.java
+++ b/bootx-commons/common-log/src/main/java/org/slf4j/impl/TtlMDCAdapter.java
@@ -12,7 +12,7 @@
  * TTL MDC 适配器 覆盖原始类
  *
  * @author xxm
- * @date 2021/8/4
+ * @since 2021/8/4
  */
 public class TtlMDCAdapter implements MDCAdapter {
 
diff --git a/bootx-commons/common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 51bcaaf9b..215c94270 100644
--- a/bootx-commons/common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.log.LogAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.log.LogAutoConfiguration
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-sensitive.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-sensitive.xml
deleted file mode 100644
index 8eff1f02e..000000000
--- a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-sensitive.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-    
-    
-    
-
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-console.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-console.xml
similarity index 100%
rename from bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-console.xml
rename to bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-console.xml
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-elk.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-elk.xml
similarity index 100%
rename from bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-elk.xml
rename to bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-elk.xml
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-log-file.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-log-file.xml
similarity index 100%
rename from bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-log-file.xml
rename to bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-log-file.xml
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-plumelog.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-plumelog.xml
similarity index 100%
rename from bootx-commons/common-log/src/main/resources/cn/bootx/common/log/logback-plumelog.xml
rename to bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-plumelog.xml
diff --git a/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-sensitive.xml b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-sensitive.xml
new file mode 100644
index 000000000..c55cd4b87
--- /dev/null
+++ b/bootx-commons/common-log/src/main/resources/cn/bootx/platform/common/log/logback-sensitive.xml
@@ -0,0 +1,6 @@
+
+
+    
+    
+    
+
diff --git a/bootx-commons/common-mongo/pom.xml b/bootx-commons/common-mongo/pom.xml
index b1c797cf8..d5dc6d6ff 100644
--- a/bootx-commons/common-mongo/pom.xml
+++ b/bootx-commons/common-mongo/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-commons
-        1.2.3
+        1.3.6.2
     
     4.0.0
     common-mongo
diff --git a/bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/MongoCommonAutoConfiguration.java b/bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/MongoCommonAutoConfiguration.java
similarity index 80%
rename from bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/MongoCommonAutoConfiguration.java
rename to bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/MongoCommonAutoConfiguration.java
index 2788ca9eb..a56c3c942 100644
--- a/bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/MongoCommonAutoConfiguration.java
+++ b/bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/MongoCommonAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mongo;
+package cn.bootx.platform.common.mongo;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
@@ -7,7 +7,7 @@
  * mongo配置
  *
  * @author xxm
- * @date 2022/1/21
+ * @since 2022/1/21
  */
 @ComponentScan
 @AutoConfiguration
diff --git a/bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/config/MongoConfiguration.java b/bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/config/MongoConfiguration.java
similarity index 90%
rename from bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/config/MongoConfiguration.java
rename to bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/config/MongoConfiguration.java
index 9a9fccd3e..68c8fc502 100644
--- a/bootx-commons/common-mongo/src/main/java/cn/bootx/common/mongo/config/MongoConfiguration.java
+++ b/bootx-commons/common-mongo/src/main/java/cn/bootx/platform/common/mongo/config/MongoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mongo.config;
+package cn.bootx.platform.common.mongo.config;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -10,7 +10,7 @@
  * mongo相关配置
  *
  * @author xxm
- * @date 2022/1/21
+ * @since 2022/1/21
  */
 @Slf4j
 @Configuration
diff --git a/bootx-commons/common-mongo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-mongo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 488882a83..1efd150b9 100644
--- a/bootx-commons/common-mongo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-mongo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.mongo.MongoCommonAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.mongo.MongoCommonAutoConfiguration
diff --git a/bootx-commons/common-mqtt/pom.xml b/bootx-commons/common-mqtt/pom.xml
deleted file mode 100644
index c94eafcae..000000000
--- a/bootx-commons/common-mqtt/pom.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-    
-        bootx-commons
-        cn.bootx.platform
-        1.2.3
-    
-    4.0.0
-
-    common-mqtt
-    jar
-
-    
-        
-            org.springframework.boot
-            spring-boot-starter-integration
-        
-        
-            org.springframework.integration
-            spring-integration-mqtt
-        
-    
-
-
diff --git a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/MqttAutoConfiguration.java b/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/MqttAutoConfiguration.java
deleted file mode 100644
index df1db315e..000000000
--- a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/MqttAutoConfiguration.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.common.mqtt;
-
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.context.annotation.ComponentScan;
-
-/**   
-* mqtt配置
-* @author xxm  
-* @date 2022/4/25 
-*/
-@ComponentScan
-@ConfigurationPropertiesScan
-public class MqttAutoConfiguration {
-
-
-}
diff --git a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttConfiguration.java b/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttConfiguration.java
deleted file mode 100644
index dde2a9e4b..000000000
--- a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttConfiguration.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package cn.bootx.common.mqtt.configuration;
-
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.paho.client.mqttv3.MqttClient;
-import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
-import org.eclipse.paho.client.mqttv3.MqttException;
-import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * mqtt配置
- * @author xxm
- * @date 2022/4/25
- */
-@Slf4j
-@Configuration
-@RequiredArgsConstructor
-public class MqttConfiguration {
-    private final MqttProperties mqttProperties;
-
-    /**
-     * mqtt终端
-     */
-    @Bean
-    public MqttClient mqttClient(){
-        MqttClient client = null;
-        // 是否启用mqtt
-        try {
-            String clientId = mqttProperties.getClientId();
-            if (mqttProperties.isAutomaticReconnect()){
-                clientId = clientId+"@"+ RandomUtil.randomString(5);
-            }
-            // 使用内存的持久性, 将不会生成.lock文件
-            if (mqttProperties.isMemoryPersistence()){
-                client = new MqttClient(mqttProperties.getUrl(), clientId, new MemoryPersistence());
-            } else {
-                client = new MqttClient(mqttProperties.getUrl(), clientId);
-            }
-            // MQTT配置对象
-            MqttConnectOptions options = new MqttConnectOptions();
-            if (StrUtil.isNotBlank(mqttProperties.getName())){
-                options.setUserName(mqttProperties.getName());
-            }
-            if (StrUtil.isNotBlank(mqttProperties.getPassword())){
-                options.setPassword(mqttProperties.getPassword().toCharArray());
-            }
-            options.setCleanSession(mqttProperties.isCleanSession());
-            options.setConnectionTimeout(mqttProperties.getConnectionTimeout());
-            options.setKeepAliveInterval(mqttProperties.getKeepAliveInterval());
-            options.setAutomaticReconnect(mqttProperties.isAutomaticReconnect());
-            client.connect(options);
-        } catch (MqttException e) {
-            log.error("MQTT服务初始化失败",e);
-        }
-        return client;
-    }
-
-}
diff --git a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttProperties.java b/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttProperties.java
deleted file mode 100644
index 7316edbe9..000000000
--- a/bootx-commons/common-mqtt/src/main/java/cn/bootx/common/mqtt/configuration/MqttProperties.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package cn.bootx.common.mqtt.configuration;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
-* mqtt配置
-* @author xxm
-* @date 2022/4/25
-*/
-@Getter
-@Setter
-@ConfigurationProperties("bootx.common.mqtt")
-public class MqttProperties {
-
-    /** QTT服务地址 */
-    private String url = "tcp://127.0.0.1:1883";
-    /** 用户名 */
-    private String name;
-    /** 密码 */
-    private String password;
-    /** 终端id */
-    private String clientId = "bootx";
-    /** 内存持久化使, 将不会生成.lock文件, 在需要可靠性的情况下, 需要关闭 */
-    private boolean memoryPersistence = true;
-    /** 自动追加终端id后缀 */
-    private boolean autoClientIdSuffix = true;
-    /** 连接超时 */
-    private int connectionTimeout = 30;
-    /** 清理会话 */
-    private boolean cleanSession = true;
-    /** 自动重连 */
-    private boolean automaticReconnect = true;
-    /** 保活间隔 */
-    private int keepAliveInterval = 60;
-}
diff --git a/bootx-commons/common-mqtt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-mqtt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index c017b2792..000000000
--- a/bootx-commons/common-mqtt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-cn.bootx.common.mqtt.MqttAutoConfiguration
\ No newline at end of file
diff --git a/bootx-commons/common-mybatis-plus/pom.xml b/bootx-commons/common-mybatis-plus/pom.xml
index d2b3af1f3..999acd585 100644
--- a/bootx-commons/common-mybatis-plus/pom.xml
+++ b/bootx-commons/common-mybatis-plus/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -30,12 +30,10 @@
             cn.bootx.platform
             common-jackson
         
-        
         
-            org.flywaydb
-            flyway-core
-            ${flyway.version}
+            cn.bootx
+            table-modify-mysql-boot-starter
+            provided
         
-
     
 
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpBaseEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpBaseEntity.java
deleted file mode 100644
index d12df3122..000000000
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpBaseEntity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cn.bootx.common.mybatisplus.base;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.FieldNameConstants;
-
-import java.io.Serializable;
-
-/**
- * 基础实体类 (带软删除)
- *
- * @author xxm
- * @date 2021/7/27
- */
-@Getter
-@Setter
-@FieldNameConstants(innerTypeName = "Base")
-public abstract class MpBaseEntity extends MpDelEntity implements Serializable {
-
-    private static final long serialVersionUID = -2699324766101179583L;
-
-    /** 删除标志 */
-    @TableLogic
-    @Column(comment = "删除标志", isNull = false, order = Integer.MAX_VALUE - 100)
-    private boolean deleted;
-
-}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpCreateEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpCreateEntity.java
deleted file mode 100644
index 794a3dea3..000000000
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpCreateEntity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package cn.bootx.common.mybatisplus.base;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.FieldNameConstants;
-
-import java.time.LocalDateTime;
-
-/**
- * @author xxm
- * @date 2022/7/26
- */
-@Getter
-@Setter
-@FieldNameConstants(innerTypeName = "Create")
-public abstract class MpCreateEntity extends MpIdEntity {
-
-    /** 创建者ID */
-    @Column(comment = "创建者ID", length = 20, order = Integer.MAX_VALUE - 600)
-    @TableField(fill = FieldFill.INSERT)
-    private Long creator;
-
-    /** 创建时间 */
-    @Column(comment = "创建时间", order = Integer.MAX_VALUE - 500)
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpDelEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpDelEntity.java
deleted file mode 100644
index 3fb02d42d..000000000
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpDelEntity.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package cn.bootx.common.mybatisplus.base;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.Version;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.FieldNameConstants;
-
-import java.time.LocalDateTime;
-
-/**
- * MP基础类, 真实删除
- *
- * @author xxm
- * @date 2022/7/17
- */
-@Getter
-@Setter
-@FieldNameConstants(innerTypeName = "Del")
-public abstract class MpDelEntity extends MpCreateEntity {
-
-    /** 最后修者ID */
-    @Column(comment = "最后修者ID", length = 20, order = Integer.MAX_VALUE - 400)
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Long lastModifier;
-
-    /** 最后修改时间 */
-    @Column(comment = "最后修改时间", order = Integer.MAX_VALUE - 300)
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime lastModifiedTime;
-
-    /** 乐观锁 */
-    @Version
-    @Column(comment = "乐观锁", isNull = false, order = Integer.MAX_VALUE - 200)
-    private Integer version = 0;
-
-}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpIdEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpIdEntity.java
deleted file mode 100644
index 94ccc1268..000000000
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/base/MpIdEntity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cn.bootx.common.mybatisplus.base;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.FieldNameConstants;
-
-import java.io.Serializable;
-
-/**
- * mybatis plus id实体
- *
- * @author xxm
- * @date 2021/8/17
- */
-@Getter
-@Setter
-@FieldNameConstants(innerTypeName = "Id")
-public abstract class MpIdEntity implements Serializable {
-
-    private static final long serialVersionUID = 3982181843202226124L;
-
-    @Column(comment = "主键", isKey = true, order = Integer.MIN_VALUE + 100)
-    @TableId(type = IdType.ASSIGN_ID)
-    private Long id;
-
-}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/JacksonRawTypeHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/JacksonRawTypeHandler.java
deleted file mode 100644
index dfd58ef9e..000000000
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/JacksonRawTypeHandler.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cn.bootx.common.mybatisplus.handler;
-
-import cn.bootx.common.jackson.util.JacksonUtil;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.MappedJdbcTypes;
-import org.apache.ibatis.type.MappedTypes;
-
-/**
- * Jackson 实现 JSON 字段类型处理器, 会记录对象属性类型, 通常用于被容器(List、Set、Map)包装的属性上
- *
- * @author xxm
- * @date 2022/7/11
- */
-@Slf4j
-@MappedTypes({ Object.class })
-@MappedJdbcTypes(value = { JdbcType.VARCHAR, JdbcType.LONGVARCHAR })
-public class JacksonRawTypeHandler extends AbstractJsonTypeHandler {
-
-    private final Class type;
-
-    public JacksonRawTypeHandler(Class type) {
-        if (log.isTraceEnabled()) {
-            log.trace("JacksonRawTypeHandler(" + type + ")");
-        }
-        Assert.notNull(type, "Type argument cannot be null");
-        this.type = type;
-    }
-
-    @Override
-    protected Object parse(String json) {
-        return JacksonUtil.toTypeBean(json, type);
-    }
-
-    @Override
-    protected String toJson(Object obj) {
-        return JacksonUtil.toTypeJson(obj);
-    }
-
-}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java
similarity index 84%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java
index aa987dd66..21b3c5f7f 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/MybatisPlusCommonAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mybatisplus;
+package cn.bootx.platform.common.mybatisplus;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@@ -8,7 +8,7 @@
  * mybatis自动配置
  *
  * @author xxm
- * @date 2021/7/27
+ * @since 2021/7/27
  */
 @AutoConfiguration
 @ComponentScan
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpBaseEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpBaseEntity.java
new file mode 100644
index 000000000..d5ce8061d
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpBaseEntity.java
@@ -0,0 +1,29 @@
+package cn.bootx.platform.common.mybatisplus.base;
+
+import cn.bootx.table.modify.annotation.DbColumn;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.FieldNameConstants;
+
+import java.io.Serializable;
+
+/**
+ * 基础实体类 (带软删除)
+ *
+ * @author xxm
+ * @since 2021/7/27
+ */
+@Getter
+@Setter
+@FieldNameConstants(innerTypeName = "Base")
+public abstract class MpBaseEntity extends MpDelEntity implements Serializable {
+
+    private static final long serialVersionUID = -2699324766101179583L;
+
+    /** 删除标志 */
+    @TableLogic
+    @DbColumn(comment = "删除标志", isNull = false, order = Integer.MAX_VALUE - 100)
+    private boolean deleted;
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpCreateEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpCreateEntity.java
new file mode 100644
index 000000000..44dba6eaf
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpCreateEntity.java
@@ -0,0 +1,32 @@
+package cn.bootx.platform.common.mybatisplus.base;
+
+import cn.bootx.table.modify.annotation.DbColumn;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.FieldNameConstants;
+
+import java.time.LocalDateTime;
+
+/**
+ * 创建实体类 (不带逻辑删除)
+ * @author xxm
+ * @since 2022/7/26
+ */
+@Getter
+@Setter
+@FieldNameConstants(innerTypeName = "Create")
+public abstract class MpCreateEntity extends MpIdEntity {
+
+    /** 创建者ID */
+    @DbColumn(comment = "创建者ID", length = 20, order = Integer.MAX_VALUE - 600)
+    @TableField(fill = FieldFill.INSERT)
+    private Long creator;
+
+    /** 创建时间 */
+    @DbColumn(comment = "创建时间", order = Integer.MAX_VALUE - 500)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpDelEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpDelEntity.java
new file mode 100644
index 000000000..acb44fe93
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpDelEntity.java
@@ -0,0 +1,39 @@
+package cn.bootx.platform.common.mybatisplus.base;
+
+import cn.bootx.table.modify.annotation.DbColumn;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.Version;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.FieldNameConstants;
+
+import java.time.LocalDateTime;
+
+/**
+ * MP基础类, 真实删除
+ *
+ * @author xxm
+ * @since 2022/7/17
+ */
+@Getter
+@Setter
+@FieldNameConstants(innerTypeName = "Del")
+public abstract class MpDelEntity extends MpCreateEntity {
+
+    /** 最后修者ID */
+    @DbColumn(comment = "最后修者ID", length = 20, order = Integer.MAX_VALUE - 400)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long lastModifier;
+
+    /** 最后修改时间 */
+    @DbColumn(comment = "最后修改时间", order = Integer.MAX_VALUE - 300)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime lastModifiedTime;
+
+    /** 乐观锁 */
+    @Version
+    @DbColumn(comment = "乐观锁", isNull = false, order = Integer.MAX_VALUE - 200)
+    private Integer version = 0;
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpIdEntity.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpIdEntity.java
new file mode 100644
index 000000000..f722c95a6
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/base/MpIdEntity.java
@@ -0,0 +1,31 @@
+package cn.bootx.platform.common.mybatisplus.base;
+
+import cn.bootx.table.modify.annotation.DbColumn;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.OrderBy;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.FieldNameConstants;
+
+import java.io.Serializable;
+
+/**
+ * mybatis plus id实体
+ *
+ * @author xxm
+ * @since 2021/8/17
+ */
+@Getter
+@Setter
+@FieldNameConstants(innerTypeName = "Id")
+public abstract class MpIdEntity implements Serializable {
+
+    private static final long serialVersionUID = 3982181843202226124L;
+
+    @DbColumn(comment = "主键", isKey = true, order = Integer.MIN_VALUE + 100)
+    @TableId(type = IdType.ASSIGN_ID)
+    @OrderBy
+    private Long id;
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/configuration/MpConfiguration.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/configuration/MpConfiguration.java
similarity index 85%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/configuration/MpConfiguration.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/configuration/MpConfiguration.java
index 3320394d6..b82055ad2 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/configuration/MpConfiguration.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/configuration/MpConfiguration.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.mybatisplus.configuration;
+package cn.bootx.platform.common.mybatisplus.configuration;
 
-import cn.bootx.common.mybatisplus.handler.SnowflakeIdentifierGenerator;
-import cn.bootx.common.mybatisplus.interceptor.MpInterceptor;
+import cn.bootx.platform.common.mybatisplus.handler.SnowflakeIdentifierGenerator;
+import cn.bootx.platform.common.mybatisplus.interceptor.MpInterceptor;
 import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
  * mybatis自动配置
  *
  * @author xxm
- * @date 2021/7/27
+ * @since 2021/7/27
  */
 @Configuration
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java
similarity index 94%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java
index 140486a4a..57ab743bb 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/extension/DataChangeRecorderInnerInterceptor.java
@@ -13,16 +13,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package cn.bootx.common.mybatisplus.extension;
+package cn.bootx.platform.common.mybatisplus.extension;
 
-import cn.bootx.common.core.annotation.DataVersionLog;
-import cn.bootx.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.common.core.annotation.DataVersionLog;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.JdbcParameter;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
@@ -54,7 +55,7 @@
  * 数据变动记录插件, 基于MP官方进行修改
  *
  * @author xxm
- * @date 2023/1/5
+ * @since 2023/1/5
  */
 @Slf4j
 public class DataChangeRecorderInnerInterceptor implements InnerInterceptor {
@@ -85,7 +86,13 @@ public void beforePrepare(StatementHandler sh, Connection connection, Integer tr
             long startTs = System.currentTimeMillis();
             DataVersionLog dataVersion;
             try {
-                Statement statement = CCJSqlParserUtil.parse(mpBs.sql());
+                Statement statement = null;
+                try {
+                    statement = CCJSqlParserUtil.parse(mpBs.sql());
+                } catch (JSQLParserException e) {
+                    log.warn("sql无法解析,可能是DDL相关语句, SQL语句:{}", mpBs.sql());
+                    return;
+                }
                 // 判断是否需要进行处理
                 dataVersion = this.getDataVersionAnno(statement);
                 if (Objects.isNull(dataVersion)) {
@@ -161,7 +168,7 @@ public OperationResult processInsert(Insert insertStmt, BoundSql boundSql) {
     }
 
     public OperationResult processUpdate(Update updateStmt, MappedStatement mappedStatement, BoundSql boundSql,
-            Connection connection) {
+                                         Connection connection) {
         Expression where = updateStmt.getWhere();
         Select selectStmt = new Select();
         PlainSelect selectBody = new PlainSelect();
@@ -214,7 +221,7 @@ public OperationResult processUpdate(Update updateStmt, MappedStatement mappedSt
      * @return
      */
     private List prepareParameterMapping4Select(List originalMappingList,
-            Update updateStmt) {
+                                                                  Update updateStmt) {
         List updateValueExpressions = new ArrayList<>();
         for (UpdateSet updateSet : updateStmt.getUpdateSets()) {
             updateValueExpressions.addAll(updateSet.getExpressions());
@@ -234,7 +241,7 @@ private List prepareParameterMapping4Select(List compareAndGetUpdatedColumnDatas(String tableName, BoundSql updateSql,
-            Statement statement, OriginalDataObj originalDataObj) {
+                                                                    Statement statement, OriginalDataObj originalDataObj) {
         Map columnNameValMap = new HashMap<>(updateSql.getParameterMappings().size());
         List selectItemsFromUpdateSql = new ArrayList<>();
         if (statement instanceof Update) {
@@ -301,7 +308,7 @@ else if (statement instanceof Insert) {
     }
 
     private String buildOriginalData(Select selectStmt, MappedStatement mappedStatement, BoundSql boundSql,
-            Connection connection) {
+                                     Connection connection) {
         try (PreparedStatement statement = connection.prepareStatement(selectStmt.toString())) {
             DefaultParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,
                     boundSql.getParameterObject(), boundSql);
@@ -339,7 +346,7 @@ private String buildOriginalData(Select selectStmt, MappedStatement mappedStatem
      * 构建原始对象数据
      */
     private OriginalDataObj buildOriginalObjectData(Select selectStmt, Column pk, MappedStatement mappedStatement,
-            BoundSql boundSql, Connection connection) {
+                                                    BoundSql boundSql, Connection connection) {
         try (PreparedStatement statement = connection.prepareStatement(selectStmt.toString())) {
 
             DefaultParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,
@@ -414,7 +421,7 @@ private Columns2SelectItemsResult buildColumns2SelectItems(String tableName, Lis
     }
 
     public OperationResult processDelete(Delete deleteStmt, MappedStatement mappedStatement, BoundSql boundSql,
-            Connection connection) {
+                                         Connection connection) {
         Table table = deleteStmt.getTable();
         Expression where = deleteStmt.getWhere();
         Select selectStmt = new Select();
@@ -617,15 +624,15 @@ public static DataColumnChangeResult constrcutByOriginalVal(String columnName, O
         public String generateDataStr() {
             StringBuilder sb = new StringBuilder();
             sb.append("\"")
-                .append(columnName)
-                .append("\"")
-                .append(":")
-                .append("\"")
-                .append(convertDoubleQuotes(originalValue))
-                .append("->")
-                .append(convertDoubleQuotes(updateValue))
-                .append("\"")
-                .append(",");
+                    .append(columnName)
+                    .append("\"")
+                    .append(":")
+                    .append("\"")
+                    .append(convertDoubleQuotes(originalValue))
+                    .append("->")
+                    .append(convertDoubleQuotes(updateValue))
+                    .append("\"")
+                    .append(",");
             return sb.toString();
         }
 
@@ -642,7 +649,7 @@ public String convertDoubleQuotes(Object obj) {
      * 数据变动记录
      *
      * @author xxm
-     * @date 2023/1/7
+     * @since 2023/1/7
      */
     @Data
     public static class DataChangedRecord {
@@ -660,7 +667,7 @@ public static class DataChangedRecord {
         private List updatedColumns;
 
         public boolean hasUpdate(Map columnNameValMap, Set ignoredColumns,
-                Set ignoreAllColumns) {
+                                 Set ignoreAllColumns) {
             if (originalColumns == null) {
                 return true;
             }
@@ -687,13 +694,13 @@ public String generateUpdatedDataStr() {
             sb.append("{");
             if (pkColumnName != null) {
                 sb.append("\"")
-                    .append(pkColumnName)
-                    .append("\"")
-                    .append(":")
-                    .append("\"")
-                    .append(convertDoubleQuotes(pkColumnVal))
-                    .append("\"")
-                    .append(",");
+                        .append(pkColumnName)
+                        .append("\"")
+                        .append(":")
+                        .append("\"")
+                        .append(convertDoubleQuotes(pkColumnVal))
+                        .append("\"")
+                        .append(",");
             }
             for (DataColumnChangeResult update : updatedColumns) {
                 sb.append(update.generateDataStr());
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/IntegerListTypeHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/IntegerListTypeHandler.java
new file mode 100644
index 000000000..a5afb5b1e
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/IntegerListTypeHandler.java
@@ -0,0 +1,39 @@
+package cn.bootx.platform.common.mybatisplus.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * List 的类型转换器类
+ * @author xxm
+ * @since 2023/8/8
+ */
+@MappedTypes(List.class)
+@MappedJdbcTypes({JdbcType.VARCHAR,JdbcType.LONGVARCHAR})
+public class IntegerListTypeHandler extends AbstractJsonTypeHandler> {
+
+    private static final String COMMA = ",";
+
+    @Override
+    protected List parse(String value) {
+        if (StrUtil.isNotBlank(value)){
+            int[] longs = StrUtil.splitToInt(value, COMMA);
+            return  Arrays.stream(longs).boxed().collect(Collectors.toList());
+        }
+        return null;
+    }
+
+    @Override
+    protected String toJson(List obj) {
+        return CollUtil.join(obj, COMMA);
+
+    }
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonRawTypeHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonRawTypeHandler.java
new file mode 100644
index 000000000..3073d0299
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonRawTypeHandler.java
@@ -0,0 +1,51 @@
+package cn.bootx.platform.common.mybatisplus.handler;
+
+import cn.bootx.platform.common.jackson.util.JacksonUtil;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+/**
+ * Jackson 实现 JSON 字段类型处理器, 会记录对象属性类型, 通常用于储存不确定对象的属性上
+ * 例如: object对象, 泛型对象、存储的数据是字段声明类型的子类等
+ * 如果在使用知道明确类型的包装类是,如List、Set, 请使用 JacksonTypeReferenceHandler
+ * @see JacksonTypeReferenceHandler
+ * @author xxm
+ * @since 2022/7/11
+ */
+@Slf4j
+@MappedTypes({ Object.class })
+@MappedJdbcTypes(value = { JdbcType.VARCHAR, JdbcType.LONGVARCHAR })
+public class JacksonRawTypeHandler extends AbstractJsonTypeHandler {
+
+    private final Class type;
+
+    /**
+     * @param type 对象类型
+     */
+    public JacksonRawTypeHandler(Class type) {
+        if (log.isTraceEnabled()) {
+            log.trace("JacksonRawTypeHandler(" + type + ")");
+        }
+        Assert.notNull(type, "Type argument cannot be null");
+        this.type = type;
+    }
+
+    @Override
+    protected Object parse(String json) {
+        return JacksonUtil.toTypeBean(json, type);
+    }
+
+    /**
+     *
+     * @param obj
+     */
+    @Override
+    protected String toJson(Object obj) {
+        return JacksonUtil.toTypeJson(obj);
+    }
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonTypeReferenceHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonTypeReferenceHandler.java
new file mode 100644
index 000000000..222795c83
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/JacksonTypeReferenceHandler.java
@@ -0,0 +1,45 @@
+package cn.bootx.platform.common.mybatisplus.handler;
+
+import cn.bootx.platform.common.jackson.util.JacksonUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import com.fasterxml.jackson.core.type.TypeReference;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+/**
+ * JSON字段类型转换抽象处理器, 需要进行继承实现, 可以在不在JSON字符串中记录数据类型,就可以对一些特殊类型进行反序列化
+ * 例如: 集合类型List, 泛型对象ResResult 等
+ * 通过 getTypeReference 接口方法, 将要进行反序列的对象传入
+ *
+ * @author xxm
+ * @since 2024/1/3
+ */
+@Slf4j
+@MappedTypes({ Object.class })
+@MappedJdbcTypes(value = { JdbcType.VARCHAR, JdbcType.LONGVARCHAR })
+public abstract class JacksonTypeReferenceHandler extends AbstractJsonTypeHandler {
+
+    /**
+     * 返回要反序列化的类型对象
+     */
+    public abstract TypeReference getTypeReference();
+
+    /**
+     * 反序列化
+     */
+    @Override
+    protected Object parse(String json) {
+        return JacksonUtil.toBean(json, this.getTypeReference());
+    }
+
+    /**
+     * 序列化
+     */
+    @Override
+    protected String toJson(Object obj) {
+        return JacksonUtil.toJson(obj);
+    }
+
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/LongListTypeHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/LongListTypeHandler.java
new file mode 100644
index 000000000..5c3393a66
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/LongListTypeHandler.java
@@ -0,0 +1,39 @@
+package cn.bootx.platform.common.mybatisplus.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * List 的类型转换器类
+ * @author xxm
+ * @since 2023/8/8
+ */
+@MappedTypes(List.class)
+@MappedJdbcTypes({JdbcType.VARCHAR,JdbcType.LONGVARCHAR})
+public class LongListTypeHandler  extends AbstractJsonTypeHandler> {
+
+    private static final String COMMA = ",";
+
+    @Override
+    protected List parse(String value) {
+        if (StrUtil.isNotBlank(value)){
+            long[] longs = StrUtil.splitToLong(value, COMMA);
+            return  Arrays.stream(longs).boxed().collect(Collectors.toList());
+        }
+        return null;
+    }
+
+    @Override
+    protected String toJson(List obj) {
+        return CollUtil.join(obj, COMMA);
+
+    }
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java
similarity index 84%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java
index d6be75d42..1cf40a7ce 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/SnowflakeIdentifierGenerator.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mybatisplus.handler;
+package cn.bootx.platform.common.mybatisplus.handler;
 
 import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
@@ -8,7 +8,7 @@
  * 雪花id生成器
  *
  * @author xxm
- * @date 2021/8/18
+ * @since 2021/8/18
  */
 @RequiredArgsConstructor
 public class SnowflakeIdentifierGenerator implements IdentifierGenerator {
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/StringListTypeHandler.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/StringListTypeHandler.java
new file mode 100644
index 000000000..13d82667a
--- /dev/null
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/handler/StringListTypeHandler.java
@@ -0,0 +1,40 @@
+package cn.bootx.platform.common.mybatisplus.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.util.List;
+
+/**
+ * List 的类型转换器类
+ * @author xxm
+ * @since 2023/8/8
+ */
+@MappedTypes(List.class)
+@MappedJdbcTypes({JdbcType.VARCHAR,JdbcType.LONGVARCHAR})
+public class StringListTypeHandler extends AbstractJsonTypeHandler> {
+    private static final String COMMA = ",";
+
+    /**
+     * 反系列化
+     */
+    @Override
+    protected List parse(String value) {
+        if (StrUtil.isNotBlank(value)){
+            return StrUtil.splitTrim(value, COMMA);
+        }
+        return null;
+    }
+
+    /**
+     * 序列化
+     */
+    @Override
+    protected String toJson(List obj) {
+        return CollUtil.join(obj, COMMA);
+    }
+}
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/impl/BaseManager.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/impl/BaseManager.java
similarity index 98%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/impl/BaseManager.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/impl/BaseManager.java
index b992a6343..9f81bf0d2 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/impl/BaseManager.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/impl/BaseManager.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.mybatisplus.impl;
+package cn.bootx.platform.common.mybatisplus.impl;
 
-import cn.bootx.common.core.exception.OptimisticLockException;
-import cn.bootx.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.common.core.exception.OptimisticLockException;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
@@ -34,7 +34,7 @@
  * 自定义的基础数据库Manager操作类 类似自带的ServiceImpl类
  *
  * @author xxm
- * @date 2020/4/15 14:26
+ * @since 2020/4/15 14:26
  */
 public class BaseManager, T> {
 
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptor.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptor.java
similarity index 85%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptor.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptor.java
index da53d14b9..461f19558 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptor.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptor.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mybatisplus.interceptor;
+package cn.bootx.platform.common.mybatisplus.interceptor;
 
 import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
 import lombok.*;
@@ -7,7 +7,7 @@
  * mp插件包装(支持排序)
  *
  * @author xxm
- * @date 2021/12/21
+ * @since 2021/12/21
  */
 @Getter
 @Setter
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptorConfiguration.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptorConfiguration.java
similarity index 94%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptorConfiguration.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptorConfiguration.java
index d5f268244..b72b78bda 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/interceptor/MpInterceptorConfiguration.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/interceptor/MpInterceptorConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.mybatisplus.interceptor;
+package cn.bootx.platform.common.mybatisplus.interceptor;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
@@ -11,7 +11,7 @@
  * 插件容器
  *
  * @author xxm
- * @date 2021/12/21
+ * @since 2021/12/21
  */
 @Configuration
 public class MpInterceptorConfiguration {
diff --git a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/util/MpUtil.java b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/util/MpUtil.java
similarity index 92%
rename from bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/util/MpUtil.java
rename to bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/util/MpUtil.java
index f3f1c70c1..fcb146079 100644
--- a/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/common/mybatisplus/util/MpUtil.java
+++ b/bootx-commons/common-mybatis-plus/src/main/java/cn/bootx/platform/common/mybatisplus/util/MpUtil.java
@@ -1,13 +1,13 @@
-package cn.bootx.common.mybatisplus.util;
-
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.common.mybatisplus.base.MpCreateEntity;
-import cn.bootx.common.mybatisplus.base.MpDelEntity;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
+package cn.bootx.platform.common.mybatisplus.util;
+
+import cn.bootx.platform.common.core.annotation.BigField;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.common.mybatisplus.base.MpCreateEntity;
+import cn.bootx.platform.common.mybatisplus.base.MpDelEntity;
+import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ArrayUtil;
@@ -37,7 +37,7 @@
  * MP工具类
  *
  * @author xxm
- * @date 2020/4/21 10:00
+ * @since 2020/4/21 10:00
  */
 public class MpUtil {
 
@@ -97,6 +97,7 @@ public static  String getColumnName(SFunction function) {
      * @param clazz 实体类类型. 辅助进行判断, 传多个只有第一个生效,可以为空, 为空时使用读取方法对应的Class类,
      * @return 字段名
      */
+    @SafeVarargs
     public static  String getColumnName(Method readMethod, Class... clazz) {
         Class beanClass;
         if (ArrayUtil.isNotEmpty(clazz)) {
diff --git a/bootx-commons/common-mybatis-plus/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-mybatis-plus/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index fdf7faf66..c2a7d2fb9 100644
--- a/bootx-commons/common-mybatis-plus/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-mybatis-plus/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.mybatisplus.MybatisPlusCommonAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.mybatisplus.MybatisPlusCommonAutoConfiguration
diff --git a/bootx-commons/common-rabbitmq/pom.xml b/bootx-commons/common-rabbitmq/pom.xml
index c2d684ba0..2739d7e59 100644
--- a/bootx-commons/common-rabbitmq/pom.xml
+++ b/bootx-commons/common-rabbitmq/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqProperties.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqProperties.java
deleted file mode 100644
index 1138cc4d1..000000000
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqProperties.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.common.rabbit.configuration;
-
-import cn.bootx.common.rabbit.conditional.ConditionalOnRabbit;
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * MQTT配置
- *
- * @author xxm
- * @date 2022/12/12
- */
-@Getter
-@Setter
-@ConfigurationProperties("bootx.common.rabbit")
-public class RabbitMqProperties {
-
-    /**
-     * 是否开启 RabbitMQ功能,
-     * @see ConditionalOnRabbit 配合此注解使用
-     */
-    private boolean enable = false;
-
-}
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/RabbitMqCommonAutoConfiguration.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/RabbitMqCommonAutoConfiguration.java
similarity index 85%
rename from bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/RabbitMqCommonAutoConfiguration.java
rename to bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/RabbitMqCommonAutoConfiguration.java
index 248d9d90a..1b4cf0c33 100644
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/RabbitMqCommonAutoConfiguration.java
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/RabbitMqCommonAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.rabbit;
+package cn.bootx.platform.common.rabbit;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@@ -8,7 +8,7 @@
  * RabbitMQ配置
  *
  * @author xxm
- * @date 2022/5/3
+ * @since 2022/5/3
  */
 @ComponentScan
 @AutoConfiguration
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/ConditionalOnRabbit.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/ConditionalOnRabbit.java
similarity index 90%
rename from bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/ConditionalOnRabbit.java
rename to bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/ConditionalOnRabbit.java
index 18ffa4ffa..b8b670c80 100644
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/ConditionalOnRabbit.java
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/ConditionalOnRabbit.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.rabbit.conditional;
+package cn.bootx.platform.common.rabbit.conditional;
 
 import org.springframework.context.annotation.Conditional;
 
@@ -12,7 +12,7 @@
  * 从而避免`RabbitMQ`进行无限尝试重连服务器,导致项目一直抛出异常,影响开发和使用。
  *
  * @author xxm
- * @date 2022/12/12
+ * @since 2022/12/12
  */
 @Target({ ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/OnRabbitEnable.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/OnRabbitEnable.java
similarity index 87%
rename from bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/OnRabbitEnable.java
rename to bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/OnRabbitEnable.java
index 8be7a9301..8082675fc 100644
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/conditional/OnRabbitEnable.java
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/conditional/OnRabbitEnable.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.rabbit.conditional;
+package cn.bootx.platform.common.rabbit.conditional;
 
-import cn.bootx.common.rabbit.configuration.RabbitMqProperties;
+import cn.bootx.platform.common.rabbit.configuration.RabbitMqProperties;
 import org.springframework.boot.context.properties.bind.Binder;
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.ConditionContext;
@@ -10,7 +10,7 @@
  * 判断是否在启用了Rabbit, 用来控制在没启用Rabbit情况下. 不将 @RabbitListener 修饰的监听器注册为Bean, 不然会导致无限尝试重连
  *
  * @author xxm
- * @date 2022/12/12
+ * @since 2022/12/12
  */
 public class OnRabbitEnable implements Condition {
 
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/BootxRabbitListenerConfigurer.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/BootxRabbitListenerConfigurer.java
similarity index 91%
rename from bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/BootxRabbitListenerConfigurer.java
rename to bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/BootxRabbitListenerConfigurer.java
index fbe6ceb6a..9dbdc715e 100644
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/BootxRabbitListenerConfigurer.java
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/BootxRabbitListenerConfigurer.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.rabbit.configuration;
+package cn.bootx.platform.common.rabbit.configuration;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
@@ -10,7 +10,7 @@
  * Rabbit 侦听器配置器
  *
  * @author xxm
- * @date 2021/6/25
+ * @since 2021/6/25
  */
 @Configuration
 @RequiredArgsConstructor
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqConfigurer.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqConfigurer.java
similarity index 96%
rename from bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqConfigurer.java
rename to bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqConfigurer.java
index 5cff5fac3..fac5fb273 100644
--- a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/common/rabbit/configuration/RabbitMqConfigurer.java
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqConfigurer.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.rabbit.configuration;
+package cn.bootx.platform.common.rabbit.configuration;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.amqp.rabbit.annotation.EnableRabbit;
@@ -14,7 +14,7 @@
  * 消息队列配置
  *
  * @author xxm
- * @date 2021/6/25
+ * @since 2021/6/25
  */
 @EnableRabbit
 @Configuration
diff --git a/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqProperties.java b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqProperties.java
new file mode 100644
index 000000000..91c55d761
--- /dev/null
+++ b/bootx-commons/common-rabbitmq/src/main/java/cn/bootx/platform/common/rabbit/configuration/RabbitMqProperties.java
@@ -0,0 +1,25 @@
+package cn.bootx.platform.common.rabbit.configuration;
+
+import cn.bootx.platform.common.rabbit.conditional.ConditionalOnRabbit;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * MQTT配置
+ *
+ * @author xxm
+ * @since 2022/12/12
+ */
+@Getter
+@Setter
+@ConfigurationProperties("bootx.common.rabbit")
+public class RabbitMqProperties {
+
+    /**
+     * 是否开启 RabbitMQ功能,
+     * @see ConditionalOnRabbit 配合此注解使用
+     */
+    private boolean enable = false;
+
+}
diff --git a/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring.factories b/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring.factories
index 3d4e56271..9b41ab15e 100644
--- a/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring.factories
+++ b/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring.factories
@@ -1,3 +1,3 @@
 ## 配置自定义 starter 的自动化配置
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  cn.bootx.common.rabbit.RabbitMqCommonAutoConfiguration
\ No newline at end of file
+  cn.bootx.platform.common.rabbit.RabbitMqCommonAutoConfiguration
diff --git a/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 622df3c88..5977a658b 100644
--- a/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-rabbitmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.rabbit.RabbitMqCommonAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.rabbit.RabbitMqCommonAutoConfiguration
diff --git a/bootx-commons/common-redis-client/pom.xml b/bootx-commons/common-redis-client/pom.xml
index db5360658..4ed5cc6fc 100644
--- a/bootx-commons/common-redis-client/pom.xml
+++ b/bootx-commons/common-redis-client/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisApplication.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisApplication.java
deleted file mode 100644
index a06f65d49..000000000
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisApplication.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.common.redis;
-
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * redis配置
- *
- * @author xxm
- * @date 2022/5/7
- */
-@ComponentScan
-public class RedisApplication {
-
-}
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonConfiguration.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonConfiguration.java
deleted file mode 100644
index 0a417a073..000000000
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonConfiguration.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package cn.bootx.common.redis.redisson;
-
-import cn.hutool.core.collection.CollUtil;
-import lombok.AllArgsConstructor;
-import org.redisson.Redisson;
-import org.redisson.api.RedissonClient;
-import org.redisson.config.ClusterServersConfig;
-import org.redisson.config.Config;
-import org.redisson.config.SingleServerConfig;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Redisson 自动配置
- *
- * @author xxm
- * @date 2022/12/19
- */
-@Configuration
-@ConditionalOnBean(name = "org.redisson.Redisson")
-@AutoConfigureAfter(RedisAutoConfiguration.class)
-@AllArgsConstructor
-public class RedissonConfiguration {
-
-    private final RedisProperties redisProperties;
-
-    private final String REDIS_PREFIX = "redis://";
-
-    /**
-     * 配置一个临时的对象到spring容器中,不使用
-     * @return 一个RedissonClient的实现
-     */
-    @Bean
-    public RedissonClient redissonClient() {
-        return new RedissonClientTemporary();
-
-    }
-
-    @Bean
-    @ConditionalOnMissingBean
-    public RedissonClient redisson() {
-        // 单机/集群
-        Config config = new Config();
-        RedisProperties.Cluster cluster = redisProperties.getCluster();
-        if (cluster == null || CollUtil.isEmpty(cluster.getNodes())) {
-            initSingleConfig(config.useSingleServer());
-        }
-        else {
-            initClusterConfig(config.useClusterServers());
-        }
-
-        return Redisson.create(config);
-    }
-
-    /**
-     * 单节点模式
-     */
-    private void initSingleConfig(SingleServerConfig singleServerConfig) {
-        singleServerConfig.setAddress(REDIS_PREFIX + redisProperties.getHost() + ":" + redisProperties.getPort())
-            .setDatabase(redisProperties.getDatabase())
-            .setPassword(redisProperties.getPassword());
-    }
-
-    /**
-     * 集群模式
-     */
-    private void initClusterConfig(ClusterServersConfig clusterServersConfig) {
-        String[] nodes = redisProperties.getCluster()
-            .getNodes()
-            .stream()
-            .map(node -> REDIS_PREFIX + node)
-            .toArray(String[]::new);
-        clusterServersConfig.setPassword(redisProperties.getPassword()).addNodeAddress(nodes);
-    }
-
-}
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisApplication.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisApplication.java
new file mode 100644
index 000000000..c1b8d839b
--- /dev/null
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisApplication.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.common.redis;
+
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * redis配置
+ *
+ * @author xxm
+ * @since 2022/5/7
+ */
+@ComponentScan
+public class RedisApplication {
+
+}
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisClient.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisClient.java
similarity index 97%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisClient.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisClient.java
index dedec29fb..4769f76d8 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/RedisClient.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/RedisClient.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.redis;
+package cn.bootx.platform.common.redis;
 
-import cn.bootx.common.redis.code.RedisCode;
+import cn.bootx.platform.common.redis.code.RedisCode;
 import lombok.RequiredArgsConstructor;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -15,7 +15,7 @@
  * redis请求类
  *
  * @author xxm
- * @date 2020/4/9 15:34
+ * @since 2020/4/9 15:34
  */
 @RequiredArgsConstructor
 public class RedisClient {
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/code/RedisCode.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/code/RedisCode.java
similarity index 80%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/code/RedisCode.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/code/RedisCode.java
index 3baf0e0d5..78c3c7700 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/code/RedisCode.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/code/RedisCode.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.redis.code;
+package cn.bootx.platform.common.redis.code;
 
 /**
  * redis常量
  *
  * @author xxm
- * @date 2022/5/7
+ * @since 2022/5/7
  */
 public interface RedisCode {
 
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/configuration/RedisAutoConfiguration.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/configuration/RedisAutoConfiguration.java
similarity index 94%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/configuration/RedisAutoConfiguration.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/configuration/RedisAutoConfiguration.java
index 17cfe4672..a8abd0700 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/configuration/RedisAutoConfiguration.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/configuration/RedisAutoConfiguration.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.redis.configuration;
+package cn.bootx.platform.common.redis.configuration;
 
-import cn.bootx.common.core.exception.FatalException;
-import cn.bootx.common.redis.RedisClient;
-import cn.bootx.common.redis.code.RedisCode;
-import cn.bootx.common.redis.listener.RedisTopicReceiver;
+import cn.bootx.platform.common.core.exception.FatalException;
+import cn.bootx.platform.common.redis.RedisClient;
+import cn.bootx.platform.common.redis.code.RedisCode;
+import cn.bootx.platform.common.redis.listener.RedisTopicReceiver;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -36,15 +36,13 @@
  * Redis配置
  *
  * @author xxm
- * @date 2020/4/9 15:40
+ * @since 2020/4/9 15:40
  */
 @Configuration
 @ConditionalOnClass(StringRedisTemplate.class)
 @RequiredArgsConstructor
 public class RedisAutoConfiguration {
 
-    private final ObjectMapper objectMapper;
-
     /**
      * 默认 RedisClient
      */
@@ -58,7 +56,6 @@ public RedisClient redisClient(StringRedisTemplate stringRedisTemplate,
     /**
      * 默认 RedisTemplate
      */
-    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
     @Bean
     @Primary
     public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory,
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredListener.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredListener.java
similarity index 80%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredListener.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredListener.java
index b8f51a7c4..abd83f812 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredListener.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredListener.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.redis.listener;
+package cn.bootx.platform.common.redis.listener;
 
 /**
  * Key过期事件
  *
  * @author xxm
- * @date 2022/5/7
+ * @since 2022/5/7
  */
 public interface RedisKeyExpiredListener {
 
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredReceiver.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredReceiver.java
similarity index 95%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredReceiver.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredReceiver.java
index 5e2ff9816..e068ce757 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisKeyExpiredReceiver.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisKeyExpiredReceiver.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.redis.listener;
+package cn.bootx.platform.common.redis.listener;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -13,7 +13,7 @@
  * key过期事件接收
  *
  * @author xxm
- * @date 2022/5/7
+ * @since 2022/5/7
  */
 @Slf4j
 @Component
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicListener.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicListener.java
similarity index 78%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicListener.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicListener.java
index f36157f9f..3ab36d720 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicListener.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicListener.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.redis.listener;
+package cn.bootx.platform.common.redis.listener;
 
 /**
  * redis订阅消息
  *
  * @author xxm
- * @date 2022/5/7
+ * @since 2022/5/7
  */
 public interface RedisTopicListener {
 
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicReceiver.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicReceiver.java
similarity index 90%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicReceiver.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicReceiver.java
index cd16a73bd..788d3a9a4 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/listener/RedisTopicReceiver.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/listener/RedisTopicReceiver.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.redis.listener;
+package cn.bootx.platform.common.redis.listener;
 
-import cn.bootx.common.core.exception.FatalException;
-import cn.bootx.common.redis.code.RedisCode;
+import cn.bootx.platform.common.core.exception.FatalException;
+import cn.bootx.platform.common.redis.code.RedisCode;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -16,7 +16,7 @@
  * redis订阅消息接收
  *
  * @author xxm
- * @date 2022/5/7
+ * @since 2022/5/7
  */
 @SuppressWarnings("rawtypes")
 @Slf4j
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonClientTemporary.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonClientTemporary.java
similarity index 97%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonClientTemporary.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonClientTemporary.java
index 67ffeee2e..dbf8354d5 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonClientTemporary.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonClientTemporary.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.redis.redisson;
+package cn.bootx.platform.common.redis.redisson;
 
 import org.redisson.api.*;
 import org.redisson.api.redisnode.BaseRedisNodes;
@@ -13,7 +13,7 @@
  * 只是在初始化时候使用一下,之后就会被替换
  *
  * @author xxm
- * @date 2022/11/30
+ * @since 2022/11/30
  */
 public class RedissonClientTemporary implements RedissonClient {
 
@@ -63,6 +63,23 @@ public  RStream getStream(String s, Codec codec) {
         return null;
     }
 
+    /**
+     * @return
+     */
+    @Override
+    public RSearch getSearch() {
+        return null;
+    }
+
+    /**
+     * @param codec
+     * @return
+     */
+    @Override
+    public RSearch getSearch(Codec codec) {
+        return null;
+    }
+
     /**
      * @param s
      * @return
@@ -138,13 +155,13 @@ public  RMapCache getMapCache(String s, Codec codec) {
     /**
      * @param s
      * @param codec
-     * @param mapOptions
+     * @param mapCacheOptions
      * @param 
      * @param 
      * @return
      */
     @Override
-    public  RMapCache getMapCache(String s, Codec codec, MapOptions mapOptions) {
+    public  RMapCache getMapCache(String s, Codec codec, MapCacheOptions mapCacheOptions) {
         return null;
     }
 
@@ -161,13 +178,13 @@ public  RMapCache getMapCache(String s) {
 
     /**
      * @param s
-     * @param mapOptions
+     * @param mapCacheOptions
      * @param 
      * @param 
      * @return
      */
     @Override
-    public  RMapCache getMapCache(String s, MapOptions mapOptions) {
+    public  RMapCache getMapCache(String s, MapCacheOptions mapCacheOptions) {
         return null;
     }
 
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonConfiguration.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonConfiguration.java
new file mode 100644
index 000000000..ac25d29aa
--- /dev/null
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonConfiguration.java
@@ -0,0 +1,42 @@
+package cn.bootx.platform.common.redis.redisson;
+
+import cn.hutool.core.collection.CollUtil;
+import lombok.AllArgsConstructor;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.ClusterServersConfig;
+import org.redisson.config.Config;
+import org.redisson.config.SingleServerConfig;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+/**
+ * Redisson 自动配置
+ *
+ * @author xxm
+ * @since 2022/12/19
+ */
+@Configuration
+@ConditionalOnClass(name = "org.redisson.Redisson")
+@AutoConfigureAfter(RedisAutoConfiguration.class)
+@AllArgsConstructor
+public class RedissonConfiguration {
+
+    /**
+     * 配置一个临时的对象到spring容器中,不使用
+     * @return 一个RedissonClient的实现
+     */
+    @Bean
+    public RedissonClient redissonClient() {
+        return new RedissonClientTemporary();
+
+    }
+
+}
diff --git a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonLoadListener.java b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonLoadListener.java
similarity index 90%
rename from bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonLoadListener.java
rename to bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonLoadListener.java
index 8a2866db1..1e646986b 100644
--- a/bootx-commons/common-redis-client/src/main/java/cn/bootx/common/redis/redisson/RedissonLoadListener.java
+++ b/bootx-commons/common-redis-client/src/main/java/cn/bootx/platform/common/redis/redisson/RedissonLoadListener.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.redis.redisson;
+package cn.bootx.platform.common.redis.redisson;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -11,6 +11,7 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.ApplicationListener;
@@ -21,10 +22,10 @@
  * 项目启动时Redisson替换RedissonClient的实现, Redisson连接失败是会导致项目无法启动, 选择改为项目启动成功后, 替换掉原有的Bean
  *
  * @author xxm
- * @date 2022/11/30
+ * @since 2022/11/30
  */
 @Component
-@ConditionalOnBean(name = "org.redisson.Redisson")
+@ConditionalOnClass(name = "org.redisson.Redisson")
 @RequiredArgsConstructor
 public class RedissonLoadListener implements ApplicationListener {
 
@@ -51,13 +52,10 @@ public void onApplicationEvent(ApplicationReadyEvent event) {
 
         String redissonClientName = StrUtil.lowerFirst(RedissonClient.class.getSimpleName());
 
-        // 创建一个Redisson对象, 替换掉原有的对象
+        // 创建一个Redisson对象, 替换掉原有的对象, 并且不进行初始化, 在使用时进行延迟初始化
         BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) configurableApplicationContext;
         beanDefinitionRegistry.removeBeanDefinition(redissonClientName);
         beanDefinitionRegistry.registerBeanDefinition(redissonClientName, beanDefinitionBuilder.getBeanDefinition());
-
-        // 这里相当于初始化加载使用
-        configurableApplicationContext.getBean(redissonClientName);
     }
 
     /**
diff --git a/bootx-commons/common-redis-client/src/main/resources/META-INF/spring.factories b/bootx-commons/common-redis-client/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index 9fa970bca..000000000
--- a/bootx-commons/common-redis-client/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,3 +0,0 @@
-## 配置自定义 starter 的自动化配置
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  cn.bootx.common.redis.RedisApplication
diff --git a/bootx-commons/common-redis-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-redis-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index fd445ebb2..baa624988 100644
--- a/bootx-commons/common-redis-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-redis-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.starter.wecom.WeComAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.redis.RedisApplication
diff --git a/bootx-commons/common-sequence/pom.xml b/bootx-commons/common-sequence/pom.xml
index 550f80d92..0e972c055 100644
--- a/bootx-commons/common-sequence/pom.xml
+++ b/bootx-commons/common-sequence/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/SequenceAutoConfiguration.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/SequenceAutoConfiguration.java
deleted file mode 100644
index 5e425759b..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/SequenceAutoConfiguration.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.common.sequence;
-
-import org.apache.ibatis.annotations.Mapper;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * sequence序列生成器
- *
- * @author xxm
- * @date 2021/12/14
- */
-@ComponentScan
-@AutoConfiguration
-@MapperScan(annotationClass = Mapper.class)
-public class SequenceAutoConfiguration {
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceConfiguration.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceConfiguration.java
deleted file mode 100644
index fd4ee400a..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceConfiguration.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.bootx.common.sequence.configuration;
-
-import cn.bootx.common.sequence.func.Sequence;
-import cn.bootx.common.sequence.impl.DefaultRangeSequence;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRangeManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-
-/**
- * 序列化生成器
- *
- * @author xxm
- * @date 2021/8/6
- */
-@Configuration
-@RequiredArgsConstructor
-@EnableConfigurationProperties(SequenceProperties.class)
-public class SequenceConfiguration {
-
-    private final SequenceProperties sequenceProperties;
-
-    @Bean
-    @Primary
-    public Sequence sequence(SeqRangeManager seqRangeManager) {
-        SeqRangeConfig seqRangeConfig = new SeqRangeConfig().setStep(sequenceProperties.getStep())
-            .setRangeStart(sequenceProperties.getRangeStart())
-            .setRangeStep(sequenceProperties.getRangeStep());
-        return new DefaultRangeSequence(seqRangeManager, seqRangeConfig);
-    }
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/exception/SeqException.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/exception/SeqException.java
deleted file mode 100644
index c068d61c5..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/exception/SeqException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.common.sequence.exception;
-
-import cn.bootx.common.core.code.CommonCode;
-import cn.bootx.common.core.exception.FatalException;
-
-import java.io.Serializable;
-
-/**
- * 序列号生成异常
- *
- * @author xuan on 2018/1/10.
- */
-public class SeqException extends FatalException implements Serializable {
-
-    private static final long serialVersionUID = -5762184157486575048L;
-
-    public SeqException(String message) {
-        super(CommonCode.FAIL_CODE, message);
-    }
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/func/Sequence.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/func/Sequence.java
deleted file mode 100644
index 3feb9b7fb..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/func/Sequence.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.common.sequence.func;
-
-import cn.bootx.common.sequence.exception.SeqException;
-
-/**
- * 序列号生成器接口
- *
- * @author xuan on 2018/1/10.
- */
-public interface Sequence {
-
-    /**
-     * 生成下一个序列号
-     * @return 序列号
-     * @throws SeqException 序列号异常
-     */
-    long next(String name) throws SeqException;
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRange.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRange.java
deleted file mode 100644
index 3bdb92630..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRange.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cn.bootx.common.sequence.range.jdbc;
-
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 队列区间
- *
- * @author xxm
- * @date 2021/12/14
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("common_sequence_range")
-public class SequenceRange extends MpBaseEntity {
-
-    /** 区间key */
-    private String rangeKey;
-
-    /** 区间开始值 */
-    private Long rangeValue;
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeManager.java
deleted file mode 100644
index 1aa183aab..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeManager.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.common.sequence.range.jdbc;
-
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * 队列区间
- *
- * @author xxm
- * @date 2021/12/14
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class SequenceRangeManager extends BaseManager {
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/SequenceRange.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/SequenceRange.java
deleted file mode 100644
index f7f4daa80..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/SequenceRange.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.bootx.common.sequence.range.mongo;
-
-import lombok.Data;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldNameConstants;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.mongodb.core.mapping.Document;
-
-/**
- * 队列区间
- *
- * @author xxm
- * @date 2021/12/14
- */
-@Data
-@FieldNameConstants
-@Accessors(chain = true)
-@Document("common_sequence_range")
-public class SequenceRange {
-
-    @Id
-    private Long id;
-
-    /** 区间key */
-    private String rangeKey;
-
-    /** 区间开始值 */
-    private Long rangeValue;
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/util/SequenceUtil.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/util/SequenceUtil.java
deleted file mode 100644
index d904eb942..000000000
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/util/SequenceUtil.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.common.sequence.util;
-
-import cn.bootx.common.core.exception.FatalException;
-import cn.bootx.common.sequence.func.Sequence;
-import cn.bootx.common.sequence.impl.DefaultRangeSequence;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRangeManager;
-import cn.hutool.extra.spring.SpringUtil;
-import lombok.experimental.UtilityClass;
-
-import java.util.Objects;
-
-/**
- * 序列号生成工具类
- *
- * @author xxm
- * @date 2022/12/27
- */
-@UtilityClass
-public class SequenceUtil {
-
-    /**
-     * 创建一个序列号生成器
-     */
-    public Sequence create(int step, int rangeStep, int rangeStart) {
-        SeqRangeManager rangeManager = SpringUtil.getBean(SeqRangeManager.class);
-        if (Objects.isNull(rangeManager)) {
-            throw new FatalException("序列号生成器创建失败,缺少区间管理器");
-        }
-        SeqRangeConfig seqRangeConfig = new SeqRangeConfig().setStep(step)
-            .setRangeStart(rangeStep)
-            .setRangeStep(rangeStart);
-        return new DefaultRangeSequence(rangeManager, seqRangeConfig);
-    }
-
-}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/SequenceAutoConfiguration.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/SequenceAutoConfiguration.java
new file mode 100644
index 000000000..c44224192
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/SequenceAutoConfiguration.java
@@ -0,0 +1,21 @@
+package cn.bootx.platform.common.sequence;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * sequence序列生成器
+ *
+ * @author xxm
+ * @since 2021/12/14
+ */
+@ComponentScan
+@AutoConfiguration
+@ConfigurationPropertiesScan
+@MapperScan(annotationClass = Mapper.class)
+public class SequenceAutoConfiguration {
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceConfiguration.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceConfiguration.java
new file mode 100644
index 000000000..552844048
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceConfiguration.java
@@ -0,0 +1,35 @@
+package cn.bootx.platform.common.sequence.configuration;
+
+import cn.bootx.platform.common.sequence.func.Sequence;
+import cn.bootx.platform.common.sequence.impl.DefaultRangeSequence;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
+import lombok.RequiredArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+/**
+ * 序列化生成器
+ *
+ * @author xxm
+ * @since 2021/8/6
+ */
+@Configuration
+@RequiredArgsConstructor
+@EnableConfigurationProperties(SequenceProperties.class)
+public class SequenceConfiguration {
+
+    private final SequenceProperties sequenceProperties;
+
+    @Bean
+    @Primary
+    public Sequence defaultSequence(SeqRangeManager seqRangeManager) {
+        SeqRangeConfig seqRangeConfig = new SeqRangeConfig().setStep(sequenceProperties.getStep())
+            .setRangeStart(sequenceProperties.getRangeStart())
+            .setRangeStep(sequenceProperties.getRangeStep());
+        return new DefaultRangeSequence(seqRangeManager, seqRangeConfig,sequenceProperties.getName());
+    }
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceProperties.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceProperties.java
similarity index 77%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceProperties.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceProperties.java
index 7adc7ab8a..d01b0401f 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/configuration/SequenceProperties.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/configuration/SequenceProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.sequence.configuration;
+package cn.bootx.platform.common.sequence.configuration;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -8,23 +8,29 @@
  * 序列生成器参数
  *
  * @author xxm
- * @date 2021/8/6
+ * @since 2021/8/6
  */
 @Getter
 @Setter
 @ConfigurationProperties("bootx.common.sequence")
 public class SequenceProperties {
 
+
     /**
      * 存储类型 默认为数据库
      */
     private Type type = Type.JDBC;
 
     /**
-     * 序列生成器默认前缀
+     * 序列生成器默认前缀(Redis有效)
      */
     private String keyPrefix = "bootx:sequence:";
 
+    /**
+     * 默认序列生成器名称
+     */
+    private String name = "default";
+
     /**
      * 序列生成器默认步长
      */
@@ -38,7 +44,7 @@ public class SequenceProperties {
     /**
      * 序列生成器默认区间起始位置
      */
-    private long rangeStart = 0;
+    private int rangeStart = 0;
 
     /**
      * 存储类型
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/exception/SeqException.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/exception/SeqException.java
new file mode 100644
index 000000000..005865c19
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/exception/SeqException.java
@@ -0,0 +1,21 @@
+package cn.bootx.platform.common.sequence.exception;
+
+import cn.bootx.platform.common.core.code.CommonCode;
+import cn.bootx.platform.common.core.exception.FatalException;
+
+import java.io.Serializable;
+
+/**
+ * 序列号生成异常
+ *
+ * @author xuan on 2018/1/10.
+ */
+public class SeqException extends FatalException implements Serializable {
+
+    private static final long serialVersionUID = -5762184157486575048L;
+
+    public SeqException(String message) {
+        super(CommonCode.FAIL_CODE, message);
+    }
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/func/Sequence.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/func/Sequence.java
new file mode 100644
index 000000000..eb9dfaafe
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/func/Sequence.java
@@ -0,0 +1,19 @@
+package cn.bootx.platform.common.sequence.func;
+
+import cn.bootx.platform.common.sequence.exception.SeqException;
+
+/**
+ * 序列号生成器接口
+ *
+ * @author xuan on 2018/1/10.
+ */
+public interface Sequence {
+
+    /**
+     * 生成下一个序列号
+     * @return 序列号
+     * @throws SeqException 序列号异常
+     */
+    long next() throws SeqException;
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/impl/DefaultRangeSequence.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/impl/DefaultRangeSequence.java
similarity index 80%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/impl/DefaultRangeSequence.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/impl/DefaultRangeSequence.java
index 6fec8cff4..7ebcbb7e0 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/impl/DefaultRangeSequence.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/impl/DefaultRangeSequence.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.sequence.impl;
+package cn.bootx.platform.common.sequence.impl;
 
-import cn.bootx.common.sequence.exception.SeqException;
-import cn.bootx.common.sequence.func.Sequence;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRange;
-import cn.bootx.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.range.SeqRange;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.sequence.func.Sequence;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
@@ -16,7 +16,7 @@
  * 序列号区间生成器接口默认实现
  *
  * @author xxm
- * @date 2021/8/6
+ * @since 2021/8/6
  */
 @Setter
 @Getter
@@ -43,11 +43,16 @@ public class DefaultRangeSequence implements Sequence {
      */
     private final SeqRangeConfig seqRangeConfig;
 
+    /**
+     * 需要获取区间的业务名称
+     */
+    private final String name;
+
     /**
      * 获取下一个值
      */
     @Override
-    public long next(String name) throws SeqException {
+    public long next() throws SeqException {
         // 当前区间不存在,重新获取一个区间
         if (null == currentRange) {
             lock.lock();
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRange.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRange.java
similarity index 96%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRange.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRange.java
index 690a67971..cf8cf22c0 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRange.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRange.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.sequence.range;
+package cn.bootx.platform.common.sequence.range;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeConfig.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeConfig.java
similarity index 86%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeConfig.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeConfig.java
index 12d97bdde..7a0b78d94 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeConfig.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeConfig.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.sequence.range;
+package cn.bootx.platform.common.sequence.range;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -7,7 +7,7 @@
  * 序列号区间配置
  *
  * @author xxm
- * @date 2022/1/21
+ * @since 2022/1/21
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeManager.java
similarity index 77%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeManager.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeManager.java
index 360eaa7c0..a773a6309 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/SeqRangeManager.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/SeqRangeManager.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.sequence.range;
+package cn.bootx.platform.common.sequence.range;
 
-import cn.bootx.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.exception.SeqException;
 
 /**
  * 区间管理器
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcRangeHandler.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcRangeHandler.java
similarity index 90%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcRangeHandler.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcRangeHandler.java
index a1ff0b41f..b1e38c353 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcRangeHandler.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcRangeHandler.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.sequence.range.jdbc;
+package cn.bootx.platform.common.sequence.range.jdbc;
 
-import cn.bootx.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.exception.SeqException;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -11,7 +11,7 @@
  * jdbc区间管理
  *
  * @author xxm
- * @date 2021/12/14
+ * @since 2021/12/14
  */
 @Slf4j
 @Service
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcSeqRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcSeqRangeManager.java
similarity index 79%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcSeqRangeManager.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcSeqRangeManager.java
index 645e0420b..97e0716c6 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/JdbcSeqRangeManager.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/JdbcSeqRangeManager.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.sequence.range.jdbc;
+package cn.bootx.platform.common.sequence.range.jdbc;
 
-import cn.bootx.common.sequence.exception.SeqException;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRange;
-import cn.bootx.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRange;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -13,7 +13,7 @@
  * 区间管理器jdbc数据库方式实现
  *
  * @author xxm
- * @date 2021/12/14
+ * @since 2021/12/14
  */
 @Slf4j
 @Component
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRange.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRange.java
new file mode 100644
index 000000000..534163385
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRange.java
@@ -0,0 +1,27 @@
+package cn.bootx.platform.common.sequence.range.jdbc;
+
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 队列区间
+ *
+ * @author xxm
+ * @since 2021/12/14
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("common_sequence_range")
+public class SequenceRange extends MpBaseEntity {
+
+    /** 区间key */
+    private String rangeKey;
+
+    /** 区间开始值 */
+    private Long rangeValue;
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeManager.java
new file mode 100644
index 000000000..38c969ae8
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeManager.java
@@ -0,0 +1,19 @@
+package cn.bootx.platform.common.sequence.range.jdbc;
+
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 队列区间
+ *
+ * @author xxm
+ * @since 2021/12/14
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class SequenceRangeManager extends BaseManager {
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeMapper.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeMapper.java
similarity index 75%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeMapper.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeMapper.java
index 54ef02fa0..30305b358 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/jdbc/SequenceRangeMapper.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/jdbc/SequenceRangeMapper.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.sequence.range.jdbc;
+package cn.bootx.platform.common.sequence.range.jdbc;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -7,7 +7,7 @@
  * 队列区间
  *
  * @author xxm
- * @date 2021/12/14
+ * @since 2021/12/14
  */
 @Mapper
 public interface SequenceRangeMapper extends BaseMapper {
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoRangeHandler.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoRangeHandler.java
similarity index 84%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoRangeHandler.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoRangeHandler.java
index f1f26cac8..3f3ef1dfd 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoRangeHandler.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoRangeHandler.java
@@ -1,8 +1,9 @@
-package cn.bootx.common.sequence.range.mongo;
+package cn.bootx.platform.common.sequence.range.mongo;
 
-import cn.bootx.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.exception.SeqException;
 import cn.hutool.core.util.IdUtil;
 import lombok.RequiredArgsConstructor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
@@ -14,8 +15,9 @@
  * Mongo区间处理器
  *
  * @author xxm
- * @date 2022/1/21
+ * @since 2022/1/21
  */
+@ConditionalOnClass(name="org.springframework.data.mongodb.core.MongoTemplate")
 @Repository
 @RequiredArgsConstructor
 public class MongoRangeHandler {
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoSeqRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoSeqRangeManager.java
similarity index 79%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoSeqRangeManager.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoSeqRangeManager.java
index dbd82a8d7..69bdc3414 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/mongo/MongoSeqRangeManager.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/MongoSeqRangeManager.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.sequence.range.mongo;
+package cn.bootx.platform.common.sequence.range.mongo;
 
-import cn.bootx.common.sequence.exception.SeqException;
-import cn.bootx.common.sequence.range.SeqRange;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.range.SeqRange;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -13,7 +13,7 @@
  * 区间管理器MongoDB数据库方式实现
  *
  * @author xxm
- * @date 2022/1/21
+ * @since 2022/1/21
  */
 @Slf4j
 @Component
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/SequenceRange.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/SequenceRange.java
new file mode 100644
index 000000000..76b473c37
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/mongo/SequenceRange.java
@@ -0,0 +1,30 @@
+package cn.bootx.platform.common.sequence.range.mongo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 队列区间
+ *
+ * @author xxm
+ * @since 2021/12/14
+ */
+@Data
+@FieldNameConstants
+@Accessors(chain = true)
+@Document("common_sequence_range")
+public class SequenceRange {
+
+    @Id
+    private Long id;
+
+    /** 区间key */
+    private String rangeKey;
+
+    /** 区间开始值 */
+    private Long rangeValue;
+
+}
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/redis/RedisSeqRangeManager.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/redis/RedisSeqRangeManager.java
similarity index 76%
rename from bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/redis/RedisSeqRangeManager.java
rename to bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/redis/RedisSeqRangeManager.java
index d57e98e25..3957a8ee2 100644
--- a/bootx-commons/common-sequence/src/main/java/cn/bootx/common/sequence/range/redis/RedisSeqRangeManager.java
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/range/redis/RedisSeqRangeManager.java
@@ -1,11 +1,11 @@
-package cn.bootx.common.sequence.range.redis;
+package cn.bootx.platform.common.sequence.range.redis;
 
-import cn.bootx.common.redis.RedisClient;
-import cn.bootx.common.sequence.configuration.SequenceProperties;
-import cn.bootx.common.sequence.exception.SeqException;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRange;
-import cn.bootx.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.redis.RedisClient;
+import cn.bootx.platform.common.sequence.configuration.SequenceProperties;
+import cn.bootx.platform.common.sequence.exception.SeqException;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRange;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -15,7 +15,7 @@
  * Redis区间管理器
  *
  * @author xxm
- * @date 2021/8/6
+ * @since 2021/8/6
  */
 @Slf4j
 @Component
diff --git a/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/util/SequenceUtil.java b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/util/SequenceUtil.java
new file mode 100644
index 000000000..41c0fd37c
--- /dev/null
+++ b/bootx-commons/common-sequence/src/main/java/cn/bootx/platform/common/sequence/util/SequenceUtil.java
@@ -0,0 +1,60 @@
+package cn.bootx.platform.common.sequence.util;
+
+import cn.bootx.platform.common.core.exception.FatalException;
+import cn.bootx.platform.common.sequence.configuration.SequenceProperties;
+import cn.bootx.platform.common.sequence.func.Sequence;
+import cn.bootx.platform.common.sequence.impl.DefaultRangeSequence;
+import cn.bootx.platform.common.sequence.range.SeqRangeConfig;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
+import cn.hutool.extra.spring.SpringUtil;
+import lombok.experimental.UtilityClass;
+
+import java.util.Objects;
+
+/**
+ * 序列号生成工具类
+ *
+ * @author xxm
+ * @since 2022/12/27
+ */
+@UtilityClass
+public class SequenceUtil {
+
+    /**
+     * 创建一个序列号生成器, 步长区间等树形见
+     * @param name 序列生成器的Key
+     */
+    public Sequence create(String name) {
+        SeqRangeManager rangeManager = SpringUtil.getBean(SeqRangeManager.class);
+        SequenceProperties sequenceProperties = SpringUtil.getBean(SequenceProperties.class);
+        if (Objects.isNull(rangeManager)) {
+            throw new FatalException("序列号生成器创建失败,缺少区间管理器");
+        }
+        SeqRangeConfig seqRangeConfig = new SeqRangeConfig()
+                .setStep(sequenceProperties.getStep())
+                .setRangeStart(sequenceProperties.getRangeStep())
+                .setRangeStep(sequenceProperties.getRangeStart());
+        return new DefaultRangeSequence(rangeManager, seqRangeConfig, name);
+    }
+
+    /**
+     * 创建一个自定义的序列号生成器
+     * @param step 步长
+     * @param rangeStep 区间步长
+     * @param rangeStart 区间起始值
+     * @param name 序列生成器的Key
+     * @return 序列生成器
+     */
+    public Sequence create(int step, int rangeStep, int rangeStart, String name) {
+        SeqRangeManager rangeManager = SpringUtil.getBean(SeqRangeManager.class);
+        if (Objects.isNull(rangeManager)) {
+            throw new FatalException("序列号生成器创建失败,缺少区间管理器");
+        }
+        SeqRangeConfig seqRangeConfig = new SeqRangeConfig()
+                .setStep(step)
+                .setRangeStart(rangeStep)
+                .setRangeStep(rangeStart);
+        return new DefaultRangeSequence(rangeManager, seqRangeConfig, name);
+    }
+
+}
diff --git a/bootx-commons/common-sequence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-sequence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index c4cdc8f43..29a30ce95 100644
--- a/bootx-commons/common-sequence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-sequence/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.sequence.SequenceAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.sequence.SequenceAutoConfiguration
diff --git a/bootx-commons/common-spring/pom.xml b/bootx-commons/common-spring/pom.xml
index d543f9788..ae069b80b 100644
--- a/bootx-commons/common-spring/pom.xml
+++ b/bootx-commons/common-spring/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -13,10 +13,12 @@
     jar
 
     
+        
         
             org.springframework.boot
             spring-boot-starter-web
         
+        
         
             org.springframework.boot
             spring-boot-starter-aop
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/exception/RetryableException.java b/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/exception/RetryableException.java
deleted file mode 100644
index 15bf8ef6e..000000000
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/exception/RetryableException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package cn.bootx.common.spring.exception;
-
-import cn.bootx.common.core.exception.BizException;
-
-/**
- * 可重试异常,抛出这个异常进行重试
- *
- * @author xxm
- * @date 2022/7/10
- */
-public class RetryableException extends BizException {
-
-}
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/SpringConfigApplication.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/SpringConfigApplication.java
similarity index 83%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/SpringConfigApplication.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/SpringConfigApplication.java
index fb6a759cd..853e99e51 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/SpringConfigApplication.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/SpringConfigApplication.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring;
+package cn.bootx.platform.common.spring;
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.retry.annotation.EnableRetry;
@@ -7,7 +7,7 @@
 /**
  * spring默认配置
  * @author xxm
- * @date 2023/3/29
+ * @since 2023/3/29
  */
 @EnableScheduling
 @EnableRetry
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/aop/CountTimeAop.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/aop/CountTimeAop.java
similarity index 89%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/aop/CountTimeAop.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/aop/CountTimeAop.java
index a06148948..b09ba620e 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/aop/CountTimeAop.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/aop/CountTimeAop.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.spring.aop;
+package cn.bootx.platform.common.spring.aop;
 
-import cn.bootx.common.core.annotation.CountTime;
+import cn.bootx.platform.common.core.annotation.CountTime;
 import com.google.common.base.Stopwatch;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -15,7 +15,7 @@
  * 方法耗时工具类
  *
  * @author xxm
- * @date 2020/12/22
+ * @since 2020/12/22
  */
 @Aspect
 @Slf4j
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/AsyncExecutorConfiguration.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/AsyncExecutorConfiguration.java
similarity index 95%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/AsyncExecutorConfiguration.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/AsyncExecutorConfiguration.java
index 216a41e02..e300da4e5 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/AsyncExecutorConfiguration.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/AsyncExecutorConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.configuration;
+package cn.bootx.platform.common.spring.configuration;
 
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
  * 异步执行配置
  *
  * @author xxm
- * @date 2021/6/11
+ * @since 2021/6/11
  */
 @Slf4j
 @EnableAsync
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringCorsConfiguration.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringCorsConfiguration.java
similarity index 96%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringCorsConfiguration.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringCorsConfiguration.java
index e05207b03..e03cb5da2 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringCorsConfiguration.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringCorsConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.configuration;
+package cn.bootx.platform.common.spring.configuration;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -18,7 +18,7 @@
  * 跨域处理
  *
  * @author xxm
- * @date 2021/7/14
+ * @since 2021/7/14
  */
 @Configuration
 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringExecutorConfiguration.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringExecutorConfiguration.java
similarity index 97%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringExecutorConfiguration.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringExecutorConfiguration.java
index f70a9ce69..9954a55d0 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringExecutorConfiguration.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringExecutorConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.configuration;
+package cn.bootx.platform.common.spring.configuration;
 
 import cn.hutool.extra.spring.EnableSpringUtil;
 import com.alibaba.ttl.threadpool.TtlExecutors;
@@ -18,7 +18,7 @@
  * spring 线程池 配置
  *
  * @author xxm
- * @date 2021/6/11
+ * @since 2021/6/11
  */
 @Configuration
 @EnableConfigurationProperties({ SpringProperties.class })
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringProperties.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringProperties.java
similarity index 92%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringProperties.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringProperties.java
index d7dbc6f5f..0d14392a1 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/configuration/SpringProperties.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/configuration/SpringProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.configuration;
+package cn.bootx.platform.common.spring.configuration;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -6,7 +6,7 @@
 
 /**
  * @author xxm
- * @date 2020/4/9 13:50
+ * @since 2020/4/9 13:50
  */
 @ConfigurationProperties(prefix = "bootx.common.spring")
 @Data
@@ -21,7 +21,7 @@ public class SpringProperties {
 
     /**
      * @author xxm
-     * @date 2021/6/11
+     * @since 2021/6/11
      */
     @Data
     public static class Executor {
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/exception/RetryableException.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/exception/RetryableException.java
new file mode 100644
index 000000000..2ece95f76
--- /dev/null
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/exception/RetryableException.java
@@ -0,0 +1,13 @@
+package cn.bootx.platform.common.spring.exception;
+
+import cn.bootx.platform.common.core.exception.BizException;
+
+/**
+ * 可重试异常,抛出这个异常进行重试
+ *
+ * @author xxm
+ * @since 2022/7/10
+ */
+public class RetryableException extends BizException {
+
+}
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/AopUtil.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/AopUtil.java
similarity index 92%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/AopUtil.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/AopUtil.java
index b7553bc77..1f9f3b2ba 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/AopUtil.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/AopUtil.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.util;
+package cn.bootx.platform.common.spring.util;
 
 import lombok.experimental.UtilityClass;
 import org.aspectj.lang.JoinPoint;
@@ -12,7 +12,7 @@
  * 切面工具类
  *
  * @author xxm
- * @date 2021/12/23
+ * @since 2021/12/23
  */
 @UtilityClass
 public class AopUtil {
diff --git a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/WebServletUtil.java b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/WebServletUtil.java
similarity index 96%
rename from bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/WebServletUtil.java
rename to bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/WebServletUtil.java
index 95c837ecd..c30f42924 100644
--- a/bootx-commons/common-spring/src/main/java/cn/bootx/common/spring/util/WebServletUtil.java
+++ b/bootx-commons/common-spring/src/main/java/cn/bootx/platform/common/spring/util/WebServletUtil.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.spring.util;
+package cn.bootx.platform.common.spring.util;
 
 import lombok.experimental.UtilityClass;
 import org.springframework.web.context.request.RequestAttributes;
@@ -13,7 +13,7 @@
  * web服务器工具类
  *
  * @author xxm
- * @date 2021/8/13
+ * @since 2021/8/13
  */
 @UtilityClass
 public class WebServletUtil {
diff --git a/bootx-commons/common-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index fc464d564..bebdf8ecf 100644
--- a/bootx-commons/common-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.spring.SpringConfigApplication
\ No newline at end of file
+cn.bootx.platform.common.spring.SpringConfigApplication
diff --git a/bootx-commons/common-super-query/pom.xml b/bootx-commons/common-super-query/pom.xml
index 5b0b71ee6..87fe461ec 100644
--- a/bootx-commons/common-super-query/pom.xml
+++ b/bootx-commons/common-super-query/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryOrder.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryOrder.java
deleted file mode 100644
index b8188d855..000000000
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryOrder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.common.query.entity;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * @author xxm
- * @date 2021/11/17
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "查询排序")
-public class QueryOrder {
-
-    @Schema(description = "设置排序字段")
-    private String sortField;
-
-    @Schema(description = "是否升序")
-    private boolean asc = true;
-
-    @Schema(description = "参数名称是否需要转换成下划线命名")
-    private boolean underLine = true;
-
-}
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParam.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParam.java
deleted file mode 100644
index de5c7a48d..000000000
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParam.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package cn.bootx.common.query.entity;
-
-import cn.bootx.common.query.code.CompareTypeEnum;
-import cn.bootx.common.query.code.ParamTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.util.List;
-
-/**
- * @author xxm
- * @date 2021/11/17
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "查询项")
-public class QueryParam {
-
-    @Schema(description = "拼接条件是否为或")
-    private boolean or;
-
-    @Schema(description = "参数名称")
-    private String paramName;
-
-    /**
-     * @see CompareTypeEnum
-     */
-    @Schema(description = "比较类型")
-    private String compareType;
-
-    /**
-     * @see ParamTypeEnum
-     */
-    @Schema(description = "参数类型")
-    private String paramType;
-
-    @Schema(description = "参数值")
-    private Object paramValue;
-
-    @Schema(description = "参数名称是否需要转换成下划线命名")
-    private boolean underLine = true;
-
-    @Schema(description = "嵌套查询")
-    private List nestedParams;
-
-}
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/AnnotationQueryGenerator.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/AnnotationQueryGenerator.java
deleted file mode 100644
index c94dfbdf8..000000000
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/AnnotationQueryGenerator.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package cn.bootx.common.query.generator;
-
-import cn.bootx.common.core.annotation.QueryParam;
-import cn.bootx.common.core.annotation.QueryParam.NamingCaseEnum;
-import cn.bootx.common.core.function.CollectorsFunction;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.hutool.core.annotation.AnnotationUtil;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.text.NamingCase;
-import cn.hutool.core.util.ClassUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import lombok.experimental.UtilityClass;
-import lombok.val;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Field;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static cn.bootx.common.core.annotation.QueryParam.CompareTypeEnum;
-import static cn.bootx.common.core.annotation.QueryParam.CompareTypeEnum.EQ;
-import static cn.bootx.common.core.annotation.QueryParam.NamingCaseEnum.UNDER_LINE;
-
-/**
- * 注解参数查询生成器
- *
- * @author xxm
- * @date 2022/12/14
- */
-@UtilityClass
-public class AnnotationQueryGenerator {
-
-    /**
-     * 生成查询条件 (根据实体对象生成), 生成的多个查询条件之间用And连接
-     * @param queryParams 参数
-     * @param clazz 数据库Entity类
-     * @param  泛型
-     * @return 查询器
-     */
-     QueryWrapper generator(Object queryParams, Class clazz) {
-        QueryWrapper wrapper = new QueryWrapper<>();
-        if (Objects.isNull(queryParams)) {
-            return wrapper;
-        }
-
-        // 读取参数的字段
-        List paramClassProps = Arrays
-            .stream(BeanUtil.getPropertyDescriptors(queryParams.getClass()))
-            .collect(Collectors.toList());
-
-        // 读取实体类对象的字段
-        Map entityClassPropMap = Arrays.stream(BeanUtil.getPropertyDescriptors(clazz))
-            .collect(Collectors.toMap(PropertyDescriptor::getName, Function.identity(),
-                    CollectorsFunction::retainLatest));
-
-        // 遍历参数上的对象, 生成查询构造器条件
-        for (PropertyDescriptor paramProp : paramClassProps) {
-            Object paramValue = BeanUtil.getProperty(queryParams, paramProp.getName());
-            if (!StrUtil.isBlankIfStr(paramValue)) {
-                PropertyDescriptor clazzDescriptor = entityClassPropMap.get(paramProp.getName());
-                // 获取查询注解 clazz 类上 < clazz 字段 < queryParams 类上 < clazz 字段
-                val annotation = getQueryParamAnnotation(paramProp, queryParams.getClass(), clazzDescriptor, clazz);
-                // 是否忽略本字段
-                if (annotation.map(QueryParam::ignore).orElse(false)) {
-                    continue;
-                }
-                // 获取对应的数据库字段名称
-                NamingCaseEnum namingCase = annotation.map(QueryParam::namingCase).orElse(UNDER_LINE);
-                String columnName = getDatabaseFieldName(paramProp, queryParams.getClass(), clazzDescriptor, clazz,
-                        namingCase);
-                // 处理匹配条件类型
-                CompareTypeEnum compareType = annotation.map(QueryParam::type).orElse(EQ);
-                compareTypeSwitch(compareType, wrapper, columnName, paramValue);
-            }
-        }
-        return wrapper;
-
-    }
-
-    /**
-     * 生成查询条件 (根据实体对象生成), 生成的多个查询条件之间用And连接
-     * @param queryParams 参数
-     * @param  泛型
-     * @return 查询器
-     */
-     QueryWrapper generator(Object queryParams) {
-        QueryWrapper wrapper = new QueryWrapper<>();
-
-        if (Objects.isNull(queryParams)) {
-            return wrapper;
-        }
-
-        // 读取参数的字段
-        List paramClassProps = Arrays
-            .stream(BeanUtil.getPropertyDescriptors(queryParams.getClass()))
-            .collect(Collectors.toList());
-
-        // 遍历参数上的对象, 生成查询构造器条件
-        for (PropertyDescriptor paramProp : paramClassProps) {
-            Object paramValue = BeanUtil.getProperty(queryParams, paramProp.getName());
-            if (!StrUtil.isBlankIfStr(paramValue)) {
-                // 获取查询注解 clazz 类上 < clazz 字段 < queryParams 类上 < clazz 字段
-                val annotation = getQueryParamAnnotation(paramProp, queryParams.getClass(), null, null);
-                // 是否忽略本字段
-                if (annotation.map(QueryParam::ignore).orElse(false)) {
-                    continue;
-                }
-                // 获取对应的数据库字段名称
-                NamingCaseEnum namingCase = annotation.map(QueryParam::namingCase).orElse(UNDER_LINE);
-                String columnName = getDatabaseFieldName(paramProp, queryParams.getClass(), null, null, namingCase);
-                // 处理匹配条件类型
-                CompareTypeEnum compareType = annotation.map(QueryParam::type).orElse(EQ);
-                compareTypeSwitch(compareType, wrapper, columnName, paramValue);
-            }
-        }
-
-        return wrapper;
-    }
-
-    /**
-     * 处理不同的匹配条件
-     * @param compareType 匹配条件
-     * @param wrapper 查询构造器
-     * @param columnName 字段名称
-     * @param paramValue 字段值
-     */
-    private  void compareTypeSwitch(CompareTypeEnum compareType, QueryWrapper wrapper, String columnName,
-            Object paramValue) {
-        switch (compareType) {
-            case GT:
-                wrapper.gt(columnName, paramValue);
-                break;
-            case GE:
-                wrapper.ge(columnName, paramValue);
-                break;
-            case LT:
-                wrapper.lt(columnName, paramValue);
-                break;
-            case LE:
-                wrapper.le(columnName, paramValue);
-                break;
-            case LIKE:
-                wrapper.like(columnName, paramValue);
-                break;
-            case LIKE_LEFT:
-                wrapper.likeLeft(columnName, paramValue);
-                break;
-            case LIKE_RIGHT:
-                wrapper.likeRight(columnName, paramValue);
-                break;
-            case IS_NULL:
-                if (paramValue instanceof Boolean) {
-                    if (((Boolean) paramValue).booleanValue()) {
-                        wrapper.isNull(columnName);
-                    }
-                    else {
-                        wrapper.isNotNull(columnName);
-                    }
-                }
-                break;
-            case EQ:
-            default:
-                wrapper.eq(columnName, paramValue);
-        }
-
-    }
-
-    /**
-     * 获取查询参数注解 获取顺序: QueryParams 查询参数字段 > Entity 数据库实体字段 > QueryParams 查询类 > Entity
-     * 数据库实体类
-     * @return
-     */
-    private Optional getQueryParamAnnotation(PropertyDescriptor paramDescriptor, Class paramClass,
-            PropertyDescriptor entityDescriptor, Class entityClass) {
-
-        // 参数字段
-        Field paramField = ClassUtil.getDeclaredField(paramClass, paramDescriptor.getName());
-        if (AnnotationUtil.hasAnnotation(paramField, QueryParam.class)) {
-            return Optional.ofNullable(AnnotationUtil.getAnnotation(paramField, QueryParam.class));
-        }
-        if (Objects.nonNull(entityDescriptor)) {
-            Field entityField = ClassUtil.getDeclaredField(entityClass, entityDescriptor.getName());
-            if (AnnotationUtil.hasAnnotation(entityField, QueryParam.class)) {
-                return Optional.ofNullable(AnnotationUtil.getAnnotation(entityField, QueryParam.class));
-            }
-        }
-        if (AnnotationUtil.hasAnnotation(paramClass, QueryParam.class)) {
-            return Optional.ofNullable(AnnotationUtil.getAnnotation(paramClass, QueryParam.class));
-        }
-        if (AnnotationUtil.hasAnnotation(entityClass, QueryParam.class)) {
-            return Optional.ofNullable(AnnotationUtil.getAnnotation(entityClass, QueryParam.class));
-        }
-        return Optional.empty();
-    }
-
-    /**
-     * 获取字段对应的数据库字段名
-     */
-    public String getDatabaseFieldName(PropertyDescriptor paramDescriptor, Class paramClass,
-            PropertyDescriptor entityDescriptor, Class entityClass, NamingCaseEnum namingCase) {
-        // 读取注解, 判断有没有自定义字段名, 有自定义字段名直接返回
-        val queryParam = getQueryParamAnnotation(paramDescriptor, paramClass, entityDescriptor, entityClass);
-        if (queryParam.map(QueryParam::fieldName).isPresent()) {
-            return queryParam.map(QueryParam::fieldName).get();
-        }
-        switch (namingCase) {
-            case LAMBDA: {
-                return MpUtil.getColumnName(entityDescriptor.getReadMethod(), entityClass);
-            }
-            case UNDER_LINE: {
-                return NamingCase.toUnderlineCase(paramDescriptor.getName());
-            }
-            case NONE: {
-                return paramDescriptor.getName();
-            }
-        }
-        return "";
-    }
-
-}
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/QueryApplication.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/QueryApplication.java
similarity index 82%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/QueryApplication.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/QueryApplication.java
index 97b439072..98a8ac206 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/QueryApplication.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/QueryApplication.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.query;
+package cn.bootx.platform.common.query;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -8,7 +8,7 @@
  * 高级查询器
  *
  * @author xxm
- * @date 2021/11/17
+ * @since 2021/11/17
  */
 @ComponentScan
 @MapperScan(annotationClass = Mapper.class)
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/CompareTypeEnum.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/CompareTypeEnum.java
similarity index 95%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/CompareTypeEnum.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/CompareTypeEnum.java
index b7f183fcb..331d4f2b4 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/CompareTypeEnum.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/CompareTypeEnum.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.query.code;
+package cn.bootx.platform.common.query.code;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.AllArgsConstructor;
@@ -8,7 +8,7 @@
  * 匹配条件类型
  *
  * @author xxm
- * @date 2021/11/17
+ * @since 2021/11/17
  */
 @Getter
 @AllArgsConstructor
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/ParamTypeEnum.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/ParamTypeEnum.java
similarity index 93%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/ParamTypeEnum.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/ParamTypeEnum.java
index 84c259778..0c739bccf 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/code/ParamTypeEnum.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/code/ParamTypeEnum.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.query.code;
+package cn.bootx.platform.common.query.code;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.AllArgsConstructor;
@@ -8,7 +8,7 @@
  * 参数类型
  *
  * @author xxm
- * @date 2021/11/17
+ * @since 2021/11/17
  */
 @Getter
 @AllArgsConstructor
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryBetweenParam.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryBetweenParam.java
similarity index 85%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryBetweenParam.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryBetweenParam.java
index 2b39af0f5..1378ee6a7 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryBetweenParam.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryBetweenParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.query.entity;
+package cn.bootx.platform.common.query.entity;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -8,7 +8,7 @@
  * Between 类型参数
  *
  * @author xxm
- * @date 2021/11/18
+ * @since 2021/11/18
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParam.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParam.java
new file mode 100644
index 000000000..ee3f6af5a
--- /dev/null
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParam.java
@@ -0,0 +1,47 @@
+package cn.bootx.platform.common.query.entity;
+
+import cn.bootx.platform.common.query.code.CompareTypeEnum;
+import cn.bootx.platform.common.query.code.ParamTypeEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author xxm
+ * @since 2021/11/17
+ */
+@Data
+@Accessors(chain = true)
+@Schema(title = "查询项")
+public class QueryParam {
+
+    @Schema(description = "拼接条件是否为或")
+    private boolean or;
+
+    @Schema(description = "参数名称")
+    private String paramName;
+
+    /**
+     * @see CompareTypeEnum
+     */
+    @Schema(description = "比较类型")
+    private String compareType;
+
+    /**
+     * @see ParamTypeEnum
+     */
+    @Schema(description = "参数类型")
+    private String paramType;
+
+    @Schema(description = "参数值")
+    private Object paramValue;
+
+    @Schema(description = "参数名称是否需要转换成下划线命名")
+    private boolean underLine = true;
+
+    @Schema(description = "嵌套查询")
+    private List nestedParams;
+
+}
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParams.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParams.java
similarity index 77%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParams.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParams.java
index 3c6a6347f..55adb7489 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/entity/QueryParams.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/entity/QueryParams.java
@@ -1,5 +1,6 @@
-package cn.bootx.common.query.entity;
+package cn.bootx.platform.common.query.entity;
 
+import cn.bootx.platform.common.core.rest.param.QueryOrder;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -10,7 +11,7 @@
  * 查询参数
  *
  * @author xxm
- * @date 2021/11/17
+ * @since 2021/11/17
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/AnnotationQueryGenerator.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/AnnotationQueryGenerator.java
new file mode 100644
index 000000000..8c0762ea3
--- /dev/null
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/AnnotationQueryGenerator.java
@@ -0,0 +1,262 @@
+package cn.bootx.platform.common.query.generator;
+
+import cn.bootx.platform.common.core.annotation.QueryParam;
+import cn.bootx.platform.common.core.function.CollectorsFunction;
+import cn.bootx.platform.common.core.function.QueryBetween;
+import cn.bootx.platform.common.core.rest.param.QueryOrder;
+import cn.bootx.platform.common.core.util.ClassUtils;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.NamingCase;
+import cn.hutool.core.util.ClassUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import lombok.experimental.UtilityClass;
+import lombok.val;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 注解参数查询生成器
+ *
+ * @author xxm
+ * @since 2022/12/14
+ */
+@UtilityClass
+public class AnnotationQueryGenerator {
+
+    /**
+     * 生成查询条件 (根据实体对象生成), 生成的多个查询条件之间用And连接
+     * @param queryParams 参数
+     * @param clazz 数据库Entity类
+     * @param  泛型
+     * @return 查询器
+     */
+     QueryWrapper generator(Object queryParams, Class clazz) {
+        QueryWrapper wrapper = new QueryWrapper<>();
+        if (Objects.isNull(queryParams)) {
+            return wrapper;
+        }
+
+        // 读取参数的字段
+        List paramClassProps = Arrays
+            .stream(BeanUtil.getPropertyDescriptors(queryParams.getClass()))
+            .collect(Collectors.toList());
+
+        // 读取实体类对象的字段
+        Map entityClassPropMap = Arrays.stream(BeanUtil.getPropertyDescriptors(clazz))
+            .collect(Collectors.toMap(PropertyDescriptor::getName, Function.identity(),
+                    CollectorsFunction::retainLatest));
+
+        // 遍历参数上的对象, 生成查询构造器条件
+        for (PropertyDescriptor paramProp : paramClassProps) {
+            Object paramValue = BeanUtil.getProperty(queryParams, paramProp.getName());
+            if (!StrUtil.isBlankIfStr(paramValue)) {
+                PropertyDescriptor clazzDescriptor = entityClassPropMap.get(paramProp.getName());
+                // 获取查询注解 clazz 类上 < clazz 字段 < queryParams 类上 < clazz 字段
+                val annotation = getQueryParamAnnotation(paramProp, queryParams.getClass(), clazzDescriptor, clazz);
+                // 是否忽略本字段
+                if (annotation.map(QueryParam::ignore).orElse(false)) {
+                    continue;
+                }
+                // 获取对应的数据库字段名称
+                QueryParam.NamingCaseEnum namingCase = annotation.map(QueryParam::namingCase).orElse(QueryParam.NamingCaseEnum.UNDER_LINE);
+                String columnName = getDatabaseFieldName(paramProp, queryParams.getClass(), clazzDescriptor, clazz,
+                        namingCase);
+                // 处理匹配条件类型
+                QueryParam.CompareTypeEnum compareType = annotation.map(QueryParam::type).orElse(QueryParam.CompareTypeEnum.EQ);
+                compareTypeSwitch(compareType, wrapper, columnName, paramValue);
+            }
+        }
+        return wrapper;
+
+    }
+
+    /**
+     * 生成查询条件 (根据实体对象生成), 生成的多个查询条件之间用And连接
+     * @param queryParams 参数
+     * @param  泛型
+     * @return 查询器
+     */
+     QueryWrapper generator(Object queryParams, QueryOrder...queryOrders) {
+        QueryWrapper wrapper = new QueryWrapper<>();
+
+        if (Objects.isNull(queryParams)) {
+            return wrapper;
+        }
+
+        // 读取参数的字段
+        List paramClassProps = Arrays
+            .stream(BeanUtil.getPropertyDescriptors(queryParams.getClass()))
+            .collect(Collectors.toList());
+
+        // 遍历参数上的对象, 生成查询构造器条件
+        for (PropertyDescriptor paramProp : paramClassProps) {
+            Object paramValue = BeanUtil.getProperty(queryParams, paramProp.getName());
+            if (!StrUtil.isBlankIfStr(paramValue)) {
+                // 获取查询注解 clazz 类上 < clazz 字段 < queryParams 类上 < clazz 字段
+                val annotation = getQueryParamAnnotation(paramProp, queryParams.getClass(), null, null);
+                // 是否忽略本字段
+                if (annotation.map(QueryParam::ignore).orElse(false)) {
+                    continue;
+                }
+                // 获取对应的数据库字段名称
+                QueryParam.NamingCaseEnum namingCase = annotation.map(QueryParam::namingCase).orElse(QueryParam.NamingCaseEnum.UNDER_LINE);
+                String columnName = getDatabaseFieldName(paramProp, queryParams.getClass(), null, null, namingCase);
+                // 处理匹配条件类型
+                QueryParam.CompareTypeEnum compareType = annotation.map(QueryParam::type).orElse(QueryParam.CompareTypeEnum.EQ);
+                compareTypeSwitch(compareType, wrapper, columnName, paramValue);
+            }
+        }
+
+        // 处理排序条件
+        if (queryOrders.length > 0){
+            initQueryOrder(wrapper,Lists.newArrayList(queryOrders));
+        } else if (queryParams instanceof QueryOrder){
+            // 如果没有显式传入排序参数, 则判断查询参数是否继承了QueryOrder对象, 如果继承了, 则使用该对象的排序条件
+            QueryOrder order = (QueryOrder) queryParams;
+            initQueryOrder(wrapper, Collections.singletonList(order));
+        }
+        return wrapper;
+    }
+
+    /**
+     * 处理不同的匹配条件
+     * @param compareType 匹配条件
+     * @param wrapper 查询构造器
+     * @param columnName 字段名称
+     * @param paramValue 字段值
+     */
+    private  void compareTypeSwitch(QueryParam.CompareTypeEnum compareType, QueryWrapper wrapper, String columnName,
+                                       Object paramValue) {
+        switch (compareType) {
+            case GT:
+                wrapper.gt(columnName, paramValue);
+                break;
+            case GE:
+                wrapper.ge(columnName, paramValue);
+                break;
+            case LT:
+                wrapper.lt(columnName, paramValue);
+                break;
+            case LE:
+                wrapper.le(columnName, paramValue);
+                break;
+            case BETWEEN:{
+                if (paramValue instanceof QueryBetween) {
+                    QueryBetween queryBetween = (QueryBetween) paramValue;
+                    wrapper.between(columnName, queryBetween.getStart(), queryBetween.getEnd());
+                } else {
+                    throw new IllegalArgumentException("Between查询条件值必须是实现QueryBetween接口");
+                }
+                break;
+            }
+            case LIKE:
+                wrapper.like(columnName, paramValue);
+                break;
+            case LIKE_LEFT:
+                wrapper.likeLeft(columnName, paramValue);
+                break;
+            case LIKE_RIGHT:
+                wrapper.likeRight(columnName, paramValue);
+                break;
+            case IS_NULL:
+                if (paramValue instanceof Boolean) {
+                    if ((Boolean) paramValue) {
+                        wrapper.isNull(columnName);
+                    }
+                    else {
+                        wrapper.isNotNull(columnName);
+                    }
+                }
+                break;
+            case EQ:
+            default:
+                wrapper.eq(columnName, paramValue);
+        }
+
+    }
+
+    /**
+     * 获取查询参数注解 获取顺序: QueryParams 查询参数字段 > Entity 数据库实体字段 > QueryParams 查询类 > Entity
+     * 数据库实体类
+     */
+    private Optional getQueryParamAnnotation(PropertyDescriptor paramDescriptor, Class paramClass,
+            PropertyDescriptor entityDescriptor, Class entityClass) {
+
+        // 参数字段
+        Field paramField = ClassUtils.getField(paramClass, paramDescriptor.getName());
+        if (AnnotationUtil.hasAnnotation(paramField, QueryParam.class)) {
+            return Optional.ofNullable(AnnotationUtil.getAnnotation(paramField, QueryParam.class));
+        }
+        if (Objects.nonNull(entityDescriptor)) {
+            Field entityField = ClassUtil.getDeclaredField(entityClass, entityDescriptor.getName());
+            if (AnnotationUtil.hasAnnotation(entityField, QueryParam.class)) {
+                return Optional.ofNullable(AnnotationUtil.getAnnotation(entityField, QueryParam.class));
+            }
+        }
+        // 参数类
+        if (AnnotationUtil.hasAnnotation(paramClass, QueryParam.class)) {
+            return Optional.ofNullable(AnnotationUtil.getAnnotation(paramClass, QueryParam.class));
+        }
+        if (AnnotationUtil.hasAnnotation(entityClass, QueryParam.class)) {
+            return Optional.ofNullable(AnnotationUtil.getAnnotation(entityClass, QueryParam.class));
+        }
+        return Optional.empty();
+    }
+
+    /**
+     * 获取字段对应的数据库字段名
+     */
+    private String getDatabaseFieldName(PropertyDescriptor paramDescriptor, Class paramClass,
+            PropertyDescriptor entityDescriptor, Class entityClass, QueryParam.NamingCaseEnum namingCase) {
+        // 读取注解, 判断有没有自定义字段名, 有自定义字段名直接返回
+        val queryParam = getQueryParamAnnotation(paramDescriptor, paramClass, entityDescriptor, entityClass);
+        if (queryParam.map(QueryParam::fieldName).isPresent()) {
+            String fieldName = queryParam.map(QueryParam::fieldName).get();
+            if (StrUtil.isNotBlank(fieldName)){
+                return fieldName;
+            }
+        }
+        switch (namingCase) {
+            case LAMBDA: {
+                return MpUtil.getColumnName(entityDescriptor.getReadMethod(), entityClass);
+            }
+            case UNDER_LINE: {
+                return NamingCase.toUnderlineCase(paramDescriptor.getName());
+            }
+            case NONE: {
+                return paramDescriptor.getName();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 组装排序条件
+     * @param queryWrapper 查询器
+     * @param queryOrders 排序条件
+     * @param  泛型
+     */
+    private  void initQueryOrder(QueryWrapper queryWrapper, List queryOrders) {
+        if (CollUtil.isEmpty(queryOrders)) {
+            return;
+        }
+        for (QueryOrder queryOrder : queryOrders) {
+            if (queryOrder.isUnderLine()) {
+                queryWrapper.orderBy(StrUtil.isNotBlank(queryOrder.getSortField()), queryOrder.isAsc(), StrUtil.toUnderlineCase(queryOrder.getSortField()));
+            }
+            else {
+                queryWrapper.orderBy(StrUtil.isNotBlank(queryOrder.getSortField()), queryOrder.isAsc(), queryOrder.getSortField());
+            }
+        }
+    }
+
+}
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/ParamValueTypeConvert.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/ParamValueTypeConvert.java
similarity index 89%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/ParamValueTypeConvert.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/ParamValueTypeConvert.java
index 390c82ae2..e99294e11 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/ParamValueTypeConvert.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/ParamValueTypeConvert.java
@@ -1,9 +1,9 @@
-package cn.bootx.common.query.generator;
+package cn.bootx.platform.common.query.generator;
 
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.core.util.LocalDateTimeUtil;
-import cn.bootx.common.query.code.ParamTypeEnum;
-import cn.bootx.common.query.entity.QueryParam;
+import cn.bootx.platform.common.core.exception.BizException;
+import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
+import cn.bootx.platform.common.query.code.ParamTypeEnum;
+import cn.bootx.platform.common.query.entity.QueryParam;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.util.StrUtil;
 
@@ -16,7 +16,7 @@
  * 参数值转换
  *
  * @author xxm
- * @date 2021/11/18
+ * @since 2021/11/18
  */
 public class ParamValueTypeConvert {
 
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/QueryGenerator.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/QueryGenerator.java
similarity index 83%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/QueryGenerator.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/QueryGenerator.java
index 02f43eecd..d516c8466 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/QueryGenerator.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/QueryGenerator.java
@@ -1,13 +1,14 @@
-package cn.bootx.common.query.generator;
+package cn.bootx.platform.common.query.generator;
 
-import cn.bootx.common.query.entity.QueryParams;
+import cn.bootx.platform.common.core.rest.param.QueryOrder;
+import cn.bootx.platform.common.query.entity.QueryParams;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
 /**
  * 查询条件生成器
  *
  * @author xxm
- * @date 2021/11/17
+ * @since 2021/11/17
  */
 public class QueryGenerator {
 
@@ -33,8 +34,8 @@ public static  QueryWrapper generator(QueryParams queryParams) {
      * @param  泛型
      * @return 查询器
      */
-    public static  QueryWrapper generator(Object queryParams) {
-        return AnnotationQueryGenerator.generator(queryParams);
+    public static  QueryWrapper generator(Object queryParams, QueryOrder...queryOrder) {
+        return AnnotationQueryGenerator.generator(queryParams,queryOrder);
     }
 
     /**
diff --git a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/SuperQueryGenerator.java b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/SuperQueryGenerator.java
similarity index 94%
rename from bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/SuperQueryGenerator.java
rename to bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/SuperQueryGenerator.java
index 171709f22..ebc89acf8 100644
--- a/bootx-commons/common-super-query/src/main/java/cn/bootx/common/query/generator/SuperQueryGenerator.java
+++ b/bootx-commons/common-super-query/src/main/java/cn/bootx/platform/common/query/generator/SuperQueryGenerator.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.query.generator;
+package cn.bootx.platform.common.query.generator;
 
-import cn.bootx.common.core.exception.BizException;
-import cn.bootx.common.query.code.CompareTypeEnum;
-import cn.bootx.common.query.entity.QueryBetweenParam;
-import cn.bootx.common.query.entity.QueryOrder;
-import cn.bootx.common.query.entity.QueryParam;
+import cn.bootx.platform.common.core.exception.BizException;
+import cn.bootx.platform.common.query.code.CompareTypeEnum;
+import cn.bootx.platform.common.query.entity.QueryBetweenParam;
+import cn.bootx.platform.common.core.rest.param.QueryOrder;
+import cn.bootx.platform.common.query.entity.QueryParam;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -17,7 +17,7 @@
 
 /**
  * @author xxm
- * @date 2022/12/14
+ * @since 2022/12/14
  */
 @UtilityClass
 public class SuperQueryGenerator {
diff --git a/bootx-commons/common-super-query/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-super-query/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 83719f331..63a116aa3 100644
--- a/bootx-commons/common-super-query/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-super-query/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.query.QueryApplication
\ No newline at end of file
+cn.bootx.platform.common.query.QueryApplication
diff --git a/bootx-commons/common-swagger/pom.xml b/bootx-commons/common-swagger/pom.xml
index cbd82b609..84d59be35 100644
--- a/bootx-commons/common-swagger/pom.xml
+++ b/bootx-commons/common-swagger/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -29,11 +29,11 @@
             
         
         
-
-
-
-
-
+        
+            com.github.xiaoymin
+            knife4j-openapi3-spring-boot-starter
+            ${knife4j.version}
+        
     
 
 
diff --git a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/filter/SwaggerBasicAuthFilter.java b/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/filter/SwaggerBasicAuthFilter.java
deleted file mode 100644
index f9bd86750..000000000
--- a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/filter/SwaggerBasicAuthFilter.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.common.swagger.filter;
-
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-public class SwaggerBasicAuthFilter extends OncePerRequestFilter {
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
-            throws ServletException, IOException {
-
-    }
-
-}
diff --git a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerAutoConfiguration.java b/bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerAutoConfiguration.java
similarity index 98%
rename from bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerAutoConfiguration.java
rename to bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerAutoConfiguration.java
index 388829bd7..62fa2fcc6 100644
--- a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerAutoConfiguration.java
+++ b/bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.swagger;
+package cn.bootx.platform.common.swagger;
 
 import cn.hutool.core.util.ArrayUtil;
 import io.swagger.v3.oas.models.ExternalDocumentation;
@@ -31,7 +31,7 @@
  * swagger 自动配置
  *
  * @author xxm
- * @date 2020/4/9 13:33
+ * @since 2020/4/9 13:33
  */
 @Slf4j
 @Configuration
diff --git a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerProperties.java b/bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerProperties.java
similarity index 95%
rename from bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerProperties.java
rename to bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerProperties.java
index 8d3eaa5ad..800b113e7 100644
--- a/bootx-commons/common-swagger/src/main/java/cn/bootx/common/swagger/SwaggerProperties.java
+++ b/bootx-commons/common-swagger/src/main/java/cn/bootx/platform/common/swagger/SwaggerProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.swagger;
+package cn.bootx.platform.common.swagger;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -12,7 +12,7 @@
  * swagger配置
  *
  * @author xxm
- * @date 2020/4/9 13:36
+ * @since 2020/4/9 13:36
  */
 @Getter
 @Setter
diff --git a/bootx-commons/common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 93b1713d0..56835d0e4 100644
--- a/bootx-commons/common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.swagger.SwaggerAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.swagger.SwaggerAutoConfiguration
diff --git a/bootx-commons/common-websocket/pom.xml b/bootx-commons/common-websocket/pom.xml
index d08c92261..2ce3f5aca 100644
--- a/bootx-commons/common-websocket/pom.xml
+++ b/bootx-commons/common-websocket/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/func/WsUserAuthService.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/func/WsUserAuthService.java
deleted file mode 100644
index ff4235992..000000000
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/func/WsUserAuthService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.common.websocket.func;
-
-/**
- * websocket用户认证相关接口
- *
- * @author xxm
- * @date 2022/6/9
- */
-public interface WsUserAuthService {
-
-    /**
-     * 根据token获取用户Id
-     */
-    Long getUserIdByToken(String token);
-
-}
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/SpringWebSocketSessionManager.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/SpringWebSocketSessionManager.java
deleted file mode 100644
index 2a5e8d698..000000000
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/SpringWebSocketSessionManager.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package cn.bootx.common.websocket.manager;
-
-import cn.hutool.core.collection.ListUtil;
-import com.google.common.collect.Lists;
-import org.springframework.web.socket.WebSocketSession;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.stream.Collectors;
-
-/**
- * websocket管理器 (Spring封装的socket)
- *
- * @author xxm
- * @date 2022/5/27
- */
-public class SpringWebSocketSessionManager {
-
-    // session缓存
-    protected static final Map sessionPool = new ConcurrentHashMap<>();
-
-    // sessionId 与 用户标识id 的映射关系 n:1
-    protected static final Map sid2uid = new ConcurrentHashMap<>();
-
-    // 用户标识id 与 sessionId 的映射关系 1:n
-    protected static final Map> uid2sid = new ConcurrentHashMap<>();
-
-    /**
-     * 添加会话session关联
-     */
-    public void addSession(String userId, WebSocketSession session) {
-        try {
-            sid2uid.put(session.getId(), userId);
-            sessionPool.put(session.getId(), session);
-            List list = Optional.ofNullable(uid2sid.get(userId)).orElse(new CopyOnWriteArrayList<>());
-            list.add(session.getId());
-            uid2sid.put(userId, list);
-        }
-        catch (Exception ignored) {
-        }
-    }
-
-    /**
-     * 删掉 连接Session
-     */
-    public void removeSession(WebSocketSession session) {
-        sessionPool.remove(session.getId());
-        String id = sid2uid.remove(session.getId());
-        Optional.ofNullable(uid2sid.get(id)).ifPresent(list -> list.removeIf(s -> Objects.equals(s, session.getId())));
-    }
-
-    /**
-     * 删除
-     */
-    public void removeSessionById(String id) {
-        List sessionIds = Optional.ofNullable(uid2sid.get(id)).orElse(Lists.newArrayList());
-        sessionIds.forEach(sessionPool::remove);
-        sessionIds.forEach(sid2uid::remove);
-        uid2sid.remove(id);
-
-    }
-
-    /**
-     * 根据id获取关联的session列表
-     */
-    public List getSessionsById(String id) {
-        List sessionIds = Optional.ofNullable(uid2sid.get(id)).orElse(Lists.newArrayList());
-        return sessionIds.stream().map(sessionPool::get).collect(Collectors.toList());
-    }
-
-    /**
-     * 获取所有连接session
-     */
-    public List getSessions() {
-        return ListUtil.toList(sessionPool.values());
-    }
-
-    /**
-     * 根据session获取连接id
-     */
-    public String getIdBySession(WebSocketSession session) {
-        return sid2uid.get(session.getId());
-    }
-
-    /**
-     * 根据session获取连接id
-     */
-    public String getIdBySessionId(String sessionId) {
-        return sid2uid.get(sessionId);
-    }
-
-}
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/WebsocketAutoConfiguration.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/WebsocketAutoConfiguration.java
similarity index 78%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/WebsocketAutoConfiguration.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/WebsocketAutoConfiguration.java
index e1c66e7b9..68a4c0879 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/WebsocketAutoConfiguration.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/WebsocketAutoConfiguration.java
@@ -1,11 +1,11 @@
-package cn.bootx.common.websocket;
+package cn.bootx.platform.common.websocket;
 
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
 
 /**
  * @author xxm
- * @date 2022/3/27
+ * @since 2022/3/27
  */
 @ComponentScan
 @AutoConfiguration
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/code/WebsocketCode.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/code/WebsocketCode.java
similarity index 82%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/code/WebsocketCode.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/code/WebsocketCode.java
index fea777660..c2fd21f89 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/code/WebsocketCode.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/code/WebsocketCode.java
@@ -1,10 +1,10 @@
-package cn.bootx.common.websocket.code;
+package cn.bootx.platform.common.websocket.code;
 
 /**
  * websocket常量码
  *
  * @author xxm
- * @date 2022/6/9
+ * @since 2022/6/9
  */
 public interface WebsocketCode {
 
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/configuration/WebSocketConfig.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/configuration/WebSocketConfig.java
similarity index 87%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/configuration/WebSocketConfig.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/configuration/WebSocketConfig.java
index 8bbd550db..bdac5d2ea 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/configuration/WebSocketConfig.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/configuration/WebSocketConfig.java
@@ -1,7 +1,7 @@
-package cn.bootx.common.websocket.configuration;
+package cn.bootx.platform.common.websocket.configuration;
 
-import cn.bootx.common.websocket.notice.UserNoticeWebSocketHandler;
-import cn.bootx.common.websocket.notice.UserNoticeWebSocketInterceptor;
+import cn.bootx.platform.common.websocket.notice.UserNoticeWebSocketHandler;
+import cn.bootx.platform.common.websocket.notice.UserNoticeWebSocketInterceptor;
 import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
@@ -13,10 +13,10 @@
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 /**
- * Websocket配置
+ * 用户Websocket配置
  *
  * @author xxm
- * @date 2022/3/27
+ * @since 2022/3/27
  */
 @EnableWebSocket
 @Configuration
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsRes.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsRes.java
similarity index 88%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsRes.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsRes.java
index 89b57cd20..de8ffe297 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsRes.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsRes.java
@@ -1,13 +1,13 @@
-package cn.bootx.common.websocket.entity;
+package cn.bootx.platform.common.websocket.entity;
 
-import cn.bootx.common.websocket.code.WebsocketCode;
+import cn.bootx.platform.common.websocket.code.WebsocketCode;
 import lombok.experimental.UtilityClass;
 
 /**
  * websocket 响应工具类
  *
  * @author xxm
- * @date 2022/6/9
+ * @since 2022/6/9
  */
 @UtilityClass
 public class WsRes {
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsResult.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsResult.java
similarity index 83%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsResult.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsResult.java
index c633f39f9..62b6d0e3e 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/entity/WsResult.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/entity/WsResult.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.websocket.entity;
+package cn.bootx.platform.common.websocket.entity;
 
-import cn.bootx.common.core.code.CommonCode;
+import cn.bootx.platform.common.core.code.CommonCode;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -12,7 +12,7 @@
  * websocket响应消息类
  *
  * @author xxm
- * @date 2022/6/9
+ * @since 2022/6/9
  */
 @Getter
 @Setter
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/func/WsUserAuthService.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/func/WsUserAuthService.java
new file mode 100644
index 000000000..70907e50a
--- /dev/null
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/func/WsUserAuthService.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.common.websocket.func;
+
+/**
+ * websocket用户认证相关接口
+ *
+ * @author xxm
+ * @since 2022/6/9
+ */
+public interface WsUserAuthService {
+
+    /**
+     * 根据token获取用户Id
+     */
+    Long getUserIdByToken(String token);
+
+}
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/SpringWebSocketSessionManager.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/SpringWebSocketSessionManager.java
new file mode 100644
index 000000000..fe05688e6
--- /dev/null
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/SpringWebSocketSessionManager.java
@@ -0,0 +1,98 @@
+package cn.bootx.platform.common.websocket.manager;
+
+import cn.hutool.core.collection.ListUtil;
+import com.google.common.collect.Lists;
+import lombok.Getter;
+import org.springframework.web.socket.WebSocketSession;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+
+/**
+ * websocket管理器 (Spring封装的socket) 用于管理用户链接
+ *
+ * @author xxm
+ * @since 2022/5/27
+ */
+@Getter
+public class SpringWebSocketSessionManager {
+
+    // session缓存
+    private final Map sessionPool = new ConcurrentSkipListMap<>();
+
+    // sessionId 与 用户标识id 的映射关系 n:1
+    private final Map sid2uid = new ConcurrentSkipListMap<>();
+
+    // 用户标识id 与 sessionId 的映射关系 1:n
+    private final Map> uid2sid = new ConcurrentSkipListMap<>();
+
+    /**
+     * 添加会话session关联
+     */
+    public void addSession(String userId, WebSocketSession session) {
+        try {
+            sid2uid.put(session.getId(), userId);
+            sessionPool.put(session.getId(), session);
+            List list = Optional.ofNullable(uid2sid.get(userId)).orElse(new CopyOnWriteArrayList<>());
+            list.add(session.getId());
+            uid2sid.put(userId, list);
+        }
+        catch (Exception ignored) {
+        }
+    }
+
+    /**
+     * 删掉 连接Session
+     */
+    public void removeSession(WebSocketSession session) {
+        sessionPool.remove(session.getId());
+        String id = sid2uid.remove(session.getId());
+        Optional.ofNullable(uid2sid.get(id)).ifPresent(list -> list.removeIf(s -> Objects.equals(s, session.getId())));
+    }
+
+    /**
+     * 删除
+     */
+    public void removeSessionById(String id) {
+        List sessionIds = Optional.ofNullable(uid2sid.get(id)).orElse(Lists.newArrayList());
+        sessionIds.forEach(sessionPool::remove);
+        sessionIds.forEach(sid2uid::remove);
+        uid2sid.remove(id);
+
+    }
+
+    /**
+     * 根据userId获取关联的session列表
+     */
+    public List getSessionsByUserId(String userId) {
+        List sessionIds = Optional.ofNullable(uid2sid.get(userId)).orElse(Lists.newArrayList());
+        return sessionIds.stream().map(sessionPool::get).collect(Collectors.toList());
+    }
+
+    /**
+     * 获取所有连接session
+     */
+    public List getSessions() {
+        return ListUtil.toList(sessionPool.values());
+    }
+
+    /**
+     * 根据session获取连接id
+     */
+    public String getIdBySession(WebSocketSession session) {
+        return sid2uid.get(session.getId());
+    }
+
+    /**
+     * 根据session获取连接id
+     */
+    public String getIdBySessionId(String sessionId) {
+        return sid2uid.get(sessionId);
+    }
+
+}
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/WebSocketSessionManager.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/WebSocketSessionManager.java
similarity index 93%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/WebSocketSessionManager.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/WebSocketSessionManager.java
index 0db2e6e98..aa6c1d295 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/manager/WebSocketSessionManager.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/manager/WebSocketSessionManager.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.websocket.manager;
+package cn.bootx.platform.common.websocket.manager;
 
 import cn.hutool.core.collection.ListUtil;
 
@@ -9,10 +9,10 @@
 import java.util.stream.Collectors;
 
 /**
- * websocket管理器 (java原生)
+ * websocket管理器 (java原生, 进攻演示, 通常使用 SpringWebSocketSessionManager )
  *
  * @author xxm
- * @date 2022/5/27
+ * @since 2022/5/27
  */
 public class WebSocketSessionManager {
 
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketHandler.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketHandler.java
similarity index 90%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketHandler.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketHandler.java
index 1cad6f21b..c9d218960 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketHandler.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketHandler.java
@@ -1,6 +1,7 @@
-package cn.bootx.common.websocket.notice;
+package cn.bootx.platform.common.websocket.notice;
 
-import cn.bootx.common.websocket.manager.SpringWebSocketSessionManager;
+import cn.bootx.platform.common.websocket.manager.SpringWebSocketSessionManager;
+import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -12,13 +13,13 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static cn.bootx.common.core.code.CommonCode.USER_ID;
+import static cn.bootx.platform.common.core.code.CommonCode.USER_ID;
 
 /**
  * 全局用户WS通知
  *
  * @author xxm
- * @date 2022/3/27
+ * @since 2022/3/27
  */
 @Slf4j
 @Component
@@ -26,6 +27,7 @@
 public class UserNoticeWebSocketHandler extends TextWebSocketHandler {
 
     /** websocket连接管理器 */
+    @Getter
     private static final SpringWebSocketSessionManager wsManager = new SpringWebSocketSessionManager();
 
     /** 记录当前在线连接数 */
@@ -59,7 +61,7 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
     @Override
     public void handleTextMessage(WebSocketSession session, TextMessage message) {
         // 不处理接收的消息, 通常只会接收到心跳请求
-        // log.debug("心跳请求");
+//         log.debug("心跳请求");
     }
 
     /**
@@ -75,7 +77,7 @@ public void handleTransportError(WebSocketSession session, Throwable exception)
      */
     public void sendMessageByUser(String message, Long userId) {
         try {
-            List sessions = wsManager.getSessionsById(String.valueOf(userId));
+            List sessions = wsManager.getSessionsByUserId(String.valueOf(userId));
 
             for (WebSocketSession session : sessions) {
                 session.sendMessage(new TextMessage(message));
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketInterceptor.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketInterceptor.java
similarity index 83%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketInterceptor.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketInterceptor.java
index 635fd912f..7b30f7308 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/notice/UserNoticeWebSocketInterceptor.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/notice/UserNoticeWebSocketInterceptor.java
@@ -1,6 +1,6 @@
-package cn.bootx.common.websocket.notice;
+package cn.bootx.platform.common.websocket.notice;
 
-import cn.bootx.common.websocket.func.WsUserAuthService;
+import cn.bootx.platform.common.websocket.func.WsUserAuthService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.ServerHttpRequest;
@@ -13,14 +13,14 @@
 import java.util.Map;
 import java.util.Objects;
 
-import static cn.bootx.common.core.code.CommonCode.USER_ID;
-import static cn.bootx.common.core.code.WebHeaderCode.ACCESS_TOKEN;
+import static cn.bootx.platform.common.core.code.CommonCode.USER_ID;
+import static cn.bootx.platform.common.core.code.WebHeaderCode.ACCESS_TOKEN;
 
 /**
  * 全局用户WS通知拦截鉴权
  *
  * @author xxm
- * @date 2022/6/9
+ * @since 2022/6/9
  */
 @Slf4j
 @Component
diff --git a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/service/UserWsNoticeService.java b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/service/UserWsNoticeService.java
similarity index 80%
rename from bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/service/UserWsNoticeService.java
rename to bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/service/UserWsNoticeService.java
index 832c84b38..beab13ef8 100644
--- a/bootx-commons/common-websocket/src/main/java/cn/bootx/common/websocket/service/UserWsNoticeService.java
+++ b/bootx-commons/common-websocket/src/main/java/cn/bootx/platform/common/websocket/service/UserWsNoticeService.java
@@ -1,8 +1,8 @@
-package cn.bootx.common.websocket.service;
+package cn.bootx.platform.common.websocket.service;
 
-import cn.bootx.common.jackson.util.JacksonUtil;
-import cn.bootx.common.websocket.entity.WsResult;
-import cn.bootx.common.websocket.notice.UserNoticeWebSocketHandler;
+import cn.bootx.platform.common.jackson.util.JacksonUtil;
+import cn.bootx.platform.common.websocket.entity.WsResult;
+import cn.bootx.platform.common.websocket.notice.UserNoticeWebSocketHandler;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -13,7 +13,7 @@
  * 用户websocket方式发送通知消息
  *
  * @author xxm
- * @date 2022/6/9
+ * @since 2022/6/9
  */
 @Slf4j
 @Service
diff --git a/bootx-commons/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 65b8c754b..33bef36cc 100644
--- a/bootx-commons/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.websocket.WebsocketAutoConfiguration
+cn.bootx.platform.common.websocket.WebsocketAutoConfiguration
diff --git a/bootx-commons/common-xxl-job/pom.xml b/bootx-commons/common-xxl-job/pom.xml
index e01f1f6ac..a33e40876 100644
--- a/bootx-commons/common-xxl-job/pom.xml
+++ b/bootx-commons/common-xxl-job/pom.xml
@@ -5,7 +5,7 @@
     
         bootx-commons
         cn.bootx.platform
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
diff --git a/bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/JobAutoConfiguration.java b/bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/JobAutoConfiguration.java
similarity index 95%
rename from bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/JobAutoConfiguration.java
rename to bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/JobAutoConfiguration.java
index 7f3f68e9e..cf38cba62 100644
--- a/bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/JobAutoConfiguration.java
+++ b/bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/JobAutoConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.xxljob;
+package cn.bootx.platform.common.xxljob;
 
 import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -9,7 +9,7 @@
  * xxl-job自动配置
  *
  * @author xxm
- * @date 2021/3/11
+ * @since 2021/3/11
  */
 @Configuration
 @EnableConfigurationProperties(XxlJobProperties.class)
diff --git a/bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/XxlJobProperties.java b/bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/XxlJobProperties.java
similarity index 96%
rename from bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/XxlJobProperties.java
rename to bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/XxlJobProperties.java
index 7e0aea6ed..414855fbd 100644
--- a/bootx-commons/common-xxl-job/src/main/java/cn/bootx/common/xxljob/XxlJobProperties.java
+++ b/bootx-commons/common-xxl-job/src/main/java/cn/bootx/platform/common/xxljob/XxlJobProperties.java
@@ -1,4 +1,4 @@
-package cn.bootx.common.xxljob;
+package cn.bootx.platform.common.xxljob;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -7,7 +7,7 @@
  * xxl-job配置
  *
  * @author xxm
- * @date 2021/3/11
+ * @since 2021/3/11
  */
 @Data
 @ConfigurationProperties(prefix = "bootx.common.xxl-job")
diff --git a/bootx-commons/common-xxl-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-commons/common-xxl-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 5b28f0559..fe5bf6cbb 100644
--- a/bootx-commons/common-xxl-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-commons/common-xxl-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.common.xxljob.JobAutoConfiguration
\ No newline at end of file
+cn.bootx.platform.common.xxljob.JobAutoConfiguration
diff --git a/bootx-commons/pom.xml b/bootx-commons/pom.xml
index f1097a530..b91d60e61 100644
--- a/bootx-commons/pom.xml
+++ b/bootx-commons/pom.xml
@@ -6,8 +6,8 @@
 
     
         cn.bootx.platform
-        bootx-platform
-        1.2.3
+        bootx-platform-parent
+        1.3.6.2
     
 
     bootx-commons
@@ -29,11 +29,9 @@
         common-xxl-job
         common-mongo
         common-websocket
-
         common-rabbitmq
-        common-lock
-        common-actable
         common-data-translate
+        common-eventer
     
 
     
@@ -45,42 +43,22 @@
         
             org.springframework.boot
             spring-boot-autoconfigure
+            provided
         
 
         
             org.springframework.boot
             spring-boot-configuration-processor
+            provided
         
 
         
         
             org.projectlombok
             lombok
+            provided
         
     
-    
-        
-            
-            
-                org.springdoc
-                springdoc-openapi-ui
-                ${springdoc.version}
-            
-            
-            
-                org.redisson
-                redisson-spring-boot-starter
-                ${redisson.version}
-            
-            
-            
-                com.xuxueli
-                xxl-job-core
-                ${xxl-job.version}
-            
-
-        
-    
 
     
         
diff --git a/bootx-demo/pom.xml b/bootx-demo/pom.xml
index b4a50d5a3..76806c1f8 100644
--- a/bootx-demo/pom.xml
+++ b/bootx-demo/pom.xml
@@ -3,38 +3,47 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
-        bootx-platform
         cn.bootx.platform
-        1.2.3
+        bootx-platform-parent
+        1.3.6.2
     
     4.0.0
 
     bootx-demo
 
+    
+        
+        true
+    
+
     
         
-            cn.bootx.platform
-            service-baseapi
-            ${bootx-platform.version}
+            org.projectlombok
+            lombok
+            provided
         
         
-            cn.bootx.platform
-            service-iam
-            ${bootx-platform.version}
+            cn.bootx
+            table-modify-mysql-boot-starter
         
+        
+
+
+
+
         
             cn.bootx.platform
-            service-notice
+            service-baseapi
             ${bootx-platform.version}
         
         
             cn.bootx.platform
-            service-payment
+            service-iam
             ${bootx-platform.version}
         
         
             cn.bootx.platform
-            service-office
+            service-notice
             ${bootx-platform.version}
         
         
@@ -50,10 +59,6 @@
             cn.bootx.platform
             common-websocket
         
-        
-            cn.bootx.platform
-            common-lock
-        
         
             cn.bootx.platform
             common-starter-dingtalk
@@ -64,7 +69,7 @@
         
         
             cn.bootx.platform
-            common-actable
+            common-rabbitmq
         
     
 
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/TestController.java b/bootx-demo/src/main/java/cn/bootx/demo/controller/TestController.java
deleted file mode 100644
index b534fec35..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/TestController.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package cn.bootx.demo.controller;
-
-import cn.bootx.common.core.annotation.Idempotent;
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.annotation.OperateLog;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.log.plumelog.PlumeLogAutoDeleteLogs;
-import cn.bootx.common.sequence.func.Sequence;
-import cn.bootx.common.sequence.impl.DefaultRangeSequence;
-import cn.bootx.common.sequence.range.SeqRangeConfig;
-import cn.bootx.common.sequence.range.SeqRangeManager;
-import cn.bootx.common.spring.exception.RetryableException;
-import cn.bootx.common.websocket.entity.WsRes;
-import cn.bootx.common.websocket.entity.WsResult;
-import cn.bootx.common.websocket.service.UserWsNoticeService;
-import cn.hutool.extra.spring.SpringUtil;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.retry.annotation.Backoff;
-import org.springframework.retry.annotation.Retryable;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
-@Validated
-@IgnoreAuth
-@Slf4j
-@Tag(name = "测试控制器")
-@RestController
-@RequestMapping("/test")
-@RequiredArgsConstructor
-public class TestController {
-
-    private final Sequence sequence;
-
-    private final SeqRangeManager seqRangeManager;
-
-    private final UserWsNoticeService userWsNoticeService;
-
-    private final PlumeLogAutoDeleteLogs autoDeleteLogs;
-
-    @OperateLog(title = "测试日志")
-    @OperateLog(title = "测试重复日志")
-    @Idempotent
-    @Operation(summary = "测试")
-    @GetMapping("/hello")
-    public ResResult hello() {
-        autoDeleteLogs.task();
-        return Res.ok("hello");
-    }
-
-    @OperateLog(title = "测试回声日志", saveParam = true, saverReturn = true)
-    @Operation(summary = "测试回声")
-    @GetMapping("/say")
-    public ResResult say(String msg) {
-        return Res.ok(msg);
-    }
-
-    @Operation(summary = "序列生成器")
-    @GetMapping("/sequence")
-    public ResResult sequence() {
-        long cs = sequence.next("cs");
-        return Res.ok(String.valueOf(cs));
-    }
-
-    @Operation(summary = "序列生成器自定义")
-    @GetMapping("/sequenceZdy")
-    public ResResult sequenceZdy() {
-        SeqRangeConfig seqRangeConfig = new SeqRangeConfig().setStep(5).setRangeStart(0).setRangeStep(5);
-        DefaultRangeSequence defaultRangeSequence = new DefaultRangeSequence(seqRangeManager, seqRangeConfig);
-        return Res.ok(defaultRangeSequence.next("aa"));
-    }
-
-    @Operation(summary = "校验测试")
-    @GetMapping("/validation")
-    public ResResult validation(@NotBlank(message = "校验测试") String msg, @NotNull(message = "不为空") Integer a) {
-        return Res.ok();
-    }
-
-    @Operation(summary = "用户全局ws消息通知测试")
-    @GetMapping("/userNotice")
-    public ResResult userNotice(Long id) {
-
-        // 推送消息通知框
-        WsResult result = WsRes.notificationError("警告");
-        userWsNoticeService.sendMessageByUser(result, id);
-
-        // 推送消息事件(通常由指定页面进行监听)
-        result = WsRes.eventNotice("hello", "cs");
-        userWsNoticeService.sendMessageByUser(result, id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "轮训测试")
-    @GetMapping("/rotationSync")
-    public ResResult rotationSync() {
-        for (int i = 0; i < 20; i++) {
-            SpringUtil.getBean(getClass()).rotationSyncFun(String.valueOf(i));
-        }
-        return Res.ok();
-    }
-
-    /**
-     * 轮训同步支付状态
-     */
-    @Retryable(value = RetryableException.class, maxAttempts = 20, backoff = @Backoff(value = 5000L))
-    @Async("asyncExecutor")
-    public void rotationSyncFun(String i) {
-        log.info(i);
-        throw new RetryableException();
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/notice/EmailSendDemoController.java b/bootx-demo/src/main/java/cn/bootx/demo/controller/notice/EmailSendDemoController.java
deleted file mode 100644
index aafc1321c..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/notice/EmailSendDemoController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.demo.controller.notice;
-
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.util.ValidationUtil;
-import cn.bootx.demo.core.notice.entity.SendSimpleEmailDemoParam;
-import cn.bootx.demo.core.notice.service.EmailSendDemoService;
-import cn.bootx.notice.dto.mail.SendMailParam;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xxm
- * @date 2022/8/3
- */
-@Tag(name = "测试消息队列")
-@RestController
-@RequestMapping("/demo/notice/email")
-@RequiredArgsConstructor
-public class EmailSendDemoController {
-
-    private final EmailSendDemoService service;
-
-    @Operation(summary = "简单邮件发送")
-    @PostMapping("/sentSimpleMail")
-    public ResResult sentSimpleMail(@RequestBody SendSimpleEmailDemoParam param) {
-        ValidationUtil.validateParam(param);
-        service.sentSimpleMail(param.getEmail(), param.getSubject(), param.getMessage());
-        return Res.ok();
-    }
-
-    @Operation(summary = "标准邮件发送")
-    @PostMapping("/sentMail")
-    public ResResult sentMail(@RequestBody SendMailParam mailParam) {
-        ValidationUtil.validateParam(mailParam);
-        service.sentMail(mailParam);
-        return Res.ok();
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/ws/GlobalWebsocketDemoController.java b/bootx-demo/src/main/java/cn/bootx/demo/controller/ws/GlobalWebsocketDemoController.java
deleted file mode 100644
index 07869a089..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/ws/GlobalWebsocketDemoController.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.bootx.demo.controller.ws;
-
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.websocket.entity.WsRes;
-import cn.bootx.common.websocket.service.UserWsNoticeService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author xxm
- * @date 2022/6/10
- */
-@Tag(name = "全局websocket通知demo")
-@RestController
-@RequestMapping("/demo/global/ws")
-@RequiredArgsConstructor
-public class GlobalWebsocketDemoController {
-
-    private final UserWsNoticeService userWsNoticeService;
-
-    @Operation(summary = "发送消息")
-    @PostMapping("/send")
-    public ResResult send(Long userId, String msg) {
-        userWsNoticeService.sendMessageByUser(WsRes.eventNotice(msg, "event_test_websocket"), userId);
-        return Res.ok();
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/actable/entity/AcTableEntity.java b/bootx-demo/src/main/java/cn/bootx/demo/core/actable/entity/AcTableEntity.java
deleted file mode 100644
index 5e1579ff9..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/actable/entity/AcTableEntity.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.bootx.demo.core.actable.entity;
-
-import cn.bootx.common.core.annotation.actable.Column;
-import cn.bootx.common.core.annotation.actable.Table;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.Date;
-
-/**
- * actable测试
- *
- * @author xxm
- * @date 2023/1/11
- */
-@EqualsAndHashCode(callSuper = true)
-@Table(comment = "actable测试")
-@Data
-@Accessors(chain = true)
-@Schema(title = "cs")
-public class AcTableEntity extends MpBaseEntity {
-
-    private String h1;
-
-    private Date date;
-
-    @Column(ignore = true)
-    private int he;
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoManager.java b/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoManager.java
deleted file mode 100644
index 871734f11..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoManager.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.demo.core.encrypt.dao;
-
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.demo.core.encrypt.entity.DataEncryptDemo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class DataEncryptDemoManager extends BaseManager {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoMapper.java
deleted file mode 100644
index 6d34c56c4..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/dao/DataEncryptDemoMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.demo.core.encrypt.dao;
-
-import cn.bootx.demo.core.encrypt.entity.DataEncryptDemo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Mapper
-public interface DataEncryptDemoMapper extends BaseMapper {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/service/DataEncryptDemoService.java b/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/service/DataEncryptDemoService.java
deleted file mode 100644
index 90012b749..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/service/DataEncryptDemoService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cn.bootx.demo.core.encrypt.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.demo.core.encrypt.dao.DataEncryptDemoManager;
-import cn.bootx.demo.core.encrypt.entity.DataEncryptDemo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class DataEncryptDemoService {
-
-    private final DataEncryptDemoManager manager;
-
-    /**
-     * 新增
-     */
-    public void add(DataEncryptDemo param) {
-        manager.save(param);
-    }
-
-    /**
-     * 更新
-     */
-    public void update(DataEncryptDemo param) {
-        manager.updateById(param);
-    }
-
-    /**
-     * 删除
-     */
-    public void delete(Long id) {
-        manager.deleteById(id);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2PageResult(manager.page(MpUtil.getMpPage(pageParam, DataEncryptDemo.class)));
-    }
-
-    /**
-     * 单条
-     */
-    public DataEncryptDemo findById(Long id) {
-        return manager.findById(id).orElseThrow(DataNotExistException::new);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java b/bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java
deleted file mode 100644
index 964d4e730..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.demo.core.mq.rabbit;
-
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.rabbit.conditional.ConditionalOnRabbit;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-/**
- * @author xxm
- * @date 2022/5/30
- */
-@Slf4j
-@ConditionalOnRabbit
-@Component
-@RequiredArgsConstructor
-public class DemoRabbitMqMessageListener {
-
-    /**
-     * 测试MQ消息
-     */
-    @RabbitListener(queues = "demo.testMq")
-    public void payCancel(ResResult hello) {
-        log.info("测试MQ消息 :{}", hello);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisTopicListener.java b/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisTopicListener.java
deleted file mode 100644
index c5e06c6ce..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisTopicListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cn.bootx.demo.core.mq.redis;
-
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.redis.listener.RedisTopicListener;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 测试Redis消息队列
- *
- * @author xxm
- * @date 2022/5/7
- */
-@Slf4j
-@Component
-public class DemoRedisTopicListener implements RedisTopicListener> {
-
-    @Override
-    public String getTopic() {
-        return "demo:redis";
-    }
-
-    @Override
-    public void onMessage(ResResult obj) {
-        log.info("{}", obj);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoManager.java b/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoManager.java
deleted file mode 100644
index 20989b79e..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoManager.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.bootx.demo.core.perm.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.demo.core.perm.entity.DataPermDemo;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * 数据权限演示
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class DataPermDemoManager extends BaseManager {
-
-    private final DataPermDemoMapper dataPermDemoMapper;
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam) {
-        Page mpPage = MpUtil.getMpPage(pageParam, DataPermDemo.class);
-        return lambdaQuery().orderByDesc(DataPermDemo::getCreateTime).page(mpPage);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoMapper.java
deleted file mode 100644
index 8eb204375..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/dao/DataPermDemoMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.demo.core.perm.dao;
-
-import cn.bootx.demo.core.perm.entity.DataPermDemo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 数据权限演示demo
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Mapper
-public interface DataPermDemoMapper extends BaseMapper {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/entity/DataPermDemo.java b/bootx-demo/src/main/java/cn/bootx/demo/core/perm/entity/DataPermDemo.java
deleted file mode 100644
index 7bbc5b04a..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/entity/DataPermDemo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.demo.core.perm.entity;
-
-import cn.bootx.common.core.annotation.DataVersionLog;
-import cn.bootx.common.core.annotation.PermCode;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 权限显示demo
- *
- * @author xxm
- * @date 2022/2/21
- */
-@DataVersionLog(title = "数据权限演示")
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@Schema(title = "权限显示demo")
-@TableName("demo_data_perm")
-public class DataPermDemo extends MpBaseEntity {
-
-    @Schema(description = "名称")
-    private String name;
-
-    @PermCode("123")
-    @Schema(description = "创建人名称")
-    private String creatorName;
-
-    @Schema(description = "备注")
-    private String remark;
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/service/DataPermDemoService.java b/bootx-demo/src/main/java/cn/bootx/demo/core/perm/service/DataPermDemoService.java
deleted file mode 100644
index 215624ebc..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/perm/service/DataPermDemoService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package cn.bootx.demo.core.perm.service;
-
-import cn.bootx.common.core.annotation.Permission;
-import cn.bootx.common.core.entity.UserDetail;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.demo.core.perm.dao.DataPermDemoManager;
-import cn.bootx.demo.core.perm.entity.DataPermDemo;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.bean.copier.CopyOptions;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * 数据权限演示
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Slf4j
-@Service
-@Permission
-@RequiredArgsConstructor
-public class DataPermDemoService {
-
-    private final DataPermDemoManager dataPermDemoManager;
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2PageResult(dataPermDemoManager.page(pageParam));
-    }
-
-    /**
-     * 获取 单条
-     */
-    public DataPermDemo findById(Long id) {
-        return dataPermDemoManager.findById(id).orElseThrow(DataNotExistException::new);
-    }
-
-    /**
-     * 添加
-     */
-    public void add(DataPermDemo param) {
-        param.setCreatorName(SecurityUtil.getCurrentUser().map(UserDetail::getName).orElse("未知"));
-        dataPermDemoManager.save(param);
-    }
-
-    /**
-     * 更新
-     */
-    public void update(DataPermDemo param) {
-        DataPermDemo dataPermDemo = dataPermDemoManager.findById(param.getId()).orElseThrow(DataNotExistException::new);
-        BeanUtil.copyProperties(param, dataPermDemo, CopyOptions.create().ignoreNullValue());
-        dataPermDemoManager.updateById(dataPermDemo);
-    }
-
-    /**
-     * 删除
-     */
-    public void delete(Long id) {
-        dataPermDemoManager.findById(id).orElseThrow(DataNotExistException::new);
-        dataPermDemoManager.deleteById(id);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoManager.java b/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoManager.java
deleted file mode 100644
index 8ec982031..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoManager.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package cn.bootx.demo.core.query.dao;
-
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.common.query.entity.QueryParams;
-import cn.bootx.common.query.generator.QueryGenerator;
-import cn.bootx.demo.core.query.entity.SuperQueryDemo;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * 超级查询
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class SuperQueryDemoManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam) {
-        Page mpPage = MpUtil.getMpPage(pageParam, SuperQueryDemo.class);
-        return lambdaQuery().orderByDesc(SuperQueryDemo::getCreateTime).page(mpPage);
-    }
-
-    /**
-     * 分页 超级查询
-     */
-    public Page superQuery(PageParam pageParam, QueryParams queryParams) {
-        QueryWrapper generator = QueryGenerator.generator(queryParams);
-        Page mpPage = MpUtil.getMpPage(pageParam, SuperQueryDemo.class);
-        return this.page(mpPage, generator);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoMapper.java
deleted file mode 100644
index fc3d49955..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/query/dao/SuperQueryDemoMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.demo.core.query.dao;
-
-import cn.bootx.demo.core.query.entity.SuperQueryDemo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 超级查询
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Mapper
-public interface SuperQueryDemoMapper extends BaseMapper {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/query/service/SuperQueryDemoService.java b/bootx-demo/src/main/java/cn/bootx/demo/core/query/service/SuperQueryDemoService.java
deleted file mode 100644
index 79b9e97da..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/query/service/SuperQueryDemoService.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package cn.bootx.demo.core.query.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.common.query.entity.QueryParams;
-import cn.bootx.demo.core.query.dao.SuperQueryDemoManager;
-import cn.bootx.demo.core.query.entity.SuperQueryDemo;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.bean.copier.CopyOptions;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-
-/**
- * 超级查询
- *
- * @author xxm
- * @date 2022/2/21
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class SuperQueryDemoService {
-
-    private final SuperQueryDemoManager superQueryDemoManager;
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2PageResult(superQueryDemoManager.page(pageParam));
-    }
-
-    /**
-     * 分页 超级查询
-     */
-    public PageResult superQuery(PageParam pageParam, QueryParams queryParams) {
-        return MpUtil.convert2PageResult(superQueryDemoManager.superQuery(pageParam, queryParams));
-    }
-
-    /**
-     * 获取 单条
-     */
-    public SuperQueryDemo findById(Long id) {
-        return superQueryDemoManager.findById(id).orElseThrow(DataNotExistException::new);
-    }
-
-    /**
-     * 添加
-     */
-    public void add(SuperQueryDemo param) {
-        param.setRegistrationTime(LocalDateTime.now());
-        superQueryDemoManager.save(param);
-    }
-
-    /**
-     * 更新
-     */
-    public void update(SuperQueryDemo param) {
-        SuperQueryDemo SuperQueryDemo = superQueryDemoManager.findById(param.getId())
-            .orElseThrow(DataNotExistException::new);
-        BeanUtil.copyProperties(param, SuperQueryDemo, CopyOptions.create().ignoreNullValue());
-        superQueryDemoManager.updateById(SuperQueryDemo);
-    }
-
-    /**
-     * 删除
-     */
-    public void delete(Long id) {
-        superQueryDemoManager.findById(id).orElseThrow(DataNotExistException::new);
-        superQueryDemoManager.deleteById(id);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoManager.java b/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoManager.java
deleted file mode 100644
index 424e0ccdb..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoManager.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.demo.core.sensitive.dao;
-
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.demo.core.sensitive.entity.DataSensitiveDemo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class DataSensitiveDemoManager extends BaseManager {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoMapper.java
deleted file mode 100644
index 62ffb0392..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/dao/DataSensitiveDemoMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.demo.core.sensitive.dao;
-
-import cn.bootx.demo.core.sensitive.entity.DataSensitiveDemo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Mapper
-public interface DataSensitiveDemoMapper extends BaseMapper {
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/service/DataSensitiveDemoService.java b/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/service/DataSensitiveDemoService.java
deleted file mode 100644
index 49f63eada..000000000
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/service/DataSensitiveDemoService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cn.bootx.demo.core.sensitive.service;
-
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.bootx.demo.core.sensitive.dao.DataSensitiveDemoManager;
-import cn.bootx.demo.core.sensitive.entity.DataSensitiveDemo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * @author xxm
- * @date 2022/3/24
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class DataSensitiveDemoService {
-
-    private final DataSensitiveDemoManager manager;
-
-    /**
-     * 新增
-     */
-    public void add(DataSensitiveDemo param) {
-        manager.save(param);
-    }
-
-    /**
-     * 更新
-     */
-    public void update(DataSensitiveDemo param) {
-        manager.updateById(param);
-    }
-
-    /**
-     * 删除
-     */
-    public void delete(Long id) {
-        manager.deleteById(id);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2PageResult(manager.page(MpUtil.getMpPage(pageParam, DataSensitiveDemo.class)));
-    }
-
-    /**
-     * 单条
-     */
-    public DataSensitiveDemo findById(Long id) {
-        return manager.findById(id).orElseThrow(DataNotExistException::new);
-    }
-
-}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/DemoApplication.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/DemoApplication.java
similarity index 88%
rename from bootx-demo/src/main/java/cn/bootx/demo/DemoApplication.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/DemoApplication.java
index 18fec7366..2a10348f8 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/DemoApplication.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/DemoApplication.java
@@ -1,4 +1,4 @@
-package cn.bootx.demo;
+package cn.bootx.platform.demo;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -8,7 +8,7 @@
  * 演示
  *
  * @author xxm
- * @date 2021/8/6
+ * @since 2021/8/6
  */
 // 以这个类为 basePackageClasses
 @MapperScan(annotationClass = Mapper.class) // 扫描Mybatis 的 mapper
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/TestController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/TestController.java
new file mode 100644
index 000000000..8829562e8
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/TestController.java
@@ -0,0 +1,130 @@
+package cn.bootx.platform.demo.controller;
+
+import cn.bootx.platform.common.core.annotation.Idempotent;
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.common.core.annotation.OperateLog;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.sequence.func.Sequence;
+import cn.bootx.platform.common.sequence.range.SeqRangeManager;
+import cn.bootx.platform.common.sequence.util.SequenceUtil;
+import cn.bootx.platform.common.spring.exception.RetryableException;
+import cn.bootx.platform.common.websocket.entity.WsRes;
+import cn.bootx.platform.common.websocket.entity.WsResult;
+import cn.bootx.platform.common.websocket.service.UserWsNoticeService;
+import cn.bootx.platform.starter.audit.log.ip2region.IpRegion;
+import cn.bootx.platform.starter.audit.log.ip2region.IpToRegionService;
+import cn.hutool.extra.spring.SpringUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Retryable;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Validated
+@IgnoreAuth
+@Slf4j
+@Tag(name = "测试控制器")
+@RestController
+@RequestMapping("/test")
+@RequiredArgsConstructor
+public class TestController {
+
+    private final IpToRegionService ipToRegionService;
+
+    private final Sequence sequence;
+
+    private final SeqRangeManager seqRangeManager;
+
+    private final UserWsNoticeService userWsNoticeService;
+
+    @OperateLog(title = "测试日志")
+    @OperateLog(title = "测试重复日志")
+    @Idempotent
+    @Operation(summary = "测试")
+    @GetMapping("/hello")
+    public ResResult hello() {
+        return Res.ok("hello");
+    }
+
+    @OperateLog(title = "测试回声日志", saveParam = true, saverReturn = true)
+    @Operation(summary = "测试回声")
+    @GetMapping("/say")
+    public ResResult say(String msg) {
+        return Res.ok(msg);
+    }
+
+    @Operation(summary = "序列生成器")
+    @GetMapping("/sequence")
+    public ResResult sequence() {
+        long cs = sequence.next();
+        return Res.ok(String.valueOf(cs));
+    }
+
+    @Operation(summary = "序列生成器自定义")
+    @GetMapping("/sequenceZdy")
+    public ResResult sequenceZdy(String name) {
+        Sequence sequence = SequenceUtil.create(name);
+        return Res.ok(sequence.next());
+    }
+
+    @Operation(summary = "校验测试")
+    @GetMapping("/validation")
+    public ResResult validation(@NotBlank(message = "校验测试") String msg, @NotNull(message = "不为空") Integer a) {
+        return Res.ok();
+    }
+
+    @Operation(summary = "用户全局ws消息通知测试")
+    @GetMapping("/userNotice")
+    public ResResult userNotice(Long id) {
+
+        // 推送消息通知框
+        WsResult result = WsRes.notificationError("警告");
+        userWsNoticeService.sendMessageByUser(result, id);
+
+        // 推送消息事件(通常由指定页面进行监听)
+        result = WsRes.eventNotice("hello", "cs");
+        userWsNoticeService.sendMessageByUser(result, id);
+        return Res.ok();
+    }
+
+    @Operation(summary = "轮训测试")
+    @GetMapping("/rotationSync")
+    public ResResult rotationSync() {
+        for (int i = 0; i < 20; i++) {
+            SpringUtil.getBean(getClass()).rotationSyncFun(String.valueOf(i));
+        }
+        return Res.ok();
+    }
+
+    /**
+     * 轮训同步支付状态
+     */
+    @Retryable(value = RetryableException.class, maxAttempts = 20, backoff = @Backoff(value = 5000L))
+    @Async("asyncExecutor")
+    public void rotationSyncFun(String i) {
+        log.info(i);
+        throw new RetryableException();
+    }
+
+    @Operation(summary = "ip地址查询")
+    @GetMapping("/ipToRegion")
+    public ResResult ipToRegion(String ip){
+        return Res.ok(ipToRegionService.getRegionByIp(ip));
+    }
+
+    @Operation(summary = "ip地址查询(文本)")
+    @GetMapping("/getRegionStrByIp")
+    public ResResult getRegionStrByIp(String ip){
+        return Res.ok(ipToRegionService.getRegionStrByIp(ip));
+    }
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/bsp/DictConvertDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/bsp/DictConvertDemoController.java
similarity index 87%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/bsp/DictConvertDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/bsp/DictConvertDemoController.java
index bcd2d2895..3fa46a399 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/bsp/DictConvertDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/bsp/DictConvertDemoController.java
@@ -1,11 +1,11 @@
-package cn.bootx.demo.controller.bsp;
-
-import cn.bootx.baseapi.core.dict.service.DictTranslationServiceImpl;
-import cn.bootx.common.core.annotation.Translate;
-import cn.bootx.common.core.annotation.TranslationResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
+package cn.bootx.platform.demo.controller.bsp;
+
+import cn.bootx.platform.baseapi.core.dict.service.DictTranslationServiceImpl;
+import cn.bootx.platform.common.core.annotation.Translate;
+import cn.bootx.platform.common.core.annotation.TranslationResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.Data;
@@ -23,7 +23,7 @@
 
 /**
  * @author xxm
- * @date 2022/12/19
+ * @since 2022/12/19
  */
 @Tag(name = "字典测试")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataEncryptDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataEncryptDemoController.java
similarity index 76%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataEncryptDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataEncryptDemoController.java
index 70d89b9c9..0c79a6cf8 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataEncryptDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataEncryptDemoController.java
@@ -1,11 +1,11 @@
-package cn.bootx.demo.controller.data;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.demo.core.encrypt.entity.DataEncryptDemo;
-import cn.bootx.demo.core.encrypt.service.DataEncryptDemoService;
+package cn.bootx.platform.demo.controller.data;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.demo.core.encrypt.entity.DataEncryptDemo;
+import cn.bootx.platform.demo.core.encrypt.service.DataEncryptDemoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -13,7 +13,7 @@
 
 /**
  * @author xxm
- * @date 2022/3/24
+ * @since 2022/3/24
  */
 @Tag(name = "数据加密解密演示")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataPermDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataPermDemoController.java
similarity index 78%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataPermDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataPermDemoController.java
index af6cc7cba..447f0824d 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataPermDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataPermDemoController.java
@@ -1,11 +1,11 @@
-package cn.bootx.demo.controller.data;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.demo.core.perm.entity.DataPermDemo;
-import cn.bootx.demo.core.perm.service.DataPermDemoService;
+package cn.bootx.platform.demo.controller.data;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.demo.core.perm.entity.DataPermDemo;
+import cn.bootx.platform.demo.core.perm.service.DataPermDemoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
  * 数据权限演示
  *
  * @author xxm
- * @date 2022/2/21
+ * @since 2022/2/21
  */
 @Tag(name = "数据权限演示")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataSensitiveDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataSensitiveDemoController.java
similarity index 76%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataSensitiveDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataSensitiveDemoController.java
index 38762bf64..cd1b7c9ae 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/data/DataSensitiveDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/data/DataSensitiveDemoController.java
@@ -1,11 +1,11 @@
-package cn.bootx.demo.controller.data;
-
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.demo.core.sensitive.entity.DataSensitiveDemo;
-import cn.bootx.demo.core.sensitive.service.DataSensitiveDemoService;
+package cn.bootx.platform.demo.controller.data;
+
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.demo.core.sensitive.entity.DataSensitiveDemo;
+import cn.bootx.platform.demo.core.sensitive.service.DataSensitiveDemoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +15,7 @@
  * 数据脱敏演示
  *
  * @author xxm
- * @date 2022/3/24
+ * @since 2022/3/24
  */
 @Tag(name = "数据脱敏演示")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/lock/IdempotencyDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/lock/IdempotencyDemoController.java
similarity index 89%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/lock/IdempotencyDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/lock/IdempotencyDemoController.java
index 43f9edad8..3530d8819 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/lock/IdempotencyDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/lock/IdempotencyDemoController.java
@@ -1,8 +1,8 @@
-package cn.bootx.demo.controller.lock;
+package cn.bootx.platform.demo.controller.lock;
 
-import cn.bootx.common.core.annotation.Idempotent;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.annotation.Idempotent;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
 import cn.hutool.core.thread.ThreadUtil;
 import com.baomidou.lock.annotation.Lock4j;
 import io.swagger.v3.oas.annotations.Operation;
@@ -20,7 +20,7 @@
  * 幂等控制演示
  *
  * @author xxm
- * @date 2022/3/31
+ * @since 2022/3/31
  */
 @Slf4j
 @Tag(name = "幂等控制演示")
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/mq/MessageQueueDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/mq/MessageQueueDemoController.java
similarity index 89%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/mq/MessageQueueDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/mq/MessageQueueDemoController.java
index 3c222e66e..0589c59b8 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/mq/MessageQueueDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/mq/MessageQueueDemoController.java
@@ -1,8 +1,8 @@
-package cn.bootx.demo.controller.mq;
+package cn.bootx.platform.demo.controller.mq;
 
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.redis.RedisClient;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.redis.RedisClient;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -13,7 +13,7 @@
 
 /**
  * @author xxm
- * @date 2022/5/27
+ * @since 2022/5/27
  */
 @Tag(name = "测试消息队列")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/notice/EmailSendDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/notice/EmailSendDemoController.java
new file mode 100644
index 000000000..36020cd71
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/notice/EmailSendDemoController.java
@@ -0,0 +1,45 @@
+package cn.bootx.platform.demo.controller.notice;
+
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.util.ValidationUtil;
+import cn.bootx.platform.demo.core.notice.entity.SendSimpleEmailDemoParam;
+import cn.bootx.platform.demo.core.notice.service.EmailSendDemoService;
+import cn.bootx.platform.notice.dto.mail.SendMailParam;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xxm
+ * @since 2022/8/3
+ */
+@Tag(name = "测试消息队列")
+@RestController
+@RequestMapping("/demo/notice/email")
+@RequiredArgsConstructor
+public class EmailSendDemoController {
+
+    private final EmailSendDemoService service;
+
+    @Operation(summary = "简单邮件发送")
+    @PostMapping("/sentSimpleMail")
+    public ResResult sentSimpleMail(@RequestBody SendSimpleEmailDemoParam param) {
+        ValidationUtil.validateParam(param);
+        service.sentSimpleMail(param.getEmail(), param.getSubject(), param.getMessage());
+        return Res.ok();
+    }
+
+    @Operation(summary = "标准邮件发送")
+    @PostMapping("/sentMail")
+    public ResResult sentMail(@RequestBody SendMailParam mailParam) {
+        ValidationUtil.validateParam(mailParam);
+        service.sentMail(mailParam);
+        return Res.ok();
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/controller/query/SuperQueryDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/query/SuperQueryDemoController.java
similarity index 82%
rename from bootx-demo/src/main/java/cn/bootx/demo/controller/query/SuperQueryDemoController.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/controller/query/SuperQueryDemoController.java
index 359355172..09fff5580 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/controller/query/SuperQueryDemoController.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/query/SuperQueryDemoController.java
@@ -1,13 +1,13 @@
-package cn.bootx.demo.controller.query;
+package cn.bootx.platform.demo.controller.query;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.query.entity.QueryParams;
-import cn.bootx.common.query.generator.QueryGenerator;
-import cn.bootx.demo.core.query.entity.SuperQueryDemo;
-import cn.bootx.demo.core.query.service.SuperQueryDemoService;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.query.entity.QueryParams;
+import cn.bootx.platform.common.query.generator.QueryGenerator;
+import cn.bootx.platform.demo.core.query.entity.SuperQueryDemo;
+import cn.bootx.platform.demo.core.query.service.SuperQueryDemoService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -19,7 +19,7 @@
 
 /**
  * @author xxm
- * @date 2022/2/21
+ * @since 2022/2/21
  */
 @Tag(name = "超级查询演示")
 @RestController
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/ws/GlobalWebsocketDemoController.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/ws/GlobalWebsocketDemoController.java
new file mode 100644
index 000000000..37e76843b
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/controller/ws/GlobalWebsocketDemoController.java
@@ -0,0 +1,33 @@
+package cn.bootx.platform.demo.controller.ws;
+
+import cn.bootx.platform.common.websocket.entity.WsRes;
+import cn.bootx.platform.common.websocket.service.UserWsNoticeService;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xxm
+ * @since 2022/6/10
+ */
+@Tag(name = "全局websocket通知demo")
+@RestController
+@RequestMapping("/demo/global/ws")
+@RequiredArgsConstructor
+public class GlobalWebsocketDemoController {
+
+    private final UserWsNoticeService userWsNoticeService;
+
+    @Operation(summary = "发送消息")
+    @PostMapping("/send")
+    public ResResult send(Long userId, String msg) {
+        userWsNoticeService.sendMessageByUser(WsRes.eventNotice(msg, "event_test_websocket"), userId);
+        return Res.ok();
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoManager.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoManager.java
new file mode 100644
index 000000000..6d31919f9
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoManager.java
@@ -0,0 +1,18 @@
+package cn.bootx.platform.demo.core.encrypt.dao;
+
+import cn.bootx.platform.demo.core.encrypt.entity.DataEncryptDemo;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class DataEncryptDemoManager extends BaseManager {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoMapper.java
new file mode 100644
index 000000000..752178ba0
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/dao/DataEncryptDemoMapper.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.demo.core.encrypt.dao;
+
+import cn.bootx.platform.demo.core.encrypt.entity.DataEncryptDemo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Mapper
+public interface DataEncryptDemoMapper extends BaseMapper {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/entity/DataEncryptDemo.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/entity/DataEncryptDemo.java
similarity index 81%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/entity/DataEncryptDemo.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/entity/DataEncryptDemo.java
index 164326edc..47f0c2d1b 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/encrypt/entity/DataEncryptDemo.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/entity/DataEncryptDemo.java
@@ -1,7 +1,7 @@
-package cn.bootx.demo.core.encrypt.entity;
+package cn.bootx.platform.demo.core.encrypt.entity;
 
-import cn.bootx.common.core.annotation.EncryptionField;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.common.core.annotation.EncryptionField;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -14,7 +14,7 @@
  * 权限显示demo
  *
  * @author xxm
- * @date 2022/2/21
+ * @since 2022/2/21
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/service/DataEncryptDemoService.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/service/DataEncryptDemoService.java
new file mode 100644
index 000000000..b774140c7
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/encrypt/service/DataEncryptDemoService.java
@@ -0,0 +1,59 @@
+package cn.bootx.platform.demo.core.encrypt.service;
+
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.demo.core.encrypt.dao.DataEncryptDemoManager;
+import cn.bootx.platform.demo.core.encrypt.entity.DataEncryptDemo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class DataEncryptDemoService {
+
+    private final DataEncryptDemoManager manager;
+
+    /**
+     * 新增
+     */
+    public void add(DataEncryptDemo param) {
+        manager.save(param);
+    }
+
+    /**
+     * 更新
+     */
+    public void update(DataEncryptDemo param) {
+        manager.updateById(param);
+    }
+
+    /**
+     * 删除
+     */
+    public void delete(Long id) {
+        manager.deleteById(id);
+    }
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam) {
+        return MpUtil.convert2PageResult(manager.page(MpUtil.getMpPage(pageParam, DataEncryptDemo.class)));
+    }
+
+    /**
+     * 单条
+     */
+    public DataEncryptDemo findById(Long id) {
+        return manager.findById(id).orElseThrow(DataNotExistException::new);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttConfiguration.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttConfiguration.java
similarity index 97%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttConfiguration.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttConfiguration.java
index 0e2288a71..b5042a133 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttConfiguration.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttConfiguration.java
@@ -11,7 +11,7 @@
 /// **
 // *
 // * @author xxm
-// * @date 2022/5/30
+// * @since 2022/5/30
 // */
 // @Slf4j
 // @Configuration
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttMessageListener.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttMessageListener.java
similarity index 95%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttMessageListener.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttMessageListener.java
index 7785ca9ba..d298210c2 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/mqtt/DemoMqttMessageListener.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/mqtt/DemoMqttMessageListener.java
@@ -8,7 +8,7 @@
 /// **
 // * mqtt消息接收器
 // * @author xxm
-// * @date 2022/5/30
+// * @since 2022/5/30
 // */
 // @Component
 // @RequiredArgsConstructor
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java
similarity index 92%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java
index 56bdf412c..117f4b0c3 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.demo.core.mq.rabbit;
+package cn.bootx.platform.demo.core.mq.rabbit;
 
 import org.springframework.amqp.core.Binding;
 import org.springframework.amqp.core.BindingBuilder;
@@ -11,7 +11,7 @@
  * 演示RabbitMQ消息队列配置
  *
  * @author xxm
- * @date 2022/5/30
+ * @since 2022/5/30
  */
 @Configuration
 public class DemoRabbitMqConfiguration {
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java
new file mode 100644
index 000000000..aae4c17b8
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/rabbit/DemoRabbitMqMessageListener.java
@@ -0,0 +1,28 @@
+package cn.bootx.platform.demo.core.mq.rabbit;
+
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.rabbit.conditional.ConditionalOnRabbit;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author xxm
+ * @since 2022/5/30
+ */
+@Slf4j
+@ConditionalOnRabbit
+@Component
+@RequiredArgsConstructor
+public class DemoRabbitMqMessageListener {
+
+    /**
+     * 测试MQ消息
+     */
+    @RabbitListener(queues = "demo.testMq")
+    public void payCancel(ResResult hello) {
+        log.info("测试MQ消息 :{}", hello);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisExpiredListener.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisExpiredListener.java
similarity index 78%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisExpiredListener.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisExpiredListener.java
index 141e59dea..5affc14d9 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisExpiredListener.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisExpiredListener.java
@@ -1,6 +1,6 @@
-package cn.bootx.demo.core.mq.redis;
+package cn.bootx.platform.demo.core.mq.redis;
 
-import cn.bootx.common.redis.listener.RedisKeyExpiredListener;
+import cn.bootx.platform.common.redis.listener.RedisKeyExpiredListener;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -9,7 +9,7 @@
  * redis过期事件监听
  *
  * @author xxm
- * @date 2022/5/30
+ * @since 2022/5/30
  */
 @Slf4j
 @Component
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisStreamListener.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisStreamListener.java
similarity index 89%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisStreamListener.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisStreamListener.java
index 059da04db..9855116df 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/mq/redis/DemoRedisStreamListener.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisStreamListener.java
@@ -1,4 +1,4 @@
-package cn.bootx.demo.core.mq.redis;
+package cn.bootx.platform.demo.core.mq.redis;
 
 import org.springframework.data.redis.connection.stream.ObjectRecord;
 import org.springframework.data.redis.connection.stream.RecordId;
@@ -8,7 +8,7 @@
  * RedisStream 消息队列 (未实现)
  *
  * @author xxm
- * @date 2022/6/4
+ * @since 2022/6/4
  */
 public class DemoRedisStreamListener implements StreamListener> {
 
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisTopicListener.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisTopicListener.java
new file mode 100644
index 000000000..3ab837b78
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mq/redis/DemoRedisTopicListener.java
@@ -0,0 +1,28 @@
+package cn.bootx.platform.demo.core.mq.redis;
+
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.redis.listener.RedisTopicListener;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 测试Redis消息队列
+ *
+ * @author xxm
+ * @since 2022/5/7
+ */
+@Slf4j
+@Component
+public class DemoRedisTopicListener implements RedisTopicListener> {
+
+    @Override
+    public String getTopic() {
+        return "demo:redis";
+    }
+
+    @Override
+    public void onMessage(ResResult obj) {
+        log.info("{}", obj);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mtm/entity/MtmTableEntity.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mtm/entity/MtmTableEntity.java
new file mode 100644
index 000000000..c7ae0123b
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/mtm/entity/MtmTableEntity.java
@@ -0,0 +1,33 @@
+package cn.bootx.platform.demo.core.mtm.entity;
+
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.table.modify.annotation.DbColumn;
+import cn.bootx.table.modify.annotation.DbTable;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * actable测试
+ *
+ * @author xxm
+ * @since 2023/1/11
+ */
+@EqualsAndHashCode(callSuper = true)
+@DbTable(name = "mtm_table",comment = "actable测试")
+@Data
+@Accessors(chain = true)
+@Schema(title = "cs")
+public class MtmTableEntity extends MpBaseEntity {
+
+    private String h1;
+
+    private Date date;
+
+    @DbColumn(ignore = true)
+    private int he;
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/notice/entity/SendSimpleEmailDemoParam.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/entity/SendSimpleEmailDemoParam.java
similarity index 90%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/notice/entity/SendSimpleEmailDemoParam.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/entity/SendSimpleEmailDemoParam.java
index 501bfe470..e01cddac5 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/notice/entity/SendSimpleEmailDemoParam.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/entity/SendSimpleEmailDemoParam.java
@@ -1,4 +1,4 @@
-package cn.bootx.demo.core.notice.entity;
+package cn.bootx.platform.demo.core.notice.entity;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -10,7 +10,7 @@
  * 简单邮件发送参数
  *
  * @author xxm
- * @date 2022/8/3
+ * @since 2022/8/3
  */
 @Data
 @Accessors(chain = true)
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/notice/service/EmailSendDemoService.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/service/EmailSendDemoService.java
similarity index 77%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/notice/service/EmailSendDemoService.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/service/EmailSendDemoService.java
index fef6272f6..0463de451 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/notice/service/EmailSendDemoService.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/notice/service/EmailSendDemoService.java
@@ -1,7 +1,7 @@
-package cn.bootx.demo.core.notice.service;
+package cn.bootx.platform.demo.core.notice.service;
 
-import cn.bootx.notice.dto.mail.SendMailParam;
-import cn.bootx.notice.service.EmailNoticeSender;
+import cn.bootx.platform.notice.dto.mail.SendMailParam;
+import cn.bootx.platform.notice.service.EmailNoticeSender;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -10,7 +10,7 @@
  * 邮件消息发送测试
  *
  * @author xxm
- * @date 2022/8/3
+ * @since 2022/8/3
  */
 @Slf4j
 @Service
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoManager.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoManager.java
new file mode 100644
index 000000000..91652a3d8
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoManager.java
@@ -0,0 +1,33 @@
+package cn.bootx.platform.demo.core.perm.dao;
+
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.demo.core.perm.entity.DataPermDemo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 数据权限演示
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class DataPermDemoManager extends BaseManager {
+
+    private final DataPermDemoMapper dataPermDemoMapper;
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam) {
+        Page mpPage = MpUtil.getMpPage(pageParam, DataPermDemo.class);
+        return lambdaQuery().orderByDesc(DataPermDemo::getCreateTime).page(mpPage);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoMapper.java
new file mode 100644
index 000000000..4f0c7adae
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/dao/DataPermDemoMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.demo.core.perm.dao;
+
+import cn.bootx.platform.demo.core.perm.entity.DataPermDemo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 数据权限演示demo
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@Mapper
+public interface DataPermDemoMapper extends BaseMapper {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/entity/DataPermDemo.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/entity/DataPermDemo.java
new file mode 100644
index 000000000..58a8a567a
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/entity/DataPermDemo.java
@@ -0,0 +1,36 @@
+package cn.bootx.platform.demo.core.perm.entity;
+
+import cn.bootx.platform.common.core.annotation.DataVersionLog;
+import cn.bootx.platform.common.core.annotation.PermCode;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 权限显示demo
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@DataVersionLog(title = "数据权限演示")
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@Schema(title = "权限显示demo")
+@TableName("demo_data_perm")
+public class DataPermDemo extends MpBaseEntity {
+
+    @Schema(description = "名称")
+    private String name;
+
+    @PermCode("123")
+    @Schema(description = "创建人名称")
+    private String creatorName;
+
+    @Schema(description = "备注")
+    private String remark;
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/service/DataPermDemoService.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/service/DataPermDemoService.java
new file mode 100644
index 000000000..bbc68b2f2
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/perm/service/DataPermDemoService.java
@@ -0,0 +1,71 @@
+package cn.bootx.platform.demo.core.perm.service;
+
+import cn.bootx.platform.common.core.annotation.Permission;
+import cn.bootx.platform.common.core.entity.UserDetail;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.demo.core.perm.dao.DataPermDemoManager;
+import cn.bootx.platform.starter.auth.util.SecurityUtil;
+import cn.bootx.platform.demo.core.perm.entity.DataPermDemo;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 数据权限演示
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@Slf4j
+@Service
+@Permission
+@RequiredArgsConstructor
+public class DataPermDemoService {
+
+    private final DataPermDemoManager dataPermDemoManager;
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam) {
+        return MpUtil.convert2PageResult(dataPermDemoManager.page(pageParam));
+    }
+
+    /**
+     * 获取 单条
+     */
+    public DataPermDemo findById(Long id) {
+        return dataPermDemoManager.findById(id).orElseThrow(DataNotExistException::new);
+    }
+
+    /**
+     * 添加
+     */
+    public void add(DataPermDemo param) {
+        param.setCreatorName(SecurityUtil.getCurrentUser().map(UserDetail::getName).orElse("未知"));
+        dataPermDemoManager.save(param);
+    }
+
+    /**
+     * 更新
+     */
+    public void update(DataPermDemo param) {
+        DataPermDemo dataPermDemo = dataPermDemoManager.findById(param.getId()).orElseThrow(DataNotExistException::new);
+        BeanUtil.copyProperties(param, dataPermDemo, CopyOptions.create().ignoreNullValue());
+        dataPermDemoManager.updateById(dataPermDemo);
+    }
+
+    /**
+     * 删除
+     */
+    public void delete(Long id) {
+        dataPermDemoManager.findById(id).orElseThrow(DataNotExistException::new);
+        dataPermDemoManager.deleteById(id);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoManager.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoManager.java
new file mode 100644
index 000000000..886e74100
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoManager.java
@@ -0,0 +1,43 @@
+package cn.bootx.platform.demo.core.query.dao;
+
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.common.query.generator.QueryGenerator;
+import cn.bootx.platform.demo.core.query.entity.SuperQueryDemo;
+import cn.bootx.platform.common.query.entity.QueryParams;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 超级查询
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class SuperQueryDemoManager extends BaseManager {
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam) {
+        Page mpPage = MpUtil.getMpPage(pageParam, SuperQueryDemo.class);
+        return lambdaQuery().orderByDesc(SuperQueryDemo::getCreateTime).page(mpPage);
+    }
+
+    /**
+     * 分页 超级查询
+     */
+    public Page superQuery(PageParam pageParam, QueryParams queryParams) {
+        QueryWrapper generator = QueryGenerator.generator(queryParams);
+        Page mpPage = MpUtil.getMpPage(pageParam, SuperQueryDemo.class);
+        return this.page(mpPage, generator);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoMapper.java
new file mode 100644
index 000000000..70edb7040
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/dao/SuperQueryDemoMapper.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.demo.core.query.dao;
+
+import cn.bootx.platform.demo.core.query.entity.SuperQueryDemo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 超级查询
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@Mapper
+public interface SuperQueryDemoMapper extends BaseMapper {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/query/entity/SuperQueryDemo.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/entity/SuperQueryDemo.java
similarity index 89%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/query/entity/SuperQueryDemo.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/entity/SuperQueryDemo.java
index 2762c9044..94a15b6d7 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/query/entity/SuperQueryDemo.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/entity/SuperQueryDemo.java
@@ -1,6 +1,6 @@
-package cn.bootx.demo.core.query.entity;
+package cn.bootx.platform.demo.core.query.entity;
 
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -15,7 +15,7 @@
  * 超级查询演示
  *
  * @author xxm
- * @date 2022/2/21
+ * @since 2022/2/21
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/service/SuperQueryDemoService.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/service/SuperQueryDemoService.java
new file mode 100644
index 000000000..d3f9d306b
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/query/service/SuperQueryDemoService.java
@@ -0,0 +1,80 @@
+package cn.bootx.platform.demo.core.query.service;
+
+import cn.bootx.platform.common.core.annotation.QueryParam;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.common.query.entity.QueryParams;
+import cn.bootx.platform.demo.core.query.dao.SuperQueryDemoManager;
+import cn.bootx.platform.demo.core.query.entity.SuperQueryDemo;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * 超级查询
+ *
+ * @author xxm
+ * @since 2022/2/21
+ */
+@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class SuperQueryDemoService {
+
+    private final SuperQueryDemoManager superQueryDemoManager;
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam) {
+        return MpUtil.convert2PageResult(superQueryDemoManager.page(pageParam));
+    }
+
+    /**
+     * 分页 超级查询
+     */
+    public PageResult superQuery(PageParam pageParam, QueryParams queryParams) {
+        return MpUtil.convert2PageResult(superQueryDemoManager.superQuery(pageParam, queryParams));
+    }
+
+    /**
+     * 获取 单条
+     */
+    public SuperQueryDemo findById(Long id) {
+        return superQueryDemoManager.findById(id).orElseThrow(DataNotExistException::new);
+    }
+
+    /**
+     * 添加
+     */
+    public void add(SuperQueryDemo param) {
+        param.setRegistrationTime(LocalDateTime.now());
+        superQueryDemoManager.save(param);
+    }
+
+    /**
+     * 更新
+     */
+    public void update(SuperQueryDemo param) {
+        SuperQueryDemo SuperQueryDemo = superQueryDemoManager.findById(param.getId())
+            .orElseThrow(DataNotExistException::new);
+        BeanUtil.copyProperties(param, SuperQueryDemo, CopyOptions.create().ignoreNullValue());
+        superQueryDemoManager.updateById(SuperQueryDemo);
+    }
+
+    /**
+     * 删除
+     */
+    public void delete(Long id) {
+        superQueryDemoManager.findById(id).orElseThrow(DataNotExistException::new);
+        superQueryDemoManager.deleteById(id);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoManager.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoManager.java
new file mode 100644
index 000000000..4ad228de9
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoManager.java
@@ -0,0 +1,18 @@
+package cn.bootx.platform.demo.core.sensitive.dao;
+
+import cn.bootx.platform.demo.core.sensitive.entity.DataSensitiveDemo;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Slf4j
+@Repository
+@RequiredArgsConstructor
+public class DataSensitiveDemoManager extends BaseManager {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoMapper.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoMapper.java
new file mode 100644
index 000000000..c19df4332
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/dao/DataSensitiveDemoMapper.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.demo.core.sensitive.dao;
+
+import cn.bootx.platform.demo.core.sensitive.entity.DataSensitiveDemo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Mapper
+public interface DataSensitiveDemoMapper extends BaseMapper {
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/entity/DataSensitiveDemo.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/entity/DataSensitiveDemo.java
similarity index 86%
rename from bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/entity/DataSensitiveDemo.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/entity/DataSensitiveDemo.java
index 90cfc27d9..d70a7cb2a 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/core/sensitive/entity/DataSensitiveDemo.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/entity/DataSensitiveDemo.java
@@ -1,7 +1,7 @@
-package cn.bootx.demo.core.sensitive.entity;
+package cn.bootx.platform.demo.core.sensitive.entity;
 
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.starter.data.perm.sensitive.SensitiveInfo;
+import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo;
+import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -12,7 +12,7 @@
  * 数据脱敏
  *
  * @author xxm
- * @date 2022/3/24
+ * @since 2022/3/24
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/service/DataSensitiveDemoService.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/service/DataSensitiveDemoService.java
new file mode 100644
index 000000000..5f5dfb4d2
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/core/sensitive/service/DataSensitiveDemoService.java
@@ -0,0 +1,59 @@
+package cn.bootx.platform.demo.core.sensitive.service;
+
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.demo.core.sensitive.dao.DataSensitiveDemoManager;
+import cn.bootx.platform.demo.core.sensitive.entity.DataSensitiveDemo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author xxm
+ * @since 2022/3/24
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class DataSensitiveDemoService {
+
+    private final DataSensitiveDemoManager manager;
+
+    /**
+     * 新增
+     */
+    public void add(DataSensitiveDemo param) {
+        manager.save(param);
+    }
+
+    /**
+     * 更新
+     */
+    public void update(DataSensitiveDemo param) {
+        manager.updateById(param);
+    }
+
+    /**
+     * 删除
+     */
+    public void delete(Long id) {
+        manager.deleteById(id);
+    }
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam) {
+        return MpUtil.convert2PageResult(manager.page(MpUtil.getMpPage(pageParam, DataSensitiveDemo.class)));
+    }
+
+    /**
+     * 单条
+     */
+    public DataSensitiveDemo findById(Long id) {
+        return manager.findById(id).orElseThrow(DataNotExistException::new);
+    }
+
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/demo/ws/WebSocketDemo.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemo.java
similarity index 95%
rename from bootx-demo/src/main/java/cn/bootx/demo/ws/WebSocketDemo.java
rename to bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemo.java
index cedc20295..56ce57643 100644
--- a/bootx-demo/src/main/java/cn/bootx/demo/ws/WebSocketDemo.java
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemo.java
@@ -1,6 +1,6 @@
-package cn.bootx.demo.ws;
+package cn.bootx.platform.demo.ws;
 
-import cn.bootx.common.websocket.manager.WebSocketSessionManager;
+import cn.bootx.platform.common.websocket.manager.WebSocketSessionManager;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
@@ -14,7 +14,7 @@
  * websocket demo
  *
  * @author xxm
- * @date 2022/3/27
+ * @since 2022/3/27
  */
 @Slf4j
 @Component
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoConfig.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoConfig.java
new file mode 100644
index 000000000..65301ee20
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoConfig.java
@@ -0,0 +1,29 @@
+package cn.bootx.platform.demo.ws;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+
+/**
+ *
+ * @author xxm
+ * @since 2023/11/29
+ */
+@Configuration
+@RequiredArgsConstructor
+public class WebSocketDemoConfig  implements WebSocketConfigurer {
+    private final WebSocketDemoHandler webSocketDemoHandler;
+
+    /**
+     * 拦截器
+     */
+    @Override
+    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+        registry
+                // WebSocket 连接处理器
+                .addHandler(webSocketDemoHandler, "/test/ws")
+                // 允许跨域
+                .setAllowedOrigins("*");
+    }
+}
diff --git a/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoHandler.java b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoHandler.java
new file mode 100644
index 000000000..60ba07e07
--- /dev/null
+++ b/bootx-demo/src/main/java/cn/bootx/platform/demo/ws/WebSocketDemoHandler.java
@@ -0,0 +1,89 @@
+package cn.bootx.platform.demo.ws;
+
+import cn.bootx.platform.common.websocket.manager.SpringWebSocketSessionManager;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.springframework.stereotype.Service;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.TextMessage;
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Websock Spring 演示
+ * @author xxm
+ * @since 2023/11/29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class WebSocketDemoHandler extends TextWebSocketHandler {
+
+
+    /** websocket连接管理器 */
+    @Getter
+    private static final SpringWebSocketSessionManager wsManager = new SpringWebSocketSessionManager();
+
+    /** 记录当前在线连接数 */
+    private static final AtomicInteger onlineCount = new AtomicInteger(0);
+
+    /**
+     * 连接建立成功调用的方法
+     */
+    @Override
+    public void afterConnectionEstablished(WebSocketSession session) {
+        Map sessionPool = wsManager.getSessionPool();
+        sessionPool.put(session.getId(),session);
+        onlineCount.incrementAndGet(); // 在线数加1
+        this.sendMessage("连接成功",session.getId());
+        log.info("有新连接加入,当前在线人数为:{}", onlineCount.get());
+    }
+
+    /**
+     * 关闭
+     */
+    @Override
+    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+        onlineCount.decrementAndGet(); // 在线数减1
+        String userId = wsManager.getIdBySession(session);
+        wsManager.removeSession(session);
+        log.info("有一连接关闭,当前在线人数为:{}", onlineCount.get());
+    }
+
+    /**
+     * 接收消息
+     */
+    @Override
+    public void handleTextMessage(WebSocketSession session, TextMessage message) {
+        log.info("服务端收到客户端的消息:{}", message);
+        this.sendMessage("响应: " + message, session.getId());
+    }
+
+    /**
+     * 错误
+     */
+    @Override
+    public void handleTransportError(WebSocketSession session, Throwable exception) {
+        log.error("{} 发生错误", session.getId());
+    }
+
+
+    /**
+     * 服务端发送消息给客户端(单发)
+     */
+    public void sendMessage(String message, String sid) {
+        try {
+            val session = wsManager.getSessionPool().get(sid);
+            session.sendMessage(new TextMessage(message));
+        }
+        catch (Exception e) {
+            log.error("服务端发送消息给客户端失败:", e);
+        }
+    }
+
+}
diff --git a/bootx-demo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-demo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index ab88413b2..c2a2d344d 100644
--- a/bootx-demo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/bootx-demo/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-cn.bootx.demo.DemoApplication
\ No newline at end of file
+cn.bootx.platform.demo.DemoApplication
diff --git a/bootx-services/pom.xml b/bootx-services/pom.xml
index 852c64ffe..48b8b564f 100644
--- a/bootx-services/pom.xml
+++ b/bootx-services/pom.xml
@@ -4,8 +4,8 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
         cn.bootx.platform
-        bootx-platform
-        1.2.3
+        bootx-platform-parent
+        1.3.6.2
     
 
     4.0.0
@@ -17,12 +17,23 @@
     
         service-baseapi
         service-iam
-        service-payment
         service-notice
-        service-office
-        service-visualization
     
 
+    
+        
+        
+            noDeploy
+            
+                service-visualization
+                service-miniapp
+            
+            
+                true
+            
+        
+    
+
     
         
         
@@ -36,17 +47,6 @@
             spring-boot-starter-web
         
 
-        
-        
-            org.springframework.boot
-            spring-boot-starter-thymeleaf
-        
-        
-        
-            net.sourceforge.nekohtml
-            nekohtml
-        
-
         
         
             org.springframework.boot
@@ -65,22 +65,39 @@
             spring-boot-starter-data-redis
         
 
+        
+        
+            com.baomidou
+            lock4j-redis-template-spring-boot-starter
+            ${lock4j.version}
+        
+        
+        
+        
+        
+        
+        
+
+
         
         
             org.projectlombok
             lombok
+            provided
         
 
         
         
             org.projectlombok
             lombok-mapstruct-binding
+            provided
         
 
         
         
             org.mapstruct
             mapstruct-processor
+            provided
         
 
         
@@ -109,11 +126,12 @@
             ${fastjson.version}
         
 
-        
+
+        
         
-            com.github.xiaoymin
-            knife4j-openapi3-ui
-            ${knife4j.version}
+            cn.bootx
+            table-modify-mysql-boot-starter
+            provided
         
 
         
@@ -168,6 +186,7 @@
         
             cn.bootx.platform
             common-mongo
+            true
         
 
         
diff --git a/bootx-services/service-baseapi/pom.xml b/bootx-services/service-baseapi/pom.xml
index e0f8e9324..85ef1c1c6 100644
--- a/bootx-services/service-baseapi/pom.xml
+++ b/bootx-services/service-baseapi/pom.xml
@@ -5,7 +5,7 @@
     
         cn.bootx.platform
         bootx-services
-        1.2.3
+        1.3.6.2
     
     4.0.0
 
@@ -59,6 +59,7 @@
             com.alibaba
             easyexcel
         
+
     
 
 
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/CachingCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/CachingCode.java
deleted file mode 100644
index 1fa73a891..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/CachingCode.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.bootx.baseapi.code;
-
-/**
- * 缓存
- *
- * @author xxm
- * @date 2022/5/1
- */
-public interface CachingCode {
-
-    /** 参数缓存 */
-    String SYSTEM_PARAM = "base:system:param";
-
-    /** 行政区域缓存 */
-    String CHINA_REGION = "base:china:region";
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/AppVersionController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/AppVersionController.java
deleted file mode 100644
index 459a9f667..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/AppVersionController.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package cn.bootx.baseapi.controller;
-
-import cn.bootx.baseapi.core.app.service.AppVersionService;
-import cn.bootx.baseapi.dto.app.AppVersionDto;
-import cn.bootx.baseapi.param.app.AppVersionParam;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author xxm
- * @date 2021/8/9
- */
-@Tag(name = "app版本管理")
-@RestController
-@RequestMapping("/app/version")
-@RequiredArgsConstructor
-public class AppVersionController {
-
-    private final AppVersionService appVersionService;
-
-    @Operation(summary = "添加")
-    @PostMapping("/add")
-    public ResResult add(@RequestBody AppVersionParam param) {
-        return Res.ok(appVersionService.add(param));
-    }
-
-    @Operation(summary = "删除")
-    @DeleteMapping("/delete")
-    public ResResult delete(Long id) {
-        appVersionService.delete(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "检查更新")
-    @PostMapping("/check")
-    public ResResult check() {
-        return Res.ok(appVersionService.check());
-    }
-
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(PageParam pageParam) {
-        return Res.ok(appVersionService.page(pageParam));
-    }
-
-    @Operation(summary = "查询详情")
-    @PostMapping("/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(appVersionService.findById(id));
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/CaptchaController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/CaptchaController.java
deleted file mode 100644
index 18fffc4af..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/CaptchaController.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.bootx.baseapi.controller;
-
-import cn.bootx.baseapi.core.captcha.service.CaptchaService;
-import cn.bootx.baseapi.dto.captcha.CaptchaDataResult;
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 验证码服务
- *
- * @author xxm
- * @date 2021/8/2
- */
-@Tag(name = "验证码服务")
-@RestController
-@RequestMapping("/captcha")
-@RequiredArgsConstructor
-public class CaptchaController {
-
-    private final CaptchaService captchaService;
-
-    @IgnoreAuth
-    @Operation(summary = "获取图片验证码")
-    @PostMapping("/imgCaptcha")
-    public ResResult imgCaptcha() {
-        return Res.ok(captchaService.imgCaptcha());
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryController.java
deleted file mode 100644
index 9f24892aa..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package cn.bootx.baseapi.controller;
-
-import cn.bootx.baseapi.core.dict.service.DictionaryService;
-import cn.bootx.baseapi.dto.dict.DictionaryDto;
-import cn.bootx.baseapi.param.dict.DictionaryParam;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ValidationUtil;
-import cn.bootx.common.core.validation.ValidationGroup.add;
-import cn.bootx.common.core.validation.ValidationGroup.edit;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 字典
- *
- * @author xxm
- * @date 2021/8/4
- */
-@Tag(name = "字典")
-@RestController
-@RequestMapping("/dict")
-@RequiredArgsConstructor
-public class DictionaryController {
-
-    private final DictionaryService dictionaryService;
-
-    @Operation(summary = "添加")
-    @PostMapping("/add")
-    public ResResult add(@RequestBody DictionaryParam param) {
-        ValidationUtil.validateParam(param, add.class);
-        return Res.ok(dictionaryService.add(param));
-    }
-
-    @Operation(summary = "根据id删除")
-    @DeleteMapping("/delete")
-    public ResResult delete(Long id) {
-        dictionaryService.delete(id);
-        return Res.ok();
-    }
-
-    @Operation(summary = "更新")
-    @PostMapping("/update")
-    public ResResult update(@RequestBody DictionaryParam param) {
-        ValidationUtil.validateParam(param, edit.class);
-        return Res.ok(dictionaryService.update(param));
-    }
-
-    @Operation(summary = "根据id获取")
-    @GetMapping("/findById")
-    public ResResult findById(Long id) {
-        return Res.ok(dictionaryService.findById(id));
-    }
-
-    @Operation(summary = "查询全部")
-    @GetMapping("/findAll")
-    public ResResult> findAll() {
-        return Res.ok(dictionaryService.findAll());
-    }
-
-    @Operation(summary = "分页")
-    @GetMapping("/page")
-    public ResResult> page(PageParam pageParam, DictionaryParam param) {
-        return Res.ok(dictionaryService.page(pageParam, param));
-    }
-
-    @Operation(summary = "编码是否被使用")
-    @GetMapping("/existsByCode")
-    public ResResult existsByCode(String code) {
-        return Res.ok(dictionaryService.existsByCode(code));
-    }
-
-    @Operation(summary = "编码是否被使用(不包含自己)")
-    @GetMapping("/existsByCodeNotId")
-    public ResResult existsByCode(String code, Long id) {
-        return Res.ok(dictionaryService.existsByCode(code, id));
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/QuerySqlController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/QuerySqlController.java
deleted file mode 100644
index 494ab6e71..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/QuerySqlController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.baseapi.controller;
-
-import cn.bootx.baseapi.core.sql.service.QuerySqlService;
-import cn.bootx.baseapi.param.sql.QueryFieldParam;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * SQL查询
- *
- * @author xxm
- * @date 2023/3/9
- */
-@Tag(name = "SQL查询")
-@RestController
-@RequestMapping("/query/sql")
-@RequiredArgsConstructor
-public class QuerySqlController {
-
-    private final QuerySqlService querySqlService;
-
-    @Operation(summary = "测试SQL解析和执行")
-    @PostMapping("/test")
-    public ResResult test(@RequestBody Map map) {
-        querySqlService.querySql(map);
-        return Res.ok();
-    }
-
-    @Operation(summary = "通过SQL查出结果字段")
-    @PostMapping("/queryFieldBySql")
-    public ResResult> queryFieldBySql(@RequestBody QueryFieldParam param) {
-        return Res.ok(querySqlService.queryFieldBySql(param));
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/convert/AppVersionConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/convert/AppVersionConvert.java
deleted file mode 100644
index d71198640..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/convert/AppVersionConvert.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package cn.bootx.baseapi.core.app.convert;
-
-import cn.bootx.baseapi.core.app.entity.AppVersion;
-import cn.bootx.baseapi.dto.app.AppVersionDto;
-import cn.bootx.baseapi.param.app.AppVersionParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 转换
- *
- * @author xxm
- * @date 2021/8/9
- */
-@Mapper
-public interface AppVersionConvert {
-
-    AppVersionConvert CONVERT = Mappers.getMapper(AppVersionConvert.class);
-
-    AppVersion convert(AppVersionParam in);
-
-    AppVersion convert(AppVersionDto in);
-
-    AppVersionDto convert(AppVersion in);
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionManager.java
deleted file mode 100644
index 9bbd550a7..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.bootx.baseapi.core.app.dao;
-
-import cn.bootx.baseapi.core.app.entity.AppVersion;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-
-/**
- * app版本管理
- *
- * @author xxm
- * @date 2021/8/9
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class AppVersionManager extends BaseManager {
-
-    public Page page(PageParam pageParam) {
-        Page mpPage = MpUtil.getMpPage(pageParam, AppVersion.class);
-        return lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage);
-    }
-
-    public Optional findLatest() {
-        return MpUtil.findOne(lambdaQuery().orderByDesc(AppVersion::getAppVersion));
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionMapper.java
deleted file mode 100644
index 338878d18..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/dao/AppVersionMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.app.dao;
-
-import cn.bootx.baseapi.core.app.entity.AppVersion;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * app版本
- *
- * @author xxm
- * @date 2021/8/9
- */
-@Mapper
-public interface AppVersionMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/entity/AppVersion.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/entity/AppVersion.java
deleted file mode 100644
index 8512a4dc1..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/entity/AppVersion.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.bootx.baseapi.core.app.entity;
-
-import cn.bootx.baseapi.core.app.convert.AppVersionConvert;
-import cn.bootx.baseapi.dto.app.AppVersionDto;
-import cn.bootx.baseapi.param.app.AppVersionParam;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * App版本
- *
- * @author xxm
- * @date 2021/8/9
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("App版本")
-public class AppVersion extends MpBaseEntity implements EntityBaseFunction {
-
-    /** app版本 */
-    private String appVersion;
-
-    /** 下载地址 */
-    private String url;
-
-    /** 密码 */
-    private String password;
-
-    /** 包名 */
-    private String bundleId;
-
-    /** 说明 */
-    private String description;
-
-    public static AppVersion init(AppVersionDto in) {
-        return AppVersionConvert.CONVERT.convert(in);
-    }
-
-    public static AppVersion init(AppVersionParam in) {
-        return AppVersionConvert.CONVERT.convert(in);
-    }
-
-    @Override
-    public AppVersionDto toDto() {
-        return AppVersionConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/service/AppVersionService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/service/AppVersionService.java
deleted file mode 100644
index 9703be49a..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/app/service/AppVersionService.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.bootx.baseapi.core.app.service;
-
-import cn.bootx.baseapi.core.app.dao.AppVersionManager;
-import cn.bootx.baseapi.core.app.entity.AppVersion;
-import cn.bootx.baseapi.dto.app.AppVersionDto;
-import cn.bootx.baseapi.param.app.AppVersionParam;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.Optional;
-
-/**
- * 版本管理
- *
- * @author xxm
- * @date 2021/8/9
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class AppVersionService {
-
-    private final AppVersionManager appVersionManager;
-
-    /**
-     * 添加
-     */
-    public AppVersionDto add(AppVersionParam param) {
-        AppVersion appVersion = AppVersion.init(param);
-        return appVersionManager.save(appVersion).toDto();
-    }
-
-    /**
-     * 删除
-     */
-    public void delete(Long id) {
-        appVersionManager.deleteById(id);
-    }
-
-    /**
-     * 检查更新
-     */
-    public AppVersionDto check() {
-        Optional appVersion = appVersionManager.findLatest();
-        return appVersion.map(AppVersion::toDto).orElseThrow(DataNotExistException::new);
-    }
-
-    /**
-     * 分页
-     */
-    public PageResult page(PageParam pageParam) {
-        return MpUtil.convert2DtoPageResult(appVersionManager.page(pageParam));
-    }
-
-    /**
-     * 获取详情
-     */
-    public AppVersionDto findById(Long id) {
-        return appVersionManager.findById(id).map(AppVersion::toDto).orElseThrow(DataNotExistException::new);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/convert/DictionaryConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/convert/DictionaryConvert.java
deleted file mode 100644
index 356b814e3..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/convert/DictionaryConvert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.bootx.baseapi.core.dict.convert;
-
-import cn.bootx.baseapi.core.dict.entity.Dictionary;
-import cn.bootx.baseapi.core.dict.entity.DictionaryItem;
-import cn.bootx.baseapi.dto.dict.DictionaryDto;
-import cn.bootx.baseapi.dto.dict.DictionaryItemDto;
-import cn.bootx.baseapi.dto.dict.DictionaryItemSimpleDto;
-import cn.bootx.baseapi.param.dict.DictionaryItemParam;
-import cn.bootx.baseapi.param.dict.DictionaryParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 渠道转换
- *
- * @author xxm
- * @date 2021/7/6
- */
-@Mapper
-public interface DictionaryConvert {
-
-    DictionaryConvert CONVERT = Mappers.getMapper(DictionaryConvert.class);
-
-    Dictionary convert(DictionaryParam in);
-
-    DictionaryDto convert(Dictionary in);
-
-    DictionaryItem convert(DictionaryItemParam in);
-
-    DictionaryItemDto convert(DictionaryItem in);
-
-    DictionaryItemSimpleDto convertSimple(DictionaryItem in);
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemMapper.java
deleted file mode 100644
index f01eb18be..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.dict.dao;
-
-import cn.bootx.baseapi.core.dict.entity.DictionaryItem;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 字典项
- *
- * @author xxm
- * @date 2020/11/13
- */
-@Mapper
-public interface DictionaryItemMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryMapper.java
deleted file mode 100644
index 8ddddc2c2..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.dict.dao;
-
-import cn.bootx.baseapi.core.dict.entity.Dictionary;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 字典
- *
- * @author xxm
- * @date 2021/8/4
- */
-@Mapper
-public interface DictionaryMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/Dictionary.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/Dictionary.java
deleted file mode 100644
index 14a8b7291..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/Dictionary.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package cn.bootx.baseapi.core.dict.entity;
-
-import cn.bootx.baseapi.core.dict.convert.DictionaryConvert;
-import cn.bootx.baseapi.dto.dict.DictionaryDto;
-import cn.bootx.baseapi.param.dict.DictionaryParam;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 字典
- *
- * @author xxm
- * @date 2020/11/13
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@TableName("base_dict")
-public class Dictionary extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 名称 */
-    private String name;
-
-    /** 分类标签 */
-    private String groupTag;
-
-    /** 编码 */
-    private String code;
-
-    /** 备注 */
-    private String remark;
-
-    /** 是否启用 */
-    private Boolean enable;
-
-    public static Dictionary init(DictionaryParam in) {
-        return DictionaryConvert.CONVERT.convert(in);
-    }
-
-    @Override
-    public DictionaryDto toDto() {
-        return DictionaryConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/DictionaryItem.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/DictionaryItem.java
deleted file mode 100644
index dac8c5675..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/entity/DictionaryItem.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package cn.bootx.baseapi.core.dict.entity;
-
-import cn.bootx.baseapi.core.dict.convert.DictionaryConvert;
-import cn.bootx.baseapi.dto.dict.DictionaryItemDto;
-import cn.bootx.baseapi.dto.dict.DictionaryItemSimpleDto;
-import cn.bootx.baseapi.param.dict.DictionaryItemParam;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 字典项
- *
- * @author xxm
- * @date 2020/4/15 17:45
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("base_dict_item")
-public class DictionaryItem extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 字典ID */
-    private Long dictId;
-
-    /** 字典编码 */
-    private String dictCode;
-
-    /** 字典项编码 */
-    private String code;
-
-    /** 名称 */
-    private String name;
-
-    /** 字典项排序 */
-    private Double sortNo;
-
-    /** 是否启用 */
-    private Boolean enable;
-
-    /** 备注 */
-    private String remark;
-
-    public static DictionaryItem init(DictionaryItemParam in) {
-        return DictionaryConvert.CONVERT.convert(in);
-    }
-
-    @Override
-    public DictionaryItemDto toDto() {
-        return DictionaryConvert.CONVERT.convert(this);
-    }
-
-    /**
-     * 转换成简单对象
-     */
-    public DictionaryItemSimpleDto toSimpleDto() {
-        return DictionaryConvert.CONVERT.convertSimple(this);
-
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/convert/DynamicFormConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/convert/DynamicFormConvert.java
deleted file mode 100644
index 9a5ca93f3..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/convert/DynamicFormConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.dynamicform.convert;
-
-import cn.bootx.baseapi.core.dynamicform.entity.DynamicForm;
-import cn.bootx.baseapi.dto.dynamicform.DynamicFormDto;
-import cn.bootx.baseapi.param.dynamicform.DynamicFormParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 动态表单
- *
- * @author xxm
- * @date 2022-07-28
- */
-@Mapper
-public interface DynamicFormConvert {
-
-    DynamicFormConvert CONVERT = Mappers.getMapper(DynamicFormConvert.class);
-
-    DynamicForm convert(DynamicFormParam in);
-
-    DynamicFormDto convert(DynamicForm in);
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormManager.java
deleted file mode 100644
index bdda6b9d8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.bootx.baseapi.core.dynamicform.dao;
-
-import cn.bootx.baseapi.core.dynamicform.entity.DynamicForm;
-import cn.bootx.baseapi.param.dynamicform.DynamicFormParam;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.Objects;
-
-/**
- * 动态表单
- *
- * @author xxm
- * @date 2022-07-28
- */
-@Repository
-@RequiredArgsConstructor
-public class DynamicFormManager extends BaseManager {
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, DynamicFormParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, DynamicForm.class);
-        return lambdaQuery().select(DynamicForm.class, MpUtil::excludeBigField)
-            .like(Objects.nonNull(param.getCode()), DynamicForm::getCode, param.getCode())
-            .like(Objects.nonNull(param.getName()), DynamicForm::getName, param.getName())
-            .orderByDesc(MpIdEntity::getId)
-            .page(mpPage);
-    }
-
-    public boolean existsByCode(String code) {
-        return existedByField(DynamicForm::getCode, code);
-    }
-
-    public boolean existsByCode(String code, Long id) {
-        return existedByField(DynamicForm::getCode, code, id);
-    }
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormMapper.java
deleted file mode 100644
index 57df11218..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/dao/DynamicFormMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.dynamicform.dao;
-
-import cn.bootx.baseapi.core.dynamicform.entity.DynamicForm;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 动态表单
- *
- * @author xxm
- * @date 2022-07-28
- */
-@Mapper
-public interface DynamicFormMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicForm.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicForm.java
deleted file mode 100644
index 130add29c..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicForm.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package cn.bootx.baseapi.core.dynamicform.entity;
-
-import cn.bootx.baseapi.core.dynamicform.convert.DynamicFormConvert;
-import cn.bootx.baseapi.dto.dynamicform.DynamicFormDto;
-import cn.bootx.baseapi.param.dynamicform.DynamicFormParam;
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 动态表单
- *
- * @author xxm
- * @date 2022-07-28
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName(value = "base_dynamic_form", autoResultMap = true)
-public class DynamicForm extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 表单名称 */
-    private String name;
-
-    /** 表单键名 */
-    private String code;
-
-    /** 表单内容 */
-    @BigField
-    private String value;
-
-    /** 备注 */
-    private String remark;
-
-    /** 创建对象 */
-    public static DynamicForm init(DynamicFormParam in) {
-        return DynamicFormConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public DynamicFormDto toDto() {
-        return DynamicFormConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicFormData.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicFormData.java
deleted file mode 100644
index fed78d092..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/entity/DynamicFormData.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.dynamicform.entity;
-
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * @author xxm
- * @date 2022/7/30
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@Schema(title = "动态表单数据")
-public class DynamicFormData extends MpBaseEntity {
-
-    /** 表单id */
-    private Long formId;
-
-    /** 内容 */
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java
deleted file mode 100644
index bfc4e4e6b..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.dynamicsource.convert;
-
-import cn.bootx.baseapi.core.dynamicsource.entity.DynamicDataSource;
-import cn.bootx.baseapi.dto.dynamicsource.DynamicDataSourceDto;
-import cn.bootx.baseapi.param.dynamicsource.DynamicDataSourceParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 动态数据源管理
- *
- * @author xxm
- * @date 2022-09-24
- */
-@Mapper
-public interface DynamicDataSourceConvert {
-
-    DynamicDataSourceConvert CONVERT = Mappers.getMapper(DynamicDataSourceConvert.class);
-
-    DynamicDataSource convert(DynamicDataSourceParam in);
-
-    DynamicDataSourceDto convert(DynamicDataSource in);
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java
deleted file mode 100644
index 7d9b04d8a..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cn.bootx.baseapi.core.dynamicsource.dao;
-
-import cn.bootx.baseapi.core.dynamicsource.entity.DynamicDataSource;
-import cn.bootx.baseapi.param.dynamicsource.DynamicDataSourceParam;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-
-/**
- * 动态数据源管理
- *
- * @author xxm
- * @date 2022-09-24
- */
-@Repository
-@RequiredArgsConstructor
-public class DynamicDataSourceManager extends BaseManager {
-
-    public Optional findByCode(String code) {
-        return findByField(DynamicDataSource::getCode, code);
-    }
-
-    public boolean existsByCode(String code) {
-        return existedByField(DynamicDataSource::getCode, code);
-    }
-
-    public boolean existsByCode(String code, Long id) {
-        return existedByField(DynamicDataSource::getCode, code, id);
-    }
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, DynamicDataSourceParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, DynamicDataSource.class);
-        return this.lambdaQuery()
-            .select(this.getEntityClass(), MpUtil::excludeBigField)
-            .eq(StrUtil.isNotBlank(param.getDatabaseType()), DynamicDataSource::getDatabaseType,
-                    param.getDatabaseType())
-            .like(StrUtil.isNotBlank(param.getCode()), DynamicDataSource::getCode, param.getCode())
-            .like(StrUtil.isNotBlank(param.getName()), DynamicDataSource::getName, param.getName())
-            .orderByDesc(MpIdEntity::getId)
-            .page(mpPage);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java
deleted file mode 100644
index 2ff071c0b..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.dynamicsource.dao;
-
-import cn.bootx.baseapi.core.dynamicsource.entity.DynamicDataSource;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 动态数据源管理
- *
- * @author xxm
- * @date 2022-09-24
- */
-@Mapper
-public interface DynamicDataSourceMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/entity/DynamicDataSource.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/entity/DynamicDataSource.java
deleted file mode 100644
index a5d762232..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/entity/DynamicDataSource.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package cn.bootx.baseapi.core.dynamicsource.entity;
-
-import cn.bootx.baseapi.core.dynamicsource.convert.DynamicDataSourceConvert;
-import cn.bootx.baseapi.dto.dynamicsource.DynamicDataSourceDto;
-import cn.bootx.baseapi.param.dynamicsource.DynamicDataSourceParam;
-import cn.bootx.common.core.annotation.EncryptionField;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 动态数据源管理
- *
- * @author xxm
- * @date 2022-09-24
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("base_dynamic_data_source")
-public class DynamicDataSource extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 数据源编码 */
-    private String code;
-
-    /** 数据源名称 */
-    private String name;
-
-    /** 数据库类型 */
-    private String databaseType;
-
-    /** 驱动类 */
-    private String dbDriver;
-
-    /** 数据库地址 */
-    private String dbUrl;
-
-    /** 用户名 */
-    private String dbUsername;
-
-    /** 密码 */
-    @EncryptionField
-    private String dbPassword;
-
-    /** 备注 */
-    private String remark;
-
-    /** 创建对象 */
-    public static DynamicDataSource init(DynamicDataSourceParam in) {
-        return DynamicDataSourceConvert.CONVERT.convert(in);
-    }
-
-    /** 转换成dto */
-    @Override
-    public DynamicDataSourceDto toDto() {
-        return DynamicDataSourceConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueManager.java
deleted file mode 100644
index 08037d6c3..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueManager.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.bootx.baseapi.core.keyvalue.dao;
-
-import cn.bootx.baseapi.core.keyvalue.entity.SysKeyValue;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xxm
- * @date 2022/3/30
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class SysKeyValueManager extends BaseManager {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueMapper.java
deleted file mode 100644
index 485749781..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/dao/SysKeyValueMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.baseapi.core.keyvalue.dao;
-
-import cn.bootx.baseapi.core.keyvalue.entity.SysKeyValue;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2022/3/30
- */
-@Mapper
-public interface SysKeyValueMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/service/SysKeyValueService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/service/SysKeyValueService.java
deleted file mode 100644
index a492340aa..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/service/SysKeyValueService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package cn.bootx.baseapi.core.keyvalue.service;
-
-import cn.bootx.baseapi.core.keyvalue.dao.SysKeyValueManager;
-import cn.bootx.baseapi.core.keyvalue.entity.SysKeyValue;
-import cn.bootx.common.core.function.SystemKeyValueService;
-import cn.bootx.common.core.rest.dto.KeyValue;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * kv存储
- *
- * @author xxm
- * @date 2022/3/30
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class SysKeyValueService implements SystemKeyValueService {
-
-    private final SysKeyValueManager sysKeyValueManager;
-
-    /**
-     * 获取值
-     */
-    @Override
-    public String get(String key) {
-        return sysKeyValueManager.findByField(SysKeyValue::getKey, key).map(SysKeyValue::getValue).orElse(null);
-    }
-
-    /**
-     * 获取多个
-     */
-    @Override
-    public List gets(List keys) {
-        return sysKeyValueManager.findAllByFields(SysKeyValue::getKey, keys)
-            .stream()
-            .map(SysKeyValue::toKeyValue)
-            .collect(Collectors.toList());
-    }
-
-    /**
-     * 设置值
-     */
-    @Override
-    public void setup(String key, String value) {
-        SysKeyValue sysKeyValue = sysKeyValueManager.findByField(SysKeyValue::getKey, key)
-            .orElse(new SysKeyValue().setKey(key).setValue(value));
-        sysKeyValueManager.saveOrUpdate(sysKeyValue);
-    }
-
-    /**
-     * 设置多个
-     */
-    @Override
-    public void setupBatch(List list) {
-
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/convert/SystemConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/convert/SystemConvert.java
deleted file mode 100644
index b5ca852a8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/convert/SystemConvert.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.parameter.convert;
-
-import cn.bootx.baseapi.core.parameter.entity.SystemParameter;
-import cn.bootx.baseapi.dto.parameter.SystemParameterDto;
-import cn.bootx.baseapi.param.system.SystemParameterParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * 系统参数和系统配置实体类转换
- *
- * @author xxm
- * @date 2021/10/25
- */
-@Mapper
-public interface SystemConvert {
-
-    SystemConvert CONVERT = Mappers.getMapper(SystemConvert.class);
-
-    SystemParameterDto convert(SystemParameter in);
-
-    SystemParameter convert(SystemParameterParam in);
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamManager.java
deleted file mode 100644
index 80c94bddb..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamManager.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package cn.bootx.baseapi.core.parameter.dao;
-
-import cn.bootx.baseapi.core.parameter.entity.SystemParameter;
-import cn.bootx.baseapi.param.system.SystemParameterParam;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.mybatisplus.base.MpIdEntity;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import cn.bootx.common.mybatisplus.util.MpUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Repository;
-
-import java.io.Serializable;
-import java.util.Optional;
-
-import static cn.bootx.baseapi.code.CachingCode.SYSTEM_PARAM;
-
-/**
- * 系统参数
- *
- * @author xxm
- * @date 2021/10/25
- */
-@Slf4j
-@Repository
-@RequiredArgsConstructor
-public class SystemParamManager extends BaseManager {
-
-    @Override
-    @CacheEvict(value = SYSTEM_PARAM, allEntries = true)
-    public SystemParameter updateById(SystemParameter systemParameter) {
-        return super.updateById(systemParameter);
-    }
-
-    @Override
-    @CacheEvict(value = SYSTEM_PARAM, allEntries = true)
-    public boolean deleteById(Serializable id) {
-        return super.deleteById(id);
-    }
-
-    /**
-     * 根据键名获取键值
-     */
-    @Cacheable(value = SYSTEM_PARAM, key = "#key")
-    public Optional findByParamKey(String key) {
-        return this.findByField(SystemParameter::getParamKey, key);
-    }
-
-    /**
-     * key重复检查
-     */
-    public boolean existsByKey(String key) {
-        return existedByField(SystemParameter::getParamKey, key);
-    }
-
-    /**
-     * key重复检查
-     */
-    public boolean existsByKey(String key, Long id) {
-        return existedByField(SystemParameter::getParamKey, key, id);
-    }
-
-    /**
-     * 分页
-     */
-    public Page page(PageParam pageParam, SystemParameterParam param) {
-        Page mpPage = MpUtil.getMpPage(pageParam, SystemParameter.class);
-        return lambdaQuery().orderByDesc(MpIdEntity::getId)
-            .like(StrUtil.isNotBlank(param.getName()), SystemParameter::getName, param.getName())
-            .like(StrUtil.isNotBlank(param.getParamKey()), SystemParameter::getParamKey, param.getParamKey())
-            .page(mpPage);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamMapper.java
deleted file mode 100644
index 35253c6c8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/dao/SystemParamMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.baseapi.core.parameter.dao;
-
-import cn.bootx.baseapi.core.parameter.entity.SystemParameter;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2021/10/25
- */
-@Mapper
-public interface SystemParamMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/entity/SystemParameter.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/entity/SystemParameter.java
deleted file mode 100644
index 4c8daeeb8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/entity/SystemParameter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package cn.bootx.baseapi.core.parameter.entity;
-
-import cn.bootx.baseapi.core.parameter.convert.SystemConvert;
-import cn.bootx.baseapi.dto.parameter.SystemParameterDto;
-import cn.bootx.baseapi.param.system.SystemParameterParam;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-/**
- * 系统参数
- *
- * @author xxm
- * @date 2021/10/25
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@TableName("base_param")
-public class SystemParameter extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 参数名称 */
-    private String name;
-
-    /** 参数键名 */
-    private String paramKey;
-
-    /** 参数值 */
-    private String value;
-
-    /** 参数类型 */
-    private Integer type;
-
-    /** 是否启用 */
-    private Boolean enable;
-
-    /** 内置参数 */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
-    private boolean internal;
-
-    /** 备注 */
-    private String remark;
-
-    @Override
-    public SystemParameterDto toDto() {
-        return SystemConvert.CONVERT.convert(this);
-    }
-
-    public static SystemParameter init(SystemParameterParam in) {
-        return SystemConvert.CONVERT.convert(in);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaManager.java
deleted file mode 100644
index a618596af..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Area;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 区域表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Repository
-@RequiredArgsConstructor
-public class AreaManager extends BaseManager {
-
-    public List findAllByCityCode(String cityCode) {
-        return findAllByField(Area::getCityCode, cityCode);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaMapper.java
deleted file mode 100644
index 028dca014..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/AreaMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Area;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 区域表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Mapper
-public interface AreaMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityManager.java
deleted file mode 100644
index c833b0fbb..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.City;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 城市表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Repository
-@RequiredArgsConstructor
-public class CityManager extends BaseManager {
-
-    public List findAllByProvinceCode(String provinceCode) {
-        return findAllByField(City::getProvinceCode, provinceCode);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityMapper.java
deleted file mode 100644
index 3fdda764e..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/CityMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.City;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 城市表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Mapper
-public interface CityMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceManager.java
deleted file mode 100644
index 6e95fe279..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceManager.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.City;
-import cn.bootx.baseapi.core.region.entity.Province;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 省份表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Repository
-@RequiredArgsConstructor
-public class ProvinceManager extends BaseManager {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceMapper.java
deleted file mode 100644
index 80665373f..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/ProvinceMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Province;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 省份表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Mapper
-public interface ProvinceMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetManager.java
deleted file mode 100644
index 2ac8dc4f8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Street;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 街道表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Repository
-@RequiredArgsConstructor
-public class StreetManager extends BaseManager {
-
-    public List findAllByAreaCode(String areaCode) {
-        return findAllByField(Street::getAreaCode, areaCode);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetMapper.java
deleted file mode 100644
index 76d7b97f8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/StreetMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Street;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 街道表
- *
- * @author xxm
- * @date 2022-12-24
- */
-@Mapper
-public interface StreetMapper extends BaseMapper {
-
-}
\ No newline at end of file
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageManager.java
deleted file mode 100644
index 722026955..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Village;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * 村庄/社区
- *
- * @author xxm
- * @date 2023/2/3
- */
-@Repository
-@RequiredArgsConstructor
-public class VillageManager extends BaseManager {
-
-    public List findAllByStreetCode(String streetCode) {
-        return findAllByField(Village::getStreetCode, streetCode);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageMapper.java
deleted file mode 100644
index 9f529e2ab..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/dao/VillageMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.region.dao;
-
-import cn.bootx.baseapi.core.region.entity.Village;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 村庄/社区
- *
- * @author xxm
- * @date 2023/2/3
- */
-@Mapper
-public interface VillageMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/convert/QuerySqlConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/convert/QuerySqlConvert.java
deleted file mode 100644
index 9721c40e5..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/convert/QuerySqlConvert.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package cn.bootx.baseapi.core.sql.convert;
-
-import cn.bootx.baseapi.core.sql.entity.QuerySql;
-import cn.bootx.baseapi.dto.sql.QuerySqlDto;
-import cn.bootx.baseapi.param.sql.QuerySqlParam;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-/**
- * @author xxm
- * @date 2023/3/13
- */
-@Mapper
-public interface QuerySqlConvert {
-
-    QuerySqlConvert CONVERT = Mappers.getMapper(QuerySqlConvert.class);
-
-    QuerySqlDto convert(QuerySql in);
-
-    QuerySql convert(QuerySqlParam in);
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlManager.java
deleted file mode 100644
index 885d2e072..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlManager.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cn.bootx.baseapi.core.sql.dao;
-
-import cn.bootx.baseapi.core.sql.entity.QuerySql;
-import cn.bootx.common.mybatisplus.impl.BaseManager;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
-
-/**
- * @author xxm
- * @date 2023/3/9
- */
-@Slf4j
-@Repository
-public class QuerySqlManager extends BaseManager {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlMapper.java
deleted file mode 100644
index 4b07d9c2a..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/dao/QuerySqlMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.bootx.baseapi.core.sql.dao;
-
-import cn.bootx.baseapi.core.sql.entity.QuerySql;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author xxm
- * @date 2023/3/9
- */
-@Mapper
-public interface QuerySqlMapper extends BaseMapper {
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/QuerySql.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/QuerySql.java
deleted file mode 100644
index c49750edb..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/QuerySql.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package cn.bootx.baseapi.core.sql.entity;
-
-import cn.bootx.baseapi.core.sql.convert.QuerySqlConvert;
-import cn.bootx.baseapi.dto.sql.QuerySqlDto;
-import cn.bootx.common.core.annotation.BigField;
-import cn.bootx.common.core.annotation.actable.Column;
-import cn.bootx.common.core.annotation.actable.Table;
-import cn.bootx.common.core.code.actable.MySqlFieldType;
-import cn.bootx.common.core.function.EntityBaseFunction;
-import cn.bootx.common.mybatisplus.base.MpBaseEntity;
-import cn.bootx.common.mybatisplus.handler.JacksonRawTypeHandler;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.util.List;
-
-/**
- * SQL查询语句
- *
- * @author xxm
- * @date 2023/3/9
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@Table(comment = "SQL查询语句")
-@TableName(value = "base_query_sql", autoResultMap = true)
-public class QuerySql extends MpBaseEntity implements EntityBaseFunction {
-
-    /** 数据源ID */
-    @Column(comment = "数据源ID")
-    private Long databaseId;
-
-    /** 名称 */
-    @Column(comment = "名称")
-    private String name;
-
-    /** 是否集合 */
-    @Column(comment = "是否集合")
-    private Boolean isList;
-
-    /** sql语句 */
-    @BigField
-    @Column(comment = "sql语句", type = MySqlFieldType.TEXT)
-    private String sql;
-
-    /** SQL查询参数 */
-    @BigField
-    @Column(comment = "SQL查询参数", type = MySqlFieldType.LONGTEXT)
-    @TableField(typeHandler = JacksonRawTypeHandler.class)
-    private List params;
-
-    /** SQL查询结果字段 */
-    @BigField
-    @Column(comment = "SQL查询结果字段", type = MySqlFieldType.LONGTEXT)
-    @TableField(typeHandler = JacksonRawTypeHandler.class)
-    private List fields;
-
-    /**
-     * 转换
-     */
-    @Override
-    public QuerySqlDto toDto() {
-        return QuerySqlConvert.CONVERT.convert(this);
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlParam.java
deleted file mode 100644
index d77902fb8..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlParam.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.baseapi.core.sql.entity;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * SQL查询参数
- */
-@Getter
-@Setter
-public class SqlParam {
-
-    /**
-     * 参数名称
-     */
-    private String name;
-
-    /**
-     * 类型
-     *
-     * @see cn.bootx.baseapi.code.QuerySqlCode
-     */
-    private String type;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/service/QuerySqlService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/service/QuerySqlService.java
deleted file mode 100644
index 32e2dedbd..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/service/QuerySqlService.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package cn.bootx.baseapi.core.sql.service;
-
-import cn.bootx.baseapi.code.QuerySqlCode;
-import cn.bootx.baseapi.core.dynamicsource.dao.DynamicDataSourceManager;
-import cn.bootx.baseapi.core.dynamicsource.entity.DynamicDataSource;
-import cn.bootx.baseapi.core.dynamicsource.service.DynamicDataSourceService;
-import cn.bootx.baseapi.core.sql.dao.QuerySqlManager;
-import cn.bootx.baseapi.core.sql.entity.QuerySql;
-import cn.bootx.baseapi.core.sql.entity.SqlParam;
-import cn.bootx.baseapi.param.sql.QueryFieldParam;
-import cn.bootx.common.core.exception.DataNotExistException;
-import cn.bootx.common.core.function.CollectorsFunction;
-import cn.bootx.starter.auth.util.SecurityUtil;
-import cn.hutool.core.util.ArrayUtil;
-import cn.hutool.db.Entity;
-import cn.hutool.db.handler.EntityHandler;
-import cn.hutool.db.handler.EntityListHandler;
-import cn.hutool.db.sql.SqlExecutor;
-import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.parsing.GenericTokenParser;
-import org.springframework.stereotype.Service;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * @author xxm
- * @date 2023/3/9
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class QuerySqlService {
-
-    private final DynamicRoutingDataSource dynamicRoutingDataSource;
-
-    private final DynamicDataSourceManager dynamicDataSourceManager;
-
-    private final QuerySqlManager querySqlManager;
-
-    private final DynamicDataSourceService dynamicDataSourceService;
-
-    /**
-     * 添加查询语句
-     */
-    public void add() {
-
-    }
-
-    /**
-     * 修改
-     */
-
-    /**
-     * 分页查询
-     */
-
-    /**
-     * 执行SQL查询
-     */
-    @SneakyThrows
-    public Object querySql(Map map) {
-        // 获取SQL语句, 将 #{} 和 ${} 元素进行解析和替换
-        String sql = "select * from iam_client where system=#{system}";
-        QuerySql querySql = new QuerySql().setDatabaseId(1633376006887067648L).setIsList(true).setSql(sql);
-        SqlAndParam sqlAndParam = this.sqlParamParser(querySql, map);
-
-        // 对SQL语句进行解析
-        DataSource dataSource = this.getDataSource(querySql.getDatabaseId());
-        Connection connection = dataSource.getConnection();
-        if (Objects.equals(querySql.getIsList(), true)) {
-            return SqlExecutor.query(connection, sqlAndParam.sql, new EntityListHandler(),
-                    ArrayUtil.toArray(sqlAndParam.param, Object.class));
-        }
-        else {
-            return SqlExecutor.query(connection, sqlAndParam.sql, new EntityHandler(),
-                    ArrayUtil.toArray(sqlAndParam.param, Object.class));
-        }
-    }
-
-    /**
-     * 解析SQL
-     */
-    private SqlAndParam sqlParamParser(QuerySql querySql, Map map) {
-        String sql = querySql.getSql();
-        Map sqlParamMap = Optional.ofNullable(querySql.getParams())
-            .orElse(new ArrayList<>(0))
-            .stream()
-            .collect(Collectors.toMap(SqlParam::getName, Function.identity(), CollectorsFunction::retainLatest));
-        // # 参数处理
-        GenericTokenParser replaceTokenParser = new GenericTokenParser("#{", "}", content -> {
-            // 获取类型, 看是否是获取用户信息一类的
-            SqlParam sqlParam = sqlParamMap.get(content);
-            if (Objects.nonNull(sqlParam) && Objects.equals(sqlParam.getType(), QuerySqlCode.TYPE_USER_ID)) {
-                return String.valueOf(SecurityUtil.getUserId());
-            }
-            return map.get(content).toString();
-        });
-        sql = replaceTokenParser.parse(sql);
-
-        // $占位参数处理
-        List list = new ArrayList<>();
-        GenericTokenParser preparedTokenParser = new GenericTokenParser("${", "}", content -> {
-            Object param = map.get(content);
-            list.add(param);
-            return "?";
-        });
-        sql = preparedTokenParser.parse(sql);
-        return new SqlAndParam(sql, list);
-    }
-
-    /**
-     * 通过SQL查出结果字段
-     */
-    @SneakyThrows
-    public List queryFieldBySql(QueryFieldParam param) {
-        String sql = "select * from iam_client";
-        DataSource dataSource = this.getDataSource(param.getDatabaseId());
-        Connection connection = dataSource.getConnection();
-        Entity query = SqlExecutor.query(connection, sql, new EntityHandler());
-        System.out.println(query);
-        return new ArrayList<>(query.keySet());
-    }
-
-    /**
-     * 获取数据源
-     */
-    private DataSource getDataSource(Long id) {
-        DynamicDataSource dataSource = dynamicDataSourceManager.findById(id).orElseThrow(DataNotExistException::new);
-        DataSource source = dynamicRoutingDataSource.getDataSource(dataSource.getCode());
-        if (Objects.isNull(source)) {
-            dynamicDataSourceService.addDynamicDataSource(dataSource);
-            source = dynamicRoutingDataSource.getDataSource(dataSource.getCode());
-        }
-        return source;
-    }
-
-    /**
-     * 解析后的SQl语句和参数
-     */
-    @Getter
-    @AllArgsConstructor
-    private static class SqlAndParam {
-
-        /** 解析后的SQL语句 */
-        private final String sql;
-
-        /** 解析后的参数 */
-        private List param;
-
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/app/AppVersionDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/app/AppVersionDto.java
deleted file mode 100644
index ab3790eec..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/app/AppVersionDto.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cn.bootx.baseapi.dto.app;
-
-import cn.bootx.common.core.rest.dto.BaseDto;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-
-/**
- * @author xxm
- * @date 2021/8/9
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@Accessors(chain = true)
-@Schema(title = "app版本")
-public class AppVersionDto extends BaseDto implements Serializable {
-
-    private static final long serialVersionUID = -7287549085443499458L;
-
-    /** app版本 */
-    private String appVersion;
-
-    /** 下载地址 */
-    private String url;
-
-    /** 密码 */
-    private String password;
-
-    /** 包名 */
-    private String bundleId;
-
-    /** 说明 */
-    private String description;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/captcha/CaptchaDataResult.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/captcha/CaptchaDataResult.java
deleted file mode 100644
index 6a4cabb26..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/captcha/CaptchaDataResult.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.bootx.baseapi.dto.captcha;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * 验证码数据
- *
- * @author xxm
- * @date 2021/8/2
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "验证码数据")
-public class CaptchaDataResult {
-
-    @Schema(description = "验证码标示")
-    private String captchaKey;
-
-    @Schema(description = "验证码base64数据")
-    private String captchaData;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictAlreadyExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictAlreadyExistedException.java
deleted file mode 100644
index d42f0a06f..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictAlreadyExistedException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.DICTIONARY_ALREADY_EXISTED;
-
-/**
- * @author xxm
- * @date 2020/4/10 15:14
- */
-public class DictAlreadyExistedException extends BizException implements Serializable {
-
-    public DictAlreadyExistedException() {
-        super(DICTIONARY_ALREADY_EXISTED, "字典已经存在.");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictChildItemExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictChildItemExistedException.java
deleted file mode 100644
index 592441c44..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictChildItemExistedException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.CHILD_ITEM_EXISTED;
-
-/**
- * @author xxm
- * @date 2020/4/16 22:08
- */
-public class DictChildItemExistedException extends BizException implements Serializable {
-
-    private static final long serialVersionUID = -3964173905076738575L;
-
-    public DictChildItemExistedException() {
-        super(CHILD_ITEM_EXISTED, "存在字典子项,您无法将其删除。");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyExistedException.java
deleted file mode 100644
index e9aeeec7f..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyExistedException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.DICTIONARY_ITEM_ALREADY_EXISTED;
-
-/**
- * @author xxm
- * @date 2020/4/21 11:53
- */
-public class DictItemAlreadyExistedException extends BizException implements Serializable {
-
-    public DictItemAlreadyExistedException() {
-        super(DICTIONARY_ITEM_ALREADY_EXISTED, "字典项目已存在.");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyUsedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyUsedException.java
deleted file mode 100644
index 2e307553e..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemAlreadyUsedException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.DICTIONARY_ITEM_ALREADY_USED;
-
-/**
- * @author xxm
- * @date 2020/4/21 11:54
- */
-public class DictItemAlreadyUsedException extends BizException implements Serializable {
-
-    public DictItemAlreadyUsedException() {
-        super(DICTIONARY_ITEM_ALREADY_USED, "词典项目已被使用.");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemNotExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemNotExistedException.java
deleted file mode 100644
index 6b6dc38ce..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictItemNotExistedException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.DICTIONARY_ITEM_NOT_EXISTED;
-
-/**
- * @author xxm
- * @date 2020/4/21 11:54
- */
-public class DictItemNotExistedException extends BizException implements Serializable {
-
-    public DictItemNotExistedException() {
-        super(DICTIONARY_ITEM_NOT_EXISTED, "字典项不存在.");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictNotExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictNotExistedException.java
deleted file mode 100644
index 7259b76dd..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/exception/dict/DictNotExistedException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.bootx.baseapi.exception.dict;
-
-import cn.bootx.common.core.exception.BizException;
-
-import java.io.Serializable;
-
-import static cn.bootx.baseapi.code.BspErrorCodes.DICTIONARY_NOT_EXISTED;
-
-/**
- * @author xxm
- * @date 2020/4/21 11:53
- */
-public class DictNotExistedException extends BizException implements Serializable {
-
-    public DictNotExistedException() {
-        super(DICTIONARY_NOT_EXISTED, "字典不存在.");
-    }
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/app/AppVersionParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/app/AppVersionParam.java
deleted file mode 100644
index c84613fc4..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/app/AppVersionParam.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.bootx.baseapi.param.app;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * app版本参数
- *
- * @author xxm
- * @date 2021/8/9
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "app版本参数")
-public class AppVersionParam {
-
-    private Long id;
-
-    /** app版本 */
-    private String appVersion;
-
-    /** 下载地址 */
-    private String url;
-
-    /** 密码 */
-    private String password;
-
-    /** 包名 */
-    private String bundleId;
-
-    /** 说明 */
-    private String description;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryItemParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryItemParam.java
deleted file mode 100644
index c5969a37c..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryItemParam.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.bootx.baseapi.param.dict;
-
-import cn.bootx.common.core.validation.ValidationGroup.add;
-import cn.bootx.common.core.validation.ValidationGroup.edit;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Null;
-import java.io.Serializable;
-
-/**
- * 字典项参数
- *
- * @author xxm
- * @date 2021/8/4
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "字典项参数")
-public class DictionaryItemParam implements Serializable {
-
-    private static final long serialVersionUID = -6847496213782805488L;
-
-    @Null(message = "Id需要为空", groups = add.class)
-    @NotNull(message = "Id不可为空", groups = edit.class)
-    @Schema(description = "主键")
-    private Long id;
-
-    @NotNull(message = "字典ID不可为空")
-    @Schema(description = "字典ID")
-    private Long dictId;
-
-    @Schema(description = "字典编码")
-    private String dictCode;
-
-    @NotEmpty(message = "字典项编码不可为空", groups = add.class)
-    @Schema(description = "字典项编码")
-    private String code;
-
-    @NotEmpty(message = "字典项编码不可为空", groups = add.class)
-    @Schema(description = "名称")
-    private String name;
-
-    @NotNull(message = "启用状态不可为空", groups = add.class)
-    @Schema(description = "启用状态")
-    private Boolean enable;
-
-    @Schema(description = "字典项排序")
-    private Double sortNo;
-
-    @Schema(description = "备注")
-    private String remark;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryParam.java
deleted file mode 100644
index cc52335bb..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dict/DictionaryParam.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package cn.bootx.baseapi.param.dict;
-
-import cn.bootx.common.core.validation.ValidationGroup.add;
-import cn.bootx.common.core.validation.ValidationGroup.edit;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Null;
-import java.io.Serializable;
-
-/**
- * @author xxm
- * @date 2020/4/10 14:46
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "数据字典目录")
-public class DictionaryParam implements Serializable {
-
-    private static final long serialVersionUID = 8185789462442511856L;
-
-    @Null(message = "Id需要为空", groups = add.class)
-    @NotNull(message = "Id不可为空", groups = edit.class)
-    @Schema(description = "主键")
-    private Long id;
-
-    @NotEmpty(message = "编码不可以为空", groups = add.class)
-    @Schema(description = "编码")
-    private String code;
-
-    @NotEmpty(message = "编码不可以为空", groups = add.class)
-    @Schema(description = "名称")
-    private String name;
-
-    @NotNull(message = "启用状态不可为空", groups = add.class)
-    @Schema(description = "启用状态")
-    private Boolean enable;
-
-    @Schema(description = "分类标签")
-    private String groupTag;
-
-    @Schema(description = "描述")
-    private String remark;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QueryFieldParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QueryFieldParam.java
deleted file mode 100644
index a942a1b8e..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QueryFieldParam.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package cn.bootx.baseapi.param.sql;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * @author xxm
- * @date 2023/3/9
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "通过SQL查询结果字段请求参数")
-public class QueryFieldParam {
-
-    @Schema(description = "数据源Id")
-    private Long databaseId;
-
-    @Schema(description = "SQL语句")
-    private String sql;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QuerySqlParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QuerySqlParam.java
deleted file mode 100644
index 3309f3c80..000000000
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/sql/QuerySqlParam.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package cn.bootx.baseapi.param.sql;
-
-import cn.bootx.baseapi.core.sql.entity.SqlField;
-import cn.bootx.baseapi.core.sql.entity.SqlParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.util.List;
-
-/**
- * 查询语句参数类
- *
- * @author xxm
- * @date 2023/3/13
- */
-@Data
-@Accessors(chain = true)
-@Schema(title = "查询语句参数类")
-public class QuerySqlParam {
-
-    @Schema(description = "主键")
-    private Long id;
-
-    @Schema(description = "数据源ID")
-    private Long databaseId;
-
-    @Schema(description = "名称")
-    private String name;
-
-    @Schema(description = "sql语句")
-    private String sql;
-
-    @Schema(description = "是否集合")
-    private Boolean isList;
-
-    @Schema(description = "SQL查询参数")
-    private List params;
-
-    @Schema(description = "SQL查询结果字段")
-    private List fields;
-
-}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/BaseApiApplication.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/BaseApiApplication.java
similarity index 84%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/BaseApiApplication.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/BaseApiApplication.java
index 726edafb1..8a833a03f 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/BaseApiApplication.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/BaseApiApplication.java
@@ -1,4 +1,4 @@
-package cn.bootx.baseapi;
+package cn.bootx.platform.baseapi;
 
 import org.apache.ibatis.annotations.Mapper;
 import org.mybatis.spring.annotation.MapperScan;
@@ -8,7 +8,7 @@
  * 基础功能
  *
  * @author xxm
- * @date 2021/8/4
+ * @since 2021/8/4
  */
 @ComponentScan
 @MapperScan(annotationClass = Mapper.class)
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/BspErrorCodes.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/BspErrorCodes.java
similarity index 98%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/BspErrorCodes.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/BspErrorCodes.java
index 02363041e..b0e4b1c61 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/BspErrorCodes.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/BspErrorCodes.java
@@ -1,4 +1,4 @@
-package cn.bootx.baseapi.code;
+package cn.bootx.platform.baseapi.code;
 
 /**
  * 错误码定义类 错误码范围:21000-21999
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/CachingCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/CachingCode.java
new file mode 100644
index 000000000..d16cac23f
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/CachingCode.java
@@ -0,0 +1,17 @@
+package cn.bootx.platform.baseapi.code;
+
+/**
+ * 缓存
+ *
+ * @author xxm
+ * @since 2022/5/1
+ */
+public interface CachingCode {
+
+    /** 参数缓存 */
+    String SYSTEM_PARAM = "base:system:param";
+
+    /** 行政区域缓存 */
+    String CHINA_REGION = "base:china:region";
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/ChinaRegionCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/ChinaRegionCode.java
similarity index 89%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/ChinaRegionCode.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/ChinaRegionCode.java
index 62300b00e..f7097a19d 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/ChinaRegionCode.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/ChinaRegionCode.java
@@ -1,6 +1,6 @@
-package cn.bootx.baseapi.code;
+package cn.bootx.platform.baseapi.code;
 
-import cn.bootx.common.core.exception.BizException;
+import cn.bootx.platform.common.core.exception.BizException;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -10,7 +10,7 @@
  * 中国行政区划
  *
  * @author xxm
- * @date 2023/2/7
+ * @since 2023/2/7
  */
 @Getter
 @AllArgsConstructor
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/GeneralTemplateCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/GeneralTemplateCode.java
new file mode 100644
index 000000000..866ef5a28
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/GeneralTemplateCode.java
@@ -0,0 +1,17 @@
+package cn.bootx.platform.baseapi.code;
+
+/**
+ * 通用模板变量
+ * @author xxm
+ * @since 2023/8/12
+ */
+public interface GeneralTemplateCode {
+
+    /** 模板类型 */
+    String USE_TYPE_IMPORT = "import";
+    String USE_TYPE_EXPORT = "export";
+
+    /** 启用状态 */
+    String STATE_ENABLE = "enable";
+    String STATE_DISABLE = "disable";
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/QuerySqlCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/QuerySqlCode.java
similarity index 81%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/QuerySqlCode.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/QuerySqlCode.java
index 3f0b0f684..09200c527 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/code/QuerySqlCode.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/QuerySqlCode.java
@@ -1,10 +1,10 @@
-package cn.bootx.baseapi.code;
+package cn.bootx.platform.baseapi.code;
 
 /**
  * 查询SQL
  *
  * @author xxm
- * @date 2023/3/12
+ * @since 2023/3/12
  */
 public interface QuerySqlCode {
 
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/WordFilterCode.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/WordFilterCode.java
new file mode 100644
index 000000000..fae961eef
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/code/WordFilterCode.java
@@ -0,0 +1,13 @@
+package cn.bootx.platform.baseapi.code;
+
+/**
+ * 敏感词过滤器常量
+ * @author xxm
+ * @since 2023/8/9
+ */
+public interface WordFilterCode {
+    /** 白名单名词 */
+    String IS_WHITE_WORD = "isWhiteWord";
+    /** 是否结束 */
+    String IS_END = "isEnd";
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/BaseApiController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/BaseApiController.java
new file mode 100644
index 000000000..698fa76a9
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/BaseApiController.java
@@ -0,0 +1,34 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 系统基础接口
+ * @author xxm
+ * @since 2023/10/14
+ */
+@Tag(name = "系统基础接口")
+@RestController
+@RequiredArgsConstructor
+public class BaseApiController {
+
+    @IgnoreAuth
+    @Operation(summary = "回声测试")
+    @GetMapping("/echo")
+    public String echo(String msg){
+        return "echo: "+msg;
+    }
+
+    @IgnoreAuth(login = true)
+    @Operation(summary = "回声测试(必须要进行登录)")
+    @GetMapping("/auth/echo")
+    public String authEcho(String msg){
+        return "echo:  "+msg;
+    }
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/CaptchaController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/CaptchaController.java
new file mode 100644
index 000000000..d1e892022
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/CaptchaController.java
@@ -0,0 +1,36 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.dto.captcha.CaptchaDataResult;
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 验证码服务
+ *
+ * @author xxm
+ * @since 2021/8/2
+ */
+@Tag(name = "验证码服务")
+@RestController
+@RequestMapping("/captcha")
+@RequiredArgsConstructor
+public class CaptchaController {
+
+    private final CaptchaService captchaService;
+
+    @IgnoreAuth
+    @Operation(summary = "获取图片验证码")
+    @PostMapping("/imgCaptcha")
+    public ResResult imgCaptcha() {
+        return Res.ok(captchaService.imgCaptcha());
+    }
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/ChinaRegionController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaRegionController.java
similarity index 84%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/ChinaRegionController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaRegionController.java
index e36fac626..7e482e664 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/ChinaRegionController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaRegionController.java
@@ -1,9 +1,9 @@
-package cn.bootx.baseapi.controller;
+package cn.bootx.platform.baseapi.controller;
 
-import cn.bootx.baseapi.core.region.service.ChinaRegionService;
-import cn.bootx.baseapi.dto.region.RegionDto;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
+import cn.bootx.platform.baseapi.dto.region.RegionDto;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.baseapi.core.region.service.ChinaRegionService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -17,7 +17,7 @@
  * 中国行政区划
  *
  * @author xxm
- * @date 2022/12/24
+ * @since 2022/12/24
  */
 @Tag(name = "中国行政区划")
 @RestController
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaWordController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaWordController.java
new file mode 100644
index 000000000..87390d545
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/ChinaWordController.java
@@ -0,0 +1,106 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.core.chinaword.service.ChinaWordService;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordDto;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordVerifyResult;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordParam;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordVerifyParam;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.hutool.core.io.IoUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.util.List;
+
+/**
+ * 敏感词
+ * @author xxm
+ * @since 2023-08-09
+ */
+@Tag(name ="敏感词管理")
+@RestController
+@RequestMapping("/chinaword")
+@RequiredArgsConstructor
+public class ChinaWordController {
+    private final ChinaWordService chinaWordService;
+
+    @Operation( summary = "添加")
+    @PostMapping(value = "/add")
+    public ResResult add(@RequestBody ChinaWordParam param){
+        chinaWordService.add(param);
+        return Res.ok();
+    }
+
+    @Operation( summary = "修改")
+    @PostMapping(value = "/update")
+    public ResResult update(@RequestBody ChinaWordParam param){
+        chinaWordService.update(param);
+        return Res.ok();
+    }
+
+    @Operation( summary = "删除")
+    @DeleteMapping(value = "/delete")
+    public ResResult delete(Long id){
+        chinaWordService.delete(id);
+        return Res.ok();
+    }
+
+    @Operation( summary = "通过ID查询")
+    @GetMapping(value = "/findById")
+    public ResResult findById(Long id){
+        return Res.ok(chinaWordService.findById(id));
+    }
+
+    @Operation( summary = "刷新缓存")
+    @PostMapping(value = "/refresh")
+    public ResResult refresh(){
+        chinaWordService.refresh();
+        return Res.ok();
+    }
+
+    @Operation( summary = "测试敏感词效果")
+    @PostMapping(value = "/verify")
+    public ResResult verify(@RequestBody ChinaWordVerifyParam param){
+        return Res.ok(chinaWordService.verify(param.getText(),param.getSkip(),param.getSymbol()));
+    }
+
+    @Operation( summary = "查询所有")
+    @GetMapping(value = "/findAll")
+    public ResResult> findAll(){
+        return Res.ok(chinaWordService.findAll());
+    }
+
+    @Operation( summary = "分页查询")
+    @GetMapping(value = "/page")
+    public ResResult> page(PageParam pageParam, ChinaWordParam query){
+        return Res.ok(chinaWordService.page(pageParam,query));
+    }
+
+    @Operation(summary = "批量导入")
+    @PostMapping("/importBatch")
+    public ResResult local(MultipartFile file, String type) throws IOException {
+        chinaWordService.importBatch(file, type);
+        return Res.ok();
+    }
+
+    @Operation(summary = "获取模板")
+    @GetMapping("/getTemplate")
+    public ResponseEntity getTemplate() throws IOException {
+        InputStream is = Files.newInputStream(new File("D:/data/xxxx.xlsx").toPath());
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+        return new ResponseEntity<>(IoUtil.readBytes(is), headers, HttpStatus.OK);
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DataResultController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DataResultController.java
new file mode 100644
index 000000000..da9993b29
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DataResultController.java
@@ -0,0 +1,90 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.core.dataresult.entity.DataResultSql;
+import cn.bootx.platform.baseapi.core.dataresult.service.DataResultSqlService;
+import cn.bootx.platform.baseapi.core.dataresult.service.SqlQueryService;
+import cn.bootx.platform.baseapi.dto.dataresult.SqlQueryResult;
+import cn.bootx.platform.baseapi.param.dataresult.SqlQueryParam;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.hutool.db.PageResult;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * SQL查询
+ *
+ * @author xxm
+ * @since 2023/3/9
+ */
+@Tag(name = "SQL查询")
+@RestController
+@RequestMapping("/data/result")
+@RequiredArgsConstructor
+public class DataResultController {
+
+    private final DataResultSqlService dataResultSqlService;
+    private final SqlQueryService sqlQueryService;
+
+
+    @Operation(summary = "分页查询")
+    @GetMapping("/page")
+    public ResResult> page(){
+        return Res.ok(dataResultSqlService.page());
+    }
+
+    @Operation(summary = "新建")
+    @PostMapping("/add")
+    public ResResult add(){
+        dataResultSqlService.add();
+        return Res.ok();
+    }
+
+    @Operation(summary = "修改")
+    @PostMapping("/update")
+    public ResResult update(){
+        dataResultSqlService.update();
+        return Res.ok();
+    }
+
+    @Operation(summary = "测试SQL解析和执行")
+    @PostMapping("/test")
+    public ResResult test(@RequestBody Map map) {
+        dataResultSqlService.querySql(map);
+        return Res.ok();
+    }
+
+//    @Operation(summary = "通过SQL查出结果字段")
+//    @PostMapping("/queryFieldBySql")
+//    public ResResult> queryFieldBySql(@RequestBody SqlQueryParam param) {
+//        return Res.ok(dataResultService.queryFieldBySql(param));
+//    }
+
+    @Operation(summary = "执行SQL查询语句")
+    @PostMapping("/querySql")
+    public ResResult querySql(@RequestBody SqlQueryParam param, PageParam pageParam){
+        return Res.ok(sqlQueryService.query(param,pageParam));
+    }
+
+    @SneakyThrows
+    @Operation(summary = "导出SQL查询的结果")
+    @PostMapping("/exportQueryResult")
+    public ResponseEntity exportQueryResult(@RequestBody SqlQueryParam param, @ParameterObject PageParam pageParam){
+        byte[] bytes = sqlQueryService.exportQueryResult(param,pageParam);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+        return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
+    }
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryController.java
new file mode 100644
index 000000000..b394edd38
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryController.java
@@ -0,0 +1,84 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.dto.dict.DictionaryDto;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ValidationUtil;
+import cn.bootx.platform.common.core.validation.ValidationGroup;
+import cn.bootx.platform.baseapi.core.dict.service.DictionaryService;
+import cn.bootx.platform.baseapi.param.dict.DictionaryParam;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 字典
+ *
+ * @author xxm
+ * @since 2021/8/4
+ */
+@Tag(name = "字典")
+@RestController
+@RequestMapping("/dict")
+@RequiredArgsConstructor
+public class DictionaryController {
+
+    private final DictionaryService dictionaryService;
+
+    @Operation(summary = "添加")
+    @PostMapping("/add")
+    public ResResult add(@RequestBody DictionaryParam param) {
+        ValidationUtil.validateParam(param, ValidationGroup.add.class);
+        return Res.ok(dictionaryService.add(param));
+    }
+
+    @Operation(summary = "根据id删除")
+    @DeleteMapping("/delete")
+    public ResResult delete(Long id) {
+        dictionaryService.delete(id);
+        return Res.ok();
+    }
+
+    @Operation(summary = "更新")
+    @PostMapping("/update")
+    public ResResult update(@RequestBody DictionaryParam param) {
+        ValidationUtil.validateParam(param, ValidationGroup.edit.class);
+        return Res.ok(dictionaryService.update(param));
+    }
+
+    @Operation(summary = "根据id获取")
+    @GetMapping("/findById")
+    public ResResult findById(Long id) {
+        return Res.ok(dictionaryService.findById(id));
+    }
+
+    @Operation(summary = "查询全部")
+    @GetMapping("/findAll")
+    public ResResult> findAll() {
+        return Res.ok(dictionaryService.findAll());
+    }
+
+    @Operation(summary = "分页")
+    @GetMapping("/page")
+    public ResResult> page(PageParam pageParam, DictionaryParam param) {
+        return Res.ok(dictionaryService.page(pageParam, param));
+    }
+
+    @Operation(summary = "编码是否被使用")
+    @GetMapping("/existsByCode")
+    public ResResult existsByCode(String code) {
+        return Res.ok(dictionaryService.existsByCode(code));
+    }
+
+    @Operation(summary = "编码是否被使用(不包含自己)")
+    @GetMapping("/existsByCodeNotId")
+    public ResResult existsByCode(String code, Long id) {
+        return Res.ok(dictionaryService.existsByCode(code, id));
+    }
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryItemController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryItemController.java
similarity index 81%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryItemController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryItemController.java
index 69a903dc9..8d4358f10 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DictionaryItemController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DictionaryItemController.java
@@ -1,16 +1,16 @@
-package cn.bootx.baseapi.controller;
+package cn.bootx.platform.baseapi.controller;
 
-import cn.bootx.baseapi.core.dict.service.DictionaryItemService;
-import cn.bootx.baseapi.dto.dict.DictionaryItemDto;
-import cn.bootx.baseapi.dto.dict.DictionaryItemSimpleDto;
-import cn.bootx.baseapi.param.dict.DictionaryItemParam;
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ValidationUtil;
-import cn.bootx.common.core.validation.ValidationGroup;
+import cn.bootx.platform.baseapi.dto.dict.DictionaryItemDto;
+import cn.bootx.platform.baseapi.dto.dict.DictionaryItemSimpleDto;
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ValidationUtil;
+import cn.bootx.platform.common.core.validation.ValidationGroup;
+import cn.bootx.platform.baseapi.core.dict.service.DictionaryItemService;
+import cn.bootx.platform.baseapi.param.dict.DictionaryItemParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -21,7 +21,7 @@
 
 /**
  * @author xxm
- * @date 2020/4/18 19:03
+ * @since 2020/4/18 19:03
  */
 @Tag(name = "字典项")
 @RestController
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicDataSourceController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicDataSourceController.java
similarity index 84%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicDataSourceController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicDataSourceController.java
index ad3bf4c83..76212c556 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicDataSourceController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicDataSourceController.java
@@ -1,13 +1,13 @@
-package cn.bootx.baseapi.controller;
-
-import cn.bootx.baseapi.core.dynamicsource.service.DynamicDataSourceService;
-import cn.bootx.baseapi.dto.dynamicsource.DynamicDataSourceDto;
-import cn.bootx.baseapi.param.dynamicsource.DynamicDataSourceParam;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.dto.KeyValue;
-import cn.bootx.common.core.rest.param.PageParam;
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.dto.dynamicsource.DynamicDataSourceDto;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.dto.KeyValue;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.baseapi.core.dynamicsource.service.DynamicDataSourceService;
+import cn.bootx.platform.baseapi.param.dynamicsource.DynamicDataSourceParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -19,7 +19,7 @@
  * 动态数据源管理
  *
  * @author xxm
- * @date 2022-09-24
+ * @since 2022-09-24
  */
 @Tag(name = "动态数据源管理")
 @RestController
@@ -46,7 +46,7 @@ public ResResult update(@RequestBody DynamicDataSourceParam param) {
     @Operation(summary = "分页查询")
     @GetMapping(value = "/page")
     public ResResult> page(PageParam pageParam,
-            DynamicDataSourceParam dynamicDataSourceParam) {
+                                                            DynamicDataSourceParam dynamicDataSourceParam) {
         return Res.ok(dynamicDataSourceService.page(pageParam, dynamicDataSourceParam));
     }
 
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormController.java
similarity index 81%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormController.java
index b8f4bf85e..a5e0306d6 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormController.java
@@ -1,12 +1,12 @@
-package cn.bootx.baseapi.controller;
+package cn.bootx.platform.baseapi.controller;
 
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.baseapi.core.dynamicform.service.DynamicFormService;
-import cn.bootx.baseapi.dto.dynamicform.DynamicFormDto;
-import cn.bootx.baseapi.param.dynamicform.DynamicFormParam;
+import cn.bootx.platform.baseapi.dto.dynamicform.DynamicFormDto;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.baseapi.core.dynamicform.service.DynamicFormService;
+import cn.bootx.platform.baseapi.param.dynamicform.DynamicFormParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -18,7 +18,7 @@
  * 动态表单
  *
  * @author xxm
- * @date 2022-07-28
+ * @since 2022-07-28
  */
 @Tag(name = "动态表单")
 @RestController
@@ -79,4 +79,4 @@ public ResResult existsByCode(String code, Long id) {
         return Res.ok(dynamicFormService.existsByCode(code, id));
     }
 
-}
\ No newline at end of file
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormDataController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormDataController.java
similarity index 75%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormDataController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormDataController.java
index f5b7491df..cbeb9b663 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/DynamicFormDataController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/DynamicFormDataController.java
@@ -1,6 +1,6 @@
-package cn.bootx.baseapi.controller;
+package cn.bootx.platform.baseapi.controller;
 
-import cn.bootx.baseapi.core.dynamicform.service.DynamicFormDataService;
+import cn.bootx.platform.baseapi.core.dynamicform.service.DynamicFormDataService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -8,7 +8,7 @@
 
 /**
  * @author xxm
- * @date 2022/8/13
+ * @since 2022/8/13
  */
 @Tag(name = "动态表单数据")
 @RestController
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/GeneralTemplateController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/GeneralTemplateController.java
new file mode 100644
index 000000000..dc0d2140f
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/GeneralTemplateController.java
@@ -0,0 +1,94 @@
+package cn.bootx.platform.baseapi.controller;
+
+import cn.bootx.platform.baseapi.core.template.service.GeneralTemplateService;
+import cn.bootx.platform.baseapi.dto.template.GeneralTemplateDto;
+import cn.bootx.platform.baseapi.param.template.GeneralTemplateParam;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 通用模板管理
+ * @author xxm
+ * @since 2023-08-12
+ */
+@Tag(name ="通用模板管理")
+@RestController
+@RequestMapping("/general/template")
+@RequiredArgsConstructor
+public class GeneralTemplateController {
+    private final GeneralTemplateService generalTemplateService;
+
+    @Operation( summary = "添加")
+    @PostMapping(value = "/add")
+    public ResResult add(@RequestBody GeneralTemplateParam param){
+        generalTemplateService.add(param);
+        return Res.ok();
+    }
+
+    @Operation( summary = "修改")
+    @PostMapping(value = "/update")
+    public ResResult update(@RequestBody GeneralTemplateParam param){
+        generalTemplateService.update(param);
+        return Res.ok();
+    }
+
+    @Operation( summary = "删除")
+    @DeleteMapping(value = "/delete")
+    public ResResult delete(Long id){
+        generalTemplateService.delete(id);
+        return Res.ok();
+    }
+
+    @Operation(summary = "批量删除")
+    @DeleteMapping("/deleteBatch")
+    public ResResult deleteBatch(@RequestBody List ids) {
+        generalTemplateService.deleteBatch(ids);
+        return Res.ok();
+    }
+
+    @Operation( summary = "通过ID查询")
+    @GetMapping(value = "/findById")
+    public ResResult findById(Long id){
+        return Res.ok(generalTemplateService.findById(id));
+    }
+
+    @Operation( summary = "通过Code查询")
+    @GetMapping(value = "/findByCode")
+    public ResResult findByCode(String code){
+        return Res.ok(generalTemplateService.findByCode(code));
+    }
+
+
+    @Operation(summary = "编码是否被使用")
+    @GetMapping("/existsByCode")
+    public ResResult existsByCode(String code) {
+        return Res.ok(generalTemplateService.existsByCode(code));
+    }
+
+    @Operation(summary = "编码是否被使用(不包含自己)")
+    @GetMapping("/existsByCodeNotId")
+    public ResResult existsByCode(String code, Long id) {
+        return Res.ok(generalTemplateService.existsByCode(code, id));
+    }
+
+
+    @Operation( summary = "查询所有")
+    @GetMapping(value = "/findAll")
+    public ResResult> findAll(){
+        return Res.ok(generalTemplateService.findAll());
+    }
+
+    @Operation( summary = "分页查询")
+    @GetMapping(value = "/page")
+    public ResResult> page(PageParam pageParam, GeneralTemplateParam query){
+        return Res.ok(generalTemplateService.page(pageParam,query));
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/SystemParamController.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/SystemParamController.java
similarity index 75%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/SystemParamController.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/SystemParamController.java
index 13dad9bf6..b19847233 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/controller/SystemParamController.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/controller/SystemParamController.java
@@ -1,15 +1,15 @@
-package cn.bootx.baseapi.controller;
+package cn.bootx.platform.baseapi.controller;
 
-import cn.bootx.baseapi.core.parameter.service.SystemParamService;
-import cn.bootx.baseapi.dto.parameter.SystemParameterDto;
-import cn.bootx.baseapi.param.system.SystemParameterParam;
-import cn.bootx.common.core.annotation.IgnoreAuth;
-import cn.bootx.common.core.rest.PageResult;
-import cn.bootx.common.core.rest.Res;
-import cn.bootx.common.core.rest.ResResult;
-import cn.bootx.common.core.rest.param.PageParam;
-import cn.bootx.common.core.util.ValidationUtil;
-import cn.bootx.common.core.validation.ValidationGroup;
+import cn.bootx.platform.baseapi.dto.parameter.SystemParameterDto;
+import cn.bootx.platform.common.core.annotation.IgnoreAuth;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.Res;
+import cn.bootx.platform.common.core.rest.ResResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ValidationUtil;
+import cn.bootx.platform.common.core.validation.ValidationGroup;
+import cn.bootx.platform.baseapi.core.parameter.service.SystemParamService;
+import cn.bootx.platform.baseapi.param.system.SystemParameterParam;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -21,7 +21,7 @@
  * 系统参数
  *
  * @author xxm
- * @date 2021/10/25
+ * @since 2021/10/25
  */
 @Tag(name = "系统参数")
 @RestController
@@ -50,7 +50,7 @@ public ResResult update(@RequestBody SystemParameterParam param) {
     @Operation(summary = "分页")
     @GetMapping("/page")
     public ResResult> page(@ParameterObject PageParam pageParam,
-            @ParameterObject SystemParameterParam param) {
+                                                          @ParameterObject SystemParameterParam param) {
         return Res.ok(systemParamService.page(pageParam, param));
     }
 
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/captcha/service/CaptchaService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/captcha/service/CaptchaService.java
similarity index 87%
rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/captcha/service/CaptchaService.java
rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/captcha/service/CaptchaService.java
index 4f7f3c2af..ff3abf907 100644
--- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/captcha/service/CaptchaService.java
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/captcha/service/CaptchaService.java
@@ -1,8 +1,7 @@
-package cn.bootx.baseapi.core.captcha.service;
+package cn.bootx.platform.baseapi.core.captcha.service;
 
-import cn.bootx.baseapi.dto.captcha.CaptchaDataResult;
-import cn.bootx.common.redis.RedisClient;
-import cn.bootx.common.websocket.service.UserWsNoticeService;
+import cn.bootx.platform.baseapi.dto.captcha.CaptchaDataResult;
+import cn.bootx.platform.common.redis.RedisClient;
 import cn.hutool.core.util.RandomUtil;
 import com.wf.captcha.ArithmeticCaptcha;
 import lombok.RequiredArgsConstructor;
@@ -15,7 +14,7 @@
  * 验证码服务
  *
  * @author xxm
- * @date 2021/8/2
+ * @since 2021/8/2
  */
 @Slf4j
 @Service
@@ -31,8 +30,6 @@ public class CaptchaService {
     /** 邮箱验证码前缀 */
     private final String emailCaptchaPrefix = "email:captcha:";
 
-    private final UserWsNoticeService userWsNoticeService;
-
     private final RedisClient redisClient;
 
     /**
@@ -51,6 +48,7 @@ public CaptchaDataResult imgCaptcha() {
 
     /**
      * 校验图片验证码
+     * @param key 验证码Key
      */
     public boolean validateImgCaptcha(String key, String captcha) {
         // 比较验证码是否正确
@@ -59,7 +57,8 @@ public boolean validateImgCaptcha(String key, String captcha) {
     }
 
     /**
-     * 失效图片验证码
+     * 将图片验证码设置为失效
+     * @param key 验证码Key
      */
     public void deleteImgCaptcha(String key) {
         redisClient.deleteKey(imgCaptchaPrefix + key);
@@ -67,6 +66,10 @@ public void deleteImgCaptcha(String key) {
 
     /**
      * 发送手机验证码
+     * @param phone 手机号
+     * @param timeoutSec 超时时间
+     * @param type 业务类型, 用来区分不同业务的短信验证码
+     * @return 验证码
      */
     public int sendSmsCaptcha(String phone, long timeoutSec, String type) {
         int captcha = RandomUtil.randomInt(100000, 1000000);
@@ -76,7 +79,7 @@ public int sendSmsCaptcha(String phone, long timeoutSec, String type) {
     }
 
     /**
-     * 手机发送的验证码是否还有效
+     * 验证手机发送的验证码是否还在有效时间内
      */
     public boolean existsSmsCaptcha(String phone, String type) {
         return redisClient.exists(getSmsCaptchaPrefix(type) + phone);
@@ -92,7 +95,7 @@ public boolean validateSmsCaptcha(String phone, String captcha, String type) {
     }
 
     /**
-     * 失效手机验证码
+     * 将手机验证码验证码设置为失效
      */
     public void deleteSmsCaptcha(String phone, String type) {
         redisClient.deleteKey(getSmsCaptchaPrefix(type) + phone);
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordConvert.java
new file mode 100644
index 000000000..8ea78d821
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordConvert.java
@@ -0,0 +1,22 @@
+package cn.bootx.platform.baseapi.core.chinaword.convert;
+
+import cn.bootx.platform.baseapi.core.chinaword.entity.ChinaWord;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordDto;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordParam;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 敏感词
+ * @author xxm
+ * @since 2023-08-09
+ */
+@Mapper
+public interface ChinaWordConvert {
+    ChinaWordConvert CONVERT = Mappers.getMapper(ChinaWordConvert.class);
+
+    ChinaWord convert(ChinaWordParam in);
+
+    ChinaWordDto convert(ChinaWord in);
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordImportType.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordImportType.java
new file mode 100644
index 000000000..fbe108335
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/convert/ChinaWordImportType.java
@@ -0,0 +1,30 @@
+package cn.bootx.platform.baseapi.core.chinaword.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.converters.ReadConverterContext;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+
+public class ChinaWordImportType implements Converter {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    /**
+     * 这里读的时候会调用
+     *
+     * @param context
+     * @return
+     */
+    @Override
+    public String convertToJavaData(ReadConverterContext context) {
+
+        return "自定义:" + context.getReadCellData().getStringValue();
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordManager.java
new file mode 100644
index 000000000..4f85fecd4
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordManager.java
@@ -0,0 +1,39 @@
+package cn.bootx.platform.baseapi.core.chinaword.dao;
+
+import cn.bootx.platform.baseapi.core.chinaword.entity.ChinaWord;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordParam;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.bootx.platform.common.query.generator.QueryGenerator;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 敏感词
+ * @author xxm
+ * @since 2023-08-09
+ */
+@Repository
+@RequiredArgsConstructor
+public class ChinaWordManager extends BaseManager {
+
+    public List findAllByEnable(boolean enable){
+        return findAllByField(ChinaWord::getEnable,enable);
+    }
+
+    /**
+     * 分页
+     */
+    public Page page(PageParam pageParam, ChinaWordParam param) {
+        Page mpPage = MpUtil.getMpPage(pageParam, ChinaWord.class);
+        QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass());
+        wrapper.select(this.getEntityClass(),MpUtil::excludeBigField)
+                .orderByDesc(MpUtil.getColumnName(ChinaWord::getId));
+        return this.page(mpPage,wrapper);
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordMapper.java
new file mode 100644
index 000000000..68ba3babf
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/dao/ChinaWordMapper.java
@@ -0,0 +1,14 @@
+package cn.bootx.platform.baseapi.core.chinaword.dao;
+
+import cn.bootx.platform.baseapi.core.chinaword.entity.ChinaWord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 敏感词
+ * @author xxm
+ * @since 2023-08-09
+ */
+@Mapper
+public interface ChinaWordMapper extends BaseMapper {
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/entity/ChinaWord.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/entity/ChinaWord.java
new file mode 100644
index 000000000..6f3eecc74
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/entity/ChinaWord.java
@@ -0,0 +1,52 @@
+package cn.bootx.platform.baseapi.core.chinaword.entity;
+
+import cn.bootx.table.modify.annotation.DbColumn;
+import cn.bootx.table.modify.annotation.DbTable;
+import cn.bootx.platform.baseapi.core.chinaword.convert.ChinaWordConvert;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordDto;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordParam;
+import cn.bootx.platform.common.core.function.EntityBaseFunction;
+import cn.bootx.platform.common.mybatisplus.base.MpDelEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 敏感词
+ * @author xxm
+ * @since 2023/8/8
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName(value = "base_china_word",autoResultMap = true)
+public class ChinaWord extends MpDelEntity implements EntityBaseFunction {
+
+    /** 敏感词 */
+    @DbColumn(comment = "敏感词")
+    private String word;
+    /** 类型 */
+    @DbColumn(comment = "分类")
+    private String type;
+    /** 描述 */
+    @DbColumn(comment = "描述")
+    private String description;
+    /** 是否启用 */
+    @DbColumn(comment = "是否启用")
+    private Boolean enable;
+    @Schema(description = "是否是白名单名词")
+    private Boolean white;
+
+    /** 创建对象 */
+    public static ChinaWord init(ChinaWordParam in) {
+        return ChinaWordConvert.CONVERT.convert(in);
+    }
+
+    /** 转换成dto */
+    @Override
+    public ChinaWordDto toDto() {
+        return ChinaWordConvert.CONVERT.convert(this);
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/service/ChinaWordService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/service/ChinaWordService.java
new file mode 100644
index 000000000..91ecac633
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/service/ChinaWordService.java
@@ -0,0 +1,171 @@
+package cn.bootx.platform.baseapi.core.chinaword.service;
+
+import cn.bootx.platform.baseapi.core.chinaword.dao.ChinaWordManager;
+import cn.bootx.platform.baseapi.core.chinaword.entity.ChinaWord;
+import cn.bootx.platform.baseapi.core.chinaword.wordfilter.WordContext;
+import cn.bootx.platform.baseapi.core.chinaword.wordfilter.WordFilter;
+import cn.bootx.platform.baseapi.core.chinaword.wordfilter.WordType;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordDto;
+import cn.bootx.platform.baseapi.dto.chinaword.ChinaWordVerifyResult;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordImportParam;
+import cn.bootx.platform.baseapi.param.chinaword.ChinaWordParam;
+import cn.bootx.platform.common.core.exception.DataNotExistException;
+import cn.bootx.platform.common.core.rest.PageResult;
+import cn.bootx.platform.common.core.rest.param.PageParam;
+import cn.bootx.platform.common.core.util.ResultConvertUtil;
+import cn.bootx.platform.common.mybatisplus.util.MpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.event.SyncReadListener;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.web.context.WebServerInitializedEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 敏感词服务
+ * @author xxm
+ * @since 2023/8/9
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ChinaWordService {
+    private final WordContext wordContext;
+    private final WordFilter wordFilter;
+
+    private final ChinaWordManager chinaWordManager;
+
+    /**
+     * 添加
+     */
+    public void add(ChinaWordParam param){
+        ChinaWord chinaWord = ChinaWord.init(param);
+        this.updateWord(chinaWord);
+        chinaWordManager.save(chinaWord);
+
+    }
+
+    /**
+     * 批量导入
+     */
+    @SneakyThrows
+    @Transactional(rollbackFor = Exception.class)
+    public void importBatch(MultipartFile file, String type){
+        InputStream inputStream = file.getInputStream();
+        //同步读取文件内容
+        SyncReadListener syncReadListener = new SyncReadListener();
+        EasyExcel.read(inputStream, syncReadListener)
+                .head(ChinaWordImportParam.class)
+                .sheet().doRead();
+        syncReadListener.getList();
+    }
+
+    /**
+     * 修改
+     */
+    public void update(ChinaWordParam param){
+        ChinaWord ChinaWord = chinaWordManager.findById(param.getId()).orElseThrow(DataNotExistException::new);
+        BeanUtil.copyProperties(param,ChinaWord, CopyOptions.create().ignoreNullValue());
+        refresh();
+        chinaWordManager.updateById(ChinaWord);
+    }
+
+    /**
+     * 分页
+     */
+    public PageResult page(PageParam pageParam, ChinaWordParam query){
+        return MpUtil.convert2DtoPageResult(chinaWordManager.page(pageParam,query));
+    }
+
+    /**
+     * 获取单条
+     */
+    public ChinaWordDto findById(Long id){
+        return chinaWordManager.findById(id).map(ChinaWord::toDto).orElseThrow(DataNotExistException::new);
+    }
+
+    /**
+     * 获取全部
+     */
+    public List findAll(){
+        return ResultConvertUtil.dtoListConvert(chinaWordManager.findAll());
+    }
+
+    /**
+     * 删除
+     */
+    public void delete(Long id){
+        refresh();
+        chinaWordManager.deleteById(id);
+    }
+
+    /**
+     * 测试敏感词效果
+     */
+    public ChinaWordVerifyResult verify(String text, int skip, char symbol){
+        ChinaWordVerifyResult result = new ChinaWordVerifyResult();
+        if (wordFilter.include(text,skip)) {
+            String replaceText = wordFilter.replace(text, skip, symbol);
+            int count = wordFilter.wordCount(text, skip);
+            Set wordList = wordFilter.wordList(text, skip);
+            result.setText(replaceText)
+                    .setCount(count)
+                    .setSensitiveWords(wordList)
+                    .setSensitive(true);
+        }
+        return result;
+    }
+
+    /**
+     * 刷新缓存
+     */
+    public void refresh(){
+        initData();
+    }
+
+    /**
+     * 更新敏感词库
+     */
+    public void updateWord(ChinaWord chinaWord){
+        if (Objects.equals(chinaWord.getEnable(),true)){
+            if (Objects.equals(chinaWord.getWhite(),true)){
+                wordContext.addWord(Collections.singleton(chinaWord.getWord()), WordType.WHITE);
+            } else {
+                wordContext.addWord(Collections.singleton(chinaWord.getWord()), WordType.BLACK);
+            }
+        }
+    }
+
+    /**
+     * 初始化数据
+     */
+    @EventListener(WebServerInitializedEvent.class)
+    public void initData(){
+        List chinaWords = chinaWordManager.findAllByEnable(true);
+        // 黑名单
+        Set black = chinaWords.stream()
+                .filter(o -> Objects.equals(o.getWhite(), false))
+                .map(ChinaWord::getWord)
+                .collect(Collectors.toSet());
+        // 白名单
+        Set white = chinaWords.stream()
+                .filter(o -> Objects.equals(o.getWhite(), true))
+                .map(ChinaWord::getWord)
+                .collect(Collectors.toSet());
+
+        wordContext.initKeyWord(black,white);
+    }
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/EndType.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/EndType.java
new file mode 100644
index 000000000..1e88c045e
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/EndType.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.baseapi.core.chinaword.wordfilter;
+
+
+/**
+ * 结束类型定义
+ *
+ * @author minghu.zhang
+ * @date 11:37 2020/11/11
+ **/
+public enum EndType {
+
+    /**
+     * 有下一个,结束
+     */
+    HAS_NEXT, IS_END
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/FlagIndex.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/FlagIndex.java
new file mode 100644
index 000000000..be55975a6
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/FlagIndex.java
@@ -0,0 +1,30 @@
+package cn.bootx.platform.baseapi.core.chinaword.wordfilter;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 敏感词标记
+ *
+ * @author minghu.zhang
+ */
+@Getter
+@Setter
+public class FlagIndex {
+
+    /**
+     * 标记结果
+     */
+    private boolean flag;
+    /**
+     * 是否黑名单词汇
+     */
+    private boolean isWhiteWord;
+    /**
+     * 标记索引
+     */
+    private List index;
+
+}
diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordContext.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordContext.java
new file mode 100644
index 000000000..8dc698607
--- /dev/null
+++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordContext.java
@@ -0,0 +1,149 @@
+package cn.bootx.platform.baseapi.core.chinaword.wordfilter;
+
+import lombok.Getter;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static cn.bootx.platform.baseapi.code.WordFilterCode.IS_END;
+import static cn.bootx.platform.baseapi.code.WordFilterCode.IS_WHITE_WORD;
+
+/**
+ * 词库上下文环境
+ * 

+ * 初始化敏感词库,将敏感词加入到HashMap中,构建DFA算法模型 + * + * @author minghu.zhang + */ +@Getter +@Service +@Component +@SuppressWarnings({"rawtypes", "unchecked"}) +public class WordContext { + + /** + * 敏感词字典 + */ + private final Map wordMap = new HashMap(1024); + + /** + * 初始化敏感词库 + */ + public synchronized void initKeyWord(Iterable blackList,Iterable whiteList) { + try { + wordMap.clear(); + // 将敏感词库加入到HashMap中 + addWord(blackList, WordType.BLACK); + // 将非敏感词库也加入到HashMap中 + addWord(whiteList, WordType.WHITE ); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型:
+ * 中 = { isEnd = 0 国 = {
+ * isEnd = 1 人 = {isEnd = 0 民 = {isEnd = 1} } 男 = { isEnd = 0 人 = { isEnd = 1 } + * } } } 五 = { isEnd = 0 星 = { isEnd = 0 红 = { isEnd = 0 旗 = { isEnd = 1 } } } } + */ + public synchronized void addWord(Iterable wordList, WordType wordType) { + Map nowMap; + Map newWorMap; + // 迭代keyWordSet + for (String key : wordList) { + nowMap = wordMap; + for (int i = 0; i < key.length(); i++) { + // 转换成char型 + char keyChar = key.charAt(i); + // 获取 + Object wordMap = nowMap.get(keyChar); + // 如果存在该key,直接赋值 + if (wordMap != null) { + nowMap = (Map) wordMap; + } else { + // 不存在则构建一个map,同时将isEnd设置为0,因为他不是最后一个 + newWorMap = new HashMap<>(4); + // 不是最后一个 + newWorMap.put(IS_END, String.valueOf(EndType.HAS_NEXT.ordinal())); + nowMap.put(keyChar, newWorMap); + nowMap = newWorMap; + } + + if (i == key.length() - 1) { + // 最后一个 + nowMap.put(IS_END, String.valueOf(EndType.IS_END.ordinal())); + nowMap.put(IS_WHITE_WORD, String.valueOf(wordType.ordinal())); + } + } + } + } + + /** + * 在线删除敏感词 + * + * @param wordList 敏感词列表 + * @param wordType 黑名单 BLACk,白名单WHITE + */ + public void removeWord(Iterable wordList, WordType wordType) { + Map nowMap; + for (String key : wordList) { + List cacheList = new ArrayList<>(); + nowMap = wordMap; + for (int i = 0; i < key.length(); i++) { + char keyChar = key.charAt(i); + + Object map = nowMap.get(keyChar); + if (map != null) { + nowMap = (Map) map; + cacheList.add(nowMap); + } else { + return; + } + + if (i == key.length() - 1) { + char[] keys = key.toCharArray(); + boolean cleanable = false; + char lastChar = 0; + for (int j = cacheList.size() - 1; j >= 0; j--) { + Map cacheMap = cacheList.get(j); + if (j == cacheList.size() - 1) { + if (String.valueOf(WordType.BLACK.ordinal()).equals(cacheMap.get(IS_WHITE_WORD))) { + if (wordType == WordType.WHITE) { + return; + } + } + if (String.valueOf(WordType.WHITE.ordinal()).equals(cacheMap.get(IS_WHITE_WORD))) { + if (wordType == WordType.BLACK) { + return; + } + } + cacheMap.remove(IS_WHITE_WORD); + cacheMap.remove(IS_END); + if (cacheMap.isEmpty()) { + cleanable = true; + continue; + } + } + if (cleanable) { + Object isEnd = cacheMap.get(IS_END); + if (String.valueOf(EndType.IS_END.ordinal()).equals(isEnd)) { + cleanable = false; + } + cacheMap.remove(lastChar); + } + lastChar = keys[j]; + } + + if (cleanable) { + wordMap.remove(lastChar); + } + } + } + } + } +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordFilter.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordFilter.java new file mode 100644 index 000000000..f558ceb50 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordFilter.java @@ -0,0 +1,214 @@ +package cn.bootx.platform.baseapi.core.chinaword.wordfilter; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 敏感词过滤器 + * + * @author minghu.zhang + */ +@Component +@RequiredArgsConstructor +@SuppressWarnings("rawtypes") +public class WordFilter { + private final WordContext context; + /** + * 替换敏感词 + * + * @param text 输入文本 + */ + public String replace(final String text) { + return replace(text, 0, '*'); + } + + /** + * 替换敏感词 + * 查找敏感词,距离越长,过滤越严格,效率越低,开发者可以根据具体需求设置, + * 这里以“紧急”为敏感词举例,以此类推: + * 0 匹配紧急 + * 1 匹配不紧不急,紧x急 + * 2 匹配紧急,紧x急,紧xx急 + * + * @param text 输入文本 + * @param symbol 替换符号 + */ + public String replace(final String text, final char symbol) { + return replace(text, 0, symbol); + } + + /** + * 替换敏感词 + * + * @param text 输入文本 + * @param skip 文本距离 + * @param symbol 替换符号 + */ + public String replace(final String text, final int skip, final char symbol) { + char[] charset = text.toCharArray(); + for (int i = 0; i < charset.length; i++) { + FlagIndex fi = getFlagIndex(charset, i, skip); + if (fi.isFlag()) { + if (!fi.isWhiteWord()) { + for (int j : fi.getIndex()) { + charset[j] = symbol; + } + } else { + i += fi.getIndex().size() - 1; + } + } + } + return new String(charset); + } + + /** + * 是否包含敏感词 + * + * @param text 输入文本 + */ + public boolean include(final String text) { + return include(text, 0); + } + + /** + * 是否包含敏感词, 程序会跳过不同的距离, + * 查找敏感词,距离越长,过滤越严格,效率越低,开发者可以根据具体需求设置, + * 这里以“紧急”为敏感词举例,以此类推: + * 0 匹配紧急 + * 1 匹配不紧不急,紧x急 + * 2 匹配紧急,紧x急,紧xx急 + * + * @param text 输入文本 + * @param skip 文本距离 + */ + public boolean include(final String text, final int skip) { + boolean include = false; + char[] charset = text.toCharArray(); + for (int i = 0; i < charset.length; i++) { + FlagIndex fi = getFlagIndex(charset, i, skip); + if(fi.isFlag()) { + if (fi.isWhiteWord()) { + i += fi.getIndex().size() - 1; + } else { + include = true; + break; + } + } + } + return include; + } + + /** + * 获取敏感词数量 + * + * @param text 输入文本 + */ + public int wordCount(final String text) { + return wordCount(text, 0); + } + + /** + * 获取敏感词数量 + * + * @param text 输入文本 + * @param skip 文本距离 + */ + public int wordCount(final String text, final int skip) { + int count = 0; + char[] charset = text.toCharArray(); + for (int i = 0; i < charset.length; i++) { + FlagIndex fi = getFlagIndex(charset, i, skip); + if (fi.isFlag()) { + if(fi.isWhiteWord()) { + i += fi.getIndex().size() - 1; + } else { + count++; + } + } + } + return count; + } + + /** + * 获取敏感词列表 + * + * @param text 输入文本 + */ + public Set wordList(String text) { + return wordList(text, 0); + } + + /** + * 获取敏感词列表 + * + * @param text 输入文本 + * @param skip 文本距离 + */ + public Set wordList(final String text, final int skip) { + Set wordSet = new LinkedHashSet<>(); + char[] charset = text.toCharArray(); + for (int i = 0; i < charset.length; i++) { + FlagIndex fi = getFlagIndex(charset, i, skip); + if (fi.isFlag()) { + if(fi.isWhiteWord()) { + i += fi.getIndex().size() - 1; + } else { + StringBuilder builder = new StringBuilder(); + for (int j : fi.getIndex()) { + char word = text.charAt(j); + builder.append(word); + } + wordSet.add(builder.toString()); + } + } + } + return wordSet; + } + + /** + * 获取标记索引 + * + * @param charset 输入文本 + * @param begin 检测起始 + * @param skip 文本距离 + */ + private FlagIndex getFlagIndex(final char[] charset, final int begin, final int skip) { + FlagIndex fi = new FlagIndex(); + + Map current = context.getWordMap(); + boolean flag = false; + int count = 0; + List index = new ArrayList<>(); + for (int i = begin; i < charset.length; i++) { + char word = charset[i]; + Map mapTree = (Map) current.get(word); + if (count > skip || (i == begin && Objects.isNull(mapTree))) { + break; + } + if (Objects.nonNull(mapTree)) { + current = mapTree; + count = 0; + index.add(i); + } else { + count++; + if (flag && count > skip) { + break; + } + } + if ("1".equals(current.get("isEnd"))) { + flag = true; + } + if ("1".equals(current.get("isWhiteWord"))) { + fi.setWhiteWord(true); + break; + } + } + + fi.setFlag(flag); + fi.setIndex(index); + + return fi; + } +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordType.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordType.java new file mode 100644 index 000000000..7284332c8 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/chinaword/wordfilter/WordType.java @@ -0,0 +1,15 @@ +package cn.bootx.platform.baseapi.core.chinaword.wordfilter; + +/** + * 词汇类型 + * + * @author minghu.zhang + * @date 11:37 2020/11/11 + **/ +public enum WordType { + + /** + * 黑名单/白名单 + */ + BLACK, WHITE +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/convert/DataResultSqlConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/convert/DataResultSqlConvert.java new file mode 100644 index 000000000..4004633d1 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/convert/DataResultSqlConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.baseapi.core.dataresult.convert; + +import cn.bootx.platform.baseapi.core.dataresult.entity.DataResultSql; +import cn.bootx.platform.baseapi.dto.dataresult.QuerySqlDto; +import cn.bootx.platform.baseapi.param.dataresult.DataResultSqlParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author xxm + * @since 2023/3/13 + */ +@Mapper +public interface DataResultSqlConvert { + + DataResultSqlConvert CONVERT = Mappers.getMapper(DataResultSqlConvert.class); + + QuerySqlDto convert(DataResultSql in); + + DataResultSql convert(DataResultSqlParam in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlManager.java new file mode 100644 index 000000000..b39278048 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlManager.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.dataresult.dao; + +import cn.bootx.platform.baseapi.core.dataresult.entity.DataResultSql; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * @author xxm + * @since 2023/3/9 + */ +@Slf4j +@Repository +public class DataResultSqlManager extends BaseManager { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlMapper.java new file mode 100644 index 000000000..c3f6ae899 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/DataResultSqlMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.baseapi.core.dataresult.dao; + +import cn.bootx.platform.baseapi.core.dataresult.entity.DataResultSql; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2023/3/9 + */ +@Mapper +public interface DataResultSqlMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/SqlQueryMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/SqlQueryMapper.java new file mode 100644 index 000000000..35be5366b --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/dao/SqlQueryMapper.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.baseapi.core.dataresult.dao; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 查询语句 + * @author xxm + * @since 2023/8/29 + */ +@Mapper +public interface SqlQueryMapper { + + /** + * 查询带分页 + * @param page 分页 + * @param sql 查询语句 + */ + @Select("${sql}") + Page> queryByPage(Page page, @Param("sql") String sql); + + /** + * 查询 + * @param sql 查询语句 + */ + @Select("${sql}") + List> query(@Param("sql") String sql); +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/entity/DataResultSql.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/entity/DataResultSql.java new file mode 100644 index 000000000..1082836b4 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/entity/DataResultSql.java @@ -0,0 +1,68 @@ +package cn.bootx.platform.baseapi.core.dataresult.entity; + +import cn.bootx.platform.baseapi.core.dataresult.convert.DataResultSqlConvert; +import cn.bootx.platform.baseapi.dto.dataresult.QuerySqlDto; +import cn.bootx.platform.baseapi.dto.dataresult.SqlField; +import cn.bootx.platform.baseapi.dto.dataresult.SqlParam; +import cn.bootx.platform.common.core.annotation.BigField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.common.mybatisplus.handler.JacksonRawTypeHandler; +import cn.bootx.table.modify.annotation.DbTable; +import cn.bootx.table.modify.mysql.annotation.DbMySqlFieldType; +import cn.bootx.table.modify.mysql.constants.MySqlFieldTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 数据集SQL语句 + * + * @author xxm + * @since 2023/3/9 + */ +@EqualsAndHashCode(callSuper = true) +@Data +//@DbTable(comment = "数据集SQL语句") +@Accessors(chain = true) +@TableName(value = "base_data_result_sql", autoResultMap = true) +public class DataResultSql extends MpBaseEntity implements EntityBaseFunction { + + /** 数据源ID */ + private Long databaseId; + + /** 名称 */ + private String name; + + /** 是否集合 */ + private Boolean isList; + + /** sql语句 */ + @BigField + private String sql; + + /** SQL查询参数 */ + @BigField + @TableField(typeHandler = JacksonRawTypeHandler.class) + @DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT) + private List params; + + /** SQL查询结果字段 */ + @BigField + @TableField(typeHandler = JacksonRawTypeHandler.class) + @DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT) + private List fields; + + /** + * 转换 + */ + @Override + public QuerySqlDto toDto() { + return DataResultSqlConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/DataResultSqlService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/DataResultSqlService.java new file mode 100644 index 000000000..5364f26a0 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/DataResultSqlService.java @@ -0,0 +1,166 @@ +package cn.bootx.platform.baseapi.core.dataresult.service; + +import cn.bootx.platform.baseapi.code.QuerySqlCode; +import cn.bootx.platform.baseapi.core.dataresult.dao.DataResultSqlManager; +import cn.bootx.platform.baseapi.core.dataresult.entity.DataResultSql; +import cn.bootx.platform.baseapi.dto.dataresult.SqlParam; +import cn.bootx.platform.baseapi.core.dynamicsource.dao.DynamicDataSourceManager; +import cn.bootx.platform.baseapi.core.dynamicsource.entity.DynamicDataSource; +import cn.bootx.platform.baseapi.core.dynamicsource.service.DynamicDataSourceService; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.function.CollectorsFunction; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.db.PageResult; +import cn.hutool.db.handler.EntityHandler; +import cn.hutool.db.handler.EntityListHandler; +import cn.hutool.db.sql.SqlExecutor; +import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.parsing.GenericTokenParser; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author xxm + * @since 2023/3/9 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DataResultSqlService { + + private final DynamicRoutingDataSource dynamicRoutingDataSource; + + private final DynamicDataSourceManager dynamicDataSourceManager; + + private final DynamicDataSourceService dynamicDataSourceService; + + private final DataResultSqlManager dataResultSqlManager; + + /** + * 添加查询语句 + */ + public void add() { + + } + + /** + * 修改 + */ + public void update(){ + + } + + /** + * 分页查询 + */ + public PageResult page(){ + return new PageResult<>(); + } + + /** + * 执行SQL查询 + */ + @SneakyThrows + public Object querySql(Map map) { + // 获取SQL语句, 将 #{} 和 ${} 元素进行解析和替换 + String sql = "select * from iam_client where system=#{system}"; + DataResultSql dataResultSql = new DataResultSql().setDatabaseId(1633376006887067648L).setIsList(true).setSql(sql); + SqlAndParam sqlAndParam = this.sqlParamParser(dataResultSql, map); + + // 对SQL语句进行解析 + DataSource dataSource = this.getDataSource(dataResultSql.getDatabaseId()); + Connection connection = dataSource.getConnection(); + if (Objects.equals(dataResultSql.getIsList(), true)) { + return SqlExecutor.query(connection, sqlAndParam.sql, new EntityListHandler(), + ArrayUtil.toArray(sqlAndParam.param, Object.class)); + } + else { + return SqlExecutor.query(connection, sqlAndParam.sql, new EntityHandler(), + ArrayUtil.toArray(sqlAndParam.param, Object.class)); + } + } + + /** + * 解析SQL + */ + private SqlAndParam sqlParamParser(DataResultSql dataResultSql, Map map) { + String sql = dataResultSql.getSql(); + Map sqlParamMap = Optional.ofNullable(dataResultSql.getParams()) + .orElse(new ArrayList<>(0)) + .stream() + .collect(Collectors.toMap(SqlParam::getName, Function.identity(), CollectorsFunction::retainLatest)); + // # 参数处理 + GenericTokenParser replaceTokenParser = new GenericTokenParser("#{", "}", content -> { + // 获取类型, 看是否是获取用户信息一类的 + SqlParam sqlParam = sqlParamMap.get(content); + if (Objects.nonNull(sqlParam) && Objects.equals(sqlParam.getType(), QuerySqlCode.TYPE_USER_ID)) { + return String.valueOf(SecurityUtil.getUserId()); + } + return map.get(content).toString(); + }); + sql = replaceTokenParser.parse(sql); + + // $占位参数处理 + List list = new ArrayList<>(); + GenericTokenParser preparedTokenParser = new GenericTokenParser("${", "}", content -> { + Object param = map.get(content); + list.add(param); + return "?"; + }); + sql = preparedTokenParser.parse(sql); + return new SqlAndParam(sql, list); + } + + /** + * 通过SQL查出结果字段 + */ +// @SneakyThrows +// public List queryFieldBySql(SqlQueryParam param) { +// String sql = "select * from iam_client"; +// DataSource dataSource = this.getDataSource(param.getDatabaseId()); +// Connection connection = dataSource.getConnection(); +// Entity query = SqlExecutor.query(connection, sql, new EntityHandler()); +// System.out.println(query); +// return new ArrayList<>(query.keySet()); +// } + + /** + * 获取数据源 + */ + private DataSource getDataSource(Long id) { + DynamicDataSource dataSource = dynamicDataSourceManager.findById(id).orElseThrow(DataNotExistException::new); + DataSource source = dynamicRoutingDataSource.getDataSource(dataSource.getCode()); + if (Objects.isNull(source)) { + dynamicDataSourceService.addDynamicDataSource(dataSource); + source = dynamicRoutingDataSource.getDataSource(dataSource.getCode()); + } + return source; + } + + /** + * 解析后的SQl语句和参数 + */ + @Getter + @AllArgsConstructor + private static class SqlAndParam { + + /** 解析后的SQL语句 */ + private final String sql; + + /** 解析后的参数 */ + private List param; + + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/SqlQueryService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/SqlQueryService.java new file mode 100644 index 000000000..cb52f680a --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dataresult/service/SqlQueryService.java @@ -0,0 +1,106 @@ +package cn.bootx.platform.baseapi.core.dataresult.service; + +import cn.bootx.platform.baseapi.core.dataresult.dao.SqlQueryMapper; +import cn.bootx.platform.baseapi.dto.dataresult.SqlQueryResult; +import cn.bootx.platform.baseapi.param.dataresult.SqlQueryParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * SQL查询 + * @author xxm + * @since 2023/8/29 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SqlQueryService { + + private final SqlQueryMapper SqlQueryMapper; + + /** + * SQL查询语句 + * TODO 返回结果是无序的, 后期优化成有序的 + */ + public SqlQueryResult query(SqlQueryParam param, PageParam pageParam){ + try { + Page page = MpUtil.getMpPage(pageParam, Object.class); + page.setSearchCount(false); + if (StrUtil.isNotBlank(param.getDatabaseKey())){ + DynamicDataSourceContextHolder.push(param.getDatabaseKey()); + } + List> records; + if (param.isEnablePage()){ + records = SqlQueryMapper.queryByPage(page, param.getSql()).getRecords(); + } else { + records = SqlQueryMapper.query(param.getSql()); + } + SqlQueryResult sqlQueryResult = new SqlQueryResult(); + // 构造出表头 + if (CollUtil.isNotEmpty(records)){ + Map objectMap = records.get(0); + sqlQueryResult.setData(records) + .setFields(new ArrayList<>(objectMap.keySet())); + } + return sqlQueryResult; + } finally { + if (StrUtil.isNotBlank(param.getDatabaseKey())) { + DynamicDataSourceContextHolder.poll(); + } + } + } + + /** + * 导出查询结果 + */ + public byte[] exportQueryResult(SqlQueryParam param, PageParam pageParam){ + SqlQueryResult queryResult = this.query(param, pageParam); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + EasyExcel.write(byteArrayOutputStream) + .head(this.head(queryResult)) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .sheet("result") + .doWrite(this.dataList(queryResult)); + return byteArrayOutputStream.toByteArray(); + } + + /** + * 单头 + */ + private List> head(SqlQueryResult queryResult) { + return queryResult.getFields() + .stream() + .map(Collections::singletonList) + .collect(Collectors.toList()); + } + + /** + * 内容 + */ + private List> dataList(SqlQueryResult queryResult) { + List> data = queryResult.getData(); + List fields = queryResult.getFields(); + return data.stream() + .map(map->{ + ArrayList objects = new ArrayList<>(fields.size()); + fields.forEach(key->objects.add(StrUtil.toString(map.get(key)))); + return objects; + }).collect(Collectors.toList()); + } +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/convert/DictionaryConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/convert/DictionaryConvert.java new file mode 100644 index 000000000..187996595 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/convert/DictionaryConvert.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.baseapi.core.dict.convert; + +import cn.bootx.platform.baseapi.dto.dict.DictionaryDto; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemDto; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemSimpleDto; +import cn.bootx.platform.baseapi.param.dict.DictionaryItemParam; +import cn.bootx.platform.baseapi.param.dict.DictionaryParam; +import cn.bootx.platform.baseapi.core.dict.entity.Dictionary; +import cn.bootx.platform.baseapi.core.dict.entity.DictionaryItem; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 渠道转换 + * + * @author xxm + * @since 2021/7/6 + */ +@Mapper +public interface DictionaryConvert { + + DictionaryConvert CONVERT = Mappers.getMapper(DictionaryConvert.class); + + Dictionary convert(DictionaryParam in); + + DictionaryDto convert(Dictionary in); + + DictionaryItem convert(DictionaryItemParam in); + + DictionaryItemDto convert(DictionaryItem in); + + DictionaryItemSimpleDto convertSimple(DictionaryItem in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemManager.java similarity index 86% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemManager.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemManager.java index ea17d154f..b8717be6e 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryItemManager.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemManager.java @@ -1,10 +1,10 @@ -package cn.bootx.baseapi.core.dict.dao; +package cn.bootx.platform.baseapi.core.dict.dao; -import cn.bootx.baseapi.core.dict.entity.DictionaryItem; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.dict.entity.DictionaryItem; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.AllArgsConstructor; import org.springframework.stereotype.Repository; @@ -16,7 +16,7 @@ * 字典项 * * @author xxm - * @date 2020/4/21 14:08 + * @since 2020/4/21 14:08 */ @Repository @AllArgsConstructor diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemMapper.java new file mode 100644 index 000000000..2a9070e2f --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryItemMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.dict.dao; + +import cn.bootx.platform.baseapi.core.dict.entity.DictionaryItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 字典项 + * + * @author xxm + * @since 2020/11/13 + */ +@Mapper +public interface DictionaryItemMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryManager.java similarity index 76% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryManager.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryManager.java index ad81f505f..29677dea5 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/dao/DictionaryManager.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryManager.java @@ -1,11 +1,11 @@ -package cn.bootx.baseapi.core.dict.dao; - -import cn.bootx.baseapi.core.dict.entity.Dictionary; -import cn.bootx.baseapi.param.dict.DictionaryParam; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; +package cn.bootx.platform.baseapi.core.dict.dao; + +import cn.bootx.platform.baseapi.core.dict.entity.Dictionary; +import cn.bootx.platform.baseapi.param.dict.DictionaryParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.AllArgsConstructor; @@ -17,7 +17,7 @@ * 字典 * * @author xxm - * @date 2020/11/13 + * @since 2020/11/13 */ @Repository @AllArgsConstructor diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryMapper.java new file mode 100644 index 000000000..63f3f3d55 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/dao/DictionaryMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.dict.dao; + +import cn.bootx.platform.baseapi.core.dict.entity.Dictionary; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 字典 + * + * @author xxm + * @since 2021/8/4 + */ +@Mapper +public interface DictionaryMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/Dictionary.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/Dictionary.java new file mode 100644 index 000000000..1fded2965 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/Dictionary.java @@ -0,0 +1,47 @@ +package cn.bootx.platform.baseapi.core.dict.entity; + +import cn.bootx.platform.baseapi.core.dict.convert.DictionaryConvert; +import cn.bootx.platform.baseapi.dto.dict.DictionaryDto; +import cn.bootx.platform.baseapi.param.dict.DictionaryParam; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典 + * + * @author xxm + * @since 2020/11/13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("base_dict") +public class Dictionary extends MpBaseEntity implements EntityBaseFunction { + + /** 名称 */ + private String name; + + /** 分类标签 */ + private String groupTag; + + /** 编码 */ + private String code; + + /** 备注 */ + private String remark; + + /** 是否启用 */ + private Boolean enable; + + public static Dictionary init(DictionaryParam in) { + return DictionaryConvert.CONVERT.convert(in); + } + + @Override + public DictionaryDto toDto() { + return DictionaryConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/DictionaryItem.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/DictionaryItem.java new file mode 100644 index 000000000..3f2237490 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/entity/DictionaryItem.java @@ -0,0 +1,64 @@ +package cn.bootx.platform.baseapi.core.dict.entity; + +import cn.bootx.platform.baseapi.core.dict.convert.DictionaryConvert; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemDto; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemSimpleDto; +import cn.bootx.platform.baseapi.param.dict.DictionaryItemParam; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 字典项 + * + * @author xxm + * @since 2020/4/15 17:45 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("base_dict_item") +public class DictionaryItem extends MpBaseEntity implements EntityBaseFunction { + + /** 字典ID */ + private Long dictId; + + /** 字典编码 */ + private String dictCode; + + /** 字典项编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 字典项排序 */ + private Double sortNo; + + /** 是否启用 */ + private Boolean enable; + + /** 备注 */ + private String remark; + + public static DictionaryItem init(DictionaryItemParam in) { + return DictionaryConvert.CONVERT.convert(in); + } + + @Override + public DictionaryItemDto toDto() { + return DictionaryConvert.CONVERT.convert(this); + } + + /** + * 转换成简单对象 + */ + public DictionaryItemSimpleDto toSimpleDto() { + return DictionaryConvert.CONVERT.convertSimple(this); + + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictTranslationServiceImpl.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictTranslationServiceImpl.java similarity index 85% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictTranslationServiceImpl.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictTranslationServiceImpl.java index 032482463..991591bc8 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictTranslationServiceImpl.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictTranslationServiceImpl.java @@ -1,11 +1,11 @@ -package cn.bootx.baseapi.core.dict.service; +package cn.bootx.platform.baseapi.core.dict.service; -import cn.bootx.baseapi.core.dict.entity.DictionaryItem; -import cn.bootx.baseapi.dto.dict.DictionaryItemDto; -import cn.bootx.baseapi.dto.dict.DictionaryItemSimpleDto; -import cn.bootx.common.core.function.CollectorsFunction; -import cn.bootx.common.translate.cache.TranslationCacheLocal; -import cn.bootx.common.translate.service.DictTranslationService; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemDto; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemSimpleDto; +import cn.bootx.platform.common.core.function.CollectorsFunction; +import cn.bootx.platform.common.translate.cache.TranslationCacheLocal; +import cn.bootx.platform.common.translate.service.DictTranslationService; +import cn.bootx.platform.baseapi.core.dict.entity.DictionaryItem; import com.google.common.base.Objects; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,13 +17,11 @@ import java.util.function.Function; import java.util.stream.Collectors; -import static cn.bootx.common.translate.cache.TranslationCacheLocal.get; - /** * 字典值转换工具类 * * @author xxm - * @date 2022/12/15 + * @since 2022/12/15 */ @Slf4j @Service @@ -37,7 +35,7 @@ public class DictTranslationServiceImpl implements DictTranslationService { */ @Override public void initDictTranslationCache() { - TranslationCacheLocal.Cache cache = get(); + TranslationCacheLocal.Cache cache = TranslationCacheLocal.get(); val dictItems = cache.getDictItems(); // 如果字典项少于三个, 单独查, 字典类型少于三个, 查找项后本地筛选, 其他查全部后筛选 long itemCount = dictItems.stream().distinct().count(); diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryItemService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryItemService.java similarity index 83% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryItemService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryItemService.java index 7f6b95bd1..0f39905ea 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryItemService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryItemService.java @@ -1,20 +1,20 @@ -package cn.bootx.baseapi.core.dict.service; - -import cn.bootx.baseapi.core.dict.dao.DictionaryItemManager; -import cn.bootx.baseapi.core.dict.dao.DictionaryManager; -import cn.bootx.baseapi.core.dict.entity.Dictionary; -import cn.bootx.baseapi.core.dict.entity.DictionaryItem; -import cn.bootx.baseapi.dto.dict.DictionaryItemDto; -import cn.bootx.baseapi.dto.dict.DictionaryItemSimpleDto; -import cn.bootx.baseapi.exception.dict.DictItemAlreadyExistedException; -import cn.bootx.baseapi.exception.dict.DictItemNotExistedException; -import cn.bootx.baseapi.param.dict.DictionaryItemParam; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.util.MpUtil; +package cn.bootx.platform.baseapi.core.dict.service; + +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemDto; +import cn.bootx.platform.baseapi.dto.dict.DictionaryItemSimpleDto; +import cn.bootx.platform.baseapi.exception.dict.DictItemAlreadyExistedException; +import cn.bootx.platform.baseapi.exception.dict.DictItemNotExistedException; +import cn.bootx.platform.baseapi.param.dict.DictionaryItemParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.dict.dao.DictionaryItemManager; +import cn.bootx.platform.baseapi.core.dict.dao.DictionaryManager; +import cn.bootx.platform.baseapi.core.dict.entity.Dictionary; +import cn.bootx.platform.baseapi.core.dict.entity.DictionaryItem; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -29,7 +29,7 @@ /** * @author xxm - * @date 2020/4/16 21:16 + * @since 2020/4/16 21:16 */ @Service @AllArgsConstructor diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryService.java similarity index 77% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryService.java index 391622340..9e4a8aafd 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dict/service/DictionaryService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dict/service/DictionaryService.java @@ -1,17 +1,17 @@ -package cn.bootx.baseapi.core.dict.service; - -import cn.bootx.baseapi.core.dict.dao.DictionaryItemManager; -import cn.bootx.baseapi.core.dict.dao.DictionaryManager; -import cn.bootx.baseapi.core.dict.entity.Dictionary; -import cn.bootx.baseapi.dto.dict.DictionaryDto; -import cn.bootx.baseapi.exception.dict.DictAlreadyExistedException; -import cn.bootx.baseapi.exception.dict.DictItemAlreadyUsedException; -import cn.bootx.baseapi.exception.dict.DictNotExistedException; -import cn.bootx.baseapi.param.dict.DictionaryParam; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; +package cn.bootx.platform.baseapi.core.dict.service; + +import cn.bootx.platform.baseapi.dto.dict.DictionaryDto; +import cn.bootx.platform.baseapi.exception.dict.DictAlreadyExistedException; +import cn.bootx.platform.baseapi.exception.dict.DictItemAlreadyUsedException; +import cn.bootx.platform.baseapi.exception.dict.DictNotExistedException; +import cn.bootx.platform.baseapi.param.dict.DictionaryParam; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.dict.dao.DictionaryItemManager; +import cn.bootx.platform.baseapi.core.dict.dao.DictionaryManager; +import cn.bootx.platform.baseapi.core.dict.entity.Dictionary; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.AllArgsConstructor; @@ -23,7 +23,7 @@ /** * @author xxm - * @date 2020/4/10 15:52 + * @since 2020/4/10 15:52 */ @Service @AllArgsConstructor diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/convert/DynamicFormConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/convert/DynamicFormConvert.java new file mode 100644 index 000000000..37c0f81d0 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/convert/DynamicFormConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.dynamicform.convert; + +import cn.bootx.platform.baseapi.dto.dynamicform.DynamicFormDto; +import cn.bootx.platform.baseapi.param.dynamicform.DynamicFormParam; +import cn.bootx.platform.baseapi.core.dynamicform.entity.DynamicForm; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 动态表单 + * + * @author xxm + * @since 2022-07-28 + */ +@Mapper +public interface DynamicFormConvert { + + DynamicFormConvert CONVERT = Mappers.getMapper(DynamicFormConvert.class); + + DynamicForm convert(DynamicFormParam in); + + DynamicFormDto convert(DynamicForm in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormManager.java new file mode 100644 index 000000000..8e5e18cd3 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormManager.java @@ -0,0 +1,45 @@ +package cn.bootx.platform.baseapi.core.dynamicform.dao; + +import cn.bootx.platform.baseapi.core.dynamicform.entity.DynamicForm; +import cn.bootx.platform.baseapi.param.dynamicform.DynamicFormParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +/** + * 动态表单 + * + * @author xxm + * @since 2022-07-28 + */ +@Repository +@RequiredArgsConstructor +public class DynamicFormManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, DynamicFormParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, DynamicForm.class); + return lambdaQuery().select(DynamicForm.class, MpUtil::excludeBigField) + .like(Objects.nonNull(param.getCode()), DynamicForm::getCode, param.getCode()) + .like(Objects.nonNull(param.getName()), DynamicForm::getName, param.getName()) + .orderByDesc(MpIdEntity::getId) + .page(mpPage); + } + + public boolean existsByCode(String code) { + return existedByField(DynamicForm::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(DynamicForm::getCode, code, id); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormMapper.java new file mode 100644 index 000000000..2569468b9 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/dao/DynamicFormMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.dynamicform.dao; + +import cn.bootx.platform.baseapi.core.dynamicform.entity.DynamicForm; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 动态表单 + * + * @author xxm + * @since 2022-07-28 + */ +@Mapper +public interface DynamicFormMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicForm.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicForm.java new file mode 100644 index 000000000..bc1b0da21 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicForm.java @@ -0,0 +1,50 @@ +package cn.bootx.platform.baseapi.core.dynamicform.entity; + +import cn.bootx.platform.baseapi.core.dynamicform.convert.DynamicFormConvert; +import cn.bootx.platform.baseapi.dto.dynamicform.DynamicFormDto; +import cn.bootx.platform.baseapi.param.dynamicform.DynamicFormParam; +import cn.bootx.platform.common.core.annotation.BigField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 动态表单 + * + * @author xxm + * @since 2022-07-28 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName(value = "base_dynamic_form", autoResultMap = true) +public class DynamicForm extends MpBaseEntity implements EntityBaseFunction { + + /** 表单名称 */ + private String name; + + /** 表单键名 */ + private String code; + + /** 表单内容 */ + @BigField + private String value; + + /** 备注 */ + private String remark; + + /** 创建对象 */ + public static DynamicForm init(DynamicFormParam in) { + return DynamicFormConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public DynamicFormDto toDto() { + return DynamicFormConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicFormData.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicFormData.java new file mode 100644 index 000000000..f130db13b --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/entity/DynamicFormData.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.dynamicform.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2022/7/30 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "动态表单数据") +public class DynamicFormData extends MpBaseEntity { + + /** 表单id */ + private Long formId; + + /** 内容 */ + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormDataService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormDataService.java similarity index 81% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormDataService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormDataService.java index 135dea931..886636af7 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormDataService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormDataService.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.dynamicform.service; +package cn.bootx.platform.baseapi.core.dynamicform.service; -import cn.bootx.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.rest.param.PageParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -9,7 +9,7 @@ * 动态表单数据收集 * * @author xxm - * @date 2022/8/13 + * @since 2022/8/13 */ @Slf4j @Service diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormService.java similarity index 75% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormService.java index 6fd394551..39c93a1ea 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicform/service/DynamicFormService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicform/service/DynamicFormService.java @@ -1,14 +1,14 @@ -package cn.bootx.baseapi.core.dynamicform.service; +package cn.bootx.platform.baseapi.core.dynamicform.service; -import cn.bootx.baseapi.core.dynamicform.dao.DynamicFormManager; -import cn.bootx.baseapi.core.dynamicform.entity.DynamicForm; -import cn.bootx.baseapi.dto.dynamicform.DynamicFormDto; -import cn.bootx.baseapi.param.dynamicform.DynamicFormParam; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.dto.dynamicform.DynamicFormDto; +import cn.bootx.platform.baseapi.param.dynamicform.DynamicFormParam; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.dynamicform.dao.DynamicFormManager; +import cn.bootx.platform.baseapi.core.dynamicform.entity.DynamicForm; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.RequiredArgsConstructor; @@ -21,7 +21,7 @@ * 动态表单 * * @author xxm - * @date 2022-07-28 + * @since 2022-07-28 */ @Slf4j @Service @@ -90,4 +90,4 @@ public void delete(Long id) { dynamicFormManager.deleteById(id); } -} \ No newline at end of file +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java new file mode 100644 index 000000000..d39fc09bb --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/convert/DynamicDataSourceConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.dynamicsource.convert; + +import cn.bootx.platform.baseapi.dto.dynamicsource.DynamicDataSourceDto; +import cn.bootx.platform.baseapi.param.dynamicsource.DynamicDataSourceParam; +import cn.bootx.platform.baseapi.core.dynamicsource.entity.DynamicDataSource; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 动态数据源管理 + * + * @author xxm + * @since 2022-09-24 + */ +@Mapper +public interface DynamicDataSourceConvert { + + DynamicDataSourceConvert CONVERT = Mappers.getMapper(DynamicDataSourceConvert.class); + + DynamicDataSource convert(DynamicDataSourceParam in); + + DynamicDataSourceDto convert(DynamicDataSource in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java new file mode 100644 index 000000000..4639c4608 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceManager.java @@ -0,0 +1,61 @@ +package cn.bootx.platform.baseapi.core.dynamicsource.dao; + +import cn.bootx.platform.baseapi.core.dynamicsource.entity.DynamicDataSource; +import cn.bootx.platform.baseapi.param.dynamicsource.DynamicDataSourceParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * 动态数据源管理 + * + * @author xxm + * @since 2022-09-24 + */ +@Repository +@RequiredArgsConstructor +public class DynamicDataSourceManager extends BaseManager { + + public Optional findByCode(String code) { + return findByField(DynamicDataSource::getCode, code); + } + + public boolean existsByCode(String code) { + return existedByField(DynamicDataSource::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(DynamicDataSource::getCode, code, id); + } + + /** + * 分页 + */ + public Page page(PageParam pageParam, DynamicDataSourceParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, DynamicDataSource.class); + return this.lambdaQuery() + .select(this.getEntityClass(), MpUtil::excludeBigField) + .eq(StrUtil.isNotBlank(param.getDatabaseType()), DynamicDataSource::getDatabaseType, + param.getDatabaseType()) + .like(StrUtil.isNotBlank(param.getCode()), DynamicDataSource::getCode, param.getCode()) + .like(StrUtil.isNotBlank(param.getName()), DynamicDataSource::getName, param.getName()) + .orderByDesc(MpIdEntity::getId) + .page(mpPage); + } + + /** + * 查询开启自动加载的数据源 + */ + public ListfindAllByAutoLoad(){ + return this.findAllByField(DynamicDataSource::isAutoLoad,true); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java new file mode 100644 index 000000000..f59b19d11 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/dao/DynamicDataSourceMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.dynamicsource.dao; + +import cn.bootx.platform.baseapi.core.dynamicsource.entity.DynamicDataSource; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 动态数据源管理 + * + * @author xxm + * @since 2022-09-24 + */ +@Mapper +public interface DynamicDataSourceMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/entity/DynamicDataSource.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/entity/DynamicDataSource.java new file mode 100644 index 000000000..84de88d5c --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/entity/DynamicDataSource.java @@ -0,0 +1,65 @@ +package cn.bootx.platform.baseapi.core.dynamicsource.entity; + +import cn.bootx.platform.baseapi.core.dynamicsource.convert.DynamicDataSourceConvert; +import cn.bootx.platform.baseapi.dto.dynamicsource.DynamicDataSourceDto; +import cn.bootx.platform.baseapi.param.dynamicsource.DynamicDataSourceParam; +import cn.bootx.platform.common.core.annotation.EncryptionField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 动态数据源管理 + * + * @author xxm + * @since 2022-09-24 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("base_dynamic_data_source") +public class DynamicDataSource extends MpBaseEntity implements EntityBaseFunction { + + /** 数据源编码 */ + private String code; + + /** 数据源名称 */ + private String name; + + /** 数据库类型 */ + private String databaseType; + + /** 是否启动自动加载 */ + private boolean autoLoad; + + /** 驱动类 */ + private String dbDriver; + + /** 数据库地址 */ + private String dbUrl; + + /** 用户名 */ + private String dbUsername; + + /** 密码 */ + @EncryptionField + private String dbPassword; + + /** 备注 */ + private String remark; + + /** 创建对象 */ + public static DynamicDataSource init(DynamicDataSourceParam in) { + return DynamicDataSourceConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public DynamicDataSourceDto toDto() { + return DynamicDataSourceConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/service/DynamicDataSourceService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/service/DynamicDataSourceService.java similarity index 84% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/service/DynamicDataSourceService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/service/DynamicDataSourceService.java index 702d229a9..5a869aa17 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/dynamicsource/service/DynamicDataSourceService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/dynamicsource/service/DynamicDataSourceService.java @@ -1,16 +1,16 @@ -package cn.bootx.baseapi.core.dynamicsource.service; - -import cn.bootx.baseapi.core.dynamicsource.dao.DynamicDataSourceManager; -import cn.bootx.baseapi.core.dynamicsource.entity.DynamicDataSource; -import cn.bootx.baseapi.dto.dynamicsource.DynamicDataSourceDto; -import cn.bootx.baseapi.param.dynamicsource.DynamicDataSourceParam; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; +package cn.bootx.platform.baseapi.core.dynamicsource.service; + +import cn.bootx.platform.baseapi.dto.dynamicsource.DynamicDataSourceDto; +import cn.bootx.platform.baseapi.param.dynamicsource.DynamicDataSourceParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.dynamicsource.dao.DynamicDataSourceManager; +import cn.bootx.platform.baseapi.core.dynamicsource.entity.DynamicDataSource; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.db.ds.simple.SimpleDataSource; @@ -35,7 +35,7 @@ * 动态数据源管理 * * @author xxm - * @date 2022/9/24 + * @since 2022/9/24 */ @Slf4j @Service @@ -176,15 +176,6 @@ public void addDynamicDataSourceById(Long id) { this.addDynamicDataSource(dataSource); } - /** - * 根据编码进行添加 - */ - public void addDynamicDataSourceByCode(String code) { - DynamicDataSource dataSource = dynamicDataSourceManager.findByCode(code) - .orElseThrow(DataNotExistException::new); - this.addDynamicDataSource(dataSource); - } - /** * 查询当前数据源列表 */ @@ -211,4 +202,18 @@ public void removeDataSourceByKey(String key) { dynamicRoutingDataSource.removeDataSource(key); } + /** + * 启动时初始化加载 + */ + public void initLoad(){ + for (DynamicDataSource dynamicDataSource : dynamicDataSourceManager.findAllByAutoLoad()) { + try { + addDynamicDataSource(dynamicDataSource); + } catch (Exception e){ + String errorMsg = dynamicDataSource.getName()+"数据源加载失败"; + log.error(errorMsg,e); + } + } + } + } diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueManager.java new file mode 100644 index 000000000..52cee8837 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueManager.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.core.keyvalue.dao; + +import cn.bootx.platform.baseapi.core.keyvalue.entity.SysKeyValue; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * @author xxm + * @since 2022/3/30 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class SysKeyValueManager extends BaseManager { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueMapper.java new file mode 100644 index 000000000..367dbfea8 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/dao/SysKeyValueMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.baseapi.core.keyvalue.dao; + +import cn.bootx.platform.baseapi.core.keyvalue.entity.SysKeyValue; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2022/3/30 + */ +@Mapper +public interface SysKeyValueMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/entity/SysKeyValue.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/entity/SysKeyValue.java similarity index 77% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/entity/SysKeyValue.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/entity/SysKeyValue.java index 7e77c4da8..8efc40ade 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/keyvalue/entity/SysKeyValue.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/entity/SysKeyValue.java @@ -1,7 +1,7 @@ -package cn.bootx.baseapi.core.keyvalue.entity; +package cn.bootx.platform.baseapi.core.keyvalue.entity; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.common.mybatisplus.base.MpDelEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; @@ -13,7 +13,7 @@ * kv存储 * * @author xxm - * @date 2022/3/30 + * @since 2022/3/30 */ @EqualsAndHashCode(callSuper = true) @Data @@ -21,7 +21,7 @@ @AllArgsConstructor @Accessors(chain = true) @TableName("base_key_value") -public class SysKeyValue extends MpBaseEntity { +public class SysKeyValue extends MpDelEntity { /** * key值 diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/service/SysKeyValueService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/service/SysKeyValueService.java new file mode 100644 index 000000000..d0f958c40 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/keyvalue/service/SysKeyValueService.java @@ -0,0 +1,69 @@ +package cn.bootx.platform.baseapi.core.keyvalue.service; + +import cn.bootx.platform.common.core.function.SystemKeyValueService; +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.baseapi.core.keyvalue.dao.SysKeyValueManager; +import cn.bootx.platform.baseapi.core.keyvalue.entity.SysKeyValue; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * kv存储 + * + * @author xxm + * @since 2022/3/30 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SysKeyValueService implements SystemKeyValueService { + + private final SysKeyValueManager sysKeyValueManager; + + /** + * 获取值 + */ + @Override + public String get(String key) { + return sysKeyValueManager.findByField(SysKeyValue::getKey, key).map(SysKeyValue::getValue).orElse(null); + } + + /** + * 获取多个 + */ + @Override + public List gets(List keys) { + return sysKeyValueManager.findAllByFields(SysKeyValue::getKey, keys) + .stream() + .map(SysKeyValue::toKeyValue) + .collect(Collectors.toList()); + } + + /** + * 设置值 + */ + @Override + public void setup(String key, String value) { + SysKeyValue sysKeyValue = sysKeyValueManager.findByField(SysKeyValue::getKey, key) + .orElse(new SysKeyValue().setKey(key).setValue(value)); + sysKeyValueManager.saveOrUpdate(sysKeyValue); + } + + /** + * 保存多个值 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void setupBatch(List list) { + List collect = list.stream() + .map(SysKeyValue::init) + .collect(Collectors.toList()); + sysKeyValueManager.saveAll(collect); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/convert/SystemConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/convert/SystemConvert.java new file mode 100644 index 000000000..2890c70ef --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/convert/SystemConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.parameter.convert; + +import cn.bootx.platform.baseapi.dto.parameter.SystemParameterDto; +import cn.bootx.platform.baseapi.param.system.SystemParameterParam; +import cn.bootx.platform.baseapi.core.parameter.entity.SystemParameter; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 系统参数和系统配置实体类转换 + * + * @author xxm + * @since 2021/10/25 + */ +@Mapper +public interface SystemConvert { + + SystemConvert CONVERT = Mappers.getMapper(SystemConvert.class); + + SystemParameterDto convert(SystemParameter in); + + SystemParameter convert(SystemParameterParam in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamManager.java new file mode 100644 index 000000000..200bd344e --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamManager.java @@ -0,0 +1,77 @@ +package cn.bootx.platform.baseapi.core.parameter.dao; + +import cn.bootx.platform.baseapi.code.CachingCode; +import cn.bootx.platform.baseapi.core.parameter.entity.SystemParameter; +import cn.bootx.platform.baseapi.param.system.SystemParameterParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.util.Optional; + +/** + * 系统参数 + * + * @author xxm + * @since 2021/10/25 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class SystemParamManager extends BaseManager { + + @Override + @CacheEvict(value = CachingCode.SYSTEM_PARAM, allEntries = true) + public SystemParameter updateById(SystemParameter systemParameter) { + return super.updateById(systemParameter); + } + + @Override + @CacheEvict(value = CachingCode.SYSTEM_PARAM, allEntries = true) + public boolean deleteById(Serializable id) { + return super.deleteById(id); + } + + /** + * 根据键名获取键值 + */ + @Cacheable(value = CachingCode.SYSTEM_PARAM, key = "#key") + public Optional findByParamKey(String key) { + return this.findByField(SystemParameter::getParamKey, key); + } + + /** + * key重复检查 + */ + public boolean existsByKey(String key) { + return existedByField(SystemParameter::getParamKey, key); + } + + /** + * key重复检查 + */ + public boolean existsByKey(String key, Long id) { + return existedByField(SystemParameter::getParamKey, key, id); + } + + /** + * 分页 + */ + public Page page(PageParam pageParam, SystemParameterParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, SystemParameter.class); + return lambdaQuery().orderByDesc(MpIdEntity::getId) + .like(StrUtil.isNotBlank(param.getName()), SystemParameter::getName, param.getName()) + .like(StrUtil.isNotBlank(param.getParamKey()), SystemParameter::getParamKey, param.getParamKey()) + .page(mpPage); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamMapper.java new file mode 100644 index 000000000..04b29db1f --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/dao/SystemParamMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.baseapi.core.parameter.dao; + +import cn.bootx.platform.baseapi.core.parameter.entity.SystemParameter; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/10/25 + */ +@Mapper +public interface SystemParamMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/entity/SystemParameter.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/entity/SystemParameter.java new file mode 100644 index 000000000..0172bb935 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/entity/SystemParameter.java @@ -0,0 +1,58 @@ +package cn.bootx.platform.baseapi.core.parameter.entity; + +import cn.bootx.platform.baseapi.core.parameter.convert.SystemConvert; +import cn.bootx.platform.baseapi.dto.parameter.SystemParameterDto; +import cn.bootx.platform.baseapi.param.system.SystemParameterParam; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 系统参数 + * + * @author xxm + * @since 2021/10/25 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("base_param") +public class SystemParameter extends MpBaseEntity implements EntityBaseFunction { + + /** 参数名称 */ + private String name; + + /** 参数键名 */ + private String paramKey; + + /** 参数值 */ + private String value; + + /** 参数类型 */ + private Integer type; + + /** 是否启用 */ + private Boolean enable; + + /** 内置参数 */ + @TableField(updateStrategy = FieldStrategy.NEVER) + private boolean internal; + + /** 备注 */ + private String remark; + + @Override + public SystemParameterDto toDto() { + return SystemConvert.CONVERT.convert(this); + } + + public static SystemParameter init(SystemParameterParam in) { + return SystemConvert.CONVERT.convert(in); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/service/SystemParamService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/service/SystemParamService.java similarity index 75% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/service/SystemParamService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/service/SystemParamService.java index fe664f996..8ba492023 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/parameter/service/SystemParamService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/parameter/service/SystemParamService.java @@ -1,15 +1,15 @@ -package cn.bootx.baseapi.core.parameter.service; +package cn.bootx.platform.baseapi.core.parameter.service; -import cn.bootx.baseapi.core.parameter.dao.SystemParamManager; -import cn.bootx.baseapi.core.parameter.entity.SystemParameter; -import cn.bootx.baseapi.dto.parameter.SystemParameterDto; -import cn.bootx.baseapi.param.system.SystemParameterParam; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.function.ParamService; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.dto.parameter.SystemParameterDto; +import cn.bootx.platform.baseapi.param.system.SystemParameterParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.function.ParamService; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.baseapi.core.parameter.dao.SystemParamManager; +import cn.bootx.platform.baseapi.core.parameter.entity.SystemParameter; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.RequiredArgsConstructor; @@ -19,12 +19,13 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Objects; +import java.util.Optional; /** * 系统参数 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ @Slf4j @Service @@ -117,7 +118,11 @@ public boolean existsByKey(String key, Long id) { */ @Override public String getValue(String key) { - return systemParamManager.findByParamKey(key).map(SystemParameter::getValue).orElse(null); + Optional opt = systemParamManager.findByParamKey(key); + if (opt.isPresent()&&Objects.equals(opt.get().getEnable(), true)) { + return opt.map(SystemParameter::getValue).orElse(null); + } + return null; } } diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaManager.java new file mode 100644 index 000000000..4b1523289 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaManager.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Area; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 区域表 + * + * @author xxm + * @since 2022-12-24 + */ +@Repository +@RequiredArgsConstructor +public class AreaManager extends BaseManager { + + public List findAllByCityCode(String cityCode) { + return findAllByField(Area::getCityCode, cityCode); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaMapper.java new file mode 100644 index 000000000..955fce5b4 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/AreaMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Area; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 区域表 + * + * @author xxm + * @since 2022-12-24 + */ +@Mapper +public interface AreaMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityManager.java new file mode 100644 index 000000000..35844aa67 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityManager.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.City; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 城市表 + * + * @author xxm + * @since 2022-12-24 + */ +@Repository +@RequiredArgsConstructor +public class CityManager extends BaseManager { + + public List findAllByProvinceCode(String provinceCode) { + return findAllByField(City::getProvinceCode, provinceCode); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityMapper.java new file mode 100644 index 000000000..527e5b0da --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/CityMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.City; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 城市表 + * + * @author xxm + * @since 2022-12-24 + */ +@Mapper +public interface CityMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceManager.java new file mode 100644 index 000000000..ac27e072d --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceManager.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Province; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * 省份表 + * + * @author xxm + * @since 2022-12-24 + */ +@Repository +@RequiredArgsConstructor +public class ProvinceManager extends BaseManager { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceMapper.java new file mode 100644 index 000000000..8ef0286f8 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/ProvinceMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Province; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 省份表 + * + * @author xxm + * @since 2022-12-24 + */ +@Mapper +public interface ProvinceMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetManager.java new file mode 100644 index 000000000..62d517f76 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetManager.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Street; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 街道表 + * + * @author xxm + * @since 2022-12-24 + */ +@Repository +@RequiredArgsConstructor +public class StreetManager extends BaseManager { + + public List findAllByAreaCode(String areaCode) { + return findAllByField(Street::getAreaCode, areaCode); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetMapper.java new file mode 100644 index 000000000..7a68223de --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/StreetMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Street; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 街道表 + * + * @author xxm + * @since 2022-12-24 + */ +@Mapper +public interface StreetMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageManager.java new file mode 100644 index 000000000..8855d7914 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageManager.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Village; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 村庄/社区 + * + * @author xxm + * @since 2023/2/3 + */ +@Repository +@RequiredArgsConstructor +public class VillageManager extends BaseManager { + + public List findAllByStreetCode(String streetCode) { + return findAllByField(Village::getStreetCode, streetCode); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageMapper.java new file mode 100644 index 000000000..dacf9cb66 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/dao/VillageMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.baseapi.core.region.dao; + +import cn.bootx.platform.baseapi.core.region.entity.Village; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 村庄/社区 + * + * @author xxm + * @since 2023/2/3 + */ +@Mapper +public interface VillageMapper extends BaseMapper { + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Area.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Area.java similarity index 79% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Area.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Area.java index a84e6515a..70f44419c 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Area.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Area.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.region.entity; +package cn.bootx.platform.baseapi.core.region.entity; -import cn.bootx.baseapi.dto.region.RegionDto; +import cn.bootx.platform.baseapi.dto.region.RegionDto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -9,7 +9,7 @@ * 区域表(县区) * * @author xxm - * @date 2022-12-24 + * @since 2022-12-24 */ @Data @TableName("base_area") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/City.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/City.java similarity index 80% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/City.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/City.java index fb050d742..64cf37ebd 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/City.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/City.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.region.entity; +package cn.bootx.platform.baseapi.core.region.entity; -import cn.bootx.baseapi.dto.region.RegionDto; +import cn.bootx.platform.baseapi.dto.region.RegionDto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -9,7 +9,7 @@ * 城市表 * * @author xxm - * @date 2022-12-24 + * @since 2022-12-24 */ @Data @TableName("base_city") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Province.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Province.java similarity index 77% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Province.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Province.java index cb496e42d..2f631cdca 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Province.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Province.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.region.entity; +package cn.bootx.platform.baseapi.core.region.entity; -import cn.bootx.baseapi.dto.region.RegionDto; +import cn.bootx.platform.baseapi.dto.region.RegionDto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -9,7 +9,7 @@ * 省份表 * * @author xxm - * @date 2022-12-24 + * @since 2022-12-24 */ @Data @TableName("base_province") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Street.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Street.java similarity index 80% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Street.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Street.java index 8d34e43fd..5091b1340 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Street.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Street.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.region.entity; +package cn.bootx.platform.baseapi.core.region.entity; -import cn.bootx.baseapi.dto.region.RegionDto; +import cn.bootx.platform.baseapi.dto.region.RegionDto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -9,7 +9,7 @@ * 街道/乡镇表 * * @author xxm - * @date 2022-12-24 + * @since 2022-12-24 */ @Data @TableName("base_street") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Village.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Village.java similarity index 80% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Village.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Village.java index f3dc6ae13..67bf34985 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/entity/Village.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/entity/Village.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.core.region.entity; +package cn.bootx.platform.baseapi.core.region.entity; -import cn.bootx.baseapi.dto.region.RegionDto; +import cn.bootx.platform.baseapi.dto.region.RegionDto; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -9,7 +9,7 @@ * 村庄/社区 * * @author xxm - * @date 2023/2/3 + * @since 2023/2/3 */ @Data @TableName("base_village") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/service/ChinaRegionService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/service/ChinaRegionService.java similarity index 84% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/service/ChinaRegionService.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/service/ChinaRegionService.java index 32852c0ea..4a643f170 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/region/service/ChinaRegionService.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/region/service/ChinaRegionService.java @@ -1,10 +1,11 @@ -package cn.bootx.baseapi.core.region.service; +package cn.bootx.platform.baseapi.core.region.service; -import cn.bootx.baseapi.code.ChinaRegionCode; -import cn.bootx.baseapi.core.region.dao.*; -import cn.bootx.baseapi.core.region.entity.*; -import cn.bootx.baseapi.dto.region.RegionDto; -import cn.bootx.common.core.util.TreeBuildUtil; +import cn.bootx.platform.baseapi.code.CachingCode; +import cn.bootx.platform.baseapi.code.ChinaRegionCode; +import cn.bootx.platform.baseapi.core.region.dao.*; +import cn.bootx.platform.baseapi.core.region.entity.*; +import cn.bootx.platform.baseapi.dto.region.RegionDto; +import cn.bootx.platform.common.core.util.TreeBuildUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; @@ -14,13 +15,11 @@ import java.util.List; import java.util.stream.Collectors; -import static cn.bootx.baseapi.code.CachingCode.CHINA_REGION; - /** * 中国行政区划 * * @author xxm - * @date 2022/12/24 + * @since 2022/12/24 */ @Slf4j @Service @@ -40,7 +39,7 @@ public class ChinaRegionService { /** * 根据区划级别和上级区划代码获取当前行政区划的列表 */ - @Cacheable(value = CHINA_REGION, key = "#parentCode") + @Cacheable(value = CachingCode.CHINA_REGION, key = "#parentCode") public List findAllRegionByParentCode(String parentCode) { if (parentCode.length() == ChinaRegionCode.IMPORT_TYPE_PROVINCE.getLength()) { return cityManager.findAllByProvinceCode(parentCode).stream().map(City::toDto).collect(Collectors.toList()); @@ -65,7 +64,7 @@ else if (parentCode.length() == ChinaRegionCode.IMPORT_TYPE_STREET.getLength()) /** * 获取一级行政区 */ - @Cacheable(value = CHINA_REGION, key = "'p'") + @Cacheable(value = CachingCode.CHINA_REGION, key = "'p'") public List findAllProvince() { return provinceManager.findAll().stream().map(Province::toDto).collect(Collectors.toList()); } @@ -73,7 +72,7 @@ public List findAllProvince() { /** * 获取省市联动列表 */ - @Cacheable(value = CHINA_REGION, key = "'pc'") + @Cacheable(value = CachingCode.CHINA_REGION, key = "'pc'") public List findAllProvinceAndCity() { List provinceList = provinceManager.findAll() .stream() @@ -90,7 +89,7 @@ public List findAllProvinceAndCity() { /** * 获取省市区县联动列表 */ - @Cacheable(value = CHINA_REGION, key = "'pca'") + @Cacheable(value = CachingCode.CHINA_REGION, key = "'pca'") public List findAllProvinceAndCityAndArea() { List provinceList = provinceManager.findAll() .stream() diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/convert/GeneralTemplateConvert.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/convert/GeneralTemplateConvert.java new file mode 100644 index 000000000..8e54a50ff --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/convert/GeneralTemplateConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.baseapi.core.template.convert; + +import cn.bootx.platform.baseapi.core.template.entity.GeneralTemplate; +import cn.bootx.platform.baseapi.dto.template.GeneralTemplateDto; +import cn.bootx.platform.baseapi.param.template.GeneralTemplateParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@Mapper +public interface GeneralTemplateConvert { + GeneralTemplateConvert CONVERT = Mappers.getMapper(GeneralTemplateConvert.class); + + GeneralTemplate convert(GeneralTemplateParam in); + + GeneralTemplateDto convert(GeneralTemplate in); + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateManager.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateManager.java new file mode 100644 index 000000000..ab25026e1 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateManager.java @@ -0,0 +1,47 @@ +package cn.bootx.platform.baseapi.core.template.dao; + +import cn.bootx.platform.baseapi.core.template.entity.GeneralTemplate; +import cn.bootx.platform.baseapi.param.template.GeneralTemplateParam; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@Repository +@RequiredArgsConstructor +public class GeneralTemplateManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, GeneralTemplateParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, GeneralTemplate.class); + QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(GeneralTemplate::getId)); + return this.page(mpPage,wrapper); + } + + public Optional findByCode(String code){ + return findByField(GeneralTemplate::getCode,code); + } + + public boolean existsByCode(String code) { + return existedByField(GeneralTemplate::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(GeneralTemplate::getCode, code, id); + } +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateMapper.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateMapper.java new file mode 100644 index 000000000..02b6a9a1d --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/dao/GeneralTemplateMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.baseapi.core.template.dao; + +import cn.bootx.platform.baseapi.core.template.entity.GeneralTemplate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@Mapper +public interface GeneralTemplateMapper extends BaseMapper { +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/entity/GeneralTemplate.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/entity/GeneralTemplate.java new file mode 100644 index 000000000..029a03c46 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/entity/GeneralTemplate.java @@ -0,0 +1,77 @@ +package cn.bootx.platform.baseapi.core.template.entity; + +import cn.bootx.platform.baseapi.core.template.convert.GeneralTemplateConvert; +import cn.bootx.platform.baseapi.dto.template.GeneralTemplateDto; +import cn.bootx.platform.baseapi.param.template.GeneralTemplateParam; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.table.modify.annotation.DbComment; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 通用模板管理 + * @author xxm + * @since 2023/8/12 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("base_general_template") +public class GeneralTemplate extends MpBaseEntity implements EntityBaseFunction { + + /** 模板名称 */ + @DbComment("模板名称") + private String name; + + /** 模板代码 */ + @DbComment("模板代码") + private String code; + + /** + * 使用类型(导入/导出) + * @see cn.bootx.platform.baseapi.code.GeneralTemplateCode + */ + @DbComment("使用类型(导入/导出)") + private String useType; + + /** 模板类型 */ + @DbComment("模板类型") + private String fileType; + + /** 模板后缀名 */ + @DbComment("模板后缀名") + private String fileSuffix; + + /** + * 状态 + * @see cn.bootx.platform.baseapi.code.GeneralTemplateCode + */ + @DbComment("状态") + private String state; + + /** 文件ID */ + @DbComment("文件ID") + @TableField(updateStrategy = FieldStrategy.NEVER) + private Long fileId; + + /** 备注 */ + @DbComment("备注") + private String remark; + + + /** 创建对象 */ + public static GeneralTemplate init(GeneralTemplateParam in) { + return GeneralTemplateConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public GeneralTemplateDto toDto() { + return GeneralTemplateConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/service/GeneralTemplateService.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/service/GeneralTemplateService.java new file mode 100644 index 000000000..f9761f82b --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/core/template/service/GeneralTemplateService.java @@ -0,0 +1,112 @@ +package cn.bootx.platform.baseapi.core.template.service; + +import cn.bootx.platform.baseapi.core.template.dao.GeneralTemplateManager; +import cn.bootx.platform.baseapi.core.template.entity.GeneralTemplate; +import cn.bootx.platform.baseapi.dto.template.GeneralTemplateDto; +import cn.bootx.platform.baseapi.param.template.GeneralTemplateParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class GeneralTemplateService { + private final GeneralTemplateManager generalTemplateManager; + + /** + * 添加 + */ + public void add(GeneralTemplateParam param){ + if (generalTemplateManager.existsByCode(param.getCode())) { + throw new BizException("code重复"); + } + GeneralTemplate generalTemplate = GeneralTemplate.init(param); + generalTemplateManager.save(generalTemplate); + } + + /** + * 修改 + */ + public void update(GeneralTemplateParam param){ + if (generalTemplateManager.existsByCode(param.getCode(),param.getId())) { + throw new BizException("code重复"); + } + GeneralTemplate generalTemplate = generalTemplateManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + BeanUtil.copyProperties(param,generalTemplate, CopyOptions.create().ignoreNullValue()); + generalTemplateManager.updateById(generalTemplate); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam,GeneralTemplateParam query){ + return MpUtil.convert2DtoPageResult(generalTemplateManager.page(pageParam,query)); + } + + /** + * 获取单条 + */ + public GeneralTemplateDto findById(Long id){ + return generalTemplateManager.findById(id).map(GeneralTemplate::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 根据编码获取 + */ + public GeneralTemplateDto findByCode(String code){ + return generalTemplateManager.findByCode(code).map(GeneralTemplate::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取全部 + */ + public List findAll(){ + return ResultConvertUtil.dtoListConvert(generalTemplateManager.findAll()); + } + + + /** + * code是否存在 + */ + public boolean existsByCode(String code) { + return generalTemplateManager.existsByCode(code); + } + + /** + * code是否存在 + */ + public boolean existsByCode(String code, Long id) { + return generalTemplateManager.existsByCode(code, id); + } + + /** + * 删除 + */ + public void delete(Long id){ + generalTemplateManager.deleteById(id); + } + + /** + * 批量删除 + */ + public void deleteBatch(List ids){ + generalTemplateManager.deleteByIds(ids); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/captcha/CaptchaDataResult.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/captcha/CaptchaDataResult.java new file mode 100644 index 000000000..234324a14 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/captcha/CaptchaDataResult.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.dto.captcha; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 验证码数据 + * + * @author xxm + * @since 2021/8/2 + */ +@Data +@Accessors(chain = true) +@Schema(title = "验证码数据") +public class CaptchaDataResult { + + @Schema(description = "验证码标识KEY") + private String captchaKey; + + @Schema(description = "验证码base64数据") + private String captchaData; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordDto.java new file mode 100644 index 000000000..f31a395b9 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordDto.java @@ -0,0 +1,30 @@ +package cn.bootx.platform.baseapi.dto.chinaword; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 敏感词 + * @author xxm + * @since 2023-08-09 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "敏感词") +@Accessors(chain = true) +public class ChinaWordDto extends BaseDto { + + @Schema(description = "敏感词") + private String word; + @Schema(description = "分类") + private String type; + @Schema(description = "描述") + private String description; + @Schema(description = "是否启用") + private Boolean enable; + @Schema(description = "是否是白名单名词") + private Boolean white; +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordVerifyResult.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordVerifyResult.java new file mode 100644 index 000000000..dc8887f59 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/chinaword/ChinaWordVerifyResult.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.baseapi.dto.chinaword; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Set; + +/** + * 敏感词验证结果 + * @author xxm + * @since 2023/8/9 + */ +@Data +@Accessors(chain = true) +@Schema(title = "敏感词验证结果") +public class ChinaWordVerifyResult { + + @Schema(description = "是否敏感") + private boolean sensitive; + @Schema(description = "敏感词数量") + private int count; + @Schema(description = "去重后的敏感词列表") + private Set sensitiveWords; + @Schema(description = "脱敏后的文本") + private String text; +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/sql/QuerySqlDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/QuerySqlDto.java similarity index 80% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/sql/QuerySqlDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/QuerySqlDto.java index 635b601b8..e927da246 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/sql/QuerySqlDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/QuerySqlDto.java @@ -1,8 +1,6 @@ -package cn.bootx.baseapi.dto.sql; +package cn.bootx.platform.baseapi.dto.dataresult; -import cn.bootx.baseapi.core.sql.entity.SqlField; -import cn.bootx.baseapi.core.sql.entity.SqlParam; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +10,7 @@ /** * @author xxm - * @date 2023/3/13 + * @since 2023/3/13 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlField.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlField.java similarity index 83% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlField.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlField.java index fd7d64990..fc7942f71 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/core/sql/entity/SqlField.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlField.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.core.sql.entity; +package cn.bootx.platform.baseapi.dto.dataresult; import lombok.Getter; import lombok.Setter; diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlParam.java new file mode 100644 index 000000000..5adcd84af --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlParam.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.baseapi.dto.dataresult; + +import cn.bootx.platform.baseapi.code.QuerySqlCode; +import lombok.Getter; +import lombok.Setter; + +/** + * SQL查询参数 + */ +@Getter +@Setter +public class SqlParam { + + /** + * 参数名称 + */ + private String name; + + /** + * 类型 + * + * @see QuerySqlCode + */ + private String type; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlQueryResult.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlQueryResult.java new file mode 100644 index 000000000..68f234e05 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dataresult/SqlQueryResult.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.baseapi.dto.dataresult; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * SQL查询结果 + * @author xxm + * @date 2023/4/11 + */ +@Data +@Accessors(chain = true) +@Schema(title = "SQL查询结果") +public class SqlQueryResult { + + @Schema(description = "字段列表") + private List fields = new ArrayList<>(); + + @Schema(description = "查询内容") + private List> data = new ArrayList<>();; +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryDto.java similarity index 86% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryDto.java index 8a2382578..d02e1ec8b 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryDto.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.dto.dict; +package cn.bootx.platform.baseapi.dto.dict; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ /** * @author xxm - * @date 2020/4/10 14:46 + * @since 2020/4/10 14:46 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemDto.java similarity index 88% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemDto.java index e5e92ccb8..795df4431 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemDto.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.dto.dict; +package cn.bootx.platform.baseapi.dto.dict; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 数据字典项 * * @author xxm - * @date 2020/4/15 17:55 + * @since 2020/4/15 17:55 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemSimpleDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemSimpleDto.java similarity index 89% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemSimpleDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemSimpleDto.java index 26cfd4821..f783364fb 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dict/DictionaryItemSimpleDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dict/DictionaryItemSimpleDto.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.dto.dict; +package cn.bootx.platform.baseapi.dto.dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 数据字典项(简单) * * @author xxm - * @date 2020/4/15 17:55 + * @since 2020/4/15 17:55 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicform/DynamicFormDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicform/DynamicFormDto.java similarity index 82% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicform/DynamicFormDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicform/DynamicFormDto.java index cb59901d9..8e886ab83 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicform/DynamicFormDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicform/DynamicFormDto.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.dto.dynamicform; +package cn.bootx.platform.baseapi.dto.dynamicform; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ * 动态表单 * * @author xxm - * @date 2022-07-28 + * @since 2022-07-28 */ @EqualsAndHashCode(callSuper = true) @Data @@ -30,4 +30,4 @@ public class DynamicFormDto extends BaseDto { @Schema(description = "备注") private String remark; -} \ No newline at end of file +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicsource/DynamicDataSourceDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicsource/DynamicDataSourceDto.java similarity index 83% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicsource/DynamicDataSourceDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicsource/DynamicDataSourceDto.java index 90238626d..13ce13a61 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/dynamicsource/DynamicDataSourceDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/dynamicsource/DynamicDataSourceDto.java @@ -1,7 +1,7 @@ -package cn.bootx.baseapi.dto.dynamicsource; +package cn.bootx.platform.baseapi.dto.dynamicsource; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ * 动态数据源管理 * * @author xxm - * @date 2022-09-24 + * @since 2022-09-24 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/parameter/SystemParameterDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/parameter/SystemParameterDto.java similarity index 86% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/parameter/SystemParameterDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/parameter/SystemParameterDto.java index 015e9fd5b..cf24d18cf 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/parameter/SystemParameterDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/parameter/SystemParameterDto.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.dto.parameter; +package cn.bootx.platform.baseapi.dto.parameter; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ * 系统参数 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/region/RegionDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/region/RegionDto.java similarity index 92% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/region/RegionDto.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/region/RegionDto.java index fa96068f3..dae3b9b07 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/dto/region/RegionDto.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/region/RegionDto.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.dto.region; +package cn.bootx.platform.baseapi.dto.region; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -13,7 +13,7 @@ * 中国行政区域通用对象 * * @author xxm - * @date 2022/12/24 + * @since 2022/12/24 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/template/GeneralTemplateDto.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/template/GeneralTemplateDto.java new file mode 100644 index 000000000..cb2ccfc73 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/dto/template/GeneralTemplateDto.java @@ -0,0 +1,41 @@ +package cn.bootx.platform.baseapi.dto.template; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDate; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "通用模板管理") +@Accessors(chain = true) +public class GeneralTemplateDto extends BaseDto { + + @Schema(description = "模板名称") + private String name; + @Schema(description = "模板代码") + private String code; + @Schema(description = "使用类型(导入/导出)") + private String useType; + @Schema(description = "模板类型") + private String fileType; + @Schema(description = "模板后缀名") + private String fileSuffix; + @Schema(description = "状态") + private String state; + @Schema(description = "文件ID") + private Long fileId; + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictAlreadyExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictAlreadyExistedException.java new file mode 100644 index 000000000..5b138b97d --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictAlreadyExistedException.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/10 15:14 + */ +public class DictAlreadyExistedException extends BizException implements Serializable { + + public DictAlreadyExistedException() { + super(BspErrorCodes.DICTIONARY_ALREADY_EXISTED, "字典已经存在."); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictChildItemExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictChildItemExistedException.java new file mode 100644 index 000000000..0bcdef395 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictChildItemExistedException.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/16 22:08 + */ +public class DictChildItemExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = -3964173905076738575L; + + public DictChildItemExistedException() { + super(BspErrorCodes.CHILD_ITEM_EXISTED, "存在字典子项,您无法将其删除。"); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyExistedException.java new file mode 100644 index 000000000..60e67264e --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyExistedException.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/21 11:53 + */ +public class DictItemAlreadyExistedException extends BizException implements Serializable { + + public DictItemAlreadyExistedException() { + super(BspErrorCodes.DICTIONARY_ITEM_ALREADY_EXISTED, "字典项目已存在."); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyUsedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyUsedException.java new file mode 100644 index 000000000..294af1e36 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemAlreadyUsedException.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/21 11:54 + */ +public class DictItemAlreadyUsedException extends BizException implements Serializable { + + public DictItemAlreadyUsedException() { + super(BspErrorCodes.DICTIONARY_ITEM_ALREADY_USED, "词典项目已被使用."); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemNotExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemNotExistedException.java new file mode 100644 index 000000000..236367f70 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictItemNotExistedException.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/21 11:54 + */ +public class DictItemNotExistedException extends BizException implements Serializable { + + public DictItemNotExistedException() { + super(BspErrorCodes.DICTIONARY_ITEM_NOT_EXISTED, "字典项不存在."); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictNotExistedException.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictNotExistedException.java new file mode 100644 index 000000000..ce7e0be13 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/exception/dict/DictNotExistedException.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.baseapi.exception.dict; + +import cn.bootx.platform.baseapi.code.BspErrorCodes; +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/21 11:53 + */ +public class DictNotExistedException extends BizException implements Serializable { + + public DictNotExistedException() { + super(BspErrorCodes.DICTIONARY_NOT_EXISTED, "字典不存在."); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/dynamicsource/DynamicDataSourceLoadHandler.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/dynamicsource/DynamicDataSourceLoadHandler.java new file mode 100644 index 000000000..28775ba54 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/dynamicsource/DynamicDataSourceLoadHandler.java @@ -0,0 +1,28 @@ +package cn.bootx.platform.baseapi.handler.dynamicsource; + +import cn.bootx.platform.baseapi.core.dynamicsource.service.DynamicDataSourceService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +/** + * 初始化数据源函数 + * @author xxm + * @since 2023/5/17 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class DynamicDataSourceLoadHandler { + private final DynamicDataSourceService dynamicDataSourceService; + + /** + * 启动时初始化加载多数据源 + */ + @Bean + public void dynamicDataSourceService$initLoad(){ + dynamicDataSourceService.initLoad(); + } + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/mp/MpMetaObjectHandler.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/mp/MpMetaObjectHandler.java similarity index 85% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/mp/MpMetaObjectHandler.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/mp/MpMetaObjectHandler.java index 634b60128..06b5b98cb 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/mp/MpMetaObjectHandler.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/mp/MpMetaObjectHandler.java @@ -1,8 +1,8 @@ -package cn.bootx.baseapi.handler.mp; +package cn.bootx.platform.baseapi.handler.mp; -import cn.bootx.common.core.code.CommonCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import cn.hutool.core.util.DesensitizedUtil; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; @@ -14,7 +14,7 @@ * mp自动填充值 * * @author xxm - * @date 2021/7/27 + * @since 2021/7/27 */ @Component public class MpMetaObjectHandler implements MetaObjectHandler { diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/region/ChinaRegionInitSqlHandler.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/region/ChinaRegionInitSqlHandler.java similarity index 89% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/region/ChinaRegionInitSqlHandler.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/region/ChinaRegionInitSqlHandler.java index 1dbf30226..df05b34d4 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/handler/region/ChinaRegionInitSqlHandler.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/handler/region/ChinaRegionInitSqlHandler.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.handler.region; +package cn.bootx.platform.baseapi.handler.region; import com.baomidou.mybatisplus.extension.ddl.SimpleDdl; import org.springframework.stereotype.Component; @@ -10,7 +10,7 @@ * 行政区域初始化 * * @author xxm - * @date 2023/2/7 + * @since 2023/2/7 */ @Component public class ChinaRegionInitSqlHandler extends SimpleDdl { diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordImportParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordImportParam.java new file mode 100644 index 000000000..5edd178b8 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordImportParam.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.baseapi.param.chinaword; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * 敏感词导入参数 + * @author xxm + * @since 2023/8/12 + */ +@Data +public class ChinaWordImportParam { + @ExcelProperty(value = "类型") + private String type; + @ExcelProperty("黑/白名单") + private String whiteOrBlack; + @ExcelProperty("敏感词") + private String word; +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordParam.java new file mode 100644 index 000000000..3e5c1fc78 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordParam.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.baseapi.param.chinaword; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 敏感词 + * @author xxm + * @since 2023-08-09 + */ +@Data +@Schema(title = "敏感词") +@Accessors(chain = true) +public class ChinaWordParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "敏感词") + private String word; + @Schema(description = "分类") + private String type; + @Schema(description = "描述") + private String description; + @Schema(description = "是否启用") + private Boolean enable; + @Schema(description = "白名单名词") + private Boolean white; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordVerifyParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordVerifyParam.java new file mode 100644 index 000000000..46d2465a6 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/chinaword/ChinaWordVerifyParam.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.baseapi.param.chinaword; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 敏感词验证参数类 + * @author xxm + * @since 2023/8/10 + */ +@Data +@Accessors(chain = true) +@Schema(title = "敏感词验证参数类") +public class ChinaWordVerifyParam { + @Schema(description = "文本") + private String text; + + @Schema(description = "间隔距离") + private int skip = 0; + + @Schema(description = "替换字符") + private char symbol = '*'; +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/DataResultSqlParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/DataResultSqlParam.java new file mode 100644 index 000000000..0f0b1490f --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/DataResultSqlParam.java @@ -0,0 +1,43 @@ +package cn.bootx.platform.baseapi.param.dataresult; + +import cn.bootx.platform.baseapi.dto.dataresult.SqlField; +import cn.bootx.platform.baseapi.dto.dataresult.SqlParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 查询语句参数类 + * + * @author xxm + * @since 2023/3/13 + */ +@Data +@Accessors(chain = true) +@Schema(title = "数据集SQL语句参数") +public class DataResultSqlParam { + + @Schema(description = "主键") + private Long id; + + @Schema(description = "数据源ID") + private Long databaseId; + + @Schema(description = "名称") + private String name; + + @Schema(description = "sql语句") + private String sql; + + @Schema(description = "是否集合") + private Boolean isList; + + @Schema(description = "SQL查询参数") + private List params; + + @Schema(description = "SQL查询结果字段") + private List fields; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/SqlQueryParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/SqlQueryParam.java new file mode 100644 index 000000000..08df146a2 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dataresult/SqlQueryParam.java @@ -0,0 +1,25 @@ +package cn.bootx.platform.baseapi.param.dataresult; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2023/3/9 + */ +@Data +@Accessors(chain = true) +@Schema(title = "通过SQL查询结果字段请求参数") +public class SqlQueryParam { + + @Schema(description = "数据源Key") + private String databaseKey; + + @Schema(description = "SQL语句") + private String sql; + + @Schema(description = "是否启用分页") + private boolean enablePage; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryItemParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryItemParam.java new file mode 100644 index 000000000..e8be33765 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryItemParam.java @@ -0,0 +1,56 @@ +package cn.bootx.platform.baseapi.param.dict; + +import cn.bootx.platform.common.core.validation.ValidationGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.io.Serializable; + +/** + * 字典项参数 + * + * @author xxm + * @since 2021/8/4 + */ +@Data +@Accessors(chain = true) +@Schema(title = "字典项参数") +public class DictionaryItemParam implements Serializable { + + private static final long serialVersionUID = -6847496213782805488L; + + @Null(message = "Id需要为空", groups = ValidationGroup.add.class) + @NotNull(message = "Id不可为空", groups = ValidationGroup.edit.class) + @Schema(description = "主键") + private Long id; + + @NotNull(message = "字典ID不可为空") + @Schema(description = "字典ID") + private Long dictId; + + @Schema(description = "字典编码") + private String dictCode; + + @NotEmpty(message = "字典项编码不可为空", groups = ValidationGroup.add.class) + @Schema(description = "字典项编码") + private String code; + + @NotEmpty(message = "字典项编码不可为空", groups = ValidationGroup.add.class) + @Schema(description = "名称") + private String name; + + @NotNull(message = "启用状态不可为空", groups = ValidationGroup.add.class) + @Schema(description = "启用状态") + private Boolean enable; + + @Schema(description = "字典项排序") + private Double sortNo; + + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryParam.java new file mode 100644 index 000000000..359f57abc --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dict/DictionaryParam.java @@ -0,0 +1,47 @@ +package cn.bootx.platform.baseapi.param.dict; + +import cn.bootx.platform.common.core.validation.ValidationGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.io.Serializable; + +/** + * @author xxm + * @since 2020/4/10 14:46 + */ +@Data +@Accessors(chain = true) +@Schema(title = "数据字典目录") +public class DictionaryParam implements Serializable { + + private static final long serialVersionUID = 8185789462442511856L; + + @Null(message = "Id需要为空", groups = ValidationGroup.add.class) + @NotNull(message = "Id不可为空", groups = ValidationGroup.edit.class) + @Schema(description = "主键") + private Long id; + + @NotEmpty(message = "编码不可以为空", groups = ValidationGroup.add.class) + @Schema(description = "编码") + private String code; + + @NotEmpty(message = "编码不可以为空", groups = ValidationGroup.add.class) + @Schema(description = "名称") + private String name; + + @NotNull(message = "启用状态不可为空", groups = ValidationGroup.add.class) + @Schema(description = "启用状态") + private Boolean enable; + + @Schema(description = "分类标签") + private String groupTag; + + @Schema(description = "描述") + private String remark; + +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicform/DynamicFormParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicform/DynamicFormParam.java similarity index 88% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicform/DynamicFormParam.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicform/DynamicFormParam.java index f9771d5b8..9a3874e69 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicform/DynamicFormParam.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicform/DynamicFormParam.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.param.dynamicform; +package cn.bootx.platform.baseapi.param.dynamicform; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 动态表单 * * @author xxm - * @date 2022-07-28 + * @since 2022-07-28 */ @Data @Schema(title = "动态表单") @@ -30,4 +30,4 @@ public class DynamicFormParam { @Schema(description = "备注") private String remark; -} \ No newline at end of file +} diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicsource/DynamicDataSourceParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicsource/DynamicDataSourceParam.java similarity index 92% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicsource/DynamicDataSourceParam.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicsource/DynamicDataSourceParam.java index 12f7166eb..f79eb52bd 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/dynamicsource/DynamicDataSourceParam.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/dynamicsource/DynamicDataSourceParam.java @@ -1,4 +1,4 @@ -package cn.bootx.baseapi.param.dynamicsource; +package cn.bootx.platform.baseapi.param.dynamicsource; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 动态数据源管理 * * @author xxm - * @date 2022-09-24 + * @since 2022-09-24 */ @Data @Schema(title = "动态数据源管理") diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/system/SystemParameterParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/system/SystemParameterParam.java similarity index 91% rename from bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/system/SystemParameterParam.java rename to bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/system/SystemParameterParam.java index 1f20a12b8..beea6f211 100644 --- a/bootx-services/service-baseapi/src/main/java/cn/bootx/baseapi/param/system/SystemParameterParam.java +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/system/SystemParameterParam.java @@ -1,6 +1,6 @@ -package cn.bootx.baseapi.param.system; +package cn.bootx.platform.baseapi.param.system; -import cn.bootx.common.core.validation.ValidationGroup; +import cn.bootx.platform.common.core.validation.ValidationGroup; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -13,7 +13,7 @@ * 系统参数 * * @author xxm - * @date 2021/10/25 + * @since 2021/10/25 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/template/GeneralTemplateParam.java b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/template/GeneralTemplateParam.java new file mode 100644 index 000000000..b5f7fbdf0 --- /dev/null +++ b/bootx-services/service-baseapi/src/main/java/cn/bootx/platform/baseapi/param/template/GeneralTemplateParam.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.baseapi.param.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 通用模板管理 + * @author xxm + * @since 2023-08-12 + */ +@Data +@Schema(title = "通用模板管理") +@Accessors(chain = true) +public class GeneralTemplateParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "模板名称") + private String name; + @Schema(description = "模板代码") + private String code; + @Schema(description = "使用类型(导入/导出)") + private String useType; + @Schema(description = "模板类型") + private String fileType; + @Schema(description = "模板后缀名") + private String fileSuffix; + @Schema(description = "状态") + private String state; + @Schema(description = "文件ID") + private Long fileId; + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-baseapi/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-baseapi/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 784c64532..01825cbce 100644 --- a/bootx-services/service-baseapi/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-services/service-baseapi/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.baseapi.BaseApiApplication \ No newline at end of file +cn.bootx.platform.baseapi.BaseApiApplication diff --git a/bootx-services/service-iam/pom.xml b/bootx-services/service-iam/pom.xml index 510cea2f0..40bbb5b49 100644 --- a/bootx-services/service-iam/pom.xml +++ b/bootx-services/service-iam/pom.xml @@ -5,7 +5,7 @@ cn.bootx.platform bootx-services - 1.2.3 + 1.3.6.2 4.0.0 @@ -48,11 +48,6 @@ cn.bootx.platform common-super-query - - - cn.bootx.platform - common-lock - cn.bootx.platform @@ -68,6 +63,10 @@ cn.bootx.platform common-starter-wechat + + org.quartz-scheduler + quartz + diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/CachingCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/CachingCode.java deleted file mode 100644 index 6d7e77a99..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/CachingCode.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.code; - -/** - * 缓存名称 - * - * @author xxm - * @date 2021/6/16 - */ -public interface CachingCode { - - /** 直接放行的请求权限 */ - String IGNORE_PATH = "iam:ignore:path"; - - /** 用户请求权限关系缓存 */ - String USER_PATH = "iam:user:path"; - - /** 用户权限码关系缓存 */ - String USER_PERM_CODE = "iam:user:perm:code"; - - /** 用户数据权限关系缓存 */ - String USER_DATA_SCOPE = "iam:user:data:scope"; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/UserStatusCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/UserStatusCode.java deleted file mode 100644 index 6decdb3a2..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/UserStatusCode.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bootx.iam.code; - -/** - * 用户状态码 - * - * @author xxm - * @date 2021/9/9 - */ -public interface UserStatusCode { - - /** 正常 */ - int NORMAL = 1; - - /** 多次登录失败被锁定 */ - int LOCK = 2; - - /** 封禁 */ - int BAN = 3; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/AuthAssistController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/AuthAssistController.java deleted file mode 100644 index 191eefb1b..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/AuthAssistController.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.iam.core.auth.service.AuthAssistService; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Operation; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author xxm - * @date 2021/9/9 - */ -@Tag(name = "认证支撑接口") -@RestController -@RequestMapping("/auth") -@RequiredArgsConstructor -public class AuthAssistController { - - private final AuthAssistService authAssistService; - - @IgnoreAuth - @Operation(summary = "发送短信验证码") - @PostMapping("/sendSmsCaptcha") - public ResResult sendSmsCaptcha(String phone) { - authAssistService.sendSmsCaptcha(phone); - return Res.ok(); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DataScopeController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DataScopeController.java deleted file mode 100644 index f04e4d057..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DataScopeController.java +++ /dev/null @@ -1,133 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.iam.core.scope.service.DataScopeService; -import cn.bootx.iam.core.scope.service.DataScopeUserService; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.iam.dto.scope.DataScopeUserInfoDto; -import cn.bootx.iam.param.scope.DataScopeDeptParam; -import cn.bootx.iam.param.scope.DataScopeParam; -import cn.bootx.iam.param.scope.DataScopeUserParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Tag(name = "数据范围权限配置") -@RestController -@RequestMapping("/data/scope") -@RequiredArgsConstructor -public class DataScopeController { - - private final DataScopeService dataScopeService; - - private final DataScopeUserService dataScopeUserService; - - @Operation(summary = "添加") - @PostMapping("/add") - public ResResult add(@RequestBody DataScopeParam param) { - dataScopeService.add(param); - return Res.ok(); - } - - @Operation(summary = "更新") - @PostMapping("/update") - public ResResult update(@RequestBody DataScopeParam param) { - dataScopeService.update(param); - return Res.ok(); - } - - @Operation(summary = "删除") - @DeleteMapping("/delete") - public ResResult delete(Long id) { - dataScopeService.delete(id); - return Res.ok(); - } - - @Operation(summary = "保存关联部门") - @PostMapping("/saveDeptAssign") - public ResResult saveDeptAssign(@RequestBody DataScopeDeptParam param) { - dataScopeService.saveDeptAssign(param); - return Res.ok(); - } - - @Operation(summary = "获取关联部门id") - @GetMapping("/getDeptIds") - public ResResult> getDeptIds(Long id) { - return Res.ok(dataScopeService.findDeptIds(id)); - } - - @Operation(summary = "编码是否被使用") - @GetMapping("/existsByCode") - public ResResult existsByCode(String code) { - return Res.ok(dataScopeService.existsByCode(code)); - } - - @Operation(summary = "编码是否被使用(不包含自己)") - @GetMapping("/existsByCodeNotId") - public ResResult existsByCode(String code, Long id) { - return Res.ok(dataScopeService.existsByCode(code, id)); - } - - @Operation(summary = "名称是否被使用") - @GetMapping("/existsByName") - public ResResult existsByName(String name) { - return Res.ok(dataScopeService.existsByName(name)); - } - - @Operation(summary = "名称是否被使用(不包含自己)") - @GetMapping("/existsByNameNotId") - public ResResult existsByName(String name, Long id) { - return Res.ok(dataScopeService.existsByName(name, id)); - } - - @Operation(summary = "获取") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(dataScopeService.findById(id)); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject DataScopeParam param) { - return Res.ok(dataScopeService.page(pageParam, param)); - } - - @Operation(summary = "查询全部") - @GetMapping("/findAll") - public ResResult> findAll() { - return Res.ok(dataScopeService.findAll()); - } - - @Operation(summary = "获取关联的用户列表") - @GetMapping("/findUsersByDataScopeId") - public ResResult> findUsersByDataScopeId(Long id) { - return Res.ok(dataScopeUserService.findUsersByDataScopeId(id)); - } - - @Operation(summary = "保存关联用户权限") - @PostMapping("/saveUserAssign") - public ResResult saveUserAssign(@RequestBody DataScopeUserParam param) { - dataScopeUserService.saveUserAssign(param.getDataScopeId(), param.getUserIds()); - return Res.ok(); - } - - @Operation(summary = "批量删除关联用户") - @DeleteMapping("/deleteUserAssigns") - public ResResult deleteUserAssigns(@RequestBody List ids) { - dataScopeUserService.deleteBatch(ids); - return Res.ok(); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermMenuController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermMenuController.java deleted file mode 100644 index f09f768d5..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermMenuController.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.iam.core.permission.service.PermMenuService; -import cn.bootx.iam.core.upms.service.RolePermService; -import cn.bootx.iam.dto.permission.PermMenuDto; -import cn.bootx.iam.param.permission.PermMenuParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2020/5/11 9:36 - */ -@Tag(name = "菜单权限资源") -@RestController -@RequestMapping("/perm/menu") -@RequiredArgsConstructor -public class PermMenuController { - - private final PermMenuService permissionService; - - private final RolePermService rolePermissionService; - - @Operation(summary = "添加菜单权限") - @PostMapping("/add") - public ResResult add(@RequestBody PermMenuParam param) { - return Res.ok(permissionService.add(param)); - } - - @Operation(summary = "修改菜单权限") - @PostMapping("/update") - public ResResult update(@RequestBody PermMenuParam param) { - return Res.ok(permissionService.update(param)); - } - - @Operation(summary = "获取菜单树") - @GetMapping("/menuTree") - public ResResult> menuTree(String clientCode) { - return Res.ok(rolePermissionService.findMenuTree(clientCode)); - } - - @Operation(summary = "获取全部树") - @GetMapping("/allTree") - public ResResult> allTree(String clientCode) { - return Res.ok(rolePermissionService.findAllTree(clientCode)); - } - - @Operation(summary = "资源(权限码)列表") - @GetMapping("/resourceList") - public ResResult> resourceList(Long menuId) { - return Res.ok(permissionService.findResourceByMenuId(menuId)); - } - - @Operation(summary = "根据id查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(permissionService.findById(id)); - } - - @Operation(summary = "删除") - @DeleteMapping("/delete") - public ResResult delete(Long id) { - permissionService.delete(id); - return Res.ok(); - } - - @Operation(summary = "编码是否被使用") - @GetMapping("/existsByPermCode") - public ResResult existsByPermCode(String permCode) { - return Res.ok(permissionService.existsByPermCode(permCode)); - } - - @Operation(summary = "编码是否被使用(不包含自己)") - @GetMapping("/existsByPermCodeNotId") - public ResResult existsByPermCode(String permCode, Long id) { - return Res.ok(permissionService.existsByPermCode(permCode, id)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleController.java deleted file mode 100644 index 5611277d1..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleController.java +++ /dev/null @@ -1,102 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.role.service.RoleService; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.param.role.RoleParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/6/9 - */ -@Tag(name = "角色管理") -@RestController -@RequestMapping("/role") -@RequiredArgsConstructor -public class RoleController { - - private final RoleService roleService; - - @Operation(summary = "添加角色(返回角色对象)") - @PostMapping(value = "/add") - public ResResult add(@RequestBody RoleParam roleParam) { - ValidationUtil.validateParam(roleParam); - RoleDto result = roleService.add(roleParam); - return Res.ok(result); - } - - @Operation(summary = "删除角色") - @DeleteMapping(value = "/delete") - public ResResult delete(Long id) { - roleService.delete(id); - return Res.ok(); - } - - @Operation(summary = "修改角色(返回角色对象)") - @PostMapping(value = "/update") - public ResResult update(@RequestBody RoleParam roleParam) { - ValidationUtil.validateParam(roleParam); - RoleDto result = roleService.update(roleParam); - return Res.ok(result); - } - - @Operation(summary = "通过ID查询角色") - @GetMapping(value = "/findById") - public ResResult findById(Long id) { - return Res.ok(roleService.findById(id)); - } - - @Operation(summary = "查询所有的角色") - @GetMapping(value = "/findAll") - public ResResult> findAll() { - return Res.ok(roleService.findAll()); - } - - @Operation(summary = "角色下拉框") - @GetMapping(value = "/dropdown") - public ResResult> dropdown() { - return Res.ok(roleService.dropdown()); - } - - @Operation(summary = "分页查询角色") - @GetMapping(value = "/page") - public ResResult> page(PageParam pageParam, RoleParam roleParam) { - return Res.ok(roleService.page(pageParam, roleParam)); - } - - @Operation(summary = "编码是否被使用") - @GetMapping("/existsByCode") - public ResResult existsByCode(String code) { - return Res.ok(roleService.existsByCode(code)); - } - - @Operation(summary = "编码是否被使用(不包含自己)") - @GetMapping("/existsByCodeNotId") - public ResResult existsByCode(String code, Long id) { - return Res.ok(roleService.existsByCode(code, id)); - } - - @Operation(summary = "名称是否被使用") - @GetMapping("/existsByName") - public ResResult existsByName(String name) { - return Res.ok(roleService.existsByName(name)); - } - - @Operation(summary = "名称是否被使用(不包含自己)") - @GetMapping("/existsByNameNotId") - public ResResult existsByName(String name, Long id) { - return Res.ok(roleService.existsByName(name, id)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleMenuController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleMenuController.java deleted file mode 100644 index 8732d8615..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RoleMenuController.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.annotation.PermCode; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.upms.service.RolePermService; -import cn.bootx.iam.dto.upms.MenuAndResourceDto; -import cn.bootx.iam.param.upms.RolePermissionParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 角色权限(菜单)关联关系 - * - * @author xxm - * @date 2021/7/12 - */ -@Tag(name = "角色菜单权限关系") -@RestController -@RequestMapping("/role/menu") -@RequiredArgsConstructor -public class RoleMenuController { - - private final RolePermService rolePermService; - - @Operation(summary = "保存请求权限关系") - @PostMapping("/save") - public ResResult save(@RequestBody RolePermissionParam param) { - ValidationUtil.validateParam(param, RolePermissionParam.PermMenu.class); - rolePermService.save(param.getRoleId(), param.getClientCode(), param.getPermissionIds()); - return Res.ok(true); - } - - @Operation(summary = "获取权限菜单id列表,不包含资源权限") - @GetMapping("/findMenuIds") - public ResResult> findMenuIds(String clientCode) { - return Res.ok(rolePermService.findMenuIds(clientCode)); - } - - @Operation(summary = "根据角色id获取关联权限id集合(包含资源和菜单)") - @GetMapping("/findPermissionIdsByRole") - public ResResult> findPermissionIdsByRole(Long roleId, String clientCode) { - return Res.ok(rolePermService.findPermissionIdsByRole(roleId, clientCode)); - } - - @IgnoreAuth - @Operation(summary = "获取菜单和资源权限") - @GetMapping("/getPermissions") - public ResResult getPermissions(String clientCode) { - return Res.ok(rolePermService.getPermissions(clientCode)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RolePathController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RolePathController.java deleted file mode 100644 index 0c93abbd3..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/RolePathController.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.upms.service.RolePathService; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.param.upms.RolePermissionParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/6/9 - */ -@Tag(name = "角色请求权限消息关系") -@RestController -@RequestMapping("/role/path") -@RequiredArgsConstructor -public class RolePathController { - - private final RolePathService rolePathService; - - @Operation(summary = "保存角色请求权限关联关系") - @PostMapping("/save") - public ResResult save(@RequestBody RolePermissionParam param) { - ValidationUtil.validateParam(param); - rolePathService.addRolePath(param.getRoleId(), param.getPermissionIds()); - return Res.ok(); - } - - @Operation(summary = "根据用户id获取角色授权(请求权限列表)") - @GetMapping("/findPathsByUser") - public ResResult> findPathsByUser() { - return Res.ok(rolePathService.findPathsByUser()); - } - - @Operation(summary = "根据角色id获取关联权限id") - @GetMapping("/findIdsByRole") - public ResResult> findIdsByRole(Long roleId) { - return Res.ok(rolePathService.findIdsByRole(roleId)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAdminController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAdminController.java deleted file mode 100644 index 325d29259..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAdminController.java +++ /dev/null @@ -1,124 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.annotation.OperateLog; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.iam.core.user.service.UserAdminService; -import cn.bootx.iam.core.user.service.UserQueryService; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.dto.user.UserInfoWhole; -import cn.bootx.iam.param.user.UserInfoParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - * @author xxm - * @date 2021/9/6 - */ -@Validated -@Tag(name = "管理用户(管理员级别)") -@RestController -@RequestMapping("/user/admin") -@RequiredArgsConstructor -public class UserAdminController { - - private final UserAdminService userAdminService; - - private final UserQueryService userQueryService; - - @Operation(summary = "根据用户id查询用户") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(userQueryService.findById(id)); - } - - @Operation(summary = "查询用户详情") - @GetMapping("/getUserInfoWhole") - public ResResult getUserInfoWhole(Long id) { - return Res.ok(userAdminService.getUserInfoWhole(id)); - } - - @Operation(summary = "根据邮箱查询用户") - @GetMapping("/getByEmail") - public ResResult getByEmail(String email) { - return Res.ok(userQueryService.findByEmail(email)); - } - - @Operation(summary = "根据手机号查询用户") - @GetMapping("/getByPhone") - public ResResult getByPhone(String phone) { - return Res.ok(userQueryService.findByPhone(phone)); - } - - @Operation(summary = "添加用户") - @PostMapping("/add") - public ResResult add(@RequestBody UserInfoParam userInfoParam) { - userAdminService.add(userInfoParam); - return Res.ok(); - } - - @Operation(summary = "修改用户") - @PostMapping("/update") - public ResResult update(@RequestBody UserInfoParam userInfoParam) { - userAdminService.update(userInfoParam); - return Res.ok(); - } - - @Operation(summary = "重置密码") - @OperateLog(title = "重置密码", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @PostMapping("/restartPassword") - public ResResult restartPassword(@NotNull(message = "用户不可为空") Long userId, - @NotBlank(message = "新密码不能为空") String newPassword) { - userAdminService.restartPassword(userId, newPassword); - return Res.ok(); - } - - @OperateLog(title = "锁定用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @Operation(summary = "锁定用户") - @PostMapping("/lock") - public ResResult lock(Long userId) { - userAdminService.lock(userId); - return Res.ok(); - } - - @OperateLog(title = "批量锁定用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @Operation(summary = "批量锁定用户") - @PostMapping("/lockBatch") - public ResResult lockBatch(@RequestBody @NotEmpty(message = "用户集合不可为空") List userIds) { - userAdminService.lockBatch(userIds); - return Res.ok(); - } - - @OperateLog(title = "解锁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @Operation(summary = "解锁用户") - @PostMapping("/unlock") - public ResResult unlock(@NotNull(message = "用户不可为空") Long userId) { - userAdminService.unlock(userId); - return Res.ok(); - } - - @OperateLog(title = "批量解锁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @Operation(summary = "批量解锁用户") - @PostMapping("/unlockBatch") - public ResResult unlockBatch(@RequestBody @NotEmpty(message = "用户集合不可为空") List userIds) { - userAdminService.unlockBatch(userIds); - return Res.ok(); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, UserInfoParam userInfoParam) { - return Res.ok(userAdminService.page(pageParam, userInfoParam)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDataScopeController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDataScopeController.java deleted file mode 100644 index da61cc0a8..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDataScopeController.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.upms.service.UserDataScopeService; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.iam.param.upms.UserDataScopeBatchParam; -import cn.bootx.iam.param.upms.UserDataScopeParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -/** - * @author xxm - * @date 2022/1/2 - */ -@Tag(name = "用户数据权限配置") -@RestController -@RequestMapping("/user/data/scope") -@RequiredArgsConstructor -public class UserDataScopeController { - - private final UserDataScopeService dataScopeService; - - @Operation(summary = "给用户分配权限") - @PostMapping("/saveAssign") - public ResResult saveAssign(@RequestBody UserDataScopeParam param) { - ValidationUtil.validateParam(param); - dataScopeService.saveAssign(param.getUserId(), param.getDataScopeId()); - return Res.ok(); - } - - @Operation(summary = "给用户分配权限(批量)") - @PostMapping("/saveAssignBatch") - public ResResult saveAssignBatch(@RequestBody UserDataScopeBatchParam param) { - dataScopeService.saveAssignBatch(param.getUserIds(), param.getDataScopeId()); - return Res.ok(); - } - - @Operation(summary = "根据用户ID获取到数据权限") - @GetMapping(value = "/findDataScopeByUser") - public ResResult findDataScopeByUser(Long id) { - return Res.ok(dataScopeService.findDataScopeByUser(id)); - } - - @Operation(summary = "根据用户ID获取到数据权限Id") - @GetMapping(value = "/findDataScopeIdByUser") - public ResResult findDataScopeIdByUser(Long id) { - return Res.ok(dataScopeService.findDataScopeIdByUser(id)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserThirdController.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserThirdController.java deleted file mode 100644 index ee00f0b82..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserThirdController.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.third.service.UserThirdBindService; -import cn.bootx.iam.core.third.service.UserThirdQueryService; -import cn.bootx.iam.dto.user.UserThirdBindInfo; -import cn.bootx.iam.dto.user.UserThirdDto; -import cn.bootx.iam.param.user.UserBindThirdParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.constraints.NotBlank; - -/** - * 用户三方登录管理 - * - * @author xxm - * @date 2021/8/4 - */ -@Validated -@Tag(name = "用户三方登录管理") -@RestController -@RequestMapping("/user/third") -@AllArgsConstructor -public class UserThirdController { - - private final UserThirdBindService userThirdBindService; - - private final UserThirdQueryService userThirdQueryService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam) { - return Res.ok(userThirdQueryService.page(pageParam)); - } - - @Operation(summary = "获取详情") - @PostMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(userThirdQueryService.findById(id)); - } - - @IgnoreAuth - @Operation(summary = "获取绑定详情") - @GetMapping("/getThirdBindInfo") - public ResResult getThirdBindInfo() { - return Res.ok(userThirdQueryService.getThirdBindInfo()); - } - - @IgnoreAuth - @Operation(summary = "绑定第三方账号") - @PostMapping("/bind") - public ResResult bind(@RequestBody UserBindThirdParam param) { - ValidationUtil.validateParam(param); - userThirdBindService.bind(param.getAuthCode(), param.getLoginType(), param.getState()); - return Res.ok(); - } - - @IgnoreAuth - @Operation(summary = "解绑第三方账号") - @PostMapping("/unbind") - public ResResult unbind(@NotBlank(message = "终端代码不可为空") String clientCode) { - userThirdBindService.unbind(clientCode); - return Res.ok(); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthClientServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthClientServiceImpl.java deleted file mode 100644 index b8eb87c61..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthClientServiceImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.iam.core.auth.handler; - -import cn.bootx.iam.core.client.dao.ClientManager; -import cn.bootx.iam.core.client.entity.Client; -import cn.bootx.starter.auth.authentication.GetAuthClientService; -import cn.bootx.starter.auth.entity.AuthClient; -import cn.bootx.starter.auth.exception.ApplicationNotFoundException; -import cn.hutool.core.bean.BeanUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 获取认证应用 - * - * @author xxm - * @date 2022/6/27 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class GetAuthClientServiceImpl implements GetAuthClientService { - - private final ClientManager clientManager; - - @Override - public AuthClient getAuthApplication(String authClientCode) { - Client client = clientManager.findByCode(authClientCode).orElseThrow(ApplicationNotFoundException::new); - AuthClient authClient = new AuthClient(); - BeanUtil.copyProperties(client, authClient); - return authClient; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthLoginTypeServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthLoginTypeServiceImpl.java deleted file mode 100644 index f848ad19c..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/GetAuthLoginTypeServiceImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.iam.core.auth.handler; - -import cn.bootx.iam.core.client.dao.LoginTypeManager; -import cn.bootx.iam.core.client.entity.LonginType; -import cn.bootx.starter.auth.authentication.GetAuthLoginTypeService; -import cn.bootx.starter.auth.entity.AuthLoginType; -import cn.bootx.starter.auth.exception.ClientNotFoundException; -import cn.hutool.core.bean.BeanUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 获取认证终端 - * - * @author xxm - * @date 2021/8/25 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class GetAuthLoginTypeServiceImpl implements GetAuthLoginTypeService { - - private final LoginTypeManager loginTypeManager; - - /** - * 获取认证终端信息 - */ - @Override - public AuthLoginType getAuthLoginType(String loginType) { - LonginType longinType = loginTypeManager.findByCode(loginType).orElseThrow(ClientNotFoundException::new); - AuthLoginType authLoginType = new AuthLoginType(); - BeanUtil.copyProperties(longinType, authLoginType); - return authLoginType; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginFailureHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginFailureHandlerImpl.java deleted file mode 100644 index c142b5a99..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginFailureHandlerImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.bootx.iam.core.auth.handler; - -import cn.bootx.common.core.code.WebHeaderCode; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.service.LoginLogService; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.handler.LoginFailureHandler; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.extra.servlet.ServletUtil; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.time.LocalDateTime; - -/** - * 登录失败 - * - * @author xxm - * @date 2021/8/13 - */ -@Component -@RequiredArgsConstructor -public class LoginFailureHandlerImpl implements LoginFailureHandler { - - private final LoginLogService loginLogService; - - @Override - public void onLoginFailure(HttpServletRequest request, HttpServletResponse response, LoginFailureException e) { - - UserAgent userAgent = UserAgentUtil.parse(request.getHeader(WebHeaderCode.USER_AGENT)); - String ip = ServletUtil.getClientIP(request); - String loginType = SecurityUtil.getLoginType(request); - String client = SecurityUtil.getClient(request); - LoginLogParam loginLog = new LoginLogParam().setAccount(e.getUsername()) - .setLogin(false) - .setClient(client) - .setLoginType(loginType) - .setMsg(e.getMessage()) - .setIp(ip) - .setOs(userAgent.getOs().getName()) - .setBrowser(userAgent.getBrowser().getName() + " " + userAgent.getVersion()) - .setLoginTime(LocalDateTime.now()); - loginLogService.add(loginLog); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginSuccessHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginSuccessHandlerImpl.java deleted file mode 100644 index 9756582d1..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/handler/LoginSuccessHandlerImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.bootx.iam.core.auth.handler; - -import cn.bootx.common.core.code.WebHeaderCode; -import cn.bootx.iam.core.user.service.UserExpandInfoService; -import cn.bootx.starter.audit.log.param.LoginLogParam; -import cn.bootx.starter.audit.log.service.LoginLogService; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.handler.LoginSuccessHandler; -import cn.hutool.extra.servlet.ServletUtil; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.time.LocalDateTime; - -/** - * 登录成功处理 - * - * @author xxm - * @date 2021/8/13 - */ -@Component -@RequiredArgsConstructor -public class LoginSuccessHandlerImpl implements LoginSuccessHandler { - - private final LoginLogService loginLogService; - - private final UserExpandInfoService userExpandInfoService; - - @Override - public void onLoginSuccess(HttpServletRequest request, HttpServletResponse response, - AuthInfoResult authInfoResult) { - UserAgent userAgent = UserAgentUtil.parse(request.getHeader(WebHeaderCode.USER_AGENT)); - String ip = ServletUtil.getClientIP(request); - LoginLogParam loginLog = new LoginLogParam().setLogin(true) - .setUserId(authInfoResult.getUserDetail().getId()) - .setClient(authInfoResult.getClient()) - .setLoginType(authInfoResult.getLoginType()) - .setAccount(authInfoResult.getUserDetail().getUsername()) - .setIp(ip) - .setOs(userAgent.getOs().getName()) - .setBrowser(userAgent.getBrowser().getName() + " " + userAgent.getVersion()) - .setLoginTime(LocalDateTime.now()); - loginLogService.add(loginLog); - userExpandInfoService.updateLoginTime(loginLog.getUserId()); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PasswordLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PasswordLoginHandler.java deleted file mode 100644 index aec2e5acf..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PasswordLoginHandler.java +++ /dev/null @@ -1,173 +0,0 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.RegexUtil; -import cn.bootx.iam.code.UserStatusCode; -import cn.bootx.iam.core.user.service.UserAdminService; -import cn.bootx.iam.core.user.service.UserQueryService; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.starter.auth.authentication.UsernamePasswordAuthentication; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.entity.AuthLoginType; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.exception.UserNotFoundException; -import cn.bootx.starter.auth.util.PasswordEncoder; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.lang.Nullable; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.constraints.NotNull; -import java.util.Objects; - -/** - * 账号密码登陆方式实现 - * - * @author xxm - * @date 2021/8/2 - */ -@Slf4j -@Component -@RequiredArgsConstructor -@SuppressWarnings("FieldCanBeLocal") -public class PasswordLoginHandler implements UsernamePasswordAuthentication { - - private final String USERNAME_PARAMETER = "account"; - - private final String PASSWORD_PARAMETER = "password"; - - // 前端传入的验证码 - private final String CAPTCHA_PARAMETER = "captcha"; - - // 前端传入的验证码的key - private final String CAPTCHA_KEY_PARAMETER = "captchaKey"; - - private final PasswordEncoder passwordEncoder; - - private final UserAdminService userAdminService; - - private final UserQueryService userQueryService; - - private final CaptchaService captchaService; - - /** - * 认证前置操作, 默认处理验证码 - */ - @Override - public void authenticationBefore(LoginAuthContext context) { - AuthLoginType authLoginType = context.getAuthLoginType(); - HttpServletRequest request = context.getRequest(); - // 开启验证码验证 - if (authLoginType.isCaptcha()) { - String captcha = this.obtainCaptcha(request); - String captchaKey = this.obtainCaptchaKey(request); - if (StrUtil.isBlank(captcha)) { - throw new BizException("验证码为空"); - } - if (!captchaService.validateImgCaptcha(captchaKey, captcha)) { - String username = this.obtainUsername(request); - throw new LoginFailureException(username, "验证码不正确"); - } - } - } - - /** - * 认证 - */ - @Override - public @NotNull AuthInfoResult attemptAuthentication(LoginAuthContext context) { - String username = this.obtainUsername(context.getRequest()); - String password = this.obtainPassword(context.getRequest()); - UserDetail userDetail = this.loadUserByUsername(username); - String saltPassword = passwordEncoder.encode(password); - // 比对密码未通过 - if (!Objects.equals(saltPassword, userDetail.getPassword())) { - this.passwordError(userDetail, context); - } - // 管理员跳过各种校验 - if (!userDetail.isAdmin()) { - // 账号状态 - if (Objects.equals(userDetail.getStatus(), UserStatusCode.LOCK)) { - throw new LoginFailureException(username, "密码多次输入错误,已被冻结"); - } - if (!Objects.equals(userDetail.getStatus(), UserStatusCode.NORMAL)) { - throw new LoginFailureException(username, "账号不是正常状态,无法登陆"); - } - } - return new AuthInfoResult().setId(userDetail.getId()).setUserDetail(userDetail); - } - - /** - * 认证后操作 - */ - @Override - public void authenticationAfter(AuthInfoResult authInfoResult, LoginAuthContext context) { - String captchaKey = this.obtainCaptchaKey(context.getRequest()); - captchaService.deleteImgCaptcha(captchaKey); - } - - /** - * 根据账号获取密码 - */ - public UserDetail loadUserByUsername(String username) throws UserNotFoundException { - UserInfoDto userInfoDto; - // 1. 获取账号密码 - if (RegexUtil.isEmailPattern(username)) { - // 根据 Email 获取用户信息 - userInfoDto = userQueryService.findByEmail(username); - } - else if (RegexUtil.isPhonePattern(username)) { - // 根据 手机号 获取用户信息 - userInfoDto = userQueryService.findByPhone(username); - } - else { - // 根据 账号 获取账户信息 - userInfoDto = userQueryService.findByAccount(username); - } - if (Objects.isNull(userInfoDto)) { - throw new UserNotFoundException(username); - } - return userInfoDto.toUserDetail(); - } - - /** - * 密码输入错误处理 - */ - public void passwordError(UserDetail userDetail, LoginAuthContext context) { - AuthLoginType authLoginType = context.getAuthLoginType(); - int errCount = 0; - // 密码错误限制 - if (authLoginType.getPwdErrNum() > -1) { - - } - // String errMsg = StrUtil.format("密码不正确, 还有{}次机会",errCount); - String errMsg = StrUtil.format("密码不正确"); - throw new LoginFailureException(userDetail.getUsername(), errMsg); - } - - @Nullable - protected String obtainPassword(HttpServletRequest request) { - return request.getParameter(this.PASSWORD_PARAMETER); - } - - @Nullable - protected String obtainUsername(HttpServletRequest request) { - return request.getParameter(this.USERNAME_PARAMETER); - } - - @Nullable - protected String obtainCaptcha(HttpServletRequest request) { - return request.getParameter(this.CAPTCHA_PARAMETER); - } - - @Nullable - protected String obtainCaptchaKey(HttpServletRequest request) { - return request.getParameter(this.CAPTCHA_KEY_PARAMETER); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PhoneLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PhoneLoginHandler.java deleted file mode 100644 index 63a11a691..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/PhoneLoginHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.starter.auth.authentication.AbstractAuthentication; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; - -/** - * 手机号登录 - * - * @author xxm - * @date 2021/8/2 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class PhoneLoginHandler implements AbstractAuthentication { - - // 手机号 - private final String phoneParameter = "phone"; - - // 短信验证码 - private final String captchaParameter = "smsCaptcha"; - - // 手机验证码类型 - private final String smsCaptchaType = "login"; - - private final UserInfoManager userInfoManager; - - private final CaptchaService captchaService; - - @Override - public String getLoginType() { - return AuthLoginTypeCode.PHONE; - } - - /** - * 认证 - */ - @Override - public AuthInfoResult attemptAuthentication(LoginAuthContext context) { - HttpServletRequest request = context.getRequest(); - String phone = request.getParameter(phoneParameter); - String captcha = request.getParameter(captchaParameter); - - // 比较验证码是否正确 - if (!captchaService.validateSmsCaptcha(phone, captcha, smsCaptchaType)) { - throw new LoginFailureException(phone, "短信验证码不正确"); - } - // 获取用户信息 - UserInfo userInfo = userInfoManager.findByPhone(phone) - .orElseThrow(() -> new LoginFailureException(phone, "手机号不存在")); - - captchaService.deleteSmsCaptcha(phone, smsCaptchaType); - return new AuthInfoResult().setUserDetail(userInfo.toUserDetail()).setId(userInfo.getId()); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatLoginHandler.java deleted file mode 100644 index 046ecc432..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatLoginHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.service.UserTiredOperateService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.bootx.starter.wechat.core.login.service.WeChatQrLoginService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import me.zhyd.oauth.model.AuthUser; -import org.springframework.stereotype.Component; - -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.AUTH_CODE; -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.WE_CHAT; - -/** - * 微信登录(公众号) - * - * @author xxm - * @date 2021/8/2 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class WeChatLoginHandler implements OpenIdAuthentication { - - private final UserTiredOperateService userTiredOperateService; - - private final WeChatQrLoginService weChatQrLoginService; - - private final UserThirdManager userThirdManager; - - private final UserInfoManager userInfoManager; - - @Override - public String getLoginType() { - return AuthLoginTypeCode.WE_CHAT; - } - - /** - * 认证 - */ - @Override - public AuthInfoResult attemptAuthentication(LoginAuthContext context) { - String authCode = context.getRequest().getParameter(AUTH_CODE); - AuthUser authUser = this.getAuthUser(authCode, null); - - // 获取微信公众号关联的用户id - UserThird userThird = userThirdManager.findByField(UserThird::getWeChatId, authUser.getUuid()) - .orElseThrow(() -> new LoginFailureException("没有找到绑定的微信公众号用户")); - - // 获取用户信息 - UserInfo userInfo = userInfoManager.findById(userThird.getUserId()) - .orElseThrow(() -> new LoginFailureException("用户不存在")); - - return new AuthInfoResult().setUserDetail(userInfo.toUserDetail()).setId(userInfo.getId()); - } - - /** - * 获取关联的的第三方平台用户信息 - * @param authCode key 值, 可以用来拿用户信息 - */ - @Override - public AuthUser getAuthUser(String authCode, String state) { - // 根据微信二维码的值获取关联扫码的微信信息 - String uuid = weChatQrLoginService.getOpenId(authCode); - AuthUser authUser = new AuthUser(); - authUser.setNickname("未知"); - authUser.setUsername("未知"); - authUser.setAvatar("未知"); - authUser.setUuid(uuid); - weChatQrLoginService.clear(authCode); - return authUser; - } - - /** - * 绑定用户 - */ - @Override - public void bindUser(String authCode, String state) { - Long userId = SecurityUtil.getUserId(); - AuthUser authUser = this.getAuthUser(authCode, state); - userTiredOperateService.checkOpenIdBind(authUser.getUuid(), UserThird::getWeChatId); - userTiredOperateService.bindOpenId(userId, authUser.getUuid(), UserThird::setWeChatId); - userTiredOperateService.bindOpenInfo(userId, authUser, WE_CHAT); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/AuthAssistService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/AuthAssistService.java deleted file mode 100644 index 782426537..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/AuthAssistService.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.bootx.iam.core.auth.service; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.iam.code.UserStatusCode; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 认证支撑服务 - * - * @author xxm - * @date 2021/9/9 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AuthAssistService { - - private final CaptchaService captchaService; - - private final UserInfoManager userInfoManager; - - private final String smsCaptchaType = "login"; - - /** - * 发送短信验证码 - */ - public void sendSmsCaptcha(String phone) { - // 判断用户是否存在 - UserInfo userInfo = userInfoManager.findByPhone(phone).orElseThrow(UserInfoNotExistsException::new); - - if (userInfo.getStatus() != UserStatusCode.NORMAL) { - throw new BizException("用户状态异常"); - } - // 有效期5分钟 - captchaService.sendSmsCaptcha(phone, 5 * 60, smsCaptchaType); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/ClientConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/ClientConvert.java deleted file mode 100644 index 82c508f13..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/ClientConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.core.client.convert; - -import cn.bootx.iam.core.client.entity.Client; -import cn.bootx.iam.dto.client.ClientDto; -import cn.bootx.iam.param.client.ClientParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 认证应用 - * - * @author xxm - * @date 2022-06-27 - */ -@Mapper -public interface ClientConvert { - - ClientConvert CONVERT = Mappers.getMapper(ClientConvert.class); - - Client convert(ClientParam in); - - ClientDto convert(Client in); - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/LoginTypeConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/LoginTypeConvert.java deleted file mode 100644 index 37dc45998..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/convert/LoginTypeConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.core.client.convert; - -import cn.bootx.iam.core.client.entity.LonginType; -import cn.bootx.iam.dto.client.LoginTypeDto; -import cn.bootx.iam.param.client.LoginTypeParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 认证终端 - * - * @author bootx - * @date 2022-02-20 - */ -@Mapper -public interface LoginTypeConvert { - - LoginTypeConvert CONVERT = Mappers.getMapper(LoginTypeConvert.class); - - LonginType convert(LoginTypeParam in); - - LoginTypeDto convert(LonginType in); - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientManager.java deleted file mode 100644 index 683f84d07..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientManager.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.bootx.iam.core.client.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.client.entity.Client; -import cn.bootx.iam.param.client.ClientParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 认证应用 - * - * @author xxm - * @date 2022-06-27 - */ -@Repository -@RequiredArgsConstructor -public class ClientManager extends BaseManager { - - /** - * 分页 - */ - public Page page(PageParam pageParam, ClientParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, Client.class); - return lambdaQuery().like(StrUtil.isNotBlank(param.getCode()), Client::getCode, param.getCode()) - .like(StrUtil.isNotBlank(param.getName()), Client::getName, param.getName()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - - public Optional findByCode(String code) { - return findByField(Client::getCode, code); - } - - public boolean existsByCode(String code) { - return existedByField(Client::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return existedByField(Client::getCode, code, id); - } - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientMapper.java deleted file mode 100644 index 0e02c79cc..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/ClientMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.client.dao; - -import cn.bootx.iam.core.client.entity.Client; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 认证应用 - * - * @author xxm - * @date 2022-06-27 - */ -@Mapper -public interface ClientMapper extends BaseMapper { - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeMapper.java deleted file mode 100644 index 33eb0f8b2..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.client.dao; - -import cn.bootx.iam.core.client.entity.LonginType; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 终端 - * - * @author xxm - * @date 2021/8/25 - */ -@Mapper -public interface LoginTypeMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/Client.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/Client.java deleted file mode 100644 index 8e65e1762..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/Client.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.iam.core.client.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.client.convert.ClientConvert; -import cn.bootx.iam.dto.client.ClientDto; -import cn.bootx.iam.param.client.ClientParam; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 认证终端 - * - * @author xxm - * @date 2021/8/25 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("iam_client") -@Accessors(chain = true) -public class Client extends MpBaseEntity implements EntityBaseFunction { - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** 是否系统内置 */ - @TableField("`system`") - private boolean system; - - /** 是否可用 */ - private boolean enable; - - /** 关联登录方式 */ - private String loginTypeIds; - - /** 描述 */ - private String description; - - /** 创建对象 */ - public static Client init(ClientParam in) { - Client client = ClientConvert.CONVERT.convert(in); - if (CollUtil.isNotEmpty(in.getLoginTypeIdList())) { - String loginTypeIds = String.join(",", in.getLoginTypeIdList()); - client.setLoginTypeIds(loginTypeIds); - } - return client; - } - - /** 转换成dto */ - @Override - public ClientDto toDto() { - ClientDto client = ClientConvert.CONVERT.convert(this); - if (StrUtil.isNotBlank(this.getLoginTypeIds())) { - List collect = Arrays.stream(this.getLoginTypeIds().split(",")).collect(Collectors.toList()); - client.setLoginTypeIdList(collect); - } - return client; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/LonginType.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/LonginType.java deleted file mode 100644 index cb0022617..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/entity/LonginType.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.bootx.iam.core.client.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.client.convert.LoginTypeConvert; -import cn.bootx.iam.dto.client.LoginTypeDto; -import cn.bootx.iam.param.client.LoginTypeParam; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 登录方式 - * - * @author xxm - * @date 2022/7/5 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("iam_login_type") -@Accessors(chain = true) -public class LonginType extends MpBaseEntity implements EntityBaseFunction { - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** - * password 密码登录, openId 第三方登录 - */ - private String type; - - /** 在线时长 分钟 */ - private Long timeout; - - /** 是否需要验证码 */ - private boolean captcha; - - /** 是否系统内置 */ - @TableField("`system`") - private boolean system; - - /** 密码错误几次冻结 -1表示不限制 */ - private Integer pwdErrNum; - - /** 是否可用 */ - private boolean enable; - - /** 描述 */ - private String description; - - public static LonginType init(LoginTypeParam in) { - return LoginTypeConvert.CONVERT.convert(in); - } - - @Override - public LoginTypeDto toDto() { - return LoginTypeConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/convert/DeptConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/convert/DeptConvert.java deleted file mode 100644 index 649be8267..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/convert/DeptConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.iam.core.dept.convert; - -import cn.bootx.iam.core.dept.entity.Dept; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.param.dept.DeptParam; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 部门机构转换 - * - * @author xxm - * @date 2021/8/4 - */ -@Mapper -public interface DeptConvert { - - DeptConvert CONVERT = Mappers.getMapper(DeptConvert.class); - - Dept convert(DeptDto in); - - Dept convert(DeptParam in); - - DeptDto convert(Dept in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptManager.java deleted file mode 100644 index 1acba2a33..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptManager.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.iam.core.dept.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.core.dept.entity.Dept; -import org.springframework.stereotype.Repository; - -/** - * @author xxm - * @date 2020/5/7 17:42 - */ -@Repository -public class DeptManager extends BaseManager { - - public boolean existsParent(Long parentId) { - return existedByField(Dept::getParentId, parentId); - } - - public void deleteByOrgCode(String orgCode) { - lambdaUpdate().likeRight(Dept::getOrgCode, orgCode).remove(); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptMapper.java deleted file mode 100644 index 17e27eef7..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/dao/DeptMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.dept.dao; - -import cn.bootx.iam.core.dept.entity.Dept; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 部门 - * - * @author xxm - * @date 2020/5/7 17:40 - */ -@Mapper -public interface DeptMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/entity/Dept.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/entity/Dept.java deleted file mode 100644 index 84a573346..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/entity/Dept.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.bootx.iam.core.dept.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.dept.convert.DeptConvert; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.param.dept.DeptParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 部门表 - * - * @author xxm - * @date 2020/5/7 17:38 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("iam_dept") -public class Dept extends MpBaseEntity implements EntityBaseFunction { - - /** 父机构ID */ - private Long parentId; - - /** 机构/部门名称 */ - private String deptName; - - /** 排序 */ - private Double sortNo; - - /** - * 机构类别 - * @see cn.bootx.iam.code.OrgCategoryCode - */ - private Integer orgCategory; - - /** 机构编码 */ - private String orgCode; - - /** 手机号 */ - private String mobile; - - /** 传真 */ - private String fax; - - /** 地址 */ - private String address; - - /** 备注 */ - private String remark; - - public static Dept init(DeptParam in) { - return DeptConvert.CONVERT.convert(in); - } - - @Override - public DeptDto toDto() { - return DeptConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/convert/PermConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/convert/PermConvert.java deleted file mode 100644 index c6cbd4dc7..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/convert/PermConvert.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.iam.core.permission.convert; - -import cn.bootx.iam.core.permission.entity.PermMenu; -import cn.bootx.iam.core.permission.entity.PermPath; -import cn.bootx.iam.core.permission.entity.RequestPath; -import cn.bootx.iam.dto.permission.PermMenuDto; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.param.permission.PermMenuParam; -import cn.bootx.iam.param.permission.PermPathParam; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 权限转换 - * - * @author xxm - * @date 2021/8/3 - */ -@Mapper -public interface PermConvert { - - PermConvert CONVERT = Mappers.getMapper(PermConvert.class); - - PermPathDto convert(PermPath in); - - PermPath convert(PermPathParam in); - - PermPath convert(PermPathDto in); - - PermPath convert(RequestPath in); - - PermMenu convert(PermMenuParam in); - - PermMenuDto convert(PermMenu in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuMapper.java deleted file mode 100644 index 110c2af1b..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.permission.dao; - -import cn.bootx.iam.core.permission.entity.PermMenu; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 权限配置 - * - * @author xxm - * @date 2021/8/3 - */ -@Mapper -public interface PermMenuMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathMapper.java deleted file mode 100644 index 7bba71e65..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.permission.dao; - -import cn.bootx.iam.core.permission.entity.PermPath; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * 权限 - * - * @author xxm - * @date 2020/5/10 23:26 - */ -@Mapper -public interface PermPathMapper extends BaseMapper { - - void saveAll(@Param("permPaths") List permPaths); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermPath.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermPath.java deleted file mode 100644 index 66c550d52..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermPath.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.bootx.iam.core.permission.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.permission.convert.PermConvert; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.param.permission.PermPathParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 权限资源(url请求) - * - * @author xxm - * @date 2020/5/10 23:09 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("iam_perm_path") -public class PermPath extends MpBaseEntity implements EntityBaseFunction { - - /** 权限标识 */ - private String code; - - /** 权限名称 */ - private String name; - - /** 分组名称 */ - private String groupName; - - /** 请求类型 */ - private String requestType; - - /** 请求路径 */ - private String path; - - /** 启用 */ - private boolean enable; - - /** 是否通过系统生成的权限 */ - private boolean generate; - - /** 描述 */ - private String remark; - - public static PermPath init(PermPathParam param) { - return PermConvert.CONVERT.convert(param); - } - - @Override - public PermPathDto toDto() { - return PermConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/convert/RoleConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/convert/RoleConvert.java deleted file mode 100644 index b68548277..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/convert/RoleConvert.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.iam.core.role.convert; - -import cn.bootx.iam.core.role.entity.Role; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.param.role.RoleParam; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface RoleConvert { - - RoleConvert CONVERT = Mappers.getMapper(RoleConvert.class); - - RoleDto convert(Role in); - - Role convert(RoleParam in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleManager.java deleted file mode 100644 index a76a5bdd6..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleManager.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.bootx.iam.core.role.dao; - -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.role.entity.Role; -import cn.bootx.iam.param.role.RoleParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * 角色 - * - * @author xxm - * @date 2021/8/3 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class RoleManager extends BaseManager { - - public boolean existsByCode(String code) { - return existedByField(Role::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return existedByField(Role::getCode, code, id); - } - - public boolean existsByName(String name) { - return existedByField(Role::getName, name); - } - - public boolean existsByName(String name, Long id) { - return existedByField(Role::getName, name, id); - } - - public boolean existsById(Long roleId) { - return lambdaQuery().eq(Role::getId, roleId).exists(); - } - - public List findDropdown() { - return lambdaQuery().select(Role::getId, Role::getName) - .list() - .stream() - .map(role -> new KeyValue(String.valueOf(role.getId()), role.getName())) - .collect(Collectors.toList()); - - } - - public Page page(PageParam pageParam, RoleParam roleParam) { - Page mpPage = MpUtil.getMpPage(pageParam, Role.class); - return lambdaQuery().like(StrUtil.isNotBlank(roleParam.getCode()), Role::getCode, roleParam.getCode()) - .like(StrUtil.isNotBlank(roleParam.getName()), Role::getName, roleParam.getName()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleMapper.java deleted file mode 100644 index c0c8942e3..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/dao/RoleMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.role.dao; - -import cn.bootx.iam.core.role.entity.Role; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 角色 - * - * @author xxm - * @date 2021/8/3 - */ -@Mapper -public interface RoleMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/entity/Role.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/entity/Role.java deleted file mode 100644 index e2969267a..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/entity/Role.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.iam.core.role.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.role.convert.RoleConvert; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.param.role.RoleParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 角色 - * - * @author xxm - * @date 2020/5/1 17:31 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("iam_role") -@Accessors(chain = true) -public class Role extends MpBaseEntity implements EntityBaseFunction { - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** 是否系统内置 不能修改 */ - private boolean internal; - - /** 描述 */ - private String remark; - - public static Role init(RoleParam in) { - return RoleConvert.CONVERT.convert(in); - } - - @Override - public RoleDto toDto() { - return RoleConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/service/RoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/service/RoleService.java deleted file mode 100644 index e3630a7c3..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/role/service/RoleService.java +++ /dev/null @@ -1,163 +0,0 @@ -package cn.bootx.iam.core.role.service; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.role.dao.RoleManager; -import cn.bootx.iam.core.role.entity.Role; -import cn.bootx.iam.core.upms.dao.RoleMenuManager; -import cn.bootx.iam.core.upms.dao.RolePathManager; -import cn.bootx.iam.core.upms.dao.UserRoleManager; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.exception.role.RoleAlreadyExistedException; -import cn.bootx.iam.exception.role.RoleAlreadyUsedException; -import cn.bootx.iam.exception.role.RoleNotExistedException; -import cn.bootx.iam.param.role.RoleParam; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Objects; - -import static cn.bootx.iam.code.CachingCode.USER_PATH; - -/** - * 角色 - * - * @author xxm - * @date 2021/8/3 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class RoleService { - - private final RoleManager roleManager; - - private final UserRoleManager userRoleManager; - - private final RolePathManager rolePathManager; - - private final RoleMenuManager roleMenuManager; - - /** - * 添加 - */ - @Transactional(rollbackFor = Exception.class) - public RoleDto add(RoleParam roleParam) { - // Name唯一性校验(名称code不能相同) - if (roleManager.existsByCode(roleParam.getCode())) { - throw new RoleAlreadyExistedException(); - } - if (roleManager.existsByName(roleParam.getName())) { - throw new RoleAlreadyExistedException(); - } - Role role = Role.init(roleParam); - return roleManager.save(role).toDto(); - } - - /** - * 修改 - */ - @Transactional(rollbackFor = Exception.class) - public RoleDto update(RoleParam roleParam) { - Long id = roleParam.getId(); - - // name和code唯一性校验 - if (roleManager.existsByCode(roleParam.getCode(), id)) { - throw new RoleAlreadyExistedException(); - } - if (roleManager.existsByName(roleParam.getName(), id)) { - throw new RoleAlreadyExistedException(); - } - - Role role = roleManager.findById(id).orElseThrow(RoleNotExistedException::new); - BeanUtil.copyProperties(roleParam, role, CopyOptions.create().ignoreNullValue()); - - return roleManager.updateById(role).toDto(); - } - - /** - * 删除 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_PATH }, allEntries = true) - public void delete(Long roleId) { - if (Objects.isNull(roleId) || !roleManager.existsById(roleId)) { - throw new RoleNotExistedException(); - } - // 存在当前角色用户的场合不允许删除 - if (userRoleManager.existsByRoleId(roleId)) { - throw new RoleAlreadyUsedException(); - } - // 删除角色信息 - roleManager.deleteById(roleId); - // 删除关联的请求和菜单权限 - rolePathManager.deleteByRole(roleId); - roleMenuManager.deleteByRole(roleId); - } - - /** - * 角色列表 - */ - public List findAll() { - return ResultConvertUtil.dtoListConvert(roleManager.findAll()); - } - - /** - * 角色分页 - */ - public PageResult page(PageParam pageParam, RoleParam roleParam) { - return MpUtil.convert2DtoPageResult(roleManager.page(pageParam, roleParam)); - } - - /** - * 角色下拉框 - */ - public List dropdown() { - return roleManager.findDropdown(); - } - - /** - * 详情 - */ - public RoleDto findById(Long id) { - return ResultConvertUtil.dtoConvert(roleManager.findById(id)); - } - - /** - * code是否存在 - */ - public boolean existsByCode(String code) { - return roleManager.existsByCode(code); - } - - /** - * code是否存在 - */ - public boolean existsByCode(String code, Long id) { - return roleManager.existsByCode(code, id); - } - - /** - * name是否存在 - */ - public boolean existsByName(String name) { - return roleManager.existsByName(name); - } - - /** - * name是否存在 - */ - public boolean existsByName(String name, Long id) { - return roleManager.existsByName(name, id); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/convert/DataScopeConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/convert/DataScopeConvert.java deleted file mode 100644 index 681e3a563..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/convert/DataScopeConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.core.scope.convert; - -import cn.bootx.iam.core.scope.entity.DataScope; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.iam.param.scope.DataScopeParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 数据范围转换类 - * - * @author xxm - * @date 2021/12/23 - */ -@Mapper -public interface DataScopeConvert { - - DataScopeConvert CONVERT = Mappers.getMapper(DataScopeConvert.class); - - DataScope convert(DataScopeParam in); - - DataScopeDto convert(DataScope in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptManager.java deleted file mode 100644 index 8cd02b203..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.core.scope.entity.DataScopeDept; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class DataScopeDeptManager extends BaseManager { - - public void deleteByDataScopeId(Long dataScopeId) { - this.deleteByField(DataScopeDept::getDataScopeId, dataScopeId); - } - - /** - * 根据部门进行删除 - */ - public void deleteByDeptIds(List deptIds) { - this.deleteByFields(DataScopeDept::getDeptId, deptIds); - } - - public List findByDateScopeId(Long dataScopeId) { - return this.findAllByField(DataScopeDept::getDataScopeId, dataScopeId); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptMapper.java deleted file mode 100644 index 26bd25944..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeDeptMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.iam.core.scope.entity.DataScopeDept; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Mapper -public interface DataScopeDeptMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeManager.java deleted file mode 100644 index 157699d60..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.core.scope.entity.DataScope; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class DataScopeManager extends BaseManager { - - public boolean existsByCode(String code) { - return this.existedByField(DataScope::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return this.existedByField(DataScope::getCode, code, id); - } - - public boolean existsByName(String name) { - return this.existedByField(DataScope::getName, name); - } - - public boolean existsByName(String name, Long id) { - return this.existedByField(DataScope::getName, name, id); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeMapper.java deleted file mode 100644 index 22287838d..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.iam.core.scope.entity.DataScope; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Mapper -public interface DataScopeMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserManager.java deleted file mode 100644 index 4e05991a3..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserManager.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.core.scope.entity.DataScopeUser; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class DataScopeUserManager extends BaseManager { - - public void deleteByDataScopeId(Long dataScopeId) { - this.deleteByField(DataScopeUser::getDataScopeId, dataScopeId); - } - - public List findByDateScopeId(Long dataScopeId) { - return this.findAllByField(DataScopeUser::getDataScopeId, dataScopeId); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserMapper.java deleted file mode 100644 index 0e1012d72..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/dao/DataScopeUserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.iam.core.scope.dao; - -import cn.bootx.iam.core.scope.entity.DataScopeUser; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Mapper -public interface DataScopeUserMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScope.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScope.java deleted file mode 100644 index 7d2643c8b..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScope.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.bootx.iam.core.scope.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.scope.convert.DataScopeConvert; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.iam.param.scope.DataScopeParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 数据范围配置 - * - * @author xxm - * @date 2021/12/23 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("iam_data_scope") -public class DataScope extends MpBaseEntity implements EntityBaseFunction { - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** - * 类型 - * @see cn.bootx.starter.data.perm.code.DataScopeEnum - */ - private Integer type; - - /** 备注 */ - private String remark; - - public static DataScope init(DataScopeParam in) { - return DataScopeConvert.CONVERT.convert(in); - } - - @Override - public DataScopeDto toDto() { - return DataScopeConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeDept.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeDept.java deleted file mode 100644 index ea74538f3..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeDept.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.iam.core.scope.entity; - -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 数据范围部门关联配置 - * - * @author xxm - * @date 2021/12/23 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@TableName("iam_data_scope_dept") -public class DataScopeDept extends MpIdEntity { - - /** 数据范围id */ - private Long dataScopeId; - - /** 部门id */ - private Long deptId; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeUser.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeUser.java deleted file mode 100644 index 8ae8bc0d9..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/entity/DataScopeUser.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.iam.core.scope.entity; - -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 数据范围用户关联配置 - * - * @author xxm - * @date 2021/12/23 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@NoArgsConstructor -@AllArgsConstructor -@Accessors(chain = true) -@TableName("iam_data_scope_user") -public class DataScopeUser extends MpIdEntity { - - /** 数据范围id */ - private Long dataScopeId; - - /** 用户id */ - private Long userId; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeService.java deleted file mode 100644 index bdb2aaeb9..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeService.java +++ /dev/null @@ -1,191 +0,0 @@ -package cn.bootx.iam.core.scope.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.dept.event.DeptDeleteEvent; -import cn.bootx.iam.core.scope.dao.DataScopeDeptManager; -import cn.bootx.iam.core.scope.dao.DataScopeManager; -import cn.bootx.iam.core.scope.dao.DataScopeUserManager; -import cn.bootx.iam.core.scope.entity.DataScope; -import cn.bootx.iam.core.scope.entity.DataScopeDept; -import cn.bootx.iam.core.upms.dao.UserDataScopeManager; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.iam.param.scope.DataScopeDeptParam; -import cn.bootx.iam.param.scope.DataScopeParam; -import cn.bootx.starter.data.perm.code.DataScopeEnum; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_DATA_SCOPE; - -/** - * 数据范围权限 - * - * @author xxm - * @date 2021/12/24 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DataScopeService { - - private final DataScopeManager dataScopeManager; - - private final DataScopeUserManager dataScopeUserManager; - - private final DataScopeDeptManager dataScopeDeptManager; - - private final UserDataScopeManager userDataScopeManager; - - /** - * 添加数据范围权限 - */ - @Transactional(rollbackFor = Exception.class) - public void add(DataScopeParam param) { - DataScope dataScope = DataScope.init(param); - dataScopeManager.save(dataScope); - } - - /** - * 修改 - */ - @Transactional(rollbackFor = Exception.class) - public void update(DataScopeParam param) { - DataScope dataScope = dataScopeManager.findById(param.getId()).orElseThrow(() -> new BizException("数据不存在")); - BeanUtil.copyProperties(param, dataScope, CopyOptions.create().ignoreNullValue()); - dataScope.setType(null); - dataScopeManager.updateById(dataScope); - } - - /** - * 删除 - */ - @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - if (!dataScopeManager.existedById(id)) { - throw new BizException("数据不存在"); - } - if (userDataScopeManager.existsByDataScopeId(id)) { - throw new BizException("该权限已经有用户在使用,无法删除"); - } - dataScopeManager.deleteById(id); - dataScopeUserManager.deleteByDataScopeId(id); - dataScopeDeptManager.deleteByDataScopeId(id); - } - - /** - * 添加部门关联范围权限关系 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) - public void saveDeptAssign(DataScopeDeptParam param) { - DataScope dataScope = dataScopeManager.findById(param.getDataScopeId()).orElseThrow(DataNotExistException::new); - val scope = CollUtil.newArrayList(DataScopeEnum.DEPT_SCOPE.getCode(), - DataScopeEnum.DEPT_AND_USER_SCOPE.getCode()); - if (!scope.contains(dataScope.getType())) { - throw new BizException("非法操作"); - } - - // 先删后增 - List dateScopedDeptList = dataScopeDeptManager.findByDateScopeId(param.getDataScopeId()); - List deptIdsByDb = dateScopedDeptList.stream().map(DataScopeDept::getDeptId).collect(Collectors.toList()); - - // 要删除的 - List deptIds = param.getDeptIds(); - List deleteIds = dateScopedDeptList.stream() - .filter(dataScopeDept -> !deptIds.contains(dataScopeDept.getDeptId())) - .map(MpIdEntity::getId) - .collect(Collectors.toList()); - // 要增加的 - List dataScopeDepths = deptIds.stream() - .filter(id -> !deptIdsByDb.contains(id)) - .map(deptId -> new DataScopeDept(param.getDataScopeId(), deptId)) - .collect(Collectors.toList()); - dataScopeDeptManager.deleteByIds(deleteIds); - dataScopeDeptManager.saveAll(dataScopeDepths); - } - - /** - * 处理部门被删除的情况 - */ - @EventListener - public void DeptDeleteEventListener(DeptDeleteEvent event) { - dataScopeDeptManager.deleteByDeptIds(event.getDeptIds()); - } - - /** - * 获取关联的部门id集合 - */ - public List findDeptIds(Long id) { - return dataScopeDeptManager.findByDateScopeId(id) - .stream() - .map(DataScopeDept::getDeptId) - .collect(Collectors.toList()); - } - - /** - * 判断权限编码是否存在 - */ - public boolean existsByCode(String code) { - return dataScopeManager.existsByCode(code); - } - - /** - * 判断权限编码是否存在 - */ - public boolean existsByCode(String code, Long id) { - return dataScopeManager.existsByCode(code, id); - } - - /** - * name是否存在 - */ - public boolean existsByName(String name) { - return dataScopeManager.existsByName(name); - } - - /** - * name是否存在 - */ - public boolean existsByName(String name, Long id) { - return dataScopeManager.existsByName(name, id); - } - - /** - * 获取单条 - */ - public DataScopeDto findById(Long id) { - return dataScopeManager.findById(id).map(DataScope::toDto).orElseThrow(() -> new BizException("数据不存在")); - } - - /** - * 分页 - */ - public PageResult page(PageParam pageParam, DataScopeParam param) { - return MpUtil.convert2DtoPageResult(dataScopeManager.page(MpUtil.getMpPage(pageParam, DataScope.class))); - } - - /** - * 列表查询 - */ - public List findAll() { - return ResultConvertUtil.dtoListConvert(dataScopeManager.findAll()); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeUserService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeUserService.java deleted file mode 100644 index 60c127305..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/scope/service/DataScopeUserService.java +++ /dev/null @@ -1,98 +0,0 @@ -package cn.bootx.iam.core.scope.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.function.CollectorsFunction; -import cn.bootx.iam.core.scope.dao.DataScopeManager; -import cn.bootx.iam.core.scope.dao.DataScopeUserManager; -import cn.bootx.iam.core.scope.entity.DataScope; -import cn.bootx.iam.core.scope.entity.DataScopeUser; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.scope.DataScopeUserInfoDto; -import cn.bootx.starter.data.perm.code.DataScopeEnum; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_DATA_SCOPE; - -/** - * 数据范围权限限定用户级别 - * - * @author xxm - * @date 2022/1/4 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DataScopeUserService { - - private final DataScopeManager dataScopeManager; - - private final DataScopeUserManager dataScopeUserManager; - - private final UserInfoManager userInfoManager; - - /** - * 关联用户列表 - */ - public List findUsersByDataScopeId(Long dataScopeId) { - Map dataScopeUserMap = dataScopeUserManager.findByDateScopeId(dataScopeId) - .stream() - .collect(Collectors.toMap(DataScopeUser::getUserId, Function.identity(), CollectorsFunction::retainLatest)); - // 查询出用户id - List userIds = dataScopeUserMap.values() - .stream() - .map(DataScopeUser::getUserId) - .collect(Collectors.toList()); - // 查询出用户 - List userInfos = userInfoManager.findAllByIds(userIds); - - return userInfos.stream() - .map(userInfo -> new DataScopeUserInfoDto().setId(dataScopeUserMap.get(userInfo.getId()).getId()) - .setUserId(userInfo.getId()) - .setUsername(userInfo.getUsername()) - .setName(userInfo.getName())) - .collect(Collectors.toList()); - } - - /** - * 添加用户范围权限关联关系 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) - public void saveUserAssign(Long dataScopeId, List userIds) { - DataScope dataScope = dataScopeManager.findById(dataScopeId).orElseThrow(() -> new BizException("数据不存在")); - if (!Objects.equals(dataScope.getType(), DataScopeEnum.USER_SCOPE.getCode()) - && Objects.equals(dataScope.getType(), DataScopeEnum.DEPT_AND_USER_SCOPE.getCode())) { - throw new BizException("非法操作"); - } - List dataScopeUserIds = dataScopeUserManager.findByDateScopeId(dataScopeId) - .stream() - .map(DataScopeUser::getUserId) - .collect(Collectors.toList()); - - List dataScopeUsers = userIds.stream() - .filter(userId -> !dataScopeUserIds.contains(userId)) - .map(userId -> new DataScopeUser(dataScopeId, userId)) - .collect(Collectors.toList()); - dataScopeUserManager.saveAll(dataScopeUsers); - } - - /** - * 批量删除 - */ - @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) - public void deleteBatch(List ids) { - dataScopeUserManager.deleteByIds(ids); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdConvert.java deleted file mode 100644 index da001b10d..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdConvert.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.bootx.iam.core.third.convert; - -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.dto.user.UserThirdDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface UserThirdConvert { - - UserThirdConvert CONVERT = Mappers.getMapper(UserThirdConvert.class); - - UserThirdDto convert(UserThird in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdInfoConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdInfoConvert.java deleted file mode 100644 index 80c97c66f..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/convert/UserThirdInfoConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.third.convert; - -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import cn.bootx.iam.dto.user.UserThirdInfoDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 用户三方登录绑定详情 - * - * @author xxm - * @date 2022-07-02 - */ -@Mapper -public interface UserThirdInfoConvert { - - UserThirdInfoConvert CONVERT = Mappers.getMapper(UserThirdInfoConvert.class); - - UserThirdInfoDto convert(UserThirdInfo in); - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoMapper.java deleted file mode 100644 index c6bf7f12f..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.third.dao; - -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 用户三方登录绑定详情 - * - * @author xxm - * @date 2022-07-02 - */ -@Mapper -public interface UserThirdInfoMapper extends BaseMapper { - -} \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdMapper.java deleted file mode 100644 index 992e053e5..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.third.dao; - -import cn.bootx.iam.core.third.entity.UserThird; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 三方登录 - * - * @author xxm - * @date 2021/8/2 - */ -@Mapper -public interface UserThirdMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThird.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThird.java deleted file mode 100644 index 2c2609876..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThird.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.bootx.iam.core.third.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.third.convert.UserThirdConvert; -import cn.bootx.iam.dto.user.UserThirdDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 用户三方登录 - * - * @author xxm - * @date 2021/8/2 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("iam_user_third") -public class UserThird extends MpBaseEntity implements EntityBaseFunction { - - /** 用户id */ - private Long userId; - - /** 微信(公众号) */ - private String weChatId; - - /** 微信(开放平台) */ - private String weChatOpenId; - - /** qqId */ - private String qqId; - - /** 微博Id */ - private String weiboId; - - /** 码云唯一标识 */ - private String giteeId; - - /** 钉钉唯一标识 */ - private String dingTalkId; - - /** 企业微信唯一标识 */ - private String weComId; - - @Override - public UserThirdDto toDto() { - return UserThirdConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThirdInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThirdInfo.java deleted file mode 100644 index 8df3512d2..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/entity/UserThirdInfo.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.iam.core.third.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpDelEntity; -import cn.bootx.iam.core.third.convert.UserThirdInfoConvert; -import cn.bootx.iam.dto.user.UserThirdInfoDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 用户三方登录绑定详情 - * - * @author xxm - * @date 2022-07-02 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("iam_user_third_info") -@Accessors(chain = true) -public class UserThirdInfo extends MpDelEntity implements EntityBaseFunction { - - /** 用户id */ - private Long userId; - - /** 第三方终端类型 */ - private String clientCode; - - /** 三方平台用户名 */ - private String username; - - /** 三方平台用户昵称 */ - private String nickname; - - /** 三方平台用户头像 */ - private String avatar; - - /** 关联第三方平台中的用户id(例如钉钉) */ - private String thirdUserId; - - /** 转换成dto */ - @Override - public UserThirdInfoDto toDto() { - return UserThirdInfoConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdBindService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdBindService.java deleted file mode 100644 index 3f629782a..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdBindService.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.bootx.iam.core.third.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.iam.core.third.dao.UserThirdInfoManager; -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.WE_CHAT; - -/** - * 三方账号绑定 - * - * @author xxm - * @date 2021/8/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserThirdBindService { - - private final UserThirdManager userThirdManager; - - private final UserThirdInfoManager userThirdInfoManager; - - private final List openIdAuthentications; - - /** - * 绑定账号 - */ - @Transactional(rollbackFor = Exception.class) - public void bind(String authCode, String loginType, String state) { - OpenIdAuthentication openIdAuthentication = this.getOpenIdAuthentication(loginType); - openIdAuthentication.bindUser(authCode, state); - } - - /** - * 解除绑定 - */ - @Transactional - public void unbind(String loginType) { - Long userId = SecurityUtil.getUserId(); - if (!userThirdManager.existsByUserId(userId)) { - throw new DataNotExistException("用户绑定关系不存"); - } - userThirdInfoManager.deleteByUserAndClientCode(userId, loginType); - switch (loginType) { - case WE_CHAT: { - userThirdManager.unbind(userId, UserThird::getWeChatId); - break; - } - case AuthLoginTypeCode.WE_COM: { - userThirdManager.unbind(userId, UserThird::getWeComId); - break; - } - case AuthLoginTypeCode.DING_TALK: { - userThirdManager.unbind(userId, UserThird::getDingTalkId); - break; - } - default: { - throw new BizException("未被支持的三方登录方式"); - } - } - } - - /** - * 获取 openId登录认证器 - */ - private OpenIdAuthentication getOpenIdAuthentication(String clientCode) { - return openIdAuthentications.stream() - .filter(o -> o.adaptation(clientCode)) - .findFirst() - .orElseThrow(() -> new LoginFailureException("未找到对应的终端认证器")); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdQueryService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdQueryService.java deleted file mode 100644 index b4975a3fd..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserThirdQueryService.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.bootx.iam.core.third.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.third.dao.UserThirdInfoManager; -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import cn.bootx.iam.dto.user.UserThirdBindInfo; -import cn.bootx.iam.dto.user.UserThirdBindInfo.BindInfo; -import cn.bootx.iam.dto.user.UserThirdDto; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.*; - -/** - * 用户三方账号查询 - * - * @author xxm - * @date 2022/4/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserThirdQueryService { - - private final UserThirdManager userThirdManager; - - private final UserThirdInfoManager userThirdInfoManager; - - /** - * 分页 - */ - public PageResult page(PageParam pageParam) { - return MpUtil.convert2DtoPageResult(userThirdManager.page(pageParam)); - } - - /** - * 获取详情 - */ - public UserThirdDto findById(Long id) { - return userThirdManager.findById(id).map(UserThird::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 获取用户绑定的详细信息 - */ - public UserThirdBindInfo getThirdBindInfo() { - Long userId = SecurityUtil.getUserId(); - UserThirdBindInfo userThirdBindInfo = new UserThirdBindInfo(); - Map thirdInfoMap = userThirdInfoManager.findAllByUser(userId) - .stream() - .collect(Collectors.toMap(UserThirdInfo::getClientCode, Function.identity())); - userThirdBindInfo.setWeChat(getBindInfo(thirdInfoMap, WE_CHAT)); - userThirdBindInfo.setWeChatOpen(getBindInfo(thirdInfoMap, WE_CHAT_OPEN)); - userThirdBindInfo.setWeCom(getBindInfo(thirdInfoMap, WE_COM)); - userThirdBindInfo.setDingTalk(getBindInfo(thirdInfoMap, DING_TALK)); - return userThirdBindInfo; - } - - /** - * 获取微信绑定信息 - */ - private BindInfo getBindInfo(Map thirdInfoMap, String clientCode) { - UserThirdInfo userThirdInfo = thirdInfoMap.get(clientCode); - BindInfo bindInfo = new BindInfo(); - if (Objects.nonNull(userThirdInfo)) { - bindInfo.setBind(true); - bindInfo.setUsername(userThirdInfo.getUsername()); - } - return bindInfo; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuManager.java deleted file mode 100644 index 975410255..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuManager.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.upms.entity.RoleMenu; -import cn.hutool.core.util.IdUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * 角色权限关系 - * - * @author xxm - * @date 2021/8/3 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class RoleMenuManager extends BaseManager { - - public void deleteByPermission(Long permissionId) { - deleteByField(RoleMenu::getPermissionId, permissionId); - } - - public void deleteByRole(Long roleId) { - this.deleteByField(RoleMenu::getRoleId, roleId); - } - - public List findAllByRoles(List roleIds) { - return findAllByFields(RoleMenu::getRoleId, roleIds); - } - - public List findAllByRoleAndClientCode(Long roleId, String clientCode) { - return lambdaQuery().eq(RoleMenu::getRoleId, roleId).eq(RoleMenu::getClientCode, clientCode).list(); - - } - - @Override - public List saveAll(List list) { - list.forEach(roleMenu -> roleMenu.setId(IdUtil.getSnowflakeNextId())); - MpUtil.executeBatch(list, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); - return list; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuMapper.java deleted file mode 100644 index 495322d29..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RoleMenuMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.iam.core.upms.entity.RoleMenu; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * 角色权限关系 - * - * @author xxm - * @date 2021/8/3 - */ -@Mapper -public interface RoleMenuMapper extends BaseMapper { - - void saveAll(@Param("roleMenus") List roleMenus); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathManager.java deleted file mode 100644 index a04161cc1..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathManager.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.upms.entity.RolePath; -import cn.hutool.core.util.IdUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * 角色权限 - * - * @author xxm - * @date 2020/5/27 16:02 - */ -@Repository -@RequiredArgsConstructor -public class RolePathManager extends BaseManager { - - private final RolePathMapper rolePathMapper; - - public List findAllByRole(Long roleId) { - return findAllByField(RolePath::getRoleId, roleId); - } - - public List findAllByRoles(List roleIds) { - return findAllByFields(RolePath::getRoleId, roleIds); - } - - public void deleteByRole(Long roleId) { - deleteByField(RolePath::getRoleId, roleId); - } - - public void deleteByPermission(Long permissionId) { - deleteByField(RolePath::getPermissionId, permissionId); - } - - public void deleteByPermissions(List permissionIds) { - deleteByFields(RolePath::getPermissionId, permissionIds); - } - - /** - * 替换为for方式 - */ - @Override - public List saveAll(List rolePaths) { - rolePaths.forEach(rolePath -> rolePath.setId(IdUtil.getSnowflakeNextId())); - MpUtil.executeBatch(rolePaths, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); - return rolePaths; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathMapper.java deleted file mode 100644 index d20d4785b..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/RolePathMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.iam.core.upms.entity.RolePath; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * 角色权限 - * - * @author xxm - * @date 2020/11/14 - */ -@Mapper -public interface RolePathMapper extends BaseMapper { - - void saveAll(@Param("rolePaths") List rolePaths); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeManager.java deleted file mode 100644 index b69dbd383..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeManager.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.upms.entity.UserDataScope; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class UserDataScopeManager extends BaseManager { - - public boolean existsByDataScopeId(Long dataScopeId) { - return this.existedByField(UserDataScope::getDataScopeId, dataScopeId); - } - - public void deleteByUser(Long userId) { - this.deleteByField(UserDataScope::getUserId, userId); - } - - public void deleteByUsers(List userIds) { - this.deleteByFields(UserDataScope::getUserId, userIds); - } - - public List findAllByUserId(Long userId) { - return this.findAllByField(UserDataScope::getUserId, userId); - } - - public Optional findByUserId(Long userId) { - return this.findByField(UserDataScope::getUserId, userId); - } - - @Override - public List saveAll(List dataScopes) { - MpUtil.initEntityList(dataScopes, SecurityUtil.getUserIdOrDefaultId()); - MpUtil.executeBatch(dataScopes, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); - return dataScopes; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeMapper.java deleted file mode 100644 index 037e98b4c..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserDataScopeMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.iam.core.upms.entity.UserDataScope; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/23 - */ -@Mapper -public interface UserDataScopeMapper extends BaseMapper { - - void saveAll(@Param("userDataScopes") List userDataScopes); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleMapper.java deleted file mode 100644 index ab468ea8b..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.upms.dao; - -import cn.bootx.iam.core.upms.entity.UserRole; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * 用户角色关系 - * - * @author xxm - * @date 2021/8/3 - */ -@Mapper -public interface UserRoleMapper extends BaseMapper { - - void saveAll(@Param("userRoles") List userRoles); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserDataScope.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserDataScope.java deleted file mode 100644 index e5d6c431e..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserDataScope.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.iam.core.upms.entity; - -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 用户数据范围关联关系 - * - * @author xxm - * @date 2021/12/23 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@TableName("iam_user_data_scope") -public class UserDataScope extends MpIdEntity { - - /** 用户id */ - private Long userId; - - /** 数据权限id */ - private Long dataScopeId; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePathService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePathService.java deleted file mode 100644 index adc1e1ed7..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePathService.java +++ /dev/null @@ -1,138 +0,0 @@ -package cn.bootx.iam.core.upms.service; - -import cn.bootx.common.core.annotation.CountTime; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.iam.core.permission.service.PermPathService; -import cn.bootx.iam.core.upms.dao.RolePathManager; -import cn.bootx.iam.core.upms.entity.RolePath; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.extra.spring.SpringUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_PATH; - -/** - * 角色请求权限关系 - * - * @author xxm - * @date 2021/6/9 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class RolePathService { - - private final RolePathManager rolePathManager; - - private final PermPathService pathService; - - private final UserInfoManager userInfoManager; - - private final UserRoleService userRoleService; - - /** - * 保存角色路径授权 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_PATH }, allEntries = true) - @CountTime - public void addRolePath(Long roleId, List permissionIds) { - // 先删后增 - List rolePaths = rolePathManager.findAllByRole(roleId); - List rolePathIds = rolePaths.stream().map(RolePath::getPermissionId).collect(Collectors.toList()); - // 需要删除的 - List deleteIds = rolePaths.stream() - .filter(rolePath -> !permissionIds.contains(rolePath.getPermissionId())) - .map(MpIdEntity::getId) - .collect(Collectors.toList()); - - List rolePermissions = permissionIds.stream() - .filter(id -> !rolePathIds.contains(id)) - .map(permissionId -> new RolePath(roleId, permissionId)) - .collect(Collectors.toList()); - rolePathManager.deleteByIds(deleteIds); - rolePathManager.saveAll(rolePermissions); - } - - /** - * 查询用户查询拥有的请求权限信息 - */ - public List findPathsByUser() { - Long userId = SecurityUtil.getUserId(); - return this.findPathsByUser(userId); - } - - /** - * 根据角色id获取关联权限id - */ - public List findIdsByRole(Long roleId) { - List rolePermissions = rolePathManager.findAllByRole(roleId); - return rolePermissions.stream().map(RolePath::getPermissionId).collect(Collectors.toList()); - } - - /** - * 查询用户拥有的路径权限信息( 路径路由拦截使用 ) - */ - @Cacheable(value = USER_PATH, key = "#method+':'+#userId") - public List findSimplePathsByUser(String method, Long userId) { - return SpringUtil.getBean(this.getClass()) - .findPathsByUser(userId) - .stream() - .filter(permPathDto -> Objects.equals(method, permPathDto.getRequestType())) - .map(PermPathDto::getPath) - .collect(Collectors.toList()); - } - - /** - * 查询用户拥有的路径权限信息 - */ - public List findPathsByUser(Long userId) { - UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); - - List paths; - if (userInfo.isAdmin()) { - paths = pathService.findAll(); - } - else { - paths = this.findPermissionsByUser(userId); - } - return paths; - } - - /** - * 查询用户查询拥有的权限信息 - */ - private List findPermissionsByUser(Long userId) { - List permissions = new ArrayList<>(0); - - List roleIds = userRoleService.findRoleIdsByUser(userId); - if (CollUtil.isEmpty(roleIds)) { - return permissions; - } - List rolePaths = rolePathManager.findAllByRoles(roleIds); - List permissionIds = rolePaths.stream() - .map(RolePath::getPermissionId) - .distinct() - .collect(Collectors.toList()); - if (CollUtil.isNotEmpty(permissionIds)) { - permissions = pathService.findByIds(permissionIds); - } - return permissions; - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePermService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePermService.java deleted file mode 100644 index ddc10d569..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/RolePermService.java +++ /dev/null @@ -1,193 +0,0 @@ -package cn.bootx.iam.core.upms.service; - -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.common.core.util.TreeBuildUtil; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.iam.code.PermissionCode; -import cn.bootx.iam.core.permission.service.PermMenuService; -import cn.bootx.iam.core.upms.dao.RoleMenuManager; -import cn.bootx.iam.core.upms.entity.RoleMenu; -import cn.bootx.iam.dto.permission.PermMenuDto; -import cn.bootx.iam.dto.upms.MenuAndResourceDto; -import cn.bootx.starter.auth.exception.NotLoginException; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_PERM_CODE; - -/** - * 角色权限菜单关系 - * - * @author xxm - * @date 2021/8/3 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class RolePermService { - - private final RoleMenuManager roleMenuManager; - - private final UserRoleService userRoleService; - - private final PermMenuService permMenuService; - - /** - * 保存角色菜单授权 - */ - @CacheEvict(value = { USER_PERM_CODE }, allEntries = true) - @Transactional(rollbackFor = Exception.class) - public void save(Long roleId, String clientCode, List permissionIds) { - // 先删后增 - List RoleMenus = roleMenuManager.findAllByRoleAndClientCode(roleId, clientCode); - List roleMenuIds = RoleMenus.stream().map(RoleMenu::getPermissionId).collect(Collectors.toList()); - // 需要删除的 - List deleteIds = RoleMenus.stream() - .filter(rolePath -> !permissionIds.contains(rolePath.getPermissionId())) - .map(MpIdEntity::getId) - .collect(Collectors.toList()); - - List roleMenus = permissionIds.stream() - .filter(id -> !roleMenuIds.contains(id)) - .map(permissionId -> new RoleMenu(roleId, clientCode, permissionId)) - .collect(Collectors.toList()); - roleMenuManager.deleteByIds(deleteIds); - roleMenuManager.saveAll(roleMenus); - } - - /** - * 根据角色查询对应的权限id - */ - public List findPermissionIdsByRole(Long roleId, String clientCode) { - List rolePermissions = roleMenuManager.findAllByRoleAndClientCode(roleId, clientCode); - return rolePermissions.stream().map(RoleMenu::getPermissionId).collect(Collectors.toList()); - } - - /** - * 获取菜单权限树, 不包含资源权限(权限码) - */ - public List findMenuTree(String clientCode) { - List permissions = this.findPermissions(clientCode); - List permissionsByNotButton = permissions.stream() - .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) - .collect(Collectors.toList()); - return this.recursiveBuildTree(permissionsByNotButton); - } - - /** - * 获取权限树, 包含菜单和资源权限(权限码) - */ - public List findAllTree(String clientCode) { - return this.recursiveBuildTree(this.findPermissions(clientCode)); - } - - /** - * 获取权限菜单id列表,不包含资源权限(权限码) - */ - public List findMenuIds(String clientCode) { - List permissions = this.findPermissions(clientCode); - return permissions.stream() - .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) - .map(PermMenuDto::getId) - .collect(Collectors.toList()); - } - - /** - * 获取菜单和资源权限(权限码) - */ - public MenuAndResourceDto getPermissions(String clientCode) { - List permissions = this.findPermissions(clientCode); - List resourcePerms = permissions.stream() - .filter(o -> Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) - .filter(PermMenuDto::isEffect) - .map(PermMenuDto::getPermCode) - .collect(Collectors.toList()); - List menus = permissions.stream() - .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) - .collect(Collectors.toList()); - return new MenuAndResourceDto().setResourcePerms(resourcePerms).setMenus(this.recursiveBuildTree(menus)); - } - - /** - * 获取权限信息列表 - */ - private List findPermissions(String clientCode) { - UserDetail userDetail = SecurityUtil.getCurrentUser().orElseThrow(NotLoginException::new); - List permissions; - - // 系统管理员,获取全部的权限 - if (userDetail.isAdmin()) { - permissions = permMenuService.findAllByClientCode(clientCode); - } - else { - // 非管理员获取自身拥有的权限 - permissions = this.findPermissionsByUser(userDetail.getId()) - .stream() - .filter(o -> Objects.equals(clientCode, o.getClientCode())) - .collect(Collectors.toList()); - } - return permissions; - } - - /** - * 获取有效的资源(权限码)列表(后端使用,直接获取所有终端的权限码) - */ - @Cacheable(value = USER_PERM_CODE, key = "#userId") - @NestedPermission - public List findEffectPermCodesByUserId(Long userId) { - // 获取关联的的权限码 - List permissions = this.findPermissionsByUser(userId); - return permissions.stream() - .filter(o -> Objects.equals(o.getMenuType(), PermissionCode.MENU_TYPE_RESOURCE)) - .filter(PermMenuDto::isEffect) - .map(PermMenuDto::getPermCode) - .collect(Collectors.toList()); - } - - /** - * 查询用户查询拥有的权限信息(直接获取所有终端的权限码) - */ - private List findPermissionsByUser(Long userId) { - List permissions = new ArrayList<>(0); - - List roleIds = userRoleService.findRoleIdsByUser(userId); - if (CollUtil.isEmpty(roleIds)) { - return permissions; - } - List roleMenus = roleMenuManager.findAllByRoles(roleIds); - List permissionIds = roleMenus.stream() - .map(RoleMenu::getPermissionId) - .distinct() - .collect(Collectors.toList()); - if (CollUtil.isNotEmpty(permissionIds)) { - permissions = permMenuService.findByIds(permissionIds); - } - return permissions; - } - - /** - * 递归建树 - * @param permissions 查询出的菜单数据 - * @return 递归后的树列表 - */ - private List recursiveBuildTree(List permissions) { - return TreeBuildUtil.build(permissions, null, BaseDto::getId, PermMenuDto::getParentId, - PermMenuDto::setChildren, Comparator.comparingDouble(PermMenuDto::getSortNo)); - - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserDataScopeService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserDataScopeService.java deleted file mode 100644 index b5969dc1e..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserDataScopeService.java +++ /dev/null @@ -1,202 +0,0 @@ -package cn.bootx.iam.core.upms.service; - -import cn.bootx.common.core.annotation.CountTime; -import cn.bootx.common.core.annotation.NestedPermission; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.iam.core.dept.dao.DeptManager; -import cn.bootx.iam.core.dept.entity.Dept; -import cn.bootx.iam.core.scope.dao.DataScopeDeptManager; -import cn.bootx.iam.core.scope.dao.DataScopeManager; -import cn.bootx.iam.core.scope.dao.DataScopeUserManager; -import cn.bootx.iam.core.scope.entity.DataScope; -import cn.bootx.iam.core.scope.entity.DataScopeDept; -import cn.bootx.iam.core.scope.entity.DataScopeUser; -import cn.bootx.iam.core.upms.dao.UserDataScopeManager; -import cn.bootx.iam.core.upms.entity.UserDataScope; -import cn.bootx.iam.core.user.dao.UserDeptManager; -import cn.bootx.iam.core.user.entity.UserDept; -import cn.bootx.iam.dto.scope.DataScopeDto; -import cn.bootx.starter.data.perm.code.DataScopeEnum; -import cn.bootx.starter.data.perm.scope.DataPermScope; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_DATA_SCOPE; - -/** - * 用户数据权限关联关系 - * - * @author xxm - * @date 2021/12/23 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserDataScopeService { - - private final UserDataScopeManager userDataScopeManager; - - private final UserDeptManager userDeptManager; - - private final DataScopeManager dataScopeManager; - - private final DataScopeUserManager dataScopeUserManager; - - private final DataScopeDeptManager dataScopeDeptManager; - - private final DeptManager deptManager; - - /** - * 给用户数据权限关联关系 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_DATA_SCOPE }, key = "#userId") - public void saveAssign(Long userId, Long dataScopeId) { - // 先删除用户拥有的数据权限 - userDataScopeManager.deleteByUser(userId); - if (Objects.nonNull(dataScopeId)) { - userDataScopeManager.save(new UserDataScope(userId, dataScopeId)); - } - } - - /** - * 给用户数据权限关联关系 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_DATA_SCOPE }, key = "#userIds") - public void saveAssignBatch(List userIds, Long dataScopeId) { - // 先删除用户拥有的数据权限 - userDataScopeManager.deleteByUsers(userIds); - List userDataScopes = userIds.stream() - .map(userId -> new UserDataScope(userId, dataScopeId)) - .collect(Collectors.toList()); - userDataScopeManager.saveAll(userDataScopes); - } - - /** - * 查询用户所对应的数据权限信息 - */ - public DataScopeDto findDataScopeByUser(Long userId) { - if (Objects.isNull(this.findDataScopeIdByUser(userId))) { - return new DataScopeDto(); - } - return dataScopeManager.findById(this.findDataScopeIdByUser(userId)) - .map(DataScope::toDto) - .orElseThrow(DataNotExistException::new); - } - - /** - * 查询用户所对应的数据权限id - */ - public Long findDataScopeIdByUser(Long userId) { - return userDataScopeManager.findByUserId(userId).map(UserDataScope::getDataScopeId).orElse(null); - - } - - /** - * 根据用户id获取对应的数据权限范围 - */ - @CountTime - @NestedPermission - @Cacheable(value = USER_DATA_SCOPE, key = "#userId") - public DataPermScope getDataPermScopeByUser(Long userId) { - DataPermScope dataPermScope = new DataPermScope(); - List userDataScopes = userDataScopeManager.findAllByUserId(userId); - - if (CollUtil.isEmpty(userDataScopes)) { - return dataPermScope.setScopeType(DataScopeEnum.SELF); - } - UserDataScope userDataScope = userDataScopes.get(0); - DataScope dataScope = dataScopeManager.findById(userDataScope.getDataScopeId()) - .orElseThrow(() -> new BizException("数据权限[配置不存在")); - - dataPermScope.setScopeType(DataScopeEnum.findByCode(dataScope.getType())); - // 用户 - if (Objects.equals(dataScope.getType(), DataScopeEnum.USER_SCOPE.getCode())) { - Set collect = dataScopeUserManager.findByDateScopeId(dataScope.getId()) - .stream() - .map(DataScopeUser::getUserId) - .collect(Collectors.toSet()); - return dataPermScope.setUserScopeIds(collect); - } - // 部门 - else if (Objects.equals(dataScope.getType(), DataScopeEnum.DEPT_SCOPE.getCode())) { - Set collect = dataScopeDeptManager.findByDateScopeId(dataScope.getId()) - .stream() - .map(DataScopeDept::getDeptId) - .collect(Collectors.toSet()); - return dataPermScope.setDeptScopeIds(collect); - } - // 用户和部门 - else if (Objects.equals(dataScope.getType(), DataScopeEnum.DEPT_AND_USER_SCOPE.getCode())) { - Set userIds = dataScopeUserManager.findByDateScopeId(dataScope.getId()) - .stream() - .map(DataScopeUser::getUserId) - .collect(Collectors.toSet()); - Set deptIds = dataScopeDeptManager.findByDateScopeId(dataScope.getId()) - .stream() - .map(DataScopeDept::getDeptId) - .collect(Collectors.toSet()); - return dataPermScope.setDeptScopeIds(deptIds).setUserScopeIds(userIds); - } - // 自己所属的部门 - else if (Objects.equals(dataScope.getType(), DataScopeEnum.BELONG_DEPT.getCode())) { - Set deptIds = userDeptManager.findDeptIdsByUser(userId) - .stream() - .map(UserDept::getDeptId) - .collect(Collectors.toSet()); - return dataPermScope.setDeptScopeIds(deptIds); - } - // 自己所属的部门和下级部门 - else if (Objects.equals(dataScope.getType(), DataScopeEnum.BELONG_DEPT_AND_SUB.getCode())) { - Set deptIds = this.findSubDeptList(userId); - return dataPermScope.setDeptScopeIds(deptIds); - } - else { - // 默认是只能查看自己的数据 - return dataPermScope; - } - } - - /** - * 查找自己及子级部门 - */ - private Set findSubDeptList(Long userId) { - Set deptIds = userDeptManager.findDeptIdsByUser(userId) - .stream() - .map(UserDept::getDeptId) - .collect(Collectors.toSet()); - Map deptMap = deptManager.findAll() - .stream() - .collect(Collectors.toMap(MpIdEntity::getId, Function.identity())); - Set deptOrgCodes = deptIds.stream().map(deptMap::get).map(Dept::getOrgCode).collect(Collectors.toSet()); - return deptMap.values() - .stream() - .filter(dept -> this.judgeSubDept(dept.getOrgCode(), deptOrgCodes)) - .map(MpIdEntity::getId) - .collect(Collectors.toSet()); - } - - /** - * 判断是否是子部门 - */ - private boolean judgeSubDept(String orgCode, Set orgCodes) { - return orgCodes.stream().anyMatch(s -> StrUtil.startWith(s, orgCode)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserRoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserRoleService.java deleted file mode 100644 index 9e3f32f91..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/service/UserRoleService.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.bootx.iam.core.upms.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.iam.core.role.dao.RoleManager; -import cn.bootx.iam.core.upms.dao.UserRoleManager; -import cn.bootx.iam.core.upms.entity.UserRole; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.role.RoleDto; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static cn.bootx.iam.code.CachingCode.USER_PATH; -import static cn.bootx.iam.code.CachingCode.USER_PERM_CODE; - -/** - * 用户角色关系 - * - * @author xxm - * @date 2021/8/3 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserRoleService { - - private final RoleManager roleManager; - - private final UserInfoManager userInfoManager; - - private final UserRoleManager userRoleManager; - - /** - * 给用户分配角色 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_PATH, USER_PERM_CODE }, allEntries = true) - public void saveAssign(Long userId, List roleIds) { - // 先删除用户拥有的角色 - userRoleManager.deleteByUser(userId); - // 然后给用户添加角色 - List userRoles = this.createUserRoles(userId, roleIds); - userRoleManager.saveAll(userRoles); - } - - /** - * 给用户分配角色 - */ - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = { USER_PATH, USER_PERM_CODE }, allEntries = true) - public void saveAssignBatch(List userIds, List roleIds) { - List userInfos = userInfoManager.findAllByIds(userIds); - if (userInfos.size() != userIds.size()) { - throw new BizException("用户数据有问题"); - } - userRoleManager.deleteByUsers(userIds); - List userRoles = userIds.stream() - .map(userId -> this.createUserRoles(userId, roleIds)) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - userRoleManager.saveAll(userRoles); - } - - /** - * 根据id查询角色id - */ - public List findRoleIdsByUser(Long userId) { - return userRoleManager.findAllByUser(userId) - .stream() - .map(UserRole::getRoleId) - .distinct() - .collect(Collectors.toList()); - } - - /** - * 查询用户所对应的角色 - */ - public List findRolesByUser(Long userId) { - return ResultConvertUtil.dtoListConvert(roleManager.findAllByIds(this.findRoleIdsByUser(userId))); - } - - /** - * 创建用户角色关联 - */ - private List createUserRoles(Long userId, List roleIds) { - return roleIds.stream() - .map(roleId -> new UserRole().setRoleId(roleId).setUserId(userId)) - .collect(Collectors.toList()); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/convert/UserConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/convert/UserConvert.java deleted file mode 100644 index 48bd624b6..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/convert/UserConvert.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.iam.core.user.convert; - -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.user.UserExpandInfoDto; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.param.user.UserInfoParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface UserConvert { - - UserConvert CONVERT = Mappers.getMapper(UserConvert.class); - - UserInfo convert(UserInfoParam in); - - UserInfoDto convert(UserInfo in); - - UserExpandInfoDto convert(UserExpandInfo in); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptMapper.java deleted file mode 100644 index 8a8813009..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.core.user.dao; - -import cn.bootx.iam.core.user.entity.UserDept; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * 用户部门关系 - * - * @author xxm - * @date 2021/9/29 - */ -@Mapper -public interface UserDeptMapper extends BaseMapper { - - void saveAll(@Param("userDepots") List userDepots); - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoManager.java deleted file mode 100644 index f054c98a5..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoManager.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bootx.iam.core.user.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * 用户扩展信息 - * - * @author xxm - * @date 2022/1/8 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class UserExpandInfoManager extends BaseManager { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoMapper.java deleted file mode 100644 index 7bb0af1ac..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserExpandInfoMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.iam.core.user.dao; - -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/1/8 - */ -@Mapper -public interface UserExpandInfoMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoManager.java deleted file mode 100644 index de33d4e50..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoManager.java +++ /dev/null @@ -1,83 +0,0 @@ -package cn.bootx.iam.core.user.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -/** - * 用户信息 - * - * @author xxm - * @date 2020/4/24 15:32 - */ -@Repository -@RequiredArgsConstructor -public class UserInfoManager extends BaseManager { - - public boolean existsByUsername(String username) { - return existedByField(UserInfo::getUsername, username); - } - - public boolean existsByUsername(String username, Long id) { - return existedByField(UserInfo::getUsername, username, id); - } - - public boolean existsByEmail(String email) { - return existedByField(UserInfo::getEmail, email); - } - - public boolean existsByEmail(String email, Long id) { - return existedByField(UserInfo::getEmail, email, id); - } - - public boolean existsByPhone(String phone) { - return existedByField(UserInfo::getPhone, phone); - } - - public boolean existsByPhone(String phone, Long id) { - return existedByField(UserInfo::getPhone, phone, id); - } - - public Optional findByUsername(String username) { - return findByField(UserInfo::getUsername, username); - } - - public Optional findByEmail(String email) { - return findByField(UserInfo::getEmail, email); - } - - public Optional findByPhone(String phone) { - return findByField(UserInfo::getPhone, phone); - } - - public Page page(PageParam pageParam, UserInfoParam param) { - - Page mpPage = MpUtil.getMpPage(pageParam, UserInfo.class); - lambdaQuery().like(StrUtil.isNotBlank(param.getUsername()), UserInfo::getUsername, param.getUsername()) - .like(StrUtil.isNotBlank(param.getName()), UserInfo::getName, param.getName()) - .page(mpPage); - return mpPage; - } - - public void setUpStatus(Long userId, int status) { - lambdaUpdate().eq(MpIdEntity::getId, userId).set(UserInfo::getStatus, status).update(); - } - - /** - * 批量更新用户状态 - */ - public void setUpStatusBatch(List userIds, int status) { - lambdaUpdate().in(MpIdEntity::getId, userIds).set(UserInfo::getStatus, status).update(); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoMapper.java deleted file mode 100644 index d553a7b90..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserInfoMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.iam.core.user.dao; - -import cn.bootx.iam.core.user.entity.UserInfo; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 用户信息 - * - * @author xxm - * @date 2021/7/30 - */ -@Mapper -public interface UserInfoMapper extends BaseMapper { - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserExpandInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserExpandInfo.java deleted file mode 100644 index 96677eb58..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserExpandInfo.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.bootx.iam.core.user.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.user.convert.UserConvert; -import cn.bootx.iam.dto.user.UserExpandInfoDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -/** - * 用户扩展信息 - * - * @author xxm - * @date 2022/1/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("iam_user_expand_info") -public class UserExpandInfo extends MpBaseEntity implements EntityBaseFunction { - - /** 性别 */ - private Integer sex; - - /** 头像 */ - private String avatar; - - /** 生日 */ - private LocalDate birthday; - - /** 上次登录时间 */ - private LocalDateTime lastLoginTime; - - /** 本次登录时间 */ - private LocalDateTime currentLoginTime; - - /** 是否初始密码 */ - private boolean initialPassword; - - /** 上次修改密码时间 */ - private LocalDateTime lastChangePasswordTime; - - @Override - public UserExpandInfoDto toDto() { - return UserConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserInfo.java deleted file mode 100644 index 405c00d8d..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserInfo.java +++ /dev/null @@ -1,95 +0,0 @@ -package cn.bootx.iam.core.user.entity; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.code.UserStatusCode; -import cn.bootx.iam.core.user.convert.UserConvert; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 用户的核心信息 - * - * @author xxm - * @date 2020/4/24 15:21 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("iam_user_info") -public class UserInfo extends MpBaseEntity implements EntityBaseFunction { - - /** 名称 */ - private String name; - - /** 账号 */ - private String username; - - /** 密码 */ - private String password; - - /** 手机号 */ - private String phone; - - /** 邮箱 */ - private String email; - - /** 关联终端id集合 */ - private String clientIds; - - /** 注册来源 */ - private String source; - - /** 是否管理员 */ - private boolean admin; - - /** - * 账号状态 - * @see UserStatusCode - */ - private Integer status; - - /** 注册时间 */ - private LocalDateTime registerTime; - - @Override - public UserInfoDto toDto() { - UserInfoDto userInfoDto = UserConvert.CONVERT.convert(this); - if (StrUtil.isNotBlank(this.getClientIds())) { - List collect = Arrays.stream(this.getClientIds().split(",")).collect(Collectors.toList()); - userInfoDto.setClientIdList(collect); - } - return userInfoDto; - } - - public static UserInfo init(UserInfoParam param) { - UserInfo userInfo = UserConvert.CONVERT.convert(param); - if (CollUtil.isNotEmpty(param.getClientIdList())) { - String appIds = String.join(",", param.getClientIdList()); - userInfo.setClientIds(appIds); - } - return userInfo; - } - - public UserDetail toUserDetail() { - return new UserDetail().setId(this.getId()) - .setPassword(this.password) - .setUsername(this.getUsername()) - .setName(this.name) - .setAdmin(this.admin) - .setStatus(this.status); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAdminService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAdminService.java deleted file mode 100644 index 7e0abcb34..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAdminService.java +++ /dev/null @@ -1,202 +0,0 @@ -package cn.bootx.iam.core.user.service; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.code.UserStatusCode; -import cn.bootx.iam.core.client.dao.ClientManager; -import cn.bootx.iam.core.upms.service.UserRoleService; -import cn.bootx.iam.core.user.dao.UserExpandInfoManager; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.core.user.event.UserCreateEvent; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.dto.user.UserInfoWhole; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.bootx.iam.param.user.UserRegisterParam; -import cn.bootx.starter.auth.util.PasswordEncoder; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.validation.constraints.NotBlank; -import java.time.LocalDateTime; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 超级管理员操作类 - * - * @author xxm - * @date 2021/9/6 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserAdminService { - - private final UserInfoManager userInfoManager; - - private final UserExpandInfoManager userExpandInfoManager; - - private final UserRoleService userRoleService; - - private final UserDeptService userDeptService; - - private final PasswordEncoder passwordEncoder; - - private final UserQueryService userQueryService; - - private final CaptchaService captchaService; - - private final ClientManager clientManager; - - private final ApplicationEventPublisher eventPublisher; - - /** - * 分页查询 - */ - public PageResult page(PageParam pageParam, UserInfoParam userInfoParam) { - return MpUtil.convert2DtoPageResult(userInfoManager.page(pageParam, userInfoParam)); - } - - /** - * 锁定用户 - */ - public void lock(Long userId) { - userInfoManager.setUpStatus(userId, UserStatusCode.BAN); - } - - /** - * 批量锁定用户 - */ - public void lockBatch(List userIds) { - userInfoManager.setUpStatusBatch(userIds, UserStatusCode.BAN); - } - - /** - * 解锁用户 - */ - public void unlock(Long userId) { - userInfoManager.setUpStatus(userId, UserStatusCode.NORMAL); - } - - /** - * 批量解锁用户 - */ - public void unlockBatch(List userIds) { - userInfoManager.setUpStatusBatch(userIds, UserStatusCode.NORMAL); - } - - /** - * 注册新用户 - */ - @Transactional(rollbackFor = Exception.class) - public void register(UserRegisterParam param) { - // 验证 - if (!captchaService.validateImgCaptcha(param.getCaptchaKey(), param.getCaptcha())) { - throw new BizException("验证码错误"); - } - UserInfoParam userInfoParam = new UserInfoParam(); - BeanUtil.copyProperties(param, userInfoParam); - userInfoParam.setName(param.getUsername()); - // TODO 默认注册就有所有终端的权限, 后期优化 - List ids = clientManager.findAll() - .stream() - .map(MpIdEntity::getId) - .map(String::valueOf) - .collect(Collectors.toList()); - userInfoParam.setClientIdList(ids); - this.add(userInfoParam); - } - - /** - * 添加新用户 - */ - @Transactional(rollbackFor = Exception.class) - public void add(UserInfoParam userInfoParam) { - if (userQueryService.existsUsername(userInfoParam.getUsername())) { - throw new BizException("账号已存在"); - } - if (userQueryService.existsEmail(userInfoParam.getEmail())) { - throw new BizException("邮箱已存在"); - } - if (userQueryService.existsPhone(userInfoParam.getPhone())) { - throw new BizException("手机号已存在"); - } - // 注册时间 - UserInfo userInfo = UserInfo.init(userInfoParam); - userInfo.setAdmin(false) - .setStatus(UserStatusCode.NORMAL) - .setPassword(passwordEncoder.encode(userInfo.getPassword())) - .setRegisterTime(LocalDateTime.now()); - userInfoManager.save(userInfo); - // 扩展信息 - UserExpandInfo userExpandInfo = new UserExpandInfo(); - userExpandInfo.setInitialPassword(true).setId(userInfo.getId()); - userExpandInfoManager.save(userExpandInfo); - // 发送用户注册事件 - eventPublisher.publishEvent(new UserCreateEvent(this, userInfo.toDto())); - - } - - /** - * 重置密码 - */ - public void restartPassword(Long userId, @NotBlank(message = "新密码不能为空") String newPassword) { - - UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); - // 新密码进行加密 - newPassword = passwordEncoder.encode(newPassword); - userInfo.setPassword(newPassword); - userInfoManager.updateById(userInfo); - } - - /** - * 编辑用户信息 - */ - public UserInfoDto update(UserInfoParam userInfoParam) { - UserInfo userInfo = userInfoManager.findById(userInfoParam.getId()) - .orElseThrow(UserInfoNotExistsException::new); - userInfoParam.setPassword(null); - BeanUtil.copyProperties(userInfoParam, userInfo, CopyOptions.create().ignoreNullValue()); - if (CollUtil.isNotEmpty(userInfoParam.getClientIdList())) { - userInfo.setClientIds(String.join(",", userInfoParam.getClientIdList())); - } - else { - userInfo.setClientIds(""); - } - return userInfoManager.updateById(userInfo).toDto(); - } - - /** - * 获取用户详情 - */ - public UserInfoWhole getUserInfoWhole(Long userId) { - // 用户信息 - UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userId) - .orElseThrow(UserInfoNotExistsException::new); - // 角色信息 - List rolesByUser = userRoleService.findRolesByUser(userId); - // 部门组织 - List deptListByUser = userDeptService.findDeptListByUser(userId); - return new UserInfoWhole().setUserInfo(userInfo.toDto()) - .setUserExpandInfo(userExpandInfo.toDto()) - .setRoles(rolesByUser) - .setDeptList(deptListByUser); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserExpandInfoService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserExpandInfoService.java deleted file mode 100644 index f1584ee63..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserExpandInfoService.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.iam.core.user.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.iam.core.user.dao.UserExpandInfoManager; -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import cn.hutool.core.thread.ThreadUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; - -/** - * 用户扩展信息服务 - * - * @author xxm - * @date 2022/1/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserExpandInfoService { - - private final UserExpandInfoManager userExpandInfoManager; - - /** - * 更新登录时间 - */ - @Async("asyncExecutor") - public void updateLoginTime(Long userId) { - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userId).orElseThrow(BizException::new); - userExpandInfo.setLastLoginTime(userExpandInfo.getCurrentLoginTime()).setCurrentLoginTime(LocalDateTime.now()); - userExpandInfoManager.updateById(userExpandInfo); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserInfoService.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserInfoService.java deleted file mode 100644 index 91ae684a7..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserInfoService.java +++ /dev/null @@ -1,247 +0,0 @@ -package cn.bootx.iam.core.user.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.iam.core.user.dao.UserExpandInfoManager; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserExpandInfo; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.user.LoginAfterUserInfo; -import cn.bootx.iam.dto.user.UserBaseInfoDto; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; -import cn.bootx.iam.param.user.UserBaseInfoParam; -import cn.bootx.starter.auth.util.PasswordEncoder; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; - -/** - * 用户 - * - * @author xxm - * @date 2020/4/27 21:11 - */ -@Service -@RequiredArgsConstructor -public class UserInfoService { - - private final UserInfoManager userInfoManager; - - private final UserQueryService userQueryService; - - private final UserAssistService userAssistService; - - private final UserExpandInfoManager userExpandInfoManager; - - private final PasswordEncoder passwordEncoder; - - /** - * 登录后获取用户信息 - */ - public LoginAfterUserInfo getLoginAfterUserInfo() { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - return new LoginAfterUserInfo().setAvatar(userExpandInfo.getAvatar()) - .setUserId(userInfo.getId()) - .setUsername(userInfo.getUsername()) - .setName(userInfo.getName()); - } - - /** - * 获取用户安全信息 - */ - public UserInfoDto getUserSecurityInfo() { - return userInfoManager.findById(SecurityUtil.getUserId()) - .map(UserInfo::toDto) - .orElseThrow(UserInfoNotExistsException::new); - } - - /** - * 获取用户基本信息 - */ - public UserBaseInfoDto getUserBaseInfo() { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - return new UserBaseInfoDto().setId(userInfo.getId()) - .setSex(userExpandInfo.getSex()) - .setName(userInfo.getName()) - .setBirthday(userExpandInfo.getBirthday()) - .setAvatar(userExpandInfo.getAvatar()); - } - - /** - * 修改基本信息 - */ - @Transactional(rollbackFor = Exception.class) - public void updateUserBaseInfo(UserBaseInfoParam param) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - param.setId(null); - BeanUtil.copyProperties(param, userExpandInfo, CopyOptions.create().ignoreNullValue()); - BeanUtil.copyProperties(param, userInfo, CopyOptions.create().ignoreNullValue()); - userExpandInfoManager.updateById(userExpandInfo); - userInfoManager.updateById(userInfo); - } - - /** - * 修改密码 - * @param password 原密码 - * @param newPassword 新密码 - */ - @Transactional(rollbackFor = Exception.class) - public void updatePassword(String password, String newPassword) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - // 新密码进行加密 - newPassword = passwordEncoder.encode(newPassword); - - // 判断原有密码是否相同 - if (!passwordEncoder.matches(password, userInfo.getPassword())) { - throw new BizException("旧密码错误"); - } - userInfo.setPassword(newPassword); - userInfoManager.updateById(userInfo); - userExpandInfo.setLastChangePasswordTime(LocalDateTime.now()); - userExpandInfoManager.updateById(userExpandInfo); - } - - /** - * 修改手机号 - * @param phone 要更更换的手机号 - * @param oldCaptcha 旧手机号的验证码 - * @param newCaptcha 新手机的验证码 - */ - @Transactional(rollbackFor = Exception.class) - public void updatePhone(String phone, String oldCaptcha, String newCaptcha) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - // 判断旧手机的验证码是否正常 - if (!userAssistService.validatePhoneChangeCaptcha(userInfo.getPhone(), oldCaptcha)) { - throw new BizException("短信验证码不正确"); - } - // 判断新手机验证码是否正常 - if (!userAssistService.validatePhoneChangeCaptcha(phone, newCaptcha)) { - throw new BizException("短信验证码不正确"); - } - // 手机号是否已经存在 - if (userQueryService.existsPhone(phone)) { - throw new BizException("该手机号已经被使用"); - } - userAssistService.deletePhoneChangeCaptcha(userInfo.getPhone()); - userInfo.setPhone(phone); - userInfoManager.updateById(userInfo); - userAssistService.deletePhoneChangeCaptcha(phone); - } - - /** - * 更改邮箱 - */ - @Transactional(rollbackFor = Exception.class) - public void updateEmail(String email, String oldCaptcha, String newCaptcha) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - // 判断旧手机的验证码是否正常 - if (!userAssistService.validatePhoneChangeCaptcha(userInfo.getPhone(), oldCaptcha)) { - throw new BizException("短信验证码不正确"); - } - // 判断新邮箱验证码是否正常 - if (!userAssistService.validatePhoneChangeCaptcha(email, newCaptcha)) { - throw new BizException("短信验证码不正确"); - } - // 邮箱是否已经存在 - if (!userQueryService.existsEmail(email)) { - throw new BizException("该邮箱已经被使用"); - } - userAssistService.deleteEmailChangeCaptcha(userInfo.getEmail()); - userInfo.setEmail(email); - userInfoManager.updateById(userInfo); - userAssistService.deleteEmailChangeCaptcha(email); - } - - /** - * 找回密码 手机 - */ - @Transactional(rollbackFor = Exception.class) - public void forgetPasswordByPhone(String phone, String captcha, String password) { - if (!userAssistService.validatePhoneForgetCaptcha(phone, captcha)) { - throw new BizException("短信验证码不正确"); - } - UserInfo userInfo = userInfoManager.findByPhone(phone).orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userInfo.getId()) - .orElseThrow(UserInfoNotExistsException::new); - userInfo.setPassword(passwordEncoder.encode(password)); - userExpandInfo.setLastChangePasswordTime(LocalDateTime.now()).setInitialPassword(false); - userInfoManager.updateById(userInfo); - userExpandInfoManager.updateById(userExpandInfo); - userAssistService.deletePhoneForgetCaptcha(phone); - } - - /** - * 找回密码 邮箱 - */ - public void forgetPasswordByEmail(String email, String captcha, String password) { - if (!userAssistService.validateEmailForgetCaptcha(email, captcha)) { - throw new BizException("短信验证码不正确"); - } - UserInfo userInfo = userInfoManager.findByEmail(email).orElseThrow(UserInfoNotExistsException::new); - UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userInfo.getId()) - .orElseThrow(UserInfoNotExistsException::new); - userInfo.setPassword(passwordEncoder.encode(password)); - userExpandInfo.setLastChangePasswordTime(LocalDateTime.now()).setInitialPassword(false); - userInfoManager.updateById(userInfo); - userExpandInfoManager.updateById(userExpandInfo); - userAssistService.deleteEmailForgetCaptcha(email); - } - - /** - * 绑定手机号 - */ - public void bindPhone(String phone, String captcha) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - // 判断新手机验证码是否正常 - if (!userAssistService.validatePhoneChangeCaptcha(phone, captcha)) { - throw new BizException("短信验证码不正确"); - } - // 手机号是否已经存在 - if (userQueryService.existsPhone(phone)) { - throw new BizException("该手机号已经被使用"); - } - userInfo.setPhone(phone); - userInfoManager.updateById(userInfo); - userAssistService.deletePhoneChangeCaptcha(phone); - } - - /** - * 绑定邮箱 - */ - public void bindEmail(String email, String captcha) { - UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) - .orElseThrow(UserInfoNotExistsException::new); - // 判断新邮箱验证码是否正常 - if (!userAssistService.validateEmailChangeCaptcha(email, captcha)) { - throw new BizException("短信验证码不正确"); - } - // 邮箱是否已经存在 - if (!userQueryService.existsEmail(email)) { - throw new BizException("该邮箱已经被使用"); - } - userInfo.setEmail(email); - userInfoManager.updateById(userInfo); - userAssistService.deleteEmailChangeCaptcha(userInfo.getEmail()); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthInfoResult.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthInfoResult.java deleted file mode 100644 index 61dde45e0..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthInfoResult.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.iam.dto.auth; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2021/6/3 - */ -@Data -@Accessors(chain = true) -@Schema(title = "认证返回消息") -public class AuthInfoResult { - - /** 用户id */ - private Long uid; - - /** 租户 */ - private Long tid; - - /** 名称 */ - private String name; - - /** 账号 */ - private String username; - - /** 邮件 */ - private String email; - - /** 手机号 */ - private String phone; - - /** 是否超级管理员 */ - private boolean admin; - - /** 登录时间 */ - private LocalDateTime loginTime; - - /** 终端 */ - private String client; - - /** token */ - private String token; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthPasswordDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthPasswordDto.java deleted file mode 100644 index 3893761a1..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/auth/AuthPasswordDto.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.bootx.iam.dto.auth; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2020/4/25 17:27 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "密码认证信息") -public class AuthPasswordDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -131891945146840339L; - - @Schema(description = "用户主键", required = true) - private Long uid; - - @Schema(description = "用户密码", required = true) - private String password; - - @Schema(description = "最后登录时间") - private LocalDateTime lastLoginTime; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/role/RoleDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/role/RoleDto.java deleted file mode 100644 index e2f46ae9c..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/role/RoleDto.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.iam.dto.role; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "角色") -public class RoleDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = 5532196699667233754L; - - @Schema(description = "角色code") - private String code; - - @Schema(description = "角色名称") - private String name; - - @Schema(description = "是否系统内置 Y 内置 N 不是 内置 不能修改") - private boolean internal; - - @Schema(description = "描述") - private String remark; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeDto.java deleted file mode 100644 index c22c752e6..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeDto.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.iam.dto.scope; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2021/12/24 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "数据范围权限") -public class DataScopeDto extends BaseDto { - - @Schema(description = "编码") - private String code; - - @Schema(description = "名称") - private String name; - - @Schema(description = "类型") - private Integer type; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeUserInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeUserInfoDto.java deleted file mode 100644 index 93e6d49b2..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/scope/DataScopeUserInfoDto.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.iam.dto.scope; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 用户数据范围权限详细信息 - * - * @author xxm - * @date 2022/1/5 - */ -@Data -@Accessors(chain = true) -@Schema(title = "用户数据范围权限详细信息") -public class DataScopeUserInfoDto { - - @Schema(description = "权限关联id") - private Long id; - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "用户名称") - private String name; - - @Schema(description = "用户账号") - private String username; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoDto.java deleted file mode 100644 index 7ec9908f8..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoDto.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.bootx.iam.dto.user; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; -import cn.bootx.iam.code.UserStatusCode; -import cn.hutool.core.collection.CollUtil; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author xxm - * @date 2020/4/24 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "用户信息") -public class UserInfoDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = 5881350477107722635L; - - @Schema(description = "用户id") - private Long id; - - @Schema(description = "名称") - private String name; - - @Schema(description = "账号") - private String username; - - @Schema(description = "密码") - @SensitiveInfo(SensitiveInfo.SensitiveType.PASSWORD) - private String password; - - @Schema(description = "手机号") - @SensitiveInfo(SensitiveInfo.SensitiveType.MOBILE_PHONE) - private String phone; - - @Schema(description = "邮箱") - @SensitiveInfo(SensitiveInfo.SensitiveType.EMAIL) - private String email; - - @Schema(description = "终端id列表") - private List clientIdList = new ArrayList<>(); - - @Schema(description = "注册来源") - private String source; - - @Schema(description = "是否管理员") - private boolean admin; - - /** - * @see UserStatusCode - */ - @Schema(description = "账号状态") - private Integer status; - - @Schema(description = "注册时间") - private LocalDateTime registerTime; - - public UserDetail toUserDetail() { - List clientIds = new ArrayList<>(); - if (CollUtil.isNotEmpty(this.getClientIdList())) { - clientIds = this.getClientIdList().stream().map(Long::valueOf).collect(Collectors.toList()); - } - return new UserDetail().setId(this.getId()) - .setPassword(this.password) - .setUsername(this.getUsername()) - .setName(this.name) - .setAdmin(this.admin) - .setAppIds(clientIds) - .setStatus(this.status); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/login/UserPasswordInvalidException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/login/UserPasswordInvalidException.java deleted file mode 100644 index 1e6a917e2..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/login/UserPasswordInvalidException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.exception.login; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.USER_PASSWORD_INVALID; - -/** - * 用户密码不正确异常 - * - * @author xxm - * @date 2020/5/7 18:16 - */ -public class UserPasswordInvalidException extends BizException implements Serializable { - - private static final long serialVersionUID = 6321083408077778554L; - - public UserPasswordInvalidException() { - super(USER_PASSWORD_INVALID, "用户密码不正确"); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/permission/PermissionDBErrorException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/permission/PermissionDBErrorException.java deleted file mode 100644 index d565babb4..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/permission/PermissionDBErrorException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.exception.permission; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.PERMISSION_DB_ERROR; - -/** - * @author xxm - * @date 2020/5/7 18:01 - */ -public class PermissionDBErrorException extends BizException implements Serializable { - - private static final long serialVersionUID = -2698918595713722011L; - - public PermissionDBErrorException() { - super(PERMISSION_DB_ERROR, "用户没有权限."); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyExistedException.java deleted file mode 100644 index 5c80fe1a8..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyExistedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.exception.role; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.ROLE_ALREADY_EXISTED; - -/** - * @author xxm - * @date 2020/4/29 14:37 - */ -public class RoleAlreadyExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = -9126473695763034719L; - - public RoleAlreadyExistedException() { - super(ROLE_ALREADY_EXISTED, "角色已经存在."); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyUsedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyUsedException.java deleted file mode 100644 index 96573266d..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleAlreadyUsedException.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.iam.exception.role; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.ROLE_ALREADY_USED; - -/** - * @author xxm - * @date 2020/4/29 14:42 - */ -public class RoleAlreadyUsedException extends BizException implements Serializable { - - private static final long serialVersionUID = 3704932788916299672L; - - public RoleAlreadyUsedException() { - super(ROLE_ALREADY_USED, "该角色下分配了用户,您无法将其删除."); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleNotExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleNotExistedException.java deleted file mode 100644 index b59447306..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/role/RoleNotExistedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.exception.role; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.ROLE_NOT_EXISTED; - -/** - * 角色不存在 - * - * @author xxm - * @date 2020/5/7 18:04 - */ -public class RoleNotExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = -6651799569179960110L; - - public RoleNotExistedException() { - super(ROLE_NOT_EXISTED, "角色不存在."); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserInfoNotExistsException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserInfoNotExistsException.java deleted file mode 100644 index d23c1adfa..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserInfoNotExistsException.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.iam.exception.user; - -import cn.bootx.common.core.exception.FatalException; - -import static cn.bootx.iam.code.IamErrorCode.USER_INFO_NOT_EXISTS; - -/** - * 用户信息不存在异常 - * - * @author xxm - * @date 2020/5/7 18:29 - */ -public class UserInfoNotExistsException extends FatalException { - - public UserInfoNotExistsException() { - super(USER_INFO_NOT_EXISTS, "用户信息不存在"); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserNonePhoneAndEmailException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserNonePhoneAndEmailException.java deleted file mode 100644 index 6dad22916..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserNonePhoneAndEmailException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.exception.user; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.NONE_PHONE_AND_EMAIL; - -/** - * 用户手机号和邮箱不可都为空的异常 - * - * @author xxm - * @date 2020/5/7 18:30 - */ -public class UserNonePhoneAndEmailException extends BizException implements Serializable { - - private static final long serialVersionUID = -6866507370268138197L; - - public UserNonePhoneAndEmailException() { - super(NONE_PHONE_AND_EMAIL, "用户的电话和电子邮件必须包含一个"); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserPhoneAlreadyExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserPhoneAlreadyExistedException.java deleted file mode 100644 index 0cfd7ef97..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/exception/user/UserPhoneAlreadyExistedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.exception.user; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.iam.code.IamErrorCode.USER_PHONE_ALREADY_EXISTED; - -/** - * 用户手机已存在异常 - * - * @author xxm - * @date 2020/5/7 18:25 - */ -public class UserPhoneAlreadyExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = -8925952529440870552L; - - public UserPhoneAlreadyExistedException() { - super(USER_PHONE_ALREADY_EXISTED, "用户手机已存在"); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/DataPermScopeHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/DataPermScopeHandlerImpl.java deleted file mode 100644 index 66a2bc1b1..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/DataPermScopeHandlerImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.iam.handler; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.iam.core.upms.service.UserDataScopeService; -import cn.bootx.starter.data.perm.exception.NotLoginPermException; -import cn.bootx.starter.data.perm.local.DataPermContextHolder; -import cn.bootx.starter.data.perm.scope.DataPermScope; -import cn.bootx.starter.data.perm.scope.DataPermScopeHandler; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; - -/** - * 数据权限业务实现 - * - * @author xxm - * @date 2021/12/22 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DataPermScopeHandlerImpl implements DataPermScopeHandler { - - /** - * 需要进行懒加载方式的注入, 因为 DataPermScopeHandler bean创建时机比UserDataScopeService早 - */ - @Lazy - private final UserDataScopeService userDataScopeService; - - /** - * 获取数据权限范围配置 - */ - @Override - public DataPermScope getDataPermScope() { - Long userId = DataPermContextHolder.getUserDetail() - .map(UserDetail::getId) - .orElseThrow(NotLoginPermException::new); - return userDataScopeService.getDataPermScopeByUser(userId); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/PermCodeRouterCheck.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/PermCodeRouterCheck.java deleted file mode 100644 index 3fb3e45f0..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/PermCodeRouterCheck.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.bootx.iam.handler; - -import cn.bootx.common.core.annotation.PermCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.iam.core.upms.service.RolePermService; -import cn.bootx.starter.auth.authentication.RouterCheck; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import org.springframework.web.method.HandlerMethod; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -/** - * 权限码方式请求路径拦截 - * - * @author xxm - * @date 2023/1/22 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class PermCodeRouterCheck implements RouterCheck { - - private final RolePermService rolePermService; - - /** - * 路由检查 - */ - @Override - public boolean check(Object handler) { - if (handler instanceof HandlerMethod) { - HandlerMethod handlerMethod = (HandlerMethod) handler; - // controller上是否加了权限码鉴权注解 - PermCode permCode = handlerMethod.getBeanType().getAnnotation(PermCode.class); - if (Objects.isNull(permCode)) { - // 方法上上是否加了跳过鉴权注解 - permCode = handlerMethod.getMethodAnnotation(PermCode.class); - } - else { - // controller和方法上都加了跳过鉴权注解,以方法上为准 - PermCode annotation = handlerMethod.getMethodAnnotation(PermCode.class); - if (Objects.nonNull(annotation)) { - permCode = annotation; - } - } - return this.ignoreAuth(permCode); - } - return false; - } - - /** - * 权限码鉴权注解处理 - */ - private boolean ignoreAuth(PermCode permCode) { - if (Objects.isNull(permCode)) { - return false; - } - List permCodes = CollUtil.newArrayList(permCode.value()); - if (CollUtil.isEmpty(permCodes)) { - return false; - } - Optional UserDetailOpt = SecurityUtil.getCurrentUser(); - if (!UserDetailOpt.isPresent()) { - return false; - } - List userPermCodes = rolePermService.findEffectPermCodesByUserId(UserDetailOpt.get().getId()); - return userPermCodes.stream().anyMatch(permCodes::contains); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/UserPathRouterCheck.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/UserPathRouterCheck.java deleted file mode 100644 index d64a33751..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/UserPathRouterCheck.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.iam.handler; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.iam.core.upms.service.RolePathService; -import cn.bootx.starter.auth.authentication.RouterCheck; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; -import org.springframework.util.AntPathMatcher; - -import java.util.List; -import java.util.Optional; - -/** - * 用户路径路由拦截 - * - * @author xxm - * @date 2021/12/21 - */ -@Component -@RequiredArgsConstructor -public class UserPathRouterCheck implements RouterCheck { - - private final RolePathService rolePathService; - - private final AntPathMatcher matcher = new AntPathMatcher(); - - @Override - public int sortNo() { - return 10; - } - - @Override - public boolean check(Object handler) { - String method = WebServletUtil.getMethod(); - String path = WebServletUtil.getPath(); - - Optional UserDetailOpt = SecurityUtil.getCurrentUser(); - if (!UserDetailOpt.isPresent()) { - return false; - } - UserDetail userDetail = UserDetailOpt.get(); - List paths = rolePathService.findSimplePathsByUser(method, userDetail.getId()); - return paths.stream().anyMatch(pattern -> matcher.match(pattern, path)); - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeDeptParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeDeptParam.java deleted file mode 100644 index 282714d23..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeDeptParam.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.param.scope; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/24 - */ -@Data -@Accessors(chain = true) -@Schema(title = "部门范围") -public class DataScopeDeptParam { - - @Schema(description = "数据权限id") - private Long dataScopeId; - - @Schema(description = "部门id集合") - private List deptIds; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeParam.java deleted file mode 100644 index 755cf0120..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeParam.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.iam.param.scope; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2021/12/24 - */ -@Data -@Accessors(chain = true) -@Schema(title = "数据范围权限") -public class DataScopeParam { - - @Schema(description = "主键") - private Long id; - - @Schema(description = "编码") - private String code; - - @Schema(description = "名称") - private String name; - - @Schema(description = "类型") - private Integer type; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeUserParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeUserParam.java deleted file mode 100644 index 4685281d4..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/scope/DataScopeUserParam.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.param.scope; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * @author xxm - * @date 2021/12/24 - */ -@Data -@Accessors(chain = true) -@Schema(title = "部门范围") -public class DataScopeUserParam { - - @Schema(description = "数据权限id") - private Long dataScopeId; - - @Schema(description = "用户id") - private List userIds; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/RolePermissionParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/RolePermissionParam.java deleted file mode 100644 index fee6a4d98..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/RolePermissionParam.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.iam.param.upms; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.io.Serializable; -import java.util.List; - -/** - * @author xxm - * @date 2021/6/9 - */ -@Data -@Accessors(chain = true) -@Schema(title = "角色权限(菜单/)") -public class RolePermissionParam implements Serializable { - - private static final long serialVersionUID = 4344723093613370279L; - - @Schema(description = "角色的ID") - @NotNull(message = "角色不可为空") - private Long roleId; - - @Schema(description = "终端code") - @NotBlank(message = "终端不可为空", groups = { PermMenu.class }) - private String clientCode; - - @Schema(description = "权限id") - private List permissionIds; - - public interface PermMenu { - - } - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeBatchParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeBatchParam.java deleted file mode 100644 index c43314b07..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeBatchParam.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.iam.param.upms; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import java.util.List; - -/** - * @author xxm - * @date 2022/6/7 - */ -@Data -@Schema(title = "用户数据权限批量设置参数") -public class UserDataScopeBatchParam { - - @Schema(description = "用户的ID", required = true) - @NotEmpty(message = "用户集合不能为空") - private List userIds; - - @Schema(description = "数据权限的ID集合", required = true) - private Long dataScopeId; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeParam.java deleted file mode 100644 index 3a4e909ac..000000000 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserDataScopeParam.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.iam.param.upms; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** - * @author xxm - * @date 2022/1/2 - */ -@Data -@Schema(title = "用户数据权限参数") -public class UserDataScopeParam { - - @Schema(description = "用户的ID", required = true) - @NotNull(message = "用户 ID 不能为空") - private Long userId; - - @Schema(description = "数据权限的ID集合", required = true) - private Long dataScopeId; - -} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/IamApplication.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/IamApplication.java similarity index 85% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/IamApplication.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/IamApplication.java index a63c10d3b..fd5329e2b 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/IamApplication.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/IamApplication.java @@ -1,4 +1,4 @@ -package cn.bootx.iam; +package cn.bootx.platform.iam; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -8,7 +8,7 @@ * 身份识别与访问管理 * * @author xxm - * @date 2021/7/29 + * @since 2021/7/29 */ @ComponentScan @MapperScan(annotationClass = Mapper.class) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CachingCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CachingCode.java new file mode 100644 index 000000000..3c382a4b2 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CachingCode.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.code; + +/** + * 缓存名称 + * + * @author xxm + * @since 2021/6/16 + */ +public interface CachingCode { + + /** 直接放行的请求权限 */ + String IGNORE_PATH = "iam:ignore:path"; + + /** 用户请求权限关系缓存 */ + String USER_PATH = "iam:user:path"; + + /** 用户权限码关系缓存 */ + String USER_PERM_CODE = "iam:user:perm:code"; + + /** 用户数据权限关系缓存 */ + String USER_DATA_SCOPE = "iam:user:data:scope"; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CaptchaTypeCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CaptchaTypeCode.java new file mode 100644 index 000000000..81d950436 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/CaptchaTypeCode.java @@ -0,0 +1,9 @@ +package cn.bootx.platform.iam.code; + +/** + * 验证码类型 + * @author xxm + * @since 2023/9/25 + */ +public interface CaptchaTypeCode { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/IamErrorCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/IamErrorCode.java similarity index 89% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/code/IamErrorCode.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/IamErrorCode.java index 89997a10a..89d1e6c51 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/IamErrorCode.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/IamErrorCode.java @@ -1,10 +1,10 @@ -package cn.bootx.iam.code; +package cn.bootx.platform.iam.code; /** * 用户中心错误码(21000-21999) * * @author xxm - * @date 2020/4/24 16:01 + * @since 2020/4/24 16:01 */ public interface IamErrorCode { @@ -52,6 +52,9 @@ public interface IamErrorCode { /** 角色已经被使用 */ int ROLE_ALREADY_USED = 21027; + /** 含有下级角色 */ + int ROLE_HAS_CHILD = 21028; + /** 权限操作错误 */ int PERMISSION_DB_ERROR = 21028; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/OrgCategoryCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/OrgCategoryCode.java similarity index 78% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/code/OrgCategoryCode.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/OrgCategoryCode.java index 2f513acbb..64070b64f 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/OrgCategoryCode.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/OrgCategoryCode.java @@ -1,10 +1,10 @@ -package cn.bootx.iam.code; +package cn.bootx.platform.iam.code; /** * 部门组织机构类型 * * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ public interface OrgCategoryCode { diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/PermissionCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/PermissionCode.java similarity index 84% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/code/PermissionCode.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/PermissionCode.java index acda5c438..bb6471811 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/code/PermissionCode.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/PermissionCode.java @@ -1,10 +1,10 @@ -package cn.bootx.iam.code; +package cn.bootx.platform.iam.code; /** * 权限相关编码 * * @author xxm - * @date 2021/7/12 + * @since 2021/7/12 */ public interface PermissionCode { diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/UserStatusCode.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/UserStatusCode.java new file mode 100644 index 000000000..ca8eeafb5 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/code/UserStatusCode.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.iam.code; + +/** + * 用户状态码 + * + * @author xxm + * @since 2021/9/9 + */ +public interface UserStatusCode { + + /** 正常 */ + String NORMAL = "normal"; + + /** 锁定 多次登录失败 */ + String LOCK = "lock"; + + /** 封禁 */ + String BAN = "ban"; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/AuthAssistController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/AuthAssistController.java new file mode 100644 index 000000000..0a1acc23c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/AuthAssistController.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.iam.core.auth.service.AuthAssistService; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author xxm + * @since 2021/9/9 + */ +@Tag(name = "认证支撑接口") +@RestController +@RequestMapping("/auth") +@RequiredArgsConstructor +public class AuthAssistController { + + private final AuthAssistService authAssistService; + + @IgnoreAuth + @Operation(summary = "发送短信验证码") + @PostMapping("/sendSmsCaptcha") + public ResResult sendSmsCaptcha(String phone) { + authAssistService.sendSmsCaptcha(phone); + return Res.ok(); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ClientController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ClientController.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ClientController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ClientController.java index 45de1595b..631ea4496 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ClientController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ClientController.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.iam.core.client.service.ClientService; -import cn.bootx.iam.dto.client.ClientDto; -import cn.bootx.iam.param.client.ClientParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.iam.core.client.service.ClientService; +import cn.bootx.platform.iam.dto.client.ClientDto; +import cn.bootx.platform.iam.param.client.ClientParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -18,7 +18,7 @@ * 认证终端 * * @author xxm - * @date 2022-06-27 + * @since 2022-06-27 */ @Tag(name = "认证终端") @RestController @@ -79,4 +79,4 @@ public ResResult existsByCode(String code, Long id) { return Res.ok(clientService.existsByCode(code, id)); } -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DataRoleController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DataRoleController.java new file mode 100644 index 000000000..ef660ce70 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DataRoleController.java @@ -0,0 +1,133 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.iam.core.scope.service.DataRoleService; +import cn.bootx.platform.iam.core.scope.service.DataRoleUserService; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import cn.bootx.platform.iam.dto.scope.DataRoleUserDto; +import cn.bootx.platform.iam.param.scope.DataRoleParam; +import cn.bootx.platform.iam.param.scope.DataRoleDeptParam; +import cn.bootx.platform.iam.param.scope.DataRoleUserParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.api.annotations.ParameterObject; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Tag(name = "数据角色配置") +@RestController +@RequestMapping("/data/role") +@RequiredArgsConstructor +public class DataRoleController { + + private final DataRoleService dataRoleService; + + private final DataRoleUserService dataRoleUserService; + + @Operation(summary = "添加") + @PostMapping("/add") + public ResResult add(@RequestBody DataRoleParam param) { + dataRoleService.add(param); + return Res.ok(); + } + + @Operation(summary = "更新") + @PostMapping("/update") + public ResResult update(@RequestBody DataRoleParam param) { + dataRoleService.update(param); + return Res.ok(); + } + + @Operation(summary = "删除") + @DeleteMapping("/delete") + public ResResult delete(Long id) { + dataRoleService.delete(id); + return Res.ok(); + } + + @Operation(summary = "保存关联部门") + @PostMapping("/saveDeptAssign") + public ResResult saveDeptAssign(@RequestBody DataRoleDeptParam param) { + dataRoleService.saveDeptAssign(param); + return Res.ok(); + } + + @Operation(summary = "获取关联部门id") + @GetMapping("/getDeptIds") + public ResResult> getDeptIds(Long id) { + return Res.ok(dataRoleService.findDeptIds(id)); + } + + @Operation(summary = "编码是否被使用") + @GetMapping("/existsByCode") + public ResResult existsByCode(String code) { + return Res.ok(dataRoleService.existsByCode(code)); + } + + @Operation(summary = "编码是否被使用(不包含自己)") + @GetMapping("/existsByCodeNotId") + public ResResult existsByCode(String code, Long id) { + return Res.ok(dataRoleService.existsByCode(code, id)); + } + + @Operation(summary = "名称是否被使用") + @GetMapping("/existsByName") + public ResResult existsByName(String name) { + return Res.ok(dataRoleService.existsByName(name)); + } + + @Operation(summary = "名称是否被使用(不包含自己)") + @GetMapping("/existsByNameNotId") + public ResResult existsByName(String name, Long id) { + return Res.ok(dataRoleService.existsByName(name, id)); + } + + @Operation(summary = "获取") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(dataRoleService.findById(id)); + } + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(@ParameterObject PageParam pageParam, + @ParameterObject DataRoleParam param) { + return Res.ok(dataRoleService.page(pageParam, param)); + } + + @Operation(summary = "查询全部") + @GetMapping("/findAll") + public ResResult> findAll() { + return Res.ok(dataRoleService.findAll()); + } + + @Operation(summary = "获取关联的用户列表") + @GetMapping("/findUsersByDataRoleId") + public ResResult> findUsersByDataRoleId(Long id) { + return Res.ok(dataRoleUserService.findUsersByDataRoleId(id)); + } + + @Operation(summary = "保存数据角色关联用户权限") + @PostMapping("/saveUserAssign") + public ResResult saveUserAssign(@RequestBody DataRoleUserParam param) { + dataRoleUserService.saveUserAssign(param.getDataRoleId(), param.getUserIds()); + return Res.ok(); + } + + @Operation(summary = "批量删除数据角色关联用户") + @DeleteMapping("/deleteUserAssigns") + public ResResult deleteUserAssigns(@RequestBody List ids) { + dataRoleUserService.deleteBatch(ids); + return Res.ok(); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DeptController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DeptController.java similarity index 79% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DeptController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DeptController.java index ef7c4b08a..215fba1f6 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/DeptController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/DeptController.java @@ -1,11 +1,11 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.iam.core.dept.service.DeptService; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.dto.dept.DeptTreeResult; -import cn.bootx.iam.param.dept.DeptParam; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.iam.core.dept.service.DeptService; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import cn.bootx.platform.iam.dto.dept.DeptTreeResult; +import cn.bootx.platform.iam.param.dept.DeptParam; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.AllArgsConstructor; @@ -15,7 +15,7 @@ /** * @author xxm - * @date 2020/5/10 + * @since 2020/5/10 */ @Tag(name = "部门管理") @RestController diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/LoginTypeController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/LoginTypeController.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/LoginTypeController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/LoginTypeController.java index 2810380c8..aecb33de7 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/LoginTypeController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/LoginTypeController.java @@ -1,14 +1,14 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.iam.core.client.service.LoginTypeService; -import cn.bootx.iam.dto.client.LoginTypeDto; -import cn.bootx.iam.param.client.LoginTypeParam; +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.query.entity.QueryParams; +import cn.bootx.platform.iam.core.client.service.LoginTypeService; +import cn.bootx.platform.iam.dto.client.LoginTypeDto; +import cn.bootx.platform.iam.param.client.LoginTypeParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -20,7 +20,7 @@ * 登录方式 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Tag(name = "登录方式管理") @RestController diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/OnlineUserController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/OnlineUserController.java new file mode 100644 index 000000000..5097c5a99 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/OnlineUserController.java @@ -0,0 +1,54 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.iam.core.online.service.OnlineUserService; +import cn.bootx.platform.iam.dto.online.OnlineUserInfoDto; +import cn.bootx.platform.iam.dto.online.OnlineUserSessionDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 在线用户 + * @author xxm + * @since 2023/12/4 + */ +@Tag(name = "在线用户") +@RestController +@RequestMapping("/online/user") +@RequiredArgsConstructor +public class OnlineUserController { + private final OnlineUserService onlineUserService; + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(PageParam pageParam){ + return Res.ok(onlineUserService.page(pageParam)); + } + + @Operation(summary = "获取用户链接信息") + @GetMapping("/getSessionByUserId") + public ResResult> getSessionByUserId(String userId){ + return Res.ok(onlineUserService.getSessionByUserId(userId)); + } + + @Operation(summary = "登录用户分页") + @GetMapping("/pageByLogin") + public ResResult pageByLogin(PageParam pageParam){ + return Res.ok(); + } + + @Operation(summary = "踢出用户") + @GetMapping("/kickOut") + public ResResult kickOut(String userId){ + return Res.ok(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PasswordSecurityConfigController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PasswordSecurityConfigController.java new file mode 100644 index 000000000..391167015 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PasswordSecurityConfigController.java @@ -0,0 +1,57 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.iam.core.security.password.service.PasswordChangeHistoryService; +import cn.bootx.platform.iam.core.security.password.service.PasswordSecurityCheckService; +import cn.bootx.platform.iam.core.security.password.service.PasswordSecurityConfigService; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.dto.security.passwordSecurityCheckResult; +import cn.bootx.platform.iam.param.security.PasswordSecurityConfigParam; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@Tag(name ="密码安全策略") +@RestController +@RequestMapping("/security/password") +@RequiredArgsConstructor +public class PasswordSecurityConfigController { + private final PasswordSecurityConfigService passwordSecurityConfigService; + private final PasswordChangeHistoryService passwordChangeHistoryService; + private final PasswordSecurityCheckService passwordSecurityCheckService; + + @Operation( summary = "新增或添加密码安全配置") + @PostMapping(value = "/addOrUpdate") + public ResResult addOrUpdate(@RequestBody PasswordSecurityConfigParam param){ + passwordSecurityConfigService.addOrUpdate(param); + return Res.ok(); + } + + @Operation( summary = "获取配置") + @GetMapping(value = "/getDefault") + public ResResult getDefault(){ + return Res.ok(passwordSecurityConfigService.getDefault()); + } + + @Operation(summary = "查看要修改的密码是否重复") + @GetMapping("/isRecentlyUsed") + public ResResult isRecentlyUsed(String password) { + return Res.ok(passwordChangeHistoryService.isRecentlyUsed(SecurityUtil.getUserId(),password)); + } + + @IgnoreAuth + @Operation(summary = "登录后检查密码相关的情况") + @GetMapping("/check") + public ResResult check(){ + return Res.ok(passwordSecurityCheckService.check()); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermMenuController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermMenuController.java new file mode 100644 index 000000000..69e254777 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermMenuController.java @@ -0,0 +1,85 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.iam.core.permission.service.PermMenuService; +import cn.bootx.platform.iam.core.upms.service.RolePermService; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.param.permission.PermMenuParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 菜单和权限码 + * @author xxm + * @since 2020/5/11 9:36 + */ +@Tag(name = "菜单和权限码") +@RestController +@RequestMapping("/perm/menu") +@RequiredArgsConstructor +public class PermMenuController { + + private final PermMenuService permissionService; + + private final RolePermService rolePermissionService; + + @Operation(summary = "添加菜单权限") + @PostMapping("/add") + public ResResult add(@RequestBody PermMenuParam param) { + return Res.ok(permissionService.add(param)); + } + + @Operation(summary = "修改菜单权限") + @PostMapping("/update") + public ResResult update(@RequestBody PermMenuParam param) { + return Res.ok(permissionService.update(param)); + } + + @Operation(summary = "获取菜单树") + @GetMapping("/menuTree") + public ResResult> menuTree(String clientCode) { + return Res.ok(rolePermissionService.findMenuTree(clientCode)); + } + + @Operation(summary = "资源(权限码)列表") + @GetMapping("/resourceList") + public ResResult> resourceList(Long menuId) { + return Res.ok(permissionService.findResourceByMenuId(menuId)); + } + + @Operation(summary = "获取菜单和权限码树") + @GetMapping("/menuAndPermCodeTree") + public ResResult> menuAndPermCodeTree(String clientCode) { + return Res.ok(rolePermissionService.findMenuAndPermCodeTree(clientCode)); + } + + @Operation(summary = "根据id查询") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(permissionService.findById(id)); + } + + @Operation(summary = "删除") + @DeleteMapping("/delete") + public ResResult delete(Long id) { + permissionService.delete(id); + return Res.ok(); + } + + @Operation(summary = "编码是否被使用") + @GetMapping("/existsByPermCode") + public ResResult existsByPermCode(String permCode) { + return Res.ok(permissionService.existsByPermCode(permCode)); + } + + @Operation(summary = "编码是否被使用(不包含自己)") + @GetMapping("/existsByPermCodeNotId") + public ResResult existsByPermCode(String permCode, Long id) { + return Res.ok(permissionService.existsByPermCode(permCode, id)); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermPathController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermPathController.java similarity index 79% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermPathController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermPathController.java index 4908bb6b2..0ba30b49c 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/PermPathController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/PermPathController.java @@ -1,14 +1,14 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.permission.service.PermPathService; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.param.permission.PermPathBatchEnableParam; -import cn.bootx.iam.param.permission.PermPathParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.permission.service.PermPathService; +import cn.bootx.platform.iam.dto.permission.PermPathDto; +import cn.bootx.platform.iam.param.permission.PermPathBatchEnableParam; +import cn.bootx.platform.iam.param.permission.PermPathParam; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; @@ -21,10 +21,10 @@ /** * @author xxm - * @date 2020/5/11 9:36 + * @since 2020/5/11 9:36 */ @Validated -@Tag(name = "请求权限资源") +@Tag(name = "请求权限管理") @RestController @RequestMapping("/perm/path") @RequiredArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleController.java new file mode 100644 index 000000000..4c967a9be --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleController.java @@ -0,0 +1,108 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.role.service.RoleService; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.param.role.RoleParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author xxm + * @since 2021/6/9 + */ +@Tag(name = "角色管理") +@RestController +@RequestMapping("/role") +@RequiredArgsConstructor +public class RoleController { + + private final RoleService roleService; + + @Operation(summary = "添加角色(返回角色对象)") + @PostMapping(value = "/add") + public ResResult add(@RequestBody RoleParam roleParam) { + ValidationUtil.validateParam(roleParam); + roleService.add(roleParam); + return Res.ok(); + } + + @Operation(summary = "删除角色") + @DeleteMapping(value = "/delete") + public ResResult delete(Long id) { + roleService.delete(id); + return Res.ok(); + } + + @Operation(summary = "角色树") + @GetMapping("/tree") + public ResResult> tree(){ + return Res.ok(roleService.tree()); + } + + @Operation(summary = "修改角色(返回角色对象)") + @PostMapping(value = "/update") + public ResResult update(@RequestBody RoleParam roleParam) { + ValidationUtil.validateParam(roleParam); + roleService.update(roleParam); + return Res.ok(); + } + + @Operation(summary = "通过ID查询角色") + @GetMapping(value = "/findById") + public ResResult findById(Long id) { + return Res.ok(roleService.findById(id)); + } + + @Operation(summary = "查询所有的角色") + @GetMapping(value = "/findAll") + public ResResult> findAll() { + return Res.ok(roleService.findAll()); + } + + @Operation(summary = "角色下拉框") + @GetMapping(value = "/dropdown") + public ResResult> dropdown() { + return Res.ok(roleService.dropdown()); + } + + @Operation(summary = "分页查询角色") + @GetMapping(value = "/page") + public ResResult> page(PageParam pageParam, RoleParam roleParam) { + return Res.ok(roleService.page(pageParam, roleParam)); + } + + @Operation(summary = "编码是否被使用") + @GetMapping("/existsByCode") + public ResResult existsByCode(String code) { + return Res.ok(roleService.existsByCode(code)); + } + + @Operation(summary = "编码是否被使用(不包含自己)") + @GetMapping("/existsByCodeNotId") + public ResResult existsByCode(String code, Long id) { + return Res.ok(roleService.existsByCode(code, id)); + } + + @Operation(summary = "名称是否被使用") + @GetMapping("/existsByName") + public ResResult existsByName(String name) { + return Res.ok(roleService.existsByName(name)); + } + + @Operation(summary = "名称是否被使用(不包含自己)") + @GetMapping("/existsByNameNotId") + public ResResult existsByName(String name, Long id) { + return Res.ok(roleService.existsByName(name, id)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleMenuController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleMenuController.java new file mode 100644 index 000000000..9e346ad48 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RoleMenuController.java @@ -0,0 +1,66 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.upms.service.RolePermService; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.dto.upms.MenuAndResourceDto; +import cn.bootx.platform.iam.param.upms.RolePermissionParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 角色权限(菜单)关联关系 + * + * @author xxm + * @since 2021/7/12 + */ +@Tag(name = "角色菜单权限关系") +@RestController +@RequestMapping("/role/menu") +@RequiredArgsConstructor +public class RoleMenuController { + + private final RolePermService rolePermService; + + @Operation(summary = "保存请求权限关系") + @PostMapping("/save") + public ResResult save(@RequestBody RolePermissionParam param) { + ValidationUtil.validateParam(param, RolePermissionParam.PermMenu.class); + rolePermService.saveRoleMenu(param.getRoleId(), param.getClientCode(), param.getPermissionIds(),param.isUpdateChildren()); + return Res.ok(true); + } + + @Operation(summary = "获取权限菜单id列表,不包含资源权限") + @GetMapping("/findMenuIds") + public ResResult> findMenuIds(String clientCode) { + return Res.ok(rolePermService.findMenuIds(clientCode)); + } + + @Operation(summary = "获取当前角色下关联权限id集合(包含权限码和菜单)") + @GetMapping("/findPermissionIdsByRole") + public ResResult> findPermissionIdsByRole(Long roleId, String clientCode) { + return Res.ok(rolePermService.findPermissionIdsByRole(roleId, clientCode)); + } + + + @Operation(summary = "获取当前角色下可见的菜单和权限码树(分配时用)") + @GetMapping("/findTreeByRole") + public ResResult> findTreeByRole(Long roleId, String clientCode) { + return Res.ok(rolePermService.findTreeByRole(clientCode,roleId)); + } + + @IgnoreAuth + @Operation(summary = "获取菜单和权限码(根据用户进行筛选)") + @GetMapping("/getPermissions") + public ResResult getPermissions(String clientCode) { + return Res.ok(rolePermService.getPermissions(clientCode)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RolePathController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RolePathController.java new file mode 100644 index 000000000..8044ecbc8 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/RolePathController.java @@ -0,0 +1,48 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.upms.service.RolePathService; +import cn.bootx.platform.iam.dto.permission.PermPathDto; +import cn.bootx.platform.iam.param.upms.RolePermissionParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author xxm + * @since 2021/6/9 + */ +@Tag(name = "角色请求权限消息关系") +@RestController +@RequestMapping("/role/path") +@RequiredArgsConstructor +public class RolePathController { + + private final RolePathService rolePathService; + + @Operation(summary = "保存角色请求权限关联关系") + @PostMapping("/save") + public ResResult save(@RequestBody RolePermissionParam param) { + ValidationUtil.validateParam(param); + rolePathService.addRolePath(param.getRoleId(), param.getPermissionIds(), param.isUpdateChildren()); + return Res.ok(); + } + + @Operation(summary = "获取当前用户角色下可见的请求权限列表(分配时用)") + @GetMapping("/findPathsByRole") + public ResResult> findPathsByRole(Long roleId) { + return Res.ok(rolePathService.findPathsByRole(roleId)); + } + + @Operation(summary = "根据角色id获取关联权限id") + @GetMapping("/findIdsByRole") + public ResResult> findIdsByRole(Long roleId) { + return Res.ok(rolePathService.findIdsByRole(roleId)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ThirdLoginController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ThirdLoginController.java similarity index 86% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ThirdLoginController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ThirdLoginController.java index 2c6bebcee..e047a6f2a 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/ThirdLoginController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/ThirdLoginController.java @@ -1,8 +1,8 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.iam.core.auth.service.ThirdLoginService; -import cn.bootx.starter.auth.entity.ThirdAuthCode; +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.starter.auth.entity.ThirdAuthCode; +import cn.bootx.platform.iam.core.auth.service.ThirdLoginService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -21,7 +21,7 @@ * 三方登录 * * @author xxm - * @date 2022/6/29 + * @since 2022/6/29 */ @Slf4j @IgnoreAuth diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAdminController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAdminController.java new file mode 100644 index 000000000..1792e39ee --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAdminController.java @@ -0,0 +1,133 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.OperateLog; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.iam.core.user.service.UserAdminService; +import cn.bootx.platform.iam.core.user.service.UserQueryService; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoWhole; +import cn.bootx.platform.iam.param.user.UserInfoParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author xxm + * @since 2021/9/6 + */ +@Validated +@Tag(name = "管理用户(管理员级别)") +@RestController +@RequestMapping("/user/admin") +@RequiredArgsConstructor +public class UserAdminController { + + private final UserAdminService userAdminService; + + private final UserQueryService userQueryService; + + @Operation(summary = "根据用户id查询用户") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(userQueryService.findById(id)); + } + + @Operation(summary = "查询用户详情") + @GetMapping("/getUserInfoWhole") + public ResResult getUserInfoWhole(Long id) { + return Res.ok(userAdminService.getUserInfoWhole(id)); + } + + @Operation(summary = "根据邮箱查询用户") + @GetMapping("/getByEmail") + public ResResult getByEmail(String email) { + return Res.ok(userQueryService.findByEmail(email)); + } + + @Operation(summary = "根据手机号查询用户") + @GetMapping("/getByPhone") + public ResResult getByPhone(String phone) { + return Res.ok(userQueryService.findByPhone(phone)); + } + + @Operation(summary = "添加用户") + @PostMapping("/add") + public ResResult add(@RequestBody UserInfoParam userInfoParam) { + userAdminService.add(userInfoParam); + return Res.ok(); + } + + @Operation(summary = "修改用户") + @PostMapping("/update") + public ResResult update(@RequestBody UserInfoParam userInfoParam) { + userAdminService.update(userInfoParam); + return Res.ok(); + } + + @Operation(summary = "重置密码") + @OperateLog(title = "重置密码", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @PostMapping("/restartPassword") + public ResResult restartPassword(@NotNull(message = "用户不可为空") Long userId, + @NotBlank(message = "新密码不能为空") String newPassword) { + userAdminService.restartPassword(userId, newPassword); + return Res.ok(); + } + + @Operation(summary = "批量重置密码") + @OperateLog(title = "批量重置密码", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @PostMapping("/restartPasswordBatch") + public ResResult restartPasswordBatch(@NotEmpty(message = "用户不可为空") @RequestBody List userIds, + @NotBlank(message = "新密码不能为空") String newPassword) { + userAdminService.restartPasswordBatch(userIds, newPassword); + return Res.ok(); + } + + @OperateLog(title = "封禁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @Operation(summary = "封禁用户") + @PostMapping("/ban") + public ResResult ban(Long userId) { + userAdminService.ban(userId); + return Res.ok(); + } + + @OperateLog(title = "批量封禁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @Operation(summary = "批量封禁用户") + @PostMapping("/banBatch") + public ResResult banBatch(@RequestBody @NotEmpty(message = "用户集合不可为空") List userIds) { + userAdminService.banBatch(userIds); + return Res.ok(); + } + + @OperateLog(title = "解锁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @Operation(summary = "解锁用户") + @PostMapping("/unlock") + public ResResult unlock(@NotNull(message = "用户不可为空") Long userId) { + userAdminService.unlock(userId); + return Res.ok(); + } + + @OperateLog(title = "批量解锁用户", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) + @Operation(summary = "批量解锁用户") + @PostMapping("/unlockBatch") + public ResResult unlockBatch(@RequestBody @NotEmpty(message = "用户集合不可为空") List userIds) { + userAdminService.unlockBatch(userIds); + return Res.ok(); + } + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(PageParam pageParam, UserInfoParam userInfoParam) { + return Res.ok(userAdminService.page(pageParam, userInfoParam)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAssistController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAssistController.java similarity index 94% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAssistController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAssistController.java index 14d656cc9..92e3380a7 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserAssistController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserAssistController.java @@ -1,9 +1,9 @@ -package cn.bootx.iam.controller; +package cn.bootx.platform.iam.controller; -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.iam.core.user.service.UserAssistService; +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.iam.core.user.service.UserAssistService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -20,7 +20,7 @@ * 用户操作支撑服务 * * @author xxm - * @date 2022/6/19 + * @since 2022/6/19 */ @Validated @IgnoreAuth(ignore = false, login = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDataRoleController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDataRoleController.java new file mode 100644 index 000000000..659b49030 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDataRoleController.java @@ -0,0 +1,54 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.upms.service.UserDataRoleService; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import cn.bootx.platform.iam.param.upms.UserDataRoleBatchParam; +import cn.bootx.platform.iam.param.upms.UserDataRoleParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * @author xxm + * @since 2022/1/2 + */ +@Tag(name = "用户数据角色配置") +@RestController +@RequestMapping("/user/data/role") +@RequiredArgsConstructor +public class UserDataRoleController { + + private final UserDataRoleService dataScopeService; + + @Operation(summary = "给用户分配数据角色") + @PostMapping("/saveAssign") + public ResResult saveAssign(@RequestBody UserDataRoleParam param) { + ValidationUtil.validateParam(param); + dataScopeService.saveAssign(param.getUserId(), param.getDataRoleId()); + return Res.ok(); + } + + @Operation(summary = "给用户分配权限(批量)") + @PostMapping("/saveAssignBatch") + public ResResult saveAssignBatch(@RequestBody UserDataRoleBatchParam param) { + dataScopeService.saveAssignBatch(param.getUserIds(), param.getDataRoleId()); + return Res.ok(); + } + + @Operation(summary = "根据用户ID获取到数据角色列表") + @GetMapping(value = "/findDataRoleByUser") + public ResResult findDataRoleByUser(Long id) { + return Res.ok(dataScopeService.findDataRoleByUser(id)); + } + + @Operation(summary = "根据用户ID获取到数据角色Id") + @GetMapping(value = "/findDataRoleIdByUser") + public ResResult findDataRoleIdByUser(Long id) { + return Res.ok(dataScopeService.findDataRoleIdByUser(id)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDeptController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDeptController.java similarity index 77% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDeptController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDeptController.java index a4fb9e053..fa08a459b 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserDeptController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserDeptController.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.user.service.UserDeptService; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.param.user.UserDeptBatchParam; -import cn.bootx.iam.param.user.UserDeptParam; +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.user.service.UserDeptService; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import cn.bootx.platform.iam.param.user.UserDeptBatchParam; +import cn.bootx.platform.iam.param.user.UserDeptParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -16,7 +16,7 @@ /** * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Tag(name = "用户部门关联关系") @RestController diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserInfoController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserInfoController.java similarity index 89% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserInfoController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserInfoController.java index 5d76c43c6..ca092e7b3 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserInfoController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserInfoController.java @@ -1,16 +1,16 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.user.service.UserAdminService; -import cn.bootx.iam.core.user.service.UserInfoService; -import cn.bootx.iam.core.user.service.UserQueryService; -import cn.bootx.iam.dto.user.LoginAfterUserInfo; -import cn.bootx.iam.dto.user.UserBaseInfoDto; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.param.user.*; +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.user.service.UserAdminService; +import cn.bootx.platform.iam.core.user.service.UserInfoService; +import cn.bootx.platform.iam.core.user.service.UserQueryService; +import cn.bootx.platform.iam.dto.user.LoginAfterUserInfo; +import cn.bootx.platform.iam.dto.user.UserBaseInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.param.user.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -22,7 +22,7 @@ /** * @author xxm - * @date 2020/4/25 20:02 + * @since 2020/4/25 20:02 */ @Validated @IgnoreAuth diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserRoleController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserRoleController.java similarity index 77% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserRoleController.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserRoleController.java index be01eb1e4..fe62e4d54 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/controller/UserRoleController.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserRoleController.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.iam.core.upms.service.UserRoleService; -import cn.bootx.iam.dto.role.RoleDto; -import cn.bootx.iam.param.upms.UserRoleBatchParam; -import cn.bootx.iam.param.upms.UserRoleParam; +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.upms.service.UserRoleService; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.param.upms.UserRoleBatchParam; +import cn.bootx.platform.iam.param.upms.UserRoleParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -16,7 +16,7 @@ /** * @author xxm - * @date 2020/5/1 18:09 + * @since 2020/5/1 18:09 */ @Tag(name = "用户角色管理") @RestController diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserSecurityConfigController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserSecurityConfigController.java new file mode 100644 index 000000000..affd64198 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserSecurityConfigController.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.iam.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用户安全配置管理 + * @author xxm + * @since 2023/9/25 + */ +@Tag(name = "用户安全配置管理") +@RestController +@RequestMapping("/user/security") +@RequiredArgsConstructor +public class UserSecurityConfigController { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserThirdController.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserThirdController.java new file mode 100644 index 000000000..415182f6e --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/controller/UserThirdController.java @@ -0,0 +1,75 @@ +package cn.bootx.platform.iam.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.iam.core.third.service.UserThirdBindService; +import cn.bootx.platform.iam.core.third.service.UserThirdQueryService; +import cn.bootx.platform.iam.dto.user.UserThirdBindInfo; +import cn.bootx.platform.iam.dto.user.UserThirdDto; +import cn.bootx.platform.iam.param.user.UserBindThirdParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; + +/** + * 用户三方登录管理 + * + * @author xxm + * @since 2021/8/4 + */ +@Validated +@Tag(name = "用户三方登录管理") +@RestController +@RequestMapping("/user/third") +@AllArgsConstructor +public class UserThirdController { + + private final UserThirdBindService userThirdBindService; + + private final UserThirdQueryService userThirdQueryService; + + @Operation(summary = "分页") + @GetMapping("/page") + public ResResult> page(PageParam pageParam) { + return Res.ok(userThirdQueryService.page(pageParam)); + } + + @Operation(summary = "获取详情") + @PostMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(userThirdQueryService.findById(id)); + } + + @IgnoreAuth + @Operation(summary = "获取绑定详情") + @GetMapping("/getThirdBindInfo") + public ResResult getThirdBindInfo() { + return Res.ok(userThirdQueryService.getThirdBindInfo()); + } + + @IgnoreAuth + @Operation(summary = "绑定第三方账号") + @PostMapping("/bind") + public ResResult bind(@RequestBody UserBindThirdParam param) { + ValidationUtil.validateParam(param); + userThirdBindService.bind(param.getAuthCode(), param.getLoginType(), param.getState()); + return Res.ok(); + } + + @IgnoreAuth + @Operation(summary = "解绑第三方账号") + @PostMapping("/unbind") + public ResResult unbind(@NotBlank(message = "终端代码不可为空") String clientCode) { + userThirdBindService.unbind(clientCode); + return Res.ok(); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginFailureHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginFailureHandlerImpl.java new file mode 100644 index 000000000..7cd83ce0d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginFailureHandlerImpl.java @@ -0,0 +1,64 @@ +package cn.bootx.platform.iam.core.auth.handler; + +import cn.bootx.platform.common.core.code.WebHeaderCode; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.service.LoginLogService; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.handler.LoginFailureHandler; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.spring.util.WebServletUtil; +import cn.bootx.platform.starter.audit.log.ip2region.IpToRegionService; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * 登录失败 + * + * @author xxm + * @since 2021/8/13 + */ +@Component +@RequiredArgsConstructor +public class LoginFailureHandlerImpl implements LoginFailureHandler { + + private final LoginLogService loginLogService; + + private final IpToRegionService ipToRegionService; + + @Override + public void onLoginFailure(HttpServletRequest request, HttpServletResponse response, LoginFailureException e) { + + UserAgent userAgent = UserAgentUtil.parse(request.getHeader(WebHeaderCode.USER_AGENT)); + // ip信息 + String ip = "未知"; + String location = "未知"; + Optional ipOpt = Optional.ofNullable(WebServletUtil.getRequest()).map(ServletUtil::getClientIP); + if (ipOpt.isPresent()){ + ip = ipOpt.get(); + location = ipToRegionService.getRegionStrByIp(ip); + } + + String loginType = SecurityUtil.getLoginType(request); + String client = SecurityUtil.getClient(request); + LoginLogParam loginLog = new LoginLogParam().setAccount(e.getUsername()) + .setLogin(false) + .setClient(client) + .setLoginType(loginType) + .setMsg(e.getMessage()) + .setIp(ip) + .setLoginLocation(location) + .setOs(userAgent.getOs().getName()) + .setBrowser(userAgent.getBrowser().getName() + " " + userAgent.getVersion()) + .setLoginTime(LocalDateTime.now()); + loginLogService.add(loginLog); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginSuccessHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginSuccessHandlerImpl.java new file mode 100644 index 000000000..f16015325 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/handler/LoginSuccessHandlerImpl.java @@ -0,0 +1,65 @@ +package cn.bootx.platform.iam.core.auth.handler; + +import cn.bootx.platform.common.core.code.WebHeaderCode; +import cn.bootx.platform.iam.core.user.service.UserExpandInfoService; +import cn.bootx.platform.starter.audit.log.param.LoginLogParam; +import cn.bootx.platform.starter.audit.log.service.LoginLogService; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.handler.LoginSuccessHandler; +import cn.bootx.platform.common.spring.util.WebServletUtil; +import cn.bootx.platform.starter.audit.log.ip2region.IpToRegionService; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * 登录成功处理 + * + * @author xxm + * @since 2021/8/13 + */ +@Component +@RequiredArgsConstructor +public class LoginSuccessHandlerImpl implements LoginSuccessHandler { + + private final LoginLogService loginLogService; + + private final UserExpandInfoService userExpandInfoService; + + private final IpToRegionService ipToRegionService; + + + @Override + public void onLoginSuccess(HttpServletRequest request, HttpServletResponse response, + AuthInfoResult authInfoResult) { + UserAgent userAgent = UserAgentUtil.parse(request.getHeader(WebHeaderCode.USER_AGENT)); + // ip信息 + String ip = "未知"; + String location = "未知"; + Optional ipOpt = Optional.ofNullable(WebServletUtil.getRequest()).map(ServletUtil::getClientIP); + if (ipOpt.isPresent()){ + ip = ipOpt.get(); + location = ipToRegionService.getRegionStrByIp(ip); + } + LoginLogParam loginLog = new LoginLogParam().setLogin(true) + .setUserId(authInfoResult.getUserDetail().getId()) + .setClient(authInfoResult.getClient()) + .setLoginType(authInfoResult.getLoginType()) + .setAccount(authInfoResult.getUserDetail().getUsername()) + .setIp(ip) + .setLoginLocation(location) + .setOs(userAgent.getOs().getName()) + .setBrowser(userAgent.getBrowser().getName() + " " + userAgent.getVersion()) + .setLoginTime(LocalDateTime.now()); + loginLogService.add(loginLog); + userExpandInfoService.updateLoginTime(loginLog.getUserId()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/DingTalkLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/DingTalkLoginHandler.java similarity index 76% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/DingTalkLoginHandler.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/DingTalkLoginHandler.java index a2fd2a944..af48a97f5 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/DingTalkLoginHandler.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/DingTalkLoginHandler.java @@ -1,20 +1,20 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import cn.bootx.iam.core.third.service.UserTiredOperateService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.bootx.starter.dingtalk.core.user.service.DingUserService; +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.core.third.service.UserTiredOperateService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.dingtalk.core.user.service.DingUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -29,13 +29,11 @@ import java.util.Objects; -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.*; - /** * 钉钉登录 * * @author xxm - * @date 2022/4/2 + * @since 2022/4/2 */ @Slf4j @Component @@ -57,7 +55,7 @@ public class DingTalkLoginHandler implements OpenIdAuthentication { */ @Override public String getLoginType() { - return DING_TALK; + return AuthLoginTypeCode.DING_TALK; } /** @@ -65,8 +63,8 @@ public String getLoginType() { */ @Override public AuthInfoResult attemptAuthentication(LoginAuthContext context) { - String authCode = context.getRequest().getParameter(AUTH_CODE); - String state = context.getRequest().getParameter(STATE); + String authCode = context.getRequest().getParameter(AuthLoginTypeCode.AUTH_CODE); + String state = context.getRequest().getParameter(AuthLoginTypeCode.STATE); AuthUser authUser = this.getAuthUser(authCode, state); // 获取钉钉关联的用户id @@ -122,7 +120,7 @@ public void bindUser(String authCode, String state) { } UserThirdInfo userThirdInfo = new UserThirdInfo().setUserId(userId) - .setClientCode(DING_TALK) + .setClientCode(AuthLoginTypeCode.DING_TALK) .setUsername(authUser.getUsername()) .setNickname(authUser.getNickname()) .setAvatar(authUser.getAvatar()) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PasswordLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PasswordLoginHandler.java new file mode 100644 index 000000000..0d3fcf9f5 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PasswordLoginHandler.java @@ -0,0 +1,169 @@ +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.RegexUtil; +import cn.bootx.platform.iam.core.security.password.service.PasswordLoginFailRecordService; +import cn.bootx.platform.iam.core.user.service.UserQueryService; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.starter.auth.authentication.UsernamePasswordAuthentication; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.AuthLoginType; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.exception.UserNotFoundException; +import cn.bootx.platform.starter.auth.util.PasswordEncoder; +import cn.hutool.core.util.StrUtil; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; +import java.util.Objects; + +/** + * 账号密码登陆方式实现 + * + * @author xxm + * @since 2021/8/2 + */ +@Slf4j +@Component +@RequiredArgsConstructor +@SuppressWarnings("FieldCanBeLocal") +public class PasswordLoginHandler implements UsernamePasswordAuthentication { + + private final String USERNAME_PARAMETER = "account"; + + private final String PASSWORD_PARAMETER = "password"; + + // 前端传入的验证码 + private final String CAPTCHA_PARAMETER = "captcha"; + + // 前端传入的验证码的key + private final String CAPTCHA_KEY_PARAMETER = "captchaKey"; + + @Resource + @Getter + private PasswordLoginFailRecordService passwordLoginFailRecordService; + + @Resource + @Getter + private PasswordEncoder passwordEncoder; + + @Resource + @Getter + private UserQueryService userQueryService; + + @Resource + @Getter + private CaptchaService captchaService; + + /** + * 认证前置操作, 默认处理验证码 + */ + @Override + public void authenticationBefore(LoginAuthContext context) { + AuthLoginType authLoginType = context.getAuthLoginType(); + HttpServletRequest request = context.getRequest(); + // 开启验证码验证 + if (authLoginType.isCaptcha()) { + String captcha = this.obtainCaptcha(request); + String captchaKey = this.obtainCaptchaKey(request); + if (StrUtil.isBlank(captcha)) { + throw new BizException("验证码为空"); + } + if (!captchaService.validateImgCaptcha(captchaKey, captcha)) { + String username = this.obtainUsername(request); + throw new LoginFailureException(username, "验证码不正确"); + } + } + } + + /** + * 认证 + */ + @Override + public @NotNull AuthInfoResult attemptAuthentication(LoginAuthContext context) { + String username = this.obtainUsername(context.getRequest()); + String password = this.obtainPassword(context.getRequest()); + UserDetail userDetail = this.loadUserByUsername(username); + String saltPassword = passwordEncoder.encode(password); + // 比对密码未通过 + if (!Objects.equals(saltPassword, userDetail.getPassword())) { + // 非系统管理员进行错误处理, 包括记录错误次数和账号锁定等操作 + if (!userDetail.isAdmin()){ + String errMsg = passwordLoginFailRecordService.passwordError(userDetail.getId()); + throw new LoginFailureException(userDetail.getUsername(), errMsg); + } + throw new LoginFailureException(userDetail.getUsername(), "账号或密码不正确"); + } + return new AuthInfoResult().setId(userDetail.getId()).setUserDetail(userDetail); + } + + /** + * 认证后操作 + */ + @Override + public void authenticationAfter(AuthInfoResult authInfoResult, LoginAuthContext context) { + UserDetail userDetail = authInfoResult.getUserDetail(); + // 非管理员登录成功后清除错误次数等信息 + if (!userDetail.isAdmin()){ + passwordLoginFailRecordService.clearFailCount(userDetail.getId()); + } + // 清除验证码 + String captchaKey = this.obtainCaptchaKey(context.getRequest()); + captchaService.deleteImgCaptcha(captchaKey); + } + + /** + * 根据账号获取密码 + */ + public UserDetail loadUserByUsername(String username) throws UserNotFoundException { + UserInfoDto userInfoDto; + // 1. 获取账号密码 + if (RegexUtil.isEmailPattern(username)) { + // 根据 Email 获取用户信息 + userInfoDto = userQueryService.findByEmail(username); + } + else if (RegexUtil.isPhonePattern(username)) { + // 根据 手机号 获取用户信息 + userInfoDto = userQueryService.findByPhone(username); + } + else { + // 根据 账号 获取账户信息 + userInfoDto = userQueryService.findByAccount(username); + } + if (Objects.isNull(userInfoDto)) { + throw new UserNotFoundException(username); + } + return userInfoDto.toUserDetail(); + } + + + @Nullable + protected String obtainPassword(HttpServletRequest request) { + return request.getParameter(this.PASSWORD_PARAMETER); + } + + @Nullable + protected String obtainUsername(HttpServletRequest request) { + return request.getParameter(this.USERNAME_PARAMETER); + } + + @Nullable + protected String obtainCaptcha(HttpServletRequest request) { + return request.getParameter(this.CAPTCHA_PARAMETER); + } + + @Nullable + protected String obtainCaptchaKey(HttpServletRequest request) { + return request.getParameter(this.CAPTCHA_KEY_PARAMETER); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PhoneLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PhoneLoginHandler.java new file mode 100644 index 000000000..268b61e44 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/PhoneLoginHandler.java @@ -0,0 +1,67 @@ +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.AbstractAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 手机号登录 + * + * @author xxm + * @since 2021/8/2 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PhoneLoginHandler implements AbstractAuthentication { + + // 手机号 + private final String phoneParameter = "phone"; + + // 短信验证码 + private final String captchaParameter = "smsCaptcha"; + + // 手机验证码类型 + private final String smsCaptchaType = "login"; + + private final UserInfoManager userInfoManager; + + private final CaptchaService captchaService; + + @Override + public String getLoginType() { + return AuthLoginTypeCode.PHONE; + } + + /** + * 认证 + */ + @Override + public AuthInfoResult attemptAuthentication(LoginAuthContext context) { + HttpServletRequest request = context.getRequest(); + String phone = request.getParameter(phoneParameter); + String captcha = request.getParameter(captchaParameter); + + // 比较验证码是否正确 + if (!captchaService.validateSmsCaptcha(phone, captcha, smsCaptchaType)) { + throw new LoginFailureException(phone, "短信验证码不正确"); + } + // 获取用户信息 + UserInfo userInfo = userInfoManager.findByPhone(phone) + .orElseThrow(() -> new LoginFailureException(phone, "手机号不存在")); + + captchaService.deleteSmsCaptcha(phone, smsCaptchaType); + return new AuthInfoResult().setUserDetail(userInfo.toUserDetail()).setId(userInfo.getId()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatAppletLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatAppletLoginHandler.java new file mode 100644 index 000000000..ebd68be00 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatAppletLoginHandler.java @@ -0,0 +1,98 @@ +package cn.bootx.platform.iam.core.auth.login; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.core.third.service.UserTiredOperateService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.wechat.core.user.service.WeChatUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.zhyd.oauth.model.AuthUser; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class WeChatAppletLoginHandler implements OpenIdAuthentication { + + + private final UserTiredOperateService userTiredOperateService; + private final WxMaService wxMaService; + + private final UserThirdManager userThirdManager; + + private final UserInfoManager userInfoManager; + + + private final WeChatUserService weChatUserService; + + @Override + public String getLoginType() { + return AuthLoginTypeCode.WE_CHAT_APPLET; + } + + @Override + public AuthInfoResult attemptAuthentication(LoginAuthContext context) { + + String authCode = context.getRequest().getParameter(AuthLoginTypeCode.WE_CHAT_APPLET); + + AuthUser authUser = this.getAuthUser(authCode, null); + + // 获取企微关联的用户id + UserThird userThird = userThirdManager.findByField(UserThird::getWeChatId, authUser.getUuid()) + .orElseThrow(() -> new LoginFailureException("微信没有找到绑定的用户")); + + // 获取用户信息 + UserInfo userInfo = userInfoManager.findById(userThird.getUserId()) + .orElseThrow(() -> new LoginFailureException("用户不存在")); + + return new AuthInfoResult().setUserDetail(userInfo.toUserDetail()).setId(userInfo.getId()); + } + + @Override + public AuthUser getAuthUser(String authCode, String state) { + try { + WxMaJscode2SessionResult result = wxMaService.getUserService().getSessionInfo(authCode); + log.debug("微信服务器返回的用户信息:{}", JacksonUtil.toJson(result)); + return AuthUser.builder() + .avatar("") + .uuid(result.getOpenid()). + nickname("未知") + .username("未知") + .avatar("未知") + .build(); + } catch (WxErrorException e) { + log.error("请求微信服务器异常:{}", e.getError()); + throw new RuntimeException(e); + } + + } + + @Override + public void bindUser(String authCode, String state) { + Long userId = SecurityUtil.getUserId(); + AuthUser authUser = this.getAuthUser(authCode, state); + userTiredOperateService.checkOpenIdBind(authUser.getUuid(), UserThird::getWeChatId); + userTiredOperateService.bindOpenId(userId, authUser.getUuid(), UserThird::setWeChatId); + + UserThirdInfo userThirdInfo = new UserThirdInfo().setUserId(userId) + .setClientCode(AuthLoginTypeCode.WE_CHAT) + .setUsername(authUser.getUsername()) + .setNickname(authUser.getNickname()) + .setAvatar(authUser.getAvatar()) + .setThirdUserId(authUser.getUuid()); + userTiredOperateService.bindOpenInfo(userThirdInfo); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatLoginHandler.java new file mode 100644 index 000000000..9c3be64e7 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatLoginHandler.java @@ -0,0 +1,92 @@ +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.service.UserTiredOperateService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.wechat.core.login.service.WeChatQrLoginService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.model.AuthUser; +import org.springframework.stereotype.Component; + +/** + * 微信登录(公众号) + * + * @author xxm + * @since 2021/8/2 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class WeChatLoginHandler implements OpenIdAuthentication { + + private final UserTiredOperateService userTiredOperateService; + + private final WeChatQrLoginService weChatQrLoginService; + + private final UserThirdManager userThirdManager; + + private final UserInfoManager userInfoManager; + + @Override + public String getLoginType() { + return AuthLoginTypeCode.WE_CHAT; + } + + /** + * 认证 + */ + @Override + public AuthInfoResult attemptAuthentication(LoginAuthContext context) { + String authCode = context.getRequest().getParameter(AuthLoginTypeCode.AUTH_CODE); + AuthUser authUser = this.getAuthUser(authCode, null); + + // 获取微信公众号关联的用户id + UserThird userThird = userThirdManager.findByField(UserThird::getWeChatId, authUser.getUuid()) + .orElseThrow(() -> new LoginFailureException("没有找到绑定的微信公众号用户")); + + // 获取用户信息 + UserInfo userInfo = userInfoManager.findById(userThird.getUserId()) + .orElseThrow(() -> new LoginFailureException("用户不存在")); + + return new AuthInfoResult().setUserDetail(userInfo.toUserDetail()).setId(userInfo.getId()); + } + + /** + * 获取关联的的第三方平台用户信息 + * @param authCode key 值, 可以用来拿用户信息 + */ + @Override + public AuthUser getAuthUser(String authCode, String state) { + // 根据微信二维码的值获取关联扫码的微信信息 + String uuid = weChatQrLoginService.getOpenId(authCode); + AuthUser authUser = new AuthUser(); + authUser.setNickname("未知"); + authUser.setUsername("未知"); + authUser.setAvatar("未知"); + authUser.setUuid(uuid); + weChatQrLoginService.clear(authCode); + return authUser; + } + + /** + * 绑定用户 + */ + @Override + public void bindUser(String authCode, String state) { + Long userId = SecurityUtil.getUserId(); + AuthUser authUser = this.getAuthUser(authCode, state); + userTiredOperateService.checkOpenIdBind(authUser.getUuid(), UserThird::getWeChatId); + userTiredOperateService.bindOpenId(userId, authUser.getUuid(), UserThird::setWeChatId); + userTiredOperateService.bindOpenInfo(userId, authUser, AuthLoginTypeCode.WE_CHAT); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatOpenLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatOpenLoginHandler.java similarity index 75% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatOpenLoginHandler.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatOpenLoginHandler.java index 8e30532c3..477be3935 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeChatOpenLoginHandler.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeChatOpenLoginHandler.java @@ -1,17 +1,17 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.service.UserTiredOperateService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.service.UserTiredOperateService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -26,14 +26,11 @@ import java.util.Objects; -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.*; -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.WE_CHAT; - /** * 微信开放平台登录 * * @author xxm - * @date 2022/8/4 + * @since 2022/8/4 */ @Slf4j @Component @@ -50,7 +47,7 @@ public class WeChatOpenLoginHandler implements OpenIdAuthentication { @Override public String getLoginType() { - return WE_CHAT_OPEN; + return AuthLoginTypeCode.WE_CHAT_OPEN; } /** @@ -58,8 +55,8 @@ public String getLoginType() { */ @Override public AuthInfoResult attemptAuthentication(LoginAuthContext context) { - String authCode = context.getRequest().getParameter(AUTH_CODE); - String state = context.getRequest().getParameter(STATE); + String authCode = context.getRequest().getParameter(AuthLoginTypeCode.AUTH_CODE); + String state = context.getRequest().getParameter(AuthLoginTypeCode.STATE); AuthUser authUser = this.getAuthUser(authCode, state); @@ -108,7 +105,7 @@ public void bindUser(String authCode, String state) { AuthUser authUser = this.getAuthUser(authCode, state); userTiredOperateService.checkOpenIdBind(authUser.getUuid(), UserThird::getWeChatOpenId); userTiredOperateService.bindOpenId(userId, authUser.getUuid(), UserThird::setWeChatOpenId); - userTiredOperateService.bindOpenInfo(userId, authUser, WE_CHAT); + userTiredOperateService.bindOpenInfo(userId, authUser, AuthLoginTypeCode.WE_CHAT); } /** diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeComLoginHandler.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeComLoginHandler.java similarity index 75% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeComLoginHandler.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeComLoginHandler.java index c93a6e94a..fa9a0e082 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/login/WeComLoginHandler.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/login/WeComLoginHandler.java @@ -1,17 +1,17 @@ -package cn.bootx.iam.core.auth.login; - -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.service.UserTiredOperateService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.configuration.AuthProperties; -import cn.bootx.starter.auth.entity.AuthInfoResult; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.exception.LoginFailureException; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.auth.login; + +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.service.UserTiredOperateService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -26,13 +26,11 @@ import java.util.Objects; -import static cn.bootx.starter.auth.code.AuthLoginTypeCode.*; - /** * 企业微信登录 * * @author xxm - * @date 2022/6/30 + * @since 2022/6/30 */ @Slf4j @Service @@ -49,13 +47,13 @@ public class WeComLoginHandler implements OpenIdAuthentication { @Override public String getLoginType() { - return WE_COM; + return AuthLoginTypeCode.WE_COM; } @Override public AuthInfoResult attemptAuthentication(LoginAuthContext context) { - String authCode = context.getRequest().getParameter(AUTH_CODE); - String state = context.getRequest().getParameter(STATE); + String authCode = context.getRequest().getParameter(AuthLoginTypeCode.AUTH_CODE); + String state = context.getRequest().getParameter(AuthLoginTypeCode.STATE); AuthUser authUser = this.getAuthUser(authCode, state); @@ -104,7 +102,7 @@ public void bindUser(String authCode, String state) { AuthUser authUser = this.getAuthUser(authCode, state); userTiredOperateService.checkOpenIdBind(authUser.getUuid(), UserThird::getWeComId); userTiredOperateService.bindOpenId(userId, authUser.getUuid(), UserThird::setWeComId); - userTiredOperateService.bindOpenInfo(userId, authUser, WE_COM); + userTiredOperateService.bindOpenInfo(userId, authUser, AuthLoginTypeCode.WE_COM); } /** diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/AuthAssistService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/AuthAssistService.java new file mode 100644 index 000000000..43645283a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/AuthAssistService.java @@ -0,0 +1,60 @@ +package cn.bootx.platform.iam.core.auth.service; + +import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.iam.code.UserStatusCode; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.auth.LoginContentResult; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.iam.param.auth.LoginContentParam; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 认证支撑服务 + * + * @author xxm + * @since 2021/9/9 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AuthAssistService { + + private final CaptchaService captchaService; + + private final UserInfoManager userInfoManager; + + private final String smsCaptchaType = "login"; + + /** + * 发送短信验证码 + */ + public void sendSmsCaptcha(String phone) { + // 判断用户是否存在 + UserInfo userInfo = userInfoManager.findByPhone(phone).orElseThrow(UserInfoNotExistsException::new); + + if (userInfo.getStatus() != UserStatusCode.NORMAL) { + throw new BizException("用户状态异常"); + } + // 有效期5分钟 + captchaService.sendSmsCaptcha(phone, 5 * 60, smsCaptchaType); + } + + /** + * 登录⻚上下⽂信息 + */ + public LoginContentResult getLoginContent(LoginContentParam param){ + return null; + } + + /** + * 二次校验信息 + */ + public void getSecondCheck(){ + + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthClientServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthClientServiceImpl.java new file mode 100644 index 000000000..31fda7728 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthClientServiceImpl.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.iam.core.auth.service; + +import cn.bootx.platform.iam.core.client.dao.ClientManager; +import cn.bootx.platform.iam.core.client.entity.Client; +import cn.bootx.platform.starter.auth.authentication.GetAuthClientService; +import cn.bootx.platform.starter.auth.entity.AuthClient; +import cn.bootx.platform.starter.auth.exception.ApplicationNotFoundException; +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 获取认证应用 + * + * @author xxm + * @since 2022/6/27 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class GetAuthClientServiceImpl implements GetAuthClientService { + + private final ClientManager clientManager; + + @Override + public AuthClient getAuthApplication(String authClientCode) { + Client client = clientManager.findByCode(authClientCode).orElseThrow(ApplicationNotFoundException::new); + AuthClient authClient = new AuthClient(); + BeanUtil.copyProperties(client, authClient); + return authClient; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthLoginTypeServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthLoginTypeServiceImpl.java new file mode 100644 index 000000000..07b581f2c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/GetAuthLoginTypeServiceImpl.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.iam.core.auth.service; + +import cn.bootx.platform.iam.core.client.dao.LoginTypeManager; +import cn.bootx.platform.iam.core.client.entity.LonginType; +import cn.bootx.platform.starter.auth.authentication.GetAuthLoginTypeService; +import cn.bootx.platform.starter.auth.entity.AuthLoginType; +import cn.bootx.platform.starter.auth.exception.ClientNotFoundException; +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 获取认证终端 + * + * @author xxm + * @since 2021/8/25 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class GetAuthLoginTypeServiceImpl implements GetAuthLoginTypeService { + + private final LoginTypeManager loginTypeManager; + + /** + * 获取认证终端信息 + */ + @Override + public AuthLoginType getAuthLoginType(String loginType) { + LonginType longinType = loginTypeManager.findByCode(loginType).orElseThrow(ClientNotFoundException::new); + AuthLoginType authLoginType = new AuthLoginType(); + BeanUtil.copyProperties(longinType, authLoginType); + return authLoginType; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/ThirdLoginService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/ThirdLoginService.java similarity index 81% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/ThirdLoginService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/ThirdLoginService.java index 5b3f3bd3e..11599b6a6 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/auth/service/ThirdLoginService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/auth/service/ThirdLoginService.java @@ -1,8 +1,8 @@ -package cn.bootx.iam.core.auth.service; +package cn.bootx.platform.iam.core.auth.service; -import cn.bootx.starter.auth.authentication.OpenIdAuthentication; -import cn.bootx.starter.auth.entity.ThirdAuthCode; -import cn.bootx.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.entity.ThirdAuthCode; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthCallback; @@ -14,7 +14,7 @@ * 三方登录 * * @author xxm - * @date 2022/6/29 + * @since 2022/6/29 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/ClientConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/ClientConvert.java new file mode 100644 index 000000000..5c422a13b --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/ClientConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.core.client.convert; + +import cn.bootx.platform.iam.param.client.ClientParam; +import cn.bootx.platform.iam.core.client.entity.Client; +import cn.bootx.platform.iam.dto.client.ClientDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 认证应用 + * + * @author xxm + * @since 2022-06-27 + */ +@Mapper +public interface ClientConvert { + + ClientConvert CONVERT = Mappers.getMapper(ClientConvert.class); + + Client convert(ClientParam in); + + ClientDto convert(Client in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/LoginTypeConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/LoginTypeConvert.java new file mode 100644 index 000000000..b6c680883 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/convert/LoginTypeConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.core.client.convert; + +import cn.bootx.platform.iam.param.client.LoginTypeParam; +import cn.bootx.platform.iam.core.client.entity.LonginType; +import cn.bootx.platform.iam.dto.client.LoginTypeDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 认证终端 + * + * @author bootx + * @since 2022-02-20 + */ +@Mapper +public interface LoginTypeConvert { + + LoginTypeConvert CONVERT = Mappers.getMapper(LoginTypeConvert.class); + + LonginType convert(LoginTypeParam in); + + LoginTypeDto convert(LonginType in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientManager.java new file mode 100644 index 000000000..3bab7e795 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientManager.java @@ -0,0 +1,57 @@ +package cn.bootx.platform.iam.core.client.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.client.entity.Client; +import cn.bootx.platform.iam.param.client.ClientParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * 认证应用 + * + * @author xxm + * @since 2022-06-27 + */ +@Repository +@RequiredArgsConstructor +public class ClientManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, ClientParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, Client.class); + return lambdaQuery().like(StrUtil.isNotBlank(param.getCode()), Client::getCode, param.getCode()) + .like(StrUtil.isNotBlank(param.getName()), Client::getName, param.getName()) + .orderByDesc(MpIdEntity::getId) + .page(mpPage); + } + + /** + * 查询 + */ + public List findAllByDefaultEndow(Boolean defaultEndow){ + return findAllByField(Client::getDefaultEndow,defaultEndow); + } + + public Optional findByCode(String code) { + return findByField(Client::getCode, code); + } + + public boolean existsByCode(String code) { + return existedByField(Client::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(Client::getCode, code, id); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientMapper.java new file mode 100644 index 000000000..c097acbb4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/ClientMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.client.dao; + +import cn.bootx.platform.iam.core.client.entity.Client; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 认证应用 + * + * @author xxm + * @since 2022-06-27 + */ +@Mapper +public interface ClientMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeManager.java similarity index 76% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeManager.java index a1269e063..eff57bdc2 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/dao/LoginTypeManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeManager.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.core.client.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.common.query.generator.QueryGenerator; -import cn.bootx.iam.core.client.entity.LonginType; -import cn.bootx.iam.param.client.LoginTypeParam; +package cn.bootx.platform.iam.core.client.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.entity.QueryParams; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import cn.bootx.platform.iam.core.client.entity.LonginType; +import cn.bootx.platform.iam.param.client.LoginTypeParam; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -19,7 +19,7 @@ * 终端 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Repository @RequiredArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeMapper.java new file mode 100644 index 000000000..3fb7861d5 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/dao/LoginTypeMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.client.dao; + +import cn.bootx.platform.iam.core.client.entity.LonginType; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 终端 + * + * @author xxm + * @since 2021/8/25 + */ +@Mapper +public interface LoginTypeMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/Client.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/Client.java new file mode 100644 index 000000000..63c0da745 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/Client.java @@ -0,0 +1,75 @@ +package cn.bootx.platform.iam.core.client.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.core.client.convert.ClientConvert; +import cn.bootx.platform.iam.dto.client.ClientDto; +import cn.bootx.platform.iam.param.client.ClientParam; +import cn.bootx.table.modify.annotation.DbColumn; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 认证终端 + * + * @author xxm + * @since 2021/8/25 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("iam_client") +@Accessors(chain = true) +public class Client extends MpBaseEntity implements EntityBaseFunction { + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 是否系统内置 */ + private boolean internal; + + /** 是否可用 */ + private boolean enable; + + /** 关联登录方式 */ + private String loginTypeIds; + + /** 新注册的用户是否默认赋予该终端 */ + @DbColumn(comment = "新注册的用户是否默认赋予该终端") + private Boolean defaultEndow; + + /** 描述 */ + private String description; + + /** 创建对象 */ + public static Client init(ClientParam in) { + Client client = ClientConvert.CONVERT.convert(in); + if (CollUtil.isNotEmpty(in.getLoginTypeIdList())) { + String loginTypeIds = String.join(",", in.getLoginTypeIdList()); + client.setLoginTypeIds(loginTypeIds); + } + return client; + } + + /** 转换成dto */ + @Override + public ClientDto toDto() { + ClientDto client = ClientConvert.CONVERT.convert(this); + if (StrUtil.isNotBlank(this.getLoginTypeIds())) { + List collect = Arrays.stream(this.getLoginTypeIds().split(",")).collect(Collectors.toList()); + client.setLoginTypeIdList(collect); + } + return client; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/LonginType.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/LonginType.java new file mode 100644 index 000000000..cbfb82eff --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/entity/LonginType.java @@ -0,0 +1,65 @@ +package cn.bootx.platform.iam.core.client.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.core.client.convert.LoginTypeConvert; +import cn.bootx.platform.iam.dto.client.LoginTypeDto; +import cn.bootx.platform.iam.param.client.LoginTypeParam; +import cn.bootx.table.modify.annotation.DbTable; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 登录方式 + * + * @author xxm + * @since 2022/7/5 + */ +@EqualsAndHashCode(callSuper = true) +@Data +//@DbTable(isAppend = true) +@TableName("iam_login_type") +@Accessors(chain = true) +public class LonginType extends MpBaseEntity implements EntityBaseFunction { + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** + * password 密码登录, openId 第三方登录 + */ + private String type; + + /** 在线时长 分钟 */ + private Long timeout; + + /** 验证码类型 */ + private String captchaType; + + /** 是否需要验证码 优先级高于登录策略配置 */ + private boolean captcha; + + /** 是否系统内置 */ + private boolean internal; + + /** 是否可用 */ + private boolean enable; + + /** 描述 */ + private String description; + + public static LonginType init(LoginTypeParam in) { + return LoginTypeConvert.CONVERT.convert(in); + } + + @Override + public LoginTypeDto toDto() { + return LoginTypeConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/ClientService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/ClientService.java similarity index 78% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/ClientService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/ClientService.java index 8a5e8d2a9..e039cc1d7 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/ClientService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/ClientService.java @@ -1,14 +1,14 @@ -package cn.bootx.iam.core.client.service; +package cn.bootx.platform.iam.core.client.service; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.client.dao.ClientManager; -import cn.bootx.iam.core.client.entity.Client; -import cn.bootx.iam.dto.client.ClientDto; -import cn.bootx.iam.param.client.ClientParam; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.param.client.ClientParam; +import cn.bootx.platform.iam.core.client.dao.ClientManager; +import cn.bootx.platform.iam.core.client.entity.Client; +import cn.bootx.platform.iam.dto.client.ClientDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollUtil; @@ -22,7 +22,7 @@ * 认证应用 * * @author xxm - * @date 2022-06-27 + * @since 2022-06-27 */ @Slf4j @Service @@ -96,4 +96,4 @@ public boolean existsByCode(String code, Long id) { return clientManager.existsByCode(code, id); } -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/LoginTypeService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/LoginTypeService.java similarity index 77% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/LoginTypeService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/LoginTypeService.java index 4f49b5a94..9b15e84bb 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/client/service/LoginTypeService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/client/service/LoginTypeService.java @@ -1,16 +1,16 @@ -package cn.bootx.iam.core.client.service; +package cn.bootx.platform.iam.core.client.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.iam.core.client.dao.LoginTypeManager; -import cn.bootx.iam.core.client.entity.LonginType; -import cn.bootx.iam.dto.client.LoginTypeDto; -import cn.bootx.iam.param.client.LoginTypeParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.entity.QueryParams; +import cn.bootx.platform.iam.param.client.LoginTypeParam; +import cn.bootx.platform.iam.core.client.dao.LoginTypeManager; +import cn.bootx.platform.iam.core.client.entity.LonginType; +import cn.bootx.platform.iam.dto.client.LoginTypeDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.RequiredArgsConstructor; @@ -23,7 +23,7 @@ * 终端 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Slf4j @Service @@ -40,7 +40,7 @@ public LoginTypeDto add(LoginTypeParam param) { throw new BizException("终端编码不得重复"); } LonginType longinType = LonginType.init(param); - longinType.setSystem(false); + longinType.setInternal(false); return loginTypeManager.save(longinType).toDto(); } @@ -52,7 +52,7 @@ public LoginTypeDto update(LoginTypeParam param) { if (loginTypeManager.existsByCode(param.getCode(), longinType.getId())) { throw new BizException("终端编码不得重复"); } - if (longinType.isSystem()) { + if (longinType.isInternal()) { longinType.setEnable(true); } BeanUtil.copyProperties(param, longinType, CopyOptions.create().ignoreNullValue()); @@ -99,7 +99,7 @@ public List findAll() { */ public void delete(Long id) { LonginType longinType = loginTypeManager.findById(id).orElseThrow(DataNotExistException::new); - if (longinType.isSystem()) { + if (longinType.isInternal()) { throw new BizException("系统内置终端,不可删除"); } loginTypeManager.deleteById(id); diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/convert/DeptConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/convert/DeptConvert.java new file mode 100644 index 000000000..e393e668a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/convert/DeptConvert.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.iam.core.dept.convert; + +import cn.bootx.platform.iam.param.dept.DeptParam; +import cn.bootx.platform.iam.core.dept.entity.Dept; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 部门机构转换 + * + * @author xxm + * @since 2021/8/4 + */ +@Mapper +public interface DeptConvert { + + DeptConvert CONVERT = Mappers.getMapper(DeptConvert.class); + + Dept convert(DeptDto in); + + Dept convert(DeptParam in); + + DeptDto convert(Dept in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptManager.java new file mode 100644 index 000000000..e4b8a079b --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptManager.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.iam.core.dept.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.dept.entity.Dept; +import org.springframework.stereotype.Repository; + +/** + * @author xxm + * @since 2020/5/7 17:42 + */ +@Repository +public class DeptManager extends BaseManager { + + public boolean existsParent(Long parentId) { + return existedByField(Dept::getParentId, parentId); + } + + public void deleteByOrgCode(String orgCode) { + lambdaUpdate().likeRight(Dept::getOrgCode, orgCode).remove(); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptMapper.java new file mode 100644 index 000000000..c604f979b --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/dao/DeptMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.dept.dao; + +import cn.bootx.platform.iam.core.dept.entity.Dept; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 部门 + * + * @author xxm + * @since 2020/5/7 17:40 + */ +@Mapper +public interface DeptMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/entity/Dept.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/entity/Dept.java new file mode 100644 index 000000000..ef38741a0 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/entity/Dept.java @@ -0,0 +1,65 @@ +package cn.bootx.platform.iam.core.dept.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.iam.core.dept.convert.DeptConvert; +import cn.bootx.platform.iam.param.dept.DeptParam; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.code.OrgCategoryCode; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 部门表 + * + * @author xxm + * @since 2020/5/7 17:38 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("iam_dept") +public class Dept extends MpBaseEntity implements EntityBaseFunction { + + /** 父机构ID */ + private Long parentId; + + /** 机构/部门名称 */ + private String deptName; + + /** 排序 */ + private Double sortNo; + + /** + * 机构类别 + * @see OrgCategoryCode + */ + private Integer orgCategory; + + /** 机构编码 */ + private String orgCode; + + /** 手机号 */ + private String mobile; + + /** 传真 */ + private String fax; + + /** 地址 */ + private String address; + + /** 备注 */ + private String remark; + + public static Dept init(DeptParam in) { + return DeptConvert.CONVERT.convert(in); + } + + @Override + public DeptDto toDto() { + return DeptConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/event/DeptDeleteEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/event/DeptDeleteEvent.java similarity index 85% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/event/DeptDeleteEvent.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/event/DeptDeleteEvent.java index ba7311fc4..37ac99e3b 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/event/DeptDeleteEvent.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/event/DeptDeleteEvent.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.core.dept.event; +package cn.bootx.platform.iam.core.dept.event; import lombok.Getter; import org.springframework.context.ApplicationEvent; @@ -9,7 +9,7 @@ * 部门删除事件 * * @author xxm - * @date 2022/1/3 + * @since 2022/1/3 */ @Getter public class DeptDeleteEvent extends ApplicationEvent { diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptRuleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptRuleService.java similarity index 91% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptRuleService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptRuleService.java index c212fadf8..925fc7e78 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptRuleService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptRuleService.java @@ -1,10 +1,10 @@ -package cn.bootx.iam.core.dept.service; +package cn.bootx.platform.iam.core.dept.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.dept.dao.DeptManager; -import cn.bootx.iam.core.dept.entity.Dept; -import cn.bootx.iam.dto.dept.DeptTreeResult; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.dept.dao.DeptManager; +import cn.bootx.platform.iam.core.dept.entity.Dept; +import cn.bootx.platform.iam.dto.dept.DeptTreeResult; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.lock.annotation.Lock4j; @@ -17,7 +17,7 @@ * 部门规则工具类 * * @author xxm - * @date 2020/5/10 15:01 + * @since 2020/5/10 15:01 */ @Service @RequiredArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptService.java similarity index 83% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptService.java index b7ecd49fe..ece77efdb 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/dept/service/DeptService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/dept/service/DeptService.java @@ -1,13 +1,13 @@ -package cn.bootx.iam.core.dept.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.iam.core.dept.dao.DeptManager; -import cn.bootx.iam.core.dept.entity.Dept; -import cn.bootx.iam.core.dept.event.DeptDeleteEvent; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.dto.dept.DeptTreeResult; -import cn.bootx.iam.param.dept.DeptParam; +package cn.bootx.platform.iam.core.dept.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.iam.param.dept.DeptParam; +import cn.bootx.platform.iam.core.dept.dao.DeptManager; +import cn.bootx.platform.iam.core.dept.entity.Dept; +import cn.bootx.platform.iam.core.dept.event.DeptDeleteEvent; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import cn.bootx.platform.iam.dto.dept.DeptTreeResult; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.AllArgsConstructor; @@ -21,11 +21,11 @@ import java.util.List; import java.util.Objects; -import static cn.bootx.iam.code.CachingCode.USER_DATA_SCOPE; +import static cn.bootx.platform.iam.code.CachingCode.USER_DATA_SCOPE; /** * @author xxm - * @date 2020/5/7 17:42 + * @since 2020/5/7 17:42 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/online/service/OnlineUserService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/online/service/OnlineUserService.java new file mode 100644 index 000000000..065df6c4e --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/online/service/OnlineUserService.java @@ -0,0 +1,83 @@ +package cn.bootx.platform.iam.core.online.service; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.websocket.manager.SpringWebSocketSessionManager; +import cn.bootx.platform.common.websocket.notice.UserNoticeWebSocketHandler; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.online.OnlineUserInfoDto; +import cn.bootx.platform.iam.dto.online.OnlineUserSessionDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.socket.WebSocketSession; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * websocket会话管理 + * @author xxm + * @since 2023/10/15 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class OnlineUserService { + private final UserInfoManager userInfoManager; + /** + * 在线用户分页 + */ + public PageResult page(PageParam pageParam){ + SpringWebSocketSessionManager wsManager = UserNoticeWebSocketHandler.getWsManager(); + // 获取用户ids + Map> uid2sid = wsManager.getUid2sid(); + // 组装用户信息 + Set idSet = uid2sid.keySet(); + if (CollUtil.isNotEmpty(idSet)){ + List ids = CollUtil.sub(idSet, pageParam.start(), pageParam.end()) + .stream() + .map(Long::parseLong) + .collect(Collectors.toList()); + Map userMap = userInfoManager.findAllByIds(ids) + .stream() + .collect(Collectors.toMap(UserInfo::getId, Function.identity())); + List onlineUserInfos = ids.stream() + .map(userMap::get) + .filter(Objects::nonNull) + .map(UserInfo::toOnline) + .collect(Collectors.toList()); + return new PageResult() + .setRecords(onlineUserInfos) + .setSize(pageParam.getSize()) + .setTotal(idSet.size()) + .setCurrent(pageParam.getCurrent()); + } + return new PageResult<>(); + } + + /** + * 获取用户链接信息 + */ + public List getSessionByUserId(String userId){ + SpringWebSocketSessionManager wsManager = UserNoticeWebSocketHandler.getWsManager(); + List sessionIds = wsManager.getUid2sid() + .get(userId); + Map sessionPool = wsManager.getSessionPool(); + return sessionIds.stream() + .map(sessionPool::get) + .map(session -> new OnlineUserSessionDto() + .setSessionId(session.getId()) + .setIp(session.getRemoteAddress().getAddress().getHostAddress()) + .setUri(session.getUri().toString()) + ) + .collect(Collectors.toList()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/convert/PermConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/convert/PermConvert.java new file mode 100644 index 000000000..16683976d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/convert/PermConvert.java @@ -0,0 +1,36 @@ +package cn.bootx.platform.iam.core.permission.convert; + +import cn.bootx.platform.iam.param.permission.PermMenuParam; +import cn.bootx.platform.iam.param.permission.PermPathParam; +import cn.bootx.platform.iam.core.permission.entity.PermMenu; +import cn.bootx.platform.iam.core.permission.entity.PermPath; +import cn.bootx.platform.iam.core.permission.entity.RequestPath; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.dto.permission.PermPathDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 权限转换 + * + * @author xxm + * @since 2021/8/3 + */ +@Mapper +public interface PermConvert { + + PermConvert CONVERT = Mappers.getMapper(PermConvert.class); + + PermPathDto convert(PermPath in); + + PermPath convert(PermPathParam in); + + PermPath convert(PermPathDto in); + + PermPath convert(RequestPath in); + + PermMenu convert(PermMenuParam in); + + PermMenuDto convert(PermMenu in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuManager.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuManager.java index 7d34228c5..633ce77a3 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermMenuManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuManager.java @@ -1,8 +1,8 @@ -package cn.bootx.iam.core.permission.dao; +package cn.bootx.platform.iam.core.permission.dao; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.iam.code.PermissionCode; -import cn.bootx.iam.core.permission.entity.PermMenu; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.permission.entity.PermMenu; +import cn.bootx.platform.iam.code.PermissionCode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @@ -13,7 +13,7 @@ * 权限配置 * * @author xxm - * @date 2021/8/3 + * @since 2021/8/3 */ @Slf4j @Repository diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuMapper.java new file mode 100644 index 000000000..c00ee5993 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermMenuMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.permission.dao; + +import cn.bootx.platform.iam.core.permission.entity.PermMenu; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 权限配置 + * + * @author xxm + * @since 2021/8/3 + */ +@Mapper +public interface PermMenuMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathManager.java similarity index 75% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathManager.java index 37f7013f9..ec611c331 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/dao/PermPathManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathManager.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.core.permission.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.permission.entity.PermPath; -import cn.bootx.iam.param.permission.PermPathParam; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.permission.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.permission.entity.PermPath; +import cn.bootx.platform.iam.param.permission.PermPathParam; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -18,7 +18,7 @@ * 权限 * * @author xxm - * @date 2020/5/10 23:27 + * @since 2020/5/10 23:27 */ @Repository @RequiredArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathMapper.java new file mode 100644 index 000000000..4ce661035 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/dao/PermPathMapper.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.permission.dao; + +import cn.bootx.platform.iam.core.permission.entity.PermPath; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 权限 + * + * @author xxm + * @since 2020/5/10 23:26 + */ +@Mapper +public interface PermPathMapper extends BaseMapper { + + void saveAll(@Param("permPaths") List permPaths); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermMenu.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/PermMenu.java similarity index 77% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermMenu.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/PermMenu.java index 7734e9d30..4b7b135ec 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/PermMenu.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/PermMenu.java @@ -1,23 +1,22 @@ -package cn.bootx.iam.core.permission.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.iam.core.permission.convert.PermConvert; -import cn.bootx.iam.dto.permission.PermMenuDto; -import cn.bootx.iam.param.permission.PermMenuParam; +package cn.bootx.platform.iam.core.permission.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.code.PermissionCode; +import cn.bootx.platform.iam.core.permission.convert.PermConvert; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.param.permission.PermMenuParam; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import static com.baomidou.mybatisplus.annotation.FieldStrategy.IGNORED; - /** * 权限配置 * * @author xxm - * @date 2021/8/3 + * @since 2021/8/3 */ @EqualsAndHashCode(callSuper = true) @Data @@ -26,7 +25,7 @@ public class PermMenu extends MpBaseEntity implements EntityBaseFunction { /** 父id */ - @TableField(updateStrategy = IGNORED) +// @TableField(updateStrategy = NEVER) private Long parentId; /** 关联终端code */ @@ -71,7 +70,7 @@ public class PermMenu extends MpBaseEntity implements EntityBaseFunction { + + /** 权限标识 */ + private String code; + + /** 权限名称 */ + private String name; + + /** 分组名称 */ + private String groupName; + + /** 请求类型 */ + private String requestType; + + /** 请求路径 */ + private String path; + + /** 启用 */ + private boolean enable; + + /** 是否通过系统生成的权限 */ + private boolean generate; + + /** 描述 */ + private String remark; + + public static PermPath init(PermPathParam param) { + return PermConvert.CONVERT.convert(param); + } + + @Override + public PermPathDto toDto() { + return PermConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/RequestPath.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/RequestPath.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/RequestPath.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/RequestPath.java index ea73e5f61..bf164f63a 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/entity/RequestPath.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/entity/RequestPath.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.core.permission.entity; +package cn.bootx.platform.iam.core.permission.entity; import lombok.Data; import lombok.experimental.Accessors; @@ -7,7 +7,7 @@ * 请求权限 * * @author xxm - * @date 2021/12/19 + * @since 2021/12/19 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermCodeService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermCodeService.java similarity index 76% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermCodeService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermCodeService.java index d674576b7..5c33cacf6 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermCodeService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermCodeService.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.core.permission.service; +package cn.bootx.platform.iam.core.permission.service; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -8,7 +8,7 @@ * 权限码管理 * * @author xxm - * @date 2023/1/23 + * @since 2023/1/23 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermMenuService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermMenuService.java similarity index 80% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermMenuService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermMenuService.java index f1a3ce35b..142ff45dc 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermMenuService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermMenuService.java @@ -1,19 +1,19 @@ -package cn.bootx.iam.core.permission.service; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.iam.code.PermissionCode; -import cn.bootx.iam.core.permission.dao.PermMenuManager; -import cn.bootx.iam.core.permission.entity.PermMenu; -import cn.bootx.iam.core.upms.dao.RoleMenuManager; -import cn.bootx.iam.core.upms.entity.RoleMenu; -import cn.bootx.iam.core.upms.service.UserRoleService; -import cn.bootx.iam.dto.permission.PermMenuDto; -import cn.bootx.iam.param.permission.PermMenuParam; -import cn.bootx.starter.auth.exception.NotLoginException; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.permission.service; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.iam.param.permission.PermMenuParam; +import cn.bootx.platform.starter.auth.exception.NotLoginException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.iam.code.PermissionCode; +import cn.bootx.platform.iam.core.permission.dao.PermMenuManager; +import cn.bootx.platform.iam.core.permission.entity.PermMenu; +import cn.bootx.platform.iam.core.upms.dao.RoleMenuManager; +import cn.bootx.platform.iam.core.upms.entity.RoleMenu; +import cn.bootx.platform.iam.core.upms.service.UserRoleService; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.RequiredArgsConstructor; @@ -26,13 +26,13 @@ import java.util.Objects; import java.util.stream.Collectors; -import static cn.bootx.iam.code.CachingCode.USER_PERM_CODE; +import static cn.bootx.platform.iam.code.CachingCode.USER_PERM_CODE; /** - * 权限 + * 菜单权限 * * @author xxm - * @date 2021/8/3 + * @since 2021/8/3 */ @Slf4j @Service @@ -54,6 +54,7 @@ public PermMenuDto add(PermMenuParam param) { if (PermissionCode.MENU_TYPE_TOP.equals(param.getMenuType())) { param.setParentId(null); } + // 增加判断是否循环依赖情况 PermMenu permission = PermMenu.init(param); return permMenuManager.save(permission).toDto(); } @@ -72,6 +73,8 @@ public PermMenuDto update(PermMenuParam param) { if (PermissionCode.MENU_TYPE_TOP.equals(permMenu.getMenuType())) { permMenu.setParentId(null); } + // TODO 检查上级菜单是否出现了循环依赖 + return permMenuManager.updateById(permMenu).toDto(); } diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermPathService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermPathService.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermPathService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermPathService.java index 5491040d5..13ca3341e 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/PermPathService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/PermPathService.java @@ -1,25 +1,25 @@ -package cn.bootx.iam.core.permission.service; - -import cn.bootx.common.core.annotation.OperateLog; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.websocket.entity.WsRes; -import cn.bootx.common.websocket.service.UserWsNoticeService; -import cn.bootx.iam.core.permission.convert.PermConvert; -import cn.bootx.iam.core.permission.dao.PermPathManager; -import cn.bootx.iam.core.permission.entity.PermPath; -import cn.bootx.iam.core.permission.entity.RequestPath; -import cn.bootx.iam.core.upms.dao.RolePathManager; -import cn.bootx.iam.dto.permission.PermPathDto; -import cn.bootx.iam.param.permission.PermPathBatchEnableParam; -import cn.bootx.iam.param.permission.PermPathParam; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.permission.service; + +import cn.bootx.platform.common.core.annotation.OperateLog; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.websocket.entity.WsRes; +import cn.bootx.platform.common.websocket.service.UserWsNoticeService; +import cn.bootx.platform.iam.param.permission.PermPathBatchEnableParam; +import cn.bootx.platform.iam.param.permission.PermPathParam; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.iam.core.permission.convert.PermConvert; +import cn.bootx.platform.iam.core.permission.dao.PermPathManager; +import cn.bootx.platform.iam.core.permission.entity.PermPath; +import cn.bootx.platform.iam.core.permission.entity.RequestPath; +import cn.bootx.platform.iam.core.upms.dao.RolePathManager; +import cn.bootx.platform.iam.dto.permission.PermPathDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.util.StrUtil; @@ -35,14 +35,14 @@ import java.util.Set; import java.util.stream.Collectors; -import static cn.bootx.iam.code.CachingCode.IGNORE_PATH; -import static cn.bootx.iam.code.CachingCode.USER_PATH; +import static cn.bootx.platform.iam.code.CachingCode.IGNORE_PATH; +import static cn.bootx.platform.iam.code.CachingCode.USER_PATH; /** * 请求权限 * * @author xxm - * @date 2020/5/10 23:20 + * @since 2020/5/10 23:20 */ @Service @AllArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/RequestPathService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/RequestPathService.java similarity index 97% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/RequestPathService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/RequestPathService.java index 3f415e18c..bd3a4ad4d 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/permission/service/RequestPathService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/permission/service/RequestPathService.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.permission.service; +package cn.bootx.platform.iam.core.permission.service; -import cn.bootx.iam.core.permission.entity.RequestPath; +import cn.bootx.platform.iam.core.permission.entity.RequestPath; import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; @@ -23,7 +23,7 @@ * 请求权限处理 * * @author xxm - * @date 2021/12/19 + * @since 2021/12/19 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/convert/RoleConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/convert/RoleConvert.java new file mode 100644 index 000000000..71b8257c1 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/convert/RoleConvert.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.iam.core.role.convert; + +import cn.bootx.platform.iam.param.role.RoleParam; +import cn.bootx.platform.iam.core.role.entity.Role; +import cn.bootx.platform.iam.dto.role.RoleDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface RoleConvert { + + RoleConvert CONVERT = Mappers.getMapper(RoleConvert.class); + + RoleDto convert(Role in); + + Role convert(RoleParam in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleManager.java new file mode 100644 index 000000000..482f62a0a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleManager.java @@ -0,0 +1,70 @@ +package cn.bootx.platform.iam.core.role.dao; + +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.role.entity.Role; +import cn.bootx.platform.iam.param.role.RoleParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 角色 + * + * @author xxm + * @since 2021/8/3 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class RoleManager extends BaseManager { + + public boolean existsByCode(String code) { + return existedByField(Role::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(Role::getCode, code, id); + } + + public boolean existsByName(String name) { + return existedByField(Role::getName, name); + } + + public boolean existsByName(String name, Long id) { + return existedByField(Role::getName, name, id); + } + + public boolean existsById(Long roleId) { + return lambdaQuery().eq(Role::getId, roleId).exists(); + } + + public List findDropdown() { + return lambdaQuery().select(Role::getId, Role::getName) + .list() + .stream() + .map(role -> new KeyValue(String.valueOf(role.getId()), role.getName())) + .collect(Collectors.toList()); + + } + + public Page page(PageParam pageParam, RoleParam roleParam) { + Page mpPage = MpUtil.getMpPage(pageParam, Role.class); + return lambdaQuery().like(StrUtil.isNotBlank(roleParam.getCode()), Role::getCode, roleParam.getCode()) + .like(StrUtil.isNotBlank(roleParam.getName()), Role::getName, roleParam.getName()) + .orderByDesc(MpIdEntity::getId) + .page(mpPage); + } + + public boolean existsByPid(Long roleId) { + return lambdaQuery().eq(Role::getPid, roleId).exists(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleMapper.java new file mode 100644 index 000000000..3302a24c9 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/dao/RoleMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.role.dao; + +import cn.bootx.platform.iam.core.role.entity.Role; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 角色 + * + * @author xxm + * @since 2021/8/3 + */ +@Mapper +public interface RoleMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/entity/Role.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/entity/Role.java new file mode 100644 index 000000000..23776e0e2 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/entity/Role.java @@ -0,0 +1,49 @@ +package cn.bootx.platform.iam.core.role.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.iam.core.role.convert.RoleConvert; +import cn.bootx.platform.iam.param.role.RoleParam; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.dto.role.RoleDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 角色 + * + * @author xxm + * @since 2020/5/1 17:31 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("iam_role") +@Accessors(chain = true) +public class Role extends MpBaseEntity implements EntityBaseFunction { + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 是否系统内置 不能修改 */ + private boolean internal; + + /** 父级Id */ + private Long pid; + + /** 描述 */ + private String remark; + + public static Role init(RoleParam in) { + return RoleConvert.CONVERT.convert(in); + } + + @Override + public RoleDto toDto() { + return RoleConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/service/RoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/service/RoleService.java new file mode 100644 index 000000000..db62c8e46 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/role/service/RoleService.java @@ -0,0 +1,251 @@ +package cn.bootx.platform.iam.core.role.service; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.dto.KeyValue; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.core.util.TreeBuildUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.role.dao.RoleManager; +import cn.bootx.platform.iam.core.role.entity.Role; +import cn.bootx.platform.iam.core.upms.dao.RoleMenuManager; +import cn.bootx.platform.iam.core.upms.dao.RolePathManager; +import cn.bootx.platform.iam.core.upms.dao.UserRoleManager; +import cn.bootx.platform.iam.core.upms.entity.UserRole; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.event.role.RoleCreateEvent; +import cn.bootx.platform.iam.event.role.RoleDeleteEvent; +import cn.bootx.platform.iam.event.role.RoleUpdateEvent; +import cn.bootx.platform.iam.exception.role.RoleAlreadyExistedException; +import cn.bootx.platform.iam.exception.role.RoleAlreadyUsedException; +import cn.bootx.platform.iam.exception.role.RoleHaschildrenException; +import cn.bootx.platform.iam.exception.role.RoleNotExistedException; +import cn.bootx.platform.iam.param.role.RoleParam; +import cn.bootx.platform.starter.auth.exception.NotLoginException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.ListUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_PATH; + +/** + * 角色 + * + * @author xxm + * @since 2021/8/3 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class RoleService { + + private final RoleManager roleManager; + + private final UserRoleManager userRoleManager; + + private final RolePathManager rolePathManager; + + private final RoleMenuManager roleMenuManager; + + private final ApplicationEventPublisher eventPublisher; + + /** + * 添加 + */ + @Transactional(rollbackFor = Exception.class) + public void add(RoleParam roleParam) { + // name和code唯一性校验 + if (roleManager.existsByCode(roleParam.getCode())) { + throw new RoleAlreadyExistedException(); + } + if (roleManager.existsByName(roleParam.getName())) { + throw new RoleAlreadyExistedException(); + } + Role role = Role.init(roleParam); + RoleDto roleDto = roleManager.save(role).toDto(); + eventPublisher.publishEvent(new RoleCreateEvent(this,roleDto)); + } + + /** + * 修改 + */ + @Transactional(rollbackFor = Exception.class) + public void update(RoleParam roleParam) { + Long id = roleParam.getId(); + // 角色的层级不可以被改变 + roleParam.setPid(null); + // name和code唯一性校验 + if (roleManager.existsByCode(roleParam.getCode(), id)) { + throw new RoleAlreadyExistedException(); + } + if (roleManager.existsByName(roleParam.getName(), id)) { + throw new RoleAlreadyExistedException(); + } + + Role role = roleManager.findById(id).orElseThrow(RoleNotExistedException::new); + BeanUtil.copyProperties(roleParam, role, CopyOptions.create().ignoreNullValue()); + RoleDto roleDto = roleManager.updateById(role) + .toDto(); + eventPublisher.publishEvent(new RoleUpdateEvent(this,roleDto)); + } + + /** + * 删除 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_PATH }, allEntries = true) + public void delete(Long roleId) { + if (Objects.isNull(roleId) || !roleManager.existsById(roleId)) { + throw new RoleNotExistedException(); + } + // 有下级角色不允许删除 + if (roleManager.existsByPid(roleId)) { + throw new RoleHaschildrenException(); + } + // 存在当前角色用户的场合不允许删除 + if (userRoleManager.existsByRoleId(roleId)) { + throw new RoleAlreadyUsedException(); + } + // 删除角色信息 + roleManager.deleteById(roleId); + // 删除关联的请求和菜单权限 + rolePathManager.deleteByRole(roleId); + roleMenuManager.deleteByRole(roleId); + eventPublisher.publishEvent(new RoleDeleteEvent(this,roleId)); + } + + /** + * 角色树 + */ + public List tree(){ + UserDetail userDetail = SecurityUtil.getCurrentUser().orElseThrow(NotLoginException::new); + // 查询所有的角色 + List allRoles = roleManager.findAll(); + List roleList = allRoles.stream() + .map(Role::toDto) + .collect(Collectors.toList()); + // 全部角色的数据树 + List tree = this.recursiveBuildTree(roleList); + // 系统管理员,获取全部的角色 + if (userDetail.isAdmin()) { + return tree; + } else { + // 普通用户, 查询已经分配的角色和下级角色,然后重新构建树 + return this.recursiveBuildTree(this.findRoleByUser(userDetail.getId(),tree)); + } + } + + /** + * 获取子孙角色 + */ + public List findChildren(Long ...ids) { + if (Objects.nonNull(ids)){ + ArrayList roleIds = ListUtil.toList(ids); + // 平铺树 + List tree = this.tree(); + List roleDtoList = TreeBuildUtil.unfold(tree, RoleDto::getChildren); + // 找到对应角色的分支树, 然后通过二次平铺树, 获取所有的子孙角色 + List collect = roleDtoList.stream() + .filter(roleDto -> roleIds.contains(roleDto.getPid())) + .collect(Collectors.toList()); + // 二次平铺树 + return TreeBuildUtil.unfold(collect, RoleDto::getChildren); + } + return new ArrayList<>(); + } + + /** + * 角色列表 + */ + public List findAll() { + return ResultConvertUtil.dtoListConvert(roleManager.findAll()); + } + + /** + * 角色分页 + */ + public PageResult page(PageParam pageParam, RoleParam roleParam) { + return MpUtil.convert2DtoPageResult(roleManager.page(pageParam, roleParam)); + } + + /** + * 角色下拉框 + */ + public List dropdown() { + return roleManager.findDropdown(); + } + + /** + * 详情 + */ + public RoleDto findById(Long id) { + return ResultConvertUtil.dtoConvert(roleManager.findById(id)); + } + + /** + * code是否存在 + */ + public boolean existsByCode(String code) { + return roleManager.existsByCode(code); + } + + /** + * code是否存在 + */ + public boolean existsByCode(String code, Long id) { + return roleManager.existsByCode(code, id); + } + + /** + * name是否存在 + */ + public boolean existsByName(String name) { + return roleManager.existsByName(name); + } + + /** + * name是否存在 + */ + public boolean existsByName(String name, Long id) { + return roleManager.existsByName(name, id); + } + + /** + * 获取用户可以管理的角色 + */ + private List findRoleByUser(Long userId,List tree){ + // 查找子级拥有的角色 + List roleIds = userRoleManager.findAllByUser(userId).stream() + .map(UserRole::getRoleId) + .collect(Collectors.toList()); + // 获取关联的角色和子角色 + List unfold = TreeBuildUtil.unfold(tree, RoleDto::getChildren); + return unfold.stream() + .filter(role -> roleIds.contains(role.getId())) + .collect(Collectors.toList()); + } + + /** + * 递归建树 + * @return 递归后的树列表 + */ + private List recursiveBuildTree(List roles) { + return TreeBuildUtil.build(roles, null, RoleDto::getId, RoleDto::getPid, + RoleDto::setChildren, Comparator.comparingLong(RoleDto::getId)); + + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/convert/DataScopeConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/convert/DataScopeConvert.java new file mode 100644 index 000000000..e9a5e37c4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/convert/DataScopeConvert.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.core.scope.convert; + +import cn.bootx.platform.iam.param.scope.DataRoleParam; +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 数据范围转换类 + * + * @author xxm + * @since 2021/12/23 + */ +@Mapper +public interface DataScopeConvert { + + DataScopeConvert CONVERT = Mappers.getMapper(DataScopeConvert.class); + + DataRole convert(DataRoleParam in); + + DataRoleDto convert(DataRole in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptManager.java new file mode 100644 index 000000000..5fb267914 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptManager.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.scope.entity.DataRoleDept; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class DataRoleDeptManager extends BaseManager { + + public void deleteByDataRoleId(Long dataRoleId) { + this.deleteByField(DataRoleDept::getRoleId, dataRoleId); + } + + /** + * 根据部门进行删除 + */ + public void deleteByDeptIds(List deptIds) { + this.deleteByFields(DataRoleDept::getDeptId, deptIds); + } + + public List findByDateRoleId(Long dataRoleId) { + return this.findAllByField(DataRoleDept::getRoleId, dataRoleId); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptMapper.java new file mode 100644 index 000000000..389ab9c80 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleDeptMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.iam.core.scope.entity.DataRoleDept; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Mapper +public interface DataRoleDeptMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleManager.java new file mode 100644 index 000000000..863357952 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleManager.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class DataRoleManager extends BaseManager { + + public boolean existsByCode(String code) { + return this.existedByField(DataRole::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return this.existedByField(DataRole::getCode, code, id); + } + + public boolean existsByName(String name) { + return this.existedByField(DataRole::getName, name); + } + + public boolean existsByName(String name, Long id) { + return this.existedByField(DataRole::getName, name, id); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleMapper.java new file mode 100644 index 000000000..c5a3b18d0 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Mapper +public interface DataRoleMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserManager.java new file mode 100644 index 000000000..3b0ef8262 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserManager.java @@ -0,0 +1,28 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.scope.entity.DataRoleUser; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class DataRoleUserManager extends BaseManager { + + public void deleteByDataRoleId(Long dataRoleId) { + this.deleteByField(DataRoleUser::getRoleId, dataRoleId); + } + + public List findByDateRoleId(Long dataRoleId) { + return this.findAllByField(DataRoleUser::getRoleId, dataRoleId); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserMapper.java new file mode 100644 index 000000000..5fc28f4d2 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/dao/DataRoleUserMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.scope.dao; + +import cn.bootx.platform.iam.core.scope.entity.DataRoleUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Mapper +public interface DataRoleUserMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRole.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRole.java new file mode 100644 index 000000000..2c3fbafd8 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRole.java @@ -0,0 +1,50 @@ +package cn.bootx.platform.iam.core.scope.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.iam.core.scope.convert.DataScopeConvert; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import cn.bootx.platform.iam.param.scope.DataRoleParam; +import cn.bootx.platform.starter.data.perm.code.DataScopeEnum; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 数据角色 + * + * @author xxm + * @since 2021/12/23 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("iam_data_role") +public class DataRole extends MpBaseEntity implements EntityBaseFunction { + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** + * 类型 + * @see DataScopeEnum + */ + private String type; + + /** 备注 */ + private String remark; + + public static DataRole init(DataRoleParam in) { + return DataScopeConvert.CONVERT.convert(in); + } + + @Override + public DataRoleDto toDto() { + return DataScopeConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleDept.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleDept.java new file mode 100644 index 000000000..a5bb63690 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleDept.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.core.scope.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 数据范围部门关联配置 + * + * @author xxm + * @since 2021/12/23 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@TableName("iam_data_role_dept") +public class DataRoleDept extends MpIdEntity { + + /** 数据范围id */ + private Long roleId; + + /** 部门id */ + private Long deptId; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleUser.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleUser.java new file mode 100644 index 000000000..f5e0efc73 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/entity/DataRoleUser.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.core.scope.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 数据范围用户关联配置 + * + * @author xxm + * @since 2021/12/23 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@TableName("iam_data_role_user") +public class DataRoleUser extends MpIdEntity { + + /** 数据范围id */ + private Long roleId; + + /** 用户id */ + private Long userId; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleService.java new file mode 100644 index 000000000..9728c0d4f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleService.java @@ -0,0 +1,190 @@ +package cn.bootx.platform.iam.core.scope.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import cn.bootx.platform.iam.param.scope.DataRoleParam; +import cn.bootx.platform.iam.param.scope.DataRoleDeptParam; +import cn.bootx.platform.starter.data.perm.code.DataScopeEnum; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.iam.core.dept.event.DeptDeleteEvent; +import cn.bootx.platform.iam.core.scope.dao.DataRoleDeptManager; +import cn.bootx.platform.iam.core.scope.dao.DataRoleManager; +import cn.bootx.platform.iam.core.scope.dao.DataRoleUserManager; +import cn.bootx.platform.iam.core.scope.entity.DataRoleDept; +import cn.bootx.platform.iam.core.upms.dao.UserDataRoleManager; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_DATA_SCOPE; + +/** + * 数据范围权限 + * + * @author xxm + * @since 2021/12/24 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DataRoleService { + + private final DataRoleManager dataRoleManager; + + private final DataRoleUserManager dataRoleUserManager; + + private final DataRoleDeptManager dataRoleDeptManager; + + private final UserDataRoleManager userDataRoleManager; + + /** + * 添加数据范围权限 + */ + @Transactional(rollbackFor = Exception.class) + public void add(DataRoleParam param) { + DataRole dataRole = DataRole.init(param); + dataRoleManager.save(dataRole); + } + + /** + * 修改 + */ + @Transactional(rollbackFor = Exception.class) + public void update(DataRoleParam param) { + DataRole dataRole = dataRoleManager.findById(param.getId()).orElseThrow(() -> new BizException("数据不存在")); + BeanUtil.copyProperties(param, dataRole, CopyOptions.create().ignoreNullValue()); + dataRoleManager.updateById(dataRole); + } + + /** + * 删除 + */ + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + if (!dataRoleManager.existedById(id)) { + throw new BizException("数据不存在"); + } + if (userDataRoleManager.existsByDataRoleId(id)) { + throw new BizException("该权限已经有用户在使用,无法删除"); + } + dataRoleManager.deleteById(id); + dataRoleUserManager.deleteByDataRoleId(id); + dataRoleDeptManager.deleteByDataRoleId(id); + } + + /** + * 添加部门关联范围权限关系 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) + public void saveDeptAssign(DataRoleDeptParam param) { + DataRole dataRole = dataRoleManager.findById(param.getDataRoleId()).orElseThrow(DataNotExistException::new); + val scope = CollUtil.newArrayList(DataScopeEnum.DEPT_SCOPE.getCode(), + DataScopeEnum.DEPT_AND_USER_SCOPE.getCode()); + if (!scope.contains(dataRole.getType())) { + throw new BizException("非法操作"); + } + + // 先删后增 + List dateScopedDeptList = dataRoleDeptManager.findByDateRoleId(param.getDataRoleId()); + List deptIdsByDb = dateScopedDeptList.stream().map(DataRoleDept::getDeptId).collect(Collectors.toList()); + + // 要删除的 + List deptIds = param.getDeptIds(); + List deleteIds = dateScopedDeptList.stream() + .filter(dataRoleDept -> !deptIds.contains(dataRoleDept.getDeptId())) + .map(MpIdEntity::getId) + .collect(Collectors.toList()); + // 要增加的 + List dataRoleDepths = deptIds.stream() + .filter(id -> !deptIdsByDb.contains(id)) + .map(deptId -> new DataRoleDept(param.getDataRoleId(), deptId)) + .collect(Collectors.toList()); + dataRoleDeptManager.deleteByIds(deleteIds); + dataRoleDeptManager.saveAll(dataRoleDepths); + } + + /** + * 处理部门被删除的情况 + */ + @EventListener + public void DeptDeleteEventListener(DeptDeleteEvent event) { + dataRoleDeptManager.deleteByDeptIds(event.getDeptIds()); + } + + /** + * 获取关联的部门id集合 + */ + public List findDeptIds(Long id) { + return dataRoleDeptManager.findByDateRoleId(id) + .stream() + .map(DataRoleDept::getDeptId) + .collect(Collectors.toList()); + } + + /** + * 判断权限编码是否存在 + */ + public boolean existsByCode(String code) { + return dataRoleManager.existsByCode(code); + } + + /** + * 判断权限编码是否存在 + */ + public boolean existsByCode(String code, Long id) { + return dataRoleManager.existsByCode(code, id); + } + + /** + * name是否存在 + */ + public boolean existsByName(String name) { + return dataRoleManager.existsByName(name); + } + + /** + * name是否存在 + */ + public boolean existsByName(String name, Long id) { + return dataRoleManager.existsByName(name, id); + } + + /** + * 获取单条 + */ + public DataRoleDto findById(Long id) { + return dataRoleManager.findById(id).map(DataRole::toDto).orElseThrow(() -> new BizException("数据不存在")); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam, DataRoleParam param) { + return MpUtil.convert2DtoPageResult(dataRoleManager.page(MpUtil.getMpPage(pageParam, DataRole.class))); + } + + /** + * 列表查询 + */ + public List findAll() { + return ResultConvertUtil.dtoListConvert(dataRoleManager.findAll()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleUserService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleUserService.java new file mode 100644 index 000000000..39f97a9a0 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/scope/service/DataRoleUserService.java @@ -0,0 +1,102 @@ +package cn.bootx.platform.iam.core.scope.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.function.CollectorsFunction; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.iam.core.scope.dao.DataRoleManager; +import cn.bootx.platform.iam.core.scope.dao.DataRoleUserManager; +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import cn.bootx.platform.iam.core.scope.entity.DataRoleUser; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.scope.DataRoleUserDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_DATA_SCOPE; +import static cn.bootx.platform.starter.data.perm.code.DataScopeEnum.DEPT_AND_USER_SCOPE; +import static cn.bootx.platform.starter.data.perm.code.DataScopeEnum.USER_SCOPE; + +/** + * 数据范围权限限定用户级别 + * + * @author xxm + * @since 2022/1/4 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DataRoleUserService { + + private final DataRoleManager dataRoleManager; + + private final DataRoleUserManager dataRoleUserManager; + + private final UserInfoManager userInfoManager; + + /** + * 关联用户列表 + */ + public List findUsersByDataRoleId(Long dataRoleId) { + Map dataScopeUserMap = dataRoleUserManager.findByDateRoleId(dataRoleId) + .stream() + .collect(Collectors.toMap(DataRoleUser::getUserId, Function.identity(), CollectorsFunction::retainLatest)); + // 查询出用户id + List userIds = dataScopeUserMap.values() + .stream() + .map(DataRoleUser::getUserId) + .collect(Collectors.toList()); + // 查询出用户 + List userInfos = userInfoManager.findAllByIds(userIds); + + return userInfos.stream() + .map(userInfo -> new DataRoleUserDto().setId(dataScopeUserMap.get(userInfo.getId()).getId()) + .setUserId(userInfo.getId()) + .setUsername(userInfo.getUsername()) + .setName(userInfo.getName())) + .collect(Collectors.toList()); + } + + /** + * 添加用户范围权限关联关系 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) + public void saveUserAssign(Long dataRoleId, List userIds) { + DataRole dataRole = dataRoleManager.findById(dataRoleId).orElseThrow(() -> new BizException("数据不存在")); + + val scope = CollUtil.newArrayList(USER_SCOPE.getCode(), + DEPT_AND_USER_SCOPE.getCode()); + if (!scope.contains(dataRole.getType())) { + throw new BizException("非法操作"); + } + List dataScopeUserIds = dataRoleUserManager.findByDateRoleId(dataRoleId) + .stream() + .map(DataRoleUser::getUserId) + .collect(Collectors.toList()); + + List dataScopeUsers = userIds.stream() + .filter(userId -> !dataScopeUserIds.contains(userId)) + .map(userId -> new DataRoleUser(dataRoleId, userId)) + .collect(Collectors.toList()); + dataRoleUserManager.saveAll(dataScopeUsers); + } + + /** + * 批量删除 + */ + @CacheEvict(value = { USER_DATA_SCOPE }, allEntries = true) + public void deleteBatch(List ids) { + dataRoleUserManager.deleteByIds(ids); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/convert/PasswordSecurityConfigConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/convert/PasswordSecurityConfigConvert.java new file mode 100644 index 000000000..8aa2044c1 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/convert/PasswordSecurityConfigConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.iam.core.security.password.convert; + +import cn.bootx.platform.iam.core.security.password.entity.PasswordSecurityConfig; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.param.security.PasswordSecurityConfigParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@Mapper +public interface PasswordSecurityConfigConvert { + PasswordSecurityConfigConvert CONVERT = Mappers.getMapper(PasswordSecurityConfigConvert.class); + + PasswordSecurityConfig convert(PasswordSecurityConfigParam in); + + PasswordSecurityConfigDto convert(PasswordSecurityConfig in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryManager.java new file mode 100644 index 000000000..c03679aaf --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryManager.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordChangeHistory; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 密码历史 + * @author xxm + * @since 2023-09-19 + */ +@Repository +@RequiredArgsConstructor +public class PasswordChangeHistoryManager extends BaseManager { + + /** + * 查询指定用户最近N条历史 + */ + public List findAllByUserAndCount(Long userId, int count){ + Page page = new Page<>(1,count); + page.setSearchCount(false); + return lambdaQuery() + .eq(PasswordChangeHistory::getUserId,userId) + .orderByDesc(PasswordChangeHistory::getId) + .page(page) + .getRecords(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryMapper.java new file mode 100644 index 000000000..3aa295d20 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordChangeHistoryMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.iam.core.security.password.entity.PasswordChangeHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 密码历史 + * @author xxm + * @since 2023-09-19 + */ +@Mapper +public interface PasswordChangeHistoryMapper extends BaseMapper { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordManager.java new file mode 100644 index 000000000..fbfaaf576 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordManager.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordLoginFailRecord; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * 密码登录失败记录 + * @author xxm + * @since 2023/9/19 + */ +@Slf4j +@Repository +public class PasswordLoginFailRecordManager extends BaseManager { + + + /** + * 根据用户id查询 + */ + public Optional findByUserId(Long userId){ + return findByField(PasswordLoginFailRecord::getUserId,userId); + } + + /** + * 批量清除登录失败次数 + */ + public void clearBatchFailCount(List userIds) { + this.lambdaUpdate() + .in(PasswordLoginFailRecord::getUserId,userIds) + .set(PasswordLoginFailRecord::getFailCount,0) + .update(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordMapper.java new file mode 100644 index 000000000..79a3393a4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordLoginFailRecordMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.iam.core.security.password.entity.PasswordLoginFailRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 密码登录失败记录 + * @author xxm + * @since 2023/9/19 + */ +@Mapper +public interface PasswordLoginFailRecordMapper extends BaseMapper { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigManager.java new file mode 100644 index 000000000..b259d1ab6 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigManager.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordSecurityConfig; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@Repository +@RequiredArgsConstructor +public class PasswordSecurityConfigManager extends BaseManager { + + @Override + public List findAll() { + return lambdaQuery() + .orderByDesc(PasswordSecurityConfig::getId) + .list(); + } + + /** + * 表中是否有数据 + */ + public boolean existsAll(){ + return lambdaQuery().exists(); + } + + /** + * 删除除指定的id外的所有密码安全策略 + */ + public void deleteAllNotId(Long id){ + this.lambdaUpdate().ne(PasswordSecurityConfig::getId,id).remove(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigMapper.java new file mode 100644 index 000000000..83af786c9 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/dao/PasswordSecurityConfigMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.security.password.dao; + +import cn.bootx.platform.iam.core.security.password.entity.PasswordSecurityConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@Mapper +public interface PasswordSecurityConfigMapper extends BaseMapper { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordChangeHistory.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordChangeHistory.java new file mode 100644 index 000000000..afc6f5694 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordChangeHistory.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.iam.core.security.password.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpCreateEntity; +import cn.bootx.table.modify.annotation.DbComment; +import cn.bootx.table.modify.annotation.DbTable; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 密码更改历史 + * @author xxm + * @since 2023/8/17 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@DbTable(comment = "密码更改历史") +@Accessors(chain = true) +@TableName("iam_password_change_history") +public class PasswordChangeHistory extends MpCreateEntity { + /** 用户Id */ + @DbComment("用户Id") + private Long userId; + + /** 密码 */ + @DbComment("密码") + private String password; +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordLoginFailRecord.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordLoginFailRecord.java new file mode 100644 index 000000000..851845423 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordLoginFailRecord.java @@ -0,0 +1,33 @@ +package cn.bootx.platform.iam.core.security.password.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.table.modify.annotation.DbComment; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * 密码登录失败记录 + * @author xxm + * @since 2023/8/17 + */ +@EqualsAndHashCode(callSuper = true) +@Data +//@DbTable(comment = "密码登录失败记录") +@Accessors(chain = true) +@TableName("iam_password_login_fail_record") +public class PasswordLoginFailRecord extends MpBaseEntity { + + /** 用户id */ + @DbComment("用户id") + private Long userId; + /** 登录失败次数 */ + @DbComment("登录失败次数") + private Integer failCount; + /** 登录失败时间 */ + @DbComment("登录失败时间") + private LocalDateTime failTime; +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordSecurityConfig.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordSecurityConfig.java new file mode 100644 index 000000000..607ff102d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/entity/PasswordSecurityConfig.java @@ -0,0 +1,67 @@ +package cn.bootx.platform.iam.core.security.password.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.core.security.password.convert.PasswordSecurityConfigConvert; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.param.security.PasswordSecurityConfigParam; +import cn.bootx.table.modify.annotation.DbComment; +import cn.bootx.table.modify.annotation.DbTable; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 密码安全策略 + * @author xxm + * @since 2023/8/17 + */ +@EqualsAndHashCode(callSuper = true) +@Data +//@DbTable(comment = "密码安全策略") +@Accessors(chain = true) +@TableName("iam_password_security_config") +public class PasswordSecurityConfig extends MpBaseEntity implements EntityBaseFunction { + + /** 最大密码错误数 */ + @DbComment("最大密码错误数") + private int maxPwdErrorCount; + + /** 密码错误锁定时间(分钟) */ + @DbComment("密码错误锁定时间(分钟)") + private int errorLockTime; + + /** 强制修改初始密码 */ + @DbComment("强制修改初始密码") + private boolean requireChangePwd; + + /** 更新频率(天数) */ + @DbComment("更新频率") + private int updateFrequency; + + /** 到期提醒(天数) */ + @DbComment("到期提醒(天数)") + private int expireRemind; + + /** 与登录名相同 */ + @DbComment("与登录名相同") + private boolean sameAsLoginName; + + /** 不能与近期多少次密码相同 */ + @DbComment("不能与近期多少次密码相同") + private int recentPassword; + + /** 创建对象 */ + public static PasswordSecurityConfig init(PasswordSecurityConfigParam in) { + return PasswordSecurityConfigConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public PasswordSecurityConfigDto toDto() { + return PasswordSecurityConfigConvert.CONVERT.convert(this); + } + + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordChangeHistoryService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordChangeHistoryService.java new file mode 100644 index 000000000..1ba78eebb --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordChangeHistoryService.java @@ -0,0 +1,66 @@ +package cn.bootx.platform.iam.core.security.password.service; + +import cn.bootx.platform.iam.core.security.password.dao.PasswordChangeHistoryManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordChangeHistory; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.starter.auth.util.PasswordEncoder; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 密码更改历史 + * @author xxm + * @since 2023-09-19 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PasswordChangeHistoryService { + private final PasswordChangeHistoryManager passwordChangeHistoryManager; + private final PasswordSecurityConfigService passwordSecurityConfigService; + private final PasswordEncoder passwordEncoder; + + /** + * 保存密码更改历史 + */ + @Async("asyncExecutor") + public void saveChangeHistory(Long userId,String password){ + PasswordChangeHistory passwordChangeHistory = new PasswordChangeHistory() + .setUserId(userId) + .setPassword(password); + passwordChangeHistoryManager.save(passwordChangeHistory); + } + + /** + * 批量保存密码更改历史 + */ + @Async("asyncExecutor") + public void saveBatchChangeHistory(List userIds, String password){ + List changeHistories = userIds.stream() + .map(userId -> new PasswordChangeHistory() + .setPassword(password) + .setUserId(userId)) + .collect(Collectors.toList()); + + passwordChangeHistoryManager.saveAll(changeHistories); + } + + /** + * 查看要修改的密码是否重复 + */ + public boolean isRecentlyUsed(Long userId,String password){ + PasswordSecurityConfigDto securityConfig = passwordSecurityConfigService.getDefault(); + int recentPasswordCount = securityConfig.getRecentPassword(); + String pwd = passwordEncoder.encode(password); + List changeHistories = passwordChangeHistoryManager.findAllByUserAndCount(userId, recentPasswordCount); + return changeHistories.stream() + .anyMatch(o-> Objects.equals(o.getPassword(), pwd)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordLoginFailRecordService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordLoginFailRecordService.java new file mode 100644 index 000000000..db2048d8c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordLoginFailRecordService.java @@ -0,0 +1,110 @@ +package cn.bootx.platform.iam.core.security.password.service; + +import cn.bootx.platform.iam.core.security.password.dao.PasswordLoginFailRecordManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordLoginFailRecord; +import cn.bootx.platform.iam.core.user.service.UserAdminService; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.event.user.UserRestartPasswordEvent; +import cn.bootx.platform.iam.event.user.UserUnlockEvent; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 密码登录失败记录 + * @author xxm + * @since 2023/9/19 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PasswordLoginFailRecordService { + private final PasswordLoginFailRecordManager passwordLoginFailRecordManager; + + private final PasswordSecurityConfigService passwordSecurityConfigService; + + private final UserAdminService userAdminService; + + /** + * 获取 密码登录失败记录 + */ + public void get(){ + + } + + /** + * 登录失败的错误处理 + */ + public String passwordError(Long userId){ + // 密码安全配置 + PasswordSecurityConfigDto securityConfig = passwordSecurityConfigService.getDefault(); + + // 更新错误次数 + PasswordLoginFailRecord loginFailRecord = passwordLoginFailRecordManager.findByUserId(userId) + .orElse(new PasswordLoginFailRecord() + .setFailCount(0) + .setUserId(userId)); + loginFailRecord.setFailCount(loginFailRecord.getFailCount()+1) + .setFailTime(LocalDateTime.now()); + + // 判断是否超过最大错误次数, 进行锁定用户 + int errCount = securityConfig.getMaxPwdErrorCount() - loginFailRecord.getFailCount(); + if (errCount == 0){ + userAdminService.lock(userId); + // 需要将错误次数更新到数据库 + passwordLoginFailRecordManager.saveOrUpdate(loginFailRecord); + return StrUtil.format("账号已被锁定, 请{}分钟后再试", securityConfig.getMaxPwdErrorCount()); + } else if (errCount < 0) { + // 继续尝试密码, 不再更新错误次数, 直接返回 + return StrUtil.format("账号已被锁定, 请{}分钟后再试", securityConfig.getMaxPwdErrorCount()); + } + passwordLoginFailRecordManager.saveOrUpdate(loginFailRecord); + return StrUtil.format("密码不正确, 还有{}次机会", errCount); + } + + /** + * 清除登录失败的次数 + */ + @Async("taskExecutor") + public void clearFailCount(Long userId){ + passwordLoginFailRecordManager.findById(userId) + .ifPresent(r -> { + if (r.getFailCount() > 0){ + r.setFailCount(0); + passwordLoginFailRecordManager.updateById(r); + } + }); + } + + /** + * 解锁用户,清除登录失败的次数 + */ + @EventListener(UserUnlockEvent.class) + @Async("taskExecutor") + public void clearBatchFailCount(UserUnlockEvent event){ + this.clearBatchFailCount(event.getUserIds()); + } + + /** + * 重置用户密码, 清除登录失败的次数 + */ + @EventListener(UserRestartPasswordEvent.class) + @Async("taskExecutor") + public void clearBatchFailCount(UserRestartPasswordEvent event){ + this.clearBatchFailCount(event.getUserIds()); + } + + + /** + * 批量清除登录失败的次数 + */ + public void clearBatchFailCount(List userIds){ + passwordLoginFailRecordManager.clearBatchFailCount(userIds); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityCheckService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityCheckService.java new file mode 100644 index 000000000..d16395f82 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityCheckService.java @@ -0,0 +1,121 @@ +package cn.bootx.platform.iam.core.security.password.service; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.iam.core.security.password.dao.PasswordChangeHistoryManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordChangeHistory; +import cn.bootx.platform.iam.core.user.dao.UserExpandInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.core.user.service.UserExpandInfoService; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.dto.security.passwordSecurityCheckResult; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.starter.auth.exception.NotLoginException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; + +/** + * 密码安全校验服务 + * @author xxm + * @since 2023/10/14 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PasswordSecurityCheckService { + + private final PasswordSecurityConfigService configService; + + private final PasswordChangeHistoryManager historyManager; + + private final UserExpandInfoManager userExpandInfoManager; + + private final UserExpandInfoService userExpandInfoService; + + /** + * 登录后检查密码相关的情况 + */ + public passwordSecurityCheckResult check(){ + passwordSecurityCheckResult result = new passwordSecurityCheckResult(); + UserDetail userDetail = SecurityUtil.getCurrentUser() + .orElseThrow(NotLoginException::new); + if (userDetail.isAdmin()){ + return result; + } + Long userId = userDetail.getId(); + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); + + PasswordSecurityConfigDto securityConfig = configService.getDefault(); + // 检查是否是默认密码未进行修改 + if (this.isDefaultPassword(userExpandInfo,securityConfig)){ + return result.setDefaultPwd(true); + } + int state = this.verifyPasswordExpire(userExpandInfo, securityConfig); + // 检查密码是否已经过期, 如果过期更新用户过期状态 + if (state == 0){ + return result.setExpirePwd(true); + } + // 检查密码是否到了提示过期的时候 + if (state < 0){ + return result.setExpireRemind(true) + .setExpireRemindNum(Math.abs(state)); + } + return result; + } + + + /** + * 判断用户初始化密码是否需要修改 + */ + public boolean isDefaultPassword(UserExpandInfo userExpandInfo, PasswordSecurityConfigDto securityConfig){ + return userExpandInfo.isInitialPassword() && securityConfig.isRequireChangePwd(); + } + + + /** + * 验证密码过期和提醒状态 + * 1. 未过期也不需要提醒 + * 0. 密码已经过期 + * -N. 密码还有几天过期, 需要进行提醒 + */ + public int verifyPasswordExpire(UserExpandInfo userExpandInfo,PasswordSecurityConfigDto securityConfig){ + // 已经是密码过期状态 + if (userExpandInfo.isExpirePassword()){ + return 0; + } + + // 判断用户密码是否需要强制进行更改 + List changeHistoryList = historyManager.findAllByUserAndCount(userExpandInfo.getId(), 1); + if (CollUtil.isNotEmpty(changeHistoryList)){ + PasswordChangeHistory passwordChangeHistory = changeHistoryList.get(0); + LocalDateTime createTime = passwordChangeHistory.getCreateTime(); + // 判断上次更改密码的时间距今是多少 + int keepPwdDay = (int) LocalDateTimeUtil.between(createTime, LocalDateTime.now(), ChronoUnit.DAYS); + + int dealDay = securityConfig.getUpdateFrequency() - keepPwdDay; + // 密码过期 + if (dealDay < 0){ + // 更新过期状态 + userExpandInfoService.userExpirePwd(userExpandInfo.getId()); + return 0; + } + // 判断是否满足密码修改的倒计时提醒 + if (dealDay < securityConfig.getExpireRemind()){ + return -dealDay; + } + // 密码未过期 + return 1; + + } + return 1; + } + + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityConfigService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityConfigService.java new file mode 100644 index 000000000..9b2699158 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/password/service/PasswordSecurityConfigService.java @@ -0,0 +1,72 @@ +package cn.bootx.platform.iam.core.security.password.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.iam.core.security.password.dao.PasswordSecurityConfigManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordSecurityConfig; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.iam.param.security.PasswordSecurityConfigParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PasswordSecurityConfigService { + private final PasswordSecurityConfigManager passwordSecurityConfigManager; + + /** + * 添加or修改 + */ + public void addOrUpdate(PasswordSecurityConfigParam param){ + // 判断库里是否有数据 + if (passwordSecurityConfigManager.existsAll()){ + this.update(param); + } else { + this.add(param); + } + } + + /** + * 添加 + */ + public void add(PasswordSecurityConfigParam param){ + PasswordSecurityConfig passwordSecurityConfig = PasswordSecurityConfig.init(param); + passwordSecurityConfigManager.save(passwordSecurityConfig); + } + + /** + * 修改 + */ + private void update(PasswordSecurityConfigParam param){ + PasswordSecurityConfig passwordSecurityConfig = passwordSecurityConfigManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("密码安全策略不存在")); + BeanUtil.copyProperties(param, passwordSecurityConfig, CopyOptions.create().ignoreNullValue()); + passwordSecurityConfigManager.updateById(passwordSecurityConfig); + } + + /** + * 获取配置项, 如有多个, 则取第一个并删除旧的数据, 如果未配置, 则取系统默认配置 + */ + public PasswordSecurityConfigDto getDefault(){ + List configs = passwordSecurityConfigManager.findAll(); + if (configs.size()==1){ + return configs.get(0).toDto(); + } else if (configs.size()>1){ + PasswordSecurityConfig securityConfig = configs.get(0); + passwordSecurityConfigManager.deleteAllNotId(securityConfig.getId()); + return securityConfig.toDto(); + } else { + return PasswordSecurityConfigDto.defaultObject(); + } + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/platform/entity/PlatformSecurityConfig.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/platform/entity/PlatformSecurityConfig.java new file mode 100644 index 000000000..428810b96 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/platform/entity/PlatformSecurityConfig.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.core.security.platform.entity; + +import cn.bootx.table.modify.annotation.DbComment; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 平台安全策略 + * @author xxm + * @since 2023/8/17 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("iam_platform_security_config") +public class PlatformSecurityConfig extends MpBaseEntity { + + /** 开启全局数据权限 */ + @DbComment("开启全局数据权限") + private Boolean globalDataPerm; + + /** 全局重放过滤 */ + @DbComment("全局重放过滤") + private Boolean globalReplay; + + /** 全局水印 */ + @DbComment("全局水印") + private Boolean watermark; +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/convert/LoginSecurityConfigConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/convert/LoginSecurityConfigConvert.java new file mode 100644 index 000000000..92f09ef34 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/convert/LoginSecurityConfigConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.iam.core.security.user.convert; + +import cn.bootx.platform.iam.core.security.user.entity.LoginSecurityConfig; +import cn.bootx.platform.iam.dto.security.LoginSecurityConfigDto; +import cn.bootx.platform.iam.param.security.LoginSecurityConfigParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@Mapper +public interface LoginSecurityConfigConvert { + LoginSecurityConfigConvert CONVERT = Mappers.getMapper(LoginSecurityConfigConvert.class); + + LoginSecurityConfig convert(LoginSecurityConfigParam in); + + LoginSecurityConfigDto convert(LoginSecurityConfig in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigManager.java new file mode 100644 index 000000000..687c77d5c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigManager.java @@ -0,0 +1,33 @@ +package cn.bootx.platform.iam.core.security.user.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import cn.bootx.platform.iam.core.security.user.entity.LoginSecurityConfig; +import cn.bootx.platform.iam.param.security.LoginSecurityConfigParam; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@Repository +@RequiredArgsConstructor +public class LoginSecurityConfigManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, LoginSecurityConfigParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, LoginSecurityConfig.class); + QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(LoginSecurityConfig::getId)); + return this.page(mpPage,wrapper); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigMapper.java new file mode 100644 index 000000000..a6bd3b2bb --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/dao/LoginSecurityConfigMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.security.user.dao; + +import cn.bootx.platform.iam.core.security.user.entity.LoginSecurityConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@Mapper +public interface LoginSecurityConfigMapper extends BaseMapper { +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/entity/LoginSecurityConfig.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/entity/LoginSecurityConfig.java new file mode 100644 index 000000000..8dc69d253 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/entity/LoginSecurityConfig.java @@ -0,0 +1,61 @@ +package cn.bootx.platform.iam.core.security.user.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.core.security.user.convert.LoginSecurityConfigConvert; +import cn.bootx.platform.iam.dto.security.LoginSecurityConfigDto; +import cn.bootx.platform.iam.param.security.LoginSecurityConfigParam; +import cn.bootx.table.modify.annotation.DbColumn; +import cn.bootx.table.modify.annotation.DbComment; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 登录安全策略 + * @author xxm + * @since 2023/8/17 + */ +//@DbTable(comment = "登录安全策略") +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("iam_login_security_config") +public class LoginSecurityConfig extends MpBaseEntity implements EntityBaseFunction { + + /** 关联终端ID */ + @DbComment("关联终端ID") + private Long clientId; + + /** 修改密码是否需要重新登录 */ + @DbComment("修改密码是否需要重新登录") + private Boolean requireLoginChangePwd; + + /** 默认启用验证码 */ + @DbComment("默认启用验证码") + private Boolean captchaEnable; + + /** 出现验证码的错误次数 0 表示不启用 */ + @DbColumn(comment = "出现验证码的错误次数") + private Integer maxCaptchaErrorCount; + + /** 同端是否允许同时登录 */ + @DbComment("同端是否允许同时登录") + private Boolean allowMultiLogin; + + /** 多终端是否允许同时登录 */ + @DbComment("多终端是否允许同时登录") + private Boolean allowMultiTerminalLogin; + + /** 创建对象 */ + public static LoginSecurityConfig init(LoginSecurityConfigParam in) { + return LoginSecurityConfigConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public LoginSecurityConfigDto toDto() { + return LoginSecurityConfigConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/LoginSecurityConfigService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/LoginSecurityConfigService.java new file mode 100644 index 000000000..2addb9eec --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/LoginSecurityConfigService.java @@ -0,0 +1,84 @@ +package cn.bootx.platform.iam.core.security.user.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.security.user.dao.LoginSecurityConfigManager; +import cn.bootx.platform.iam.core.security.user.entity.LoginSecurityConfig; +import cn.bootx.platform.iam.dto.security.LoginSecurityConfigDto; +import cn.bootx.platform.iam.param.security.LoginSecurityConfigParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class LoginSecurityConfigService { + private final LoginSecurityConfigManager loginSecurityConfigManager; + + /** + * 添加 + */ + public void add(LoginSecurityConfigParam param){ + LoginSecurityConfig loginSecurityConfig = LoginSecurityConfig.init(param); + loginSecurityConfigManager.save(loginSecurityConfig); + } + + /** + * 修改 + */ + public void update(LoginSecurityConfigParam param){ + LoginSecurityConfig loginSecurityConfig = loginSecurityConfigManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + + BeanUtil.copyProperties(param,loginSecurityConfig, CopyOptions.create().ignoreNullValue()); + loginSecurityConfigManager.updateById(loginSecurityConfig); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam,LoginSecurityConfigParam query){ + return MpUtil.convert2DtoPageResult(loginSecurityConfigManager.page(pageParam,query)); + } + + /** + * 获取单条 + */ + public LoginSecurityConfigDto findById(Long id){ + return loginSecurityConfigManager.findById(id).map(LoginSecurityConfig::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取全部 + */ + public List findAll(){ + return ResultConvertUtil.dtoListConvert(loginSecurityConfigManager.findAll()); + } + + /** + * 删除 + */ + public void delete(Long id){ + loginSecurityConfigManager.deleteById(id); + } + + + /** + * 批量删除 + */ + public void deleteBatch(List ids){ + loginSecurityConfigManager.deleteByIds(ids); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/UserSecurityConfigService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/UserSecurityConfigService.java new file mode 100644 index 000000000..1c7665c45 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/security/user/service/UserSecurityConfigService.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.core.security.user.service; + +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 用户安全配置 + * @author xxm + * @since 2023/9/25 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserSecurityConfigService { + + /** + * 获取用户的安全状态, 登陆后主要用来确定用户是否需要进行哪些的校验 + */ + public void getUserCheckSecurity(){ + Long userId = SecurityUtil.getUserId(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdConvert.java new file mode 100644 index 000000000..00028b6fd --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdConvert.java @@ -0,0 +1,15 @@ +package cn.bootx.platform.iam.core.third.convert; + +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.dto.user.UserThirdDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface UserThirdConvert { + + UserThirdConvert CONVERT = Mappers.getMapper(UserThirdConvert.class); + + UserThirdDto convert(UserThird in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdInfoConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdInfoConvert.java new file mode 100644 index 000000000..573eaf0dd --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/convert/UserThirdInfoConvert.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.third.convert; + +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.dto.user.UserThirdInfoDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 用户三方登录绑定详情 + * + * @author xxm + * @since 2022-07-02 + */ +@Mapper +public interface UserThirdInfoConvert { + + UserThirdInfoConvert CONVERT = Mappers.getMapper(UserThirdInfoConvert.class); + + UserThirdInfoDto convert(UserThirdInfo in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoManager.java similarity index 76% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoManager.java index d63b1effa..4230a992e 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdInfoManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoManager.java @@ -1,11 +1,11 @@ -package cn.bootx.iam.core.third.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import cn.bootx.iam.param.user.UserThirdInfoParam; +package cn.bootx.platform.iam.core.third.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.param.user.UserThirdInfoParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -17,7 +17,7 @@ * 用户三方登录绑定详情 * * @author xxm - * @date 2022-07-02 + * @since 2022-07-02 */ @Repository @RequiredArgsConstructor @@ -52,4 +52,4 @@ public void deleteByUserAndClientCode(Long userId, String clientCode) { lambdaUpdate().eq(UserThirdInfo::getUserId, userId).eq(UserThirdInfo::getClientCode, clientCode).remove(); } -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoMapper.java new file mode 100644 index 000000000..6cd44570c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdInfoMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.third.dao; + +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户三方登录绑定详情 + * + * @author xxm + * @since 2022-07-02 + */ +@Mapper +public interface UserThirdInfoMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdManager.java similarity index 75% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdManager.java index eb883a1dc..9debeb1d2 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/dao/UserThirdManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdManager.java @@ -1,10 +1,10 @@ -package cn.bootx.iam.core.third.dao; +package cn.bootx.platform.iam.core.third.dao; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.third.entity.UserThird; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -17,7 +17,7 @@ * 三方登录 * * @author xxm - * @date 2021/8/2 + * @since 2021/8/2 */ @Slf4j @Repository diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdMapper.java new file mode 100644 index 000000000..030bd1816 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/dao/UserThirdMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.third.dao; + +import cn.bootx.platform.iam.core.third.entity.UserThird; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 三方登录 + * + * @author xxm + * @since 2021/8/2 + */ +@Mapper +public interface UserThirdMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThird.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThird.java new file mode 100644 index 000000000..b7b448043 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThird.java @@ -0,0 +1,51 @@ +package cn.bootx.platform.iam.core.third.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.iam.core.third.convert.UserThirdConvert; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.dto.user.UserThirdDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户三方登录 + * + * @author xxm + * @since 2021/8/2 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("iam_user_third") +public class UserThird extends MpBaseEntity implements EntityBaseFunction { + + /** 用户id */ + private Long userId; + + /** 微信(公众号) */ + private String weChatId; + + /** 微信(开放平台) */ + private String weChatOpenId; + + /** qqId */ + private String qqId; + + /** 微博Id */ + private String weiboId; + + /** 码云唯一标识 */ + private String giteeId; + + /** 钉钉唯一标识 */ + private String dingTalkId; + + /** 企业微信唯一标识 */ + private String weComId; + + @Override + public UserThirdDto toDto() { + return UserThirdConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThirdInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThirdInfo.java new file mode 100644 index 000000000..147c7179a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/entity/UserThirdInfo.java @@ -0,0 +1,48 @@ +package cn.bootx.platform.iam.core.third.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.iam.core.third.convert.UserThirdInfoConvert; +import cn.bootx.platform.common.mybatisplus.base.MpDelEntity; +import cn.bootx.platform.iam.dto.user.UserThirdInfoDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 用户三方登录绑定详情 + * + * @author xxm + * @since 2022-07-02 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("iam_user_third_info") +@Accessors(chain = true) +public class UserThirdInfo extends MpDelEntity implements EntityBaseFunction { + + /** 用户id */ + private Long userId; + + /** 第三方终端类型 */ + private String clientCode; + + /** 三方平台用户名 */ + private String username; + + /** 三方平台用户昵称 */ + private String nickname; + + /** 三方平台用户头像 */ + private String avatar; + + /** 关联第三方平台中的用户id(例如钉钉) */ + private String thirdUserId; + + /** 转换成dto */ + @Override + public UserThirdInfoDto toDto() { + return UserThirdInfoConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdBindService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdBindService.java new file mode 100644 index 000000000..305cb06d1 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdBindService.java @@ -0,0 +1,84 @@ +package cn.bootx.platform.iam.core.third.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.starter.auth.authentication.OpenIdAuthentication; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.iam.core.third.dao.UserThirdInfoManager; +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 三方账号绑定 + * + * @author xxm + * @since 2021/8/2 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserThirdBindService { + + private final UserThirdManager userThirdManager; + + private final UserThirdInfoManager userThirdInfoManager; + + private final List openIdAuthentications; + + /** + * 绑定账号 + */ + @Transactional(rollbackFor = Exception.class) + public void bind(String authCode, String loginType, String state) { + OpenIdAuthentication openIdAuthentication = this.getOpenIdAuthentication(loginType); + openIdAuthentication.bindUser(authCode, state); + } + + /** + * 解除绑定 + */ + @Transactional + public void unbind(String loginType) { + Long userId = SecurityUtil.getUserId(); + if (!userThirdManager.existsByUserId(userId)) { + throw new DataNotExistException("用户绑定关系不存"); + } + userThirdInfoManager.deleteByUserAndClientCode(userId, loginType); + switch (loginType) { + case AuthLoginTypeCode.WE_CHAT: { + userThirdManager.unbind(userId, UserThird::getWeChatId); + break; + } + case AuthLoginTypeCode.WE_COM: { + userThirdManager.unbind(userId, UserThird::getWeComId); + break; + } + case AuthLoginTypeCode.DING_TALK: { + userThirdManager.unbind(userId, UserThird::getDingTalkId); + break; + } + default: { + throw new BizException("未被支持的三方登录方式"); + } + } + } + + /** + * 获取 openId登录认证器 + */ + private OpenIdAuthentication getOpenIdAuthentication(String clientCode) { + return openIdAuthentications.stream() + .filter(o -> o.adaptation(clientCode)) + .findFirst() + .orElseThrow(() -> new LoginFailureException("未找到对应的终端认证器")); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdQueryService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdQueryService.java new file mode 100644 index 000000000..56e3b5743 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserThirdQueryService.java @@ -0,0 +1,85 @@ +package cn.bootx.platform.iam.core.third.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.iam.core.third.dao.UserThirdInfoManager; +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.dto.user.UserThirdBindInfo; +import cn.bootx.platform.iam.dto.user.UserThirdBindInfo.BindInfo; +import cn.bootx.platform.iam.dto.user.UserThirdDto; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 用户三方账号查询 + * + * @author xxm + * @since 2022/4/2 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserThirdQueryService { + + private final UserThirdManager userThirdManager; + + private final UserThirdInfoManager userThirdInfoManager; + + /** + * 分页 + */ + public PageResult page(PageParam pageParam) { + return MpUtil.convert2DtoPageResult(userThirdManager.page(pageParam)); + } + + /** + * 获取详情 + */ + public UserThirdDto findById(Long id) { + return userThirdManager.findById(id).map(UserThird::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取用户绑定的详细信息 + */ + public UserThirdBindInfo getThirdBindInfo() { + Long userId = SecurityUtil.getUserId(); + UserThirdBindInfo userThirdBindInfo = new UserThirdBindInfo(); + Map thirdInfoMap = userThirdInfoManager.findAllByUser(userId) + .stream() + .collect(Collectors.toMap(UserThirdInfo::getClientCode, Function.identity())); + userThirdBindInfo.setWeChat(getBindInfo(thirdInfoMap, AuthLoginTypeCode.WE_CHAT)); + userThirdBindInfo.setWeChatOpen(getBindInfo(thirdInfoMap, AuthLoginTypeCode.WE_CHAT_OPEN)); + userThirdBindInfo.setWeCom(getBindInfo(thirdInfoMap, AuthLoginTypeCode.WE_COM)); + userThirdBindInfo.setDingTalk(getBindInfo(thirdInfoMap, AuthLoginTypeCode.DING_TALK)); + + return userThirdBindInfo; + } + + /** + * 获取微信绑定信息 + */ + private BindInfo getBindInfo(Map thirdInfoMap, String clientCode) { + UserThirdInfo userThirdInfo = thirdInfoMap.get(clientCode); + BindInfo bindInfo = new BindInfo(); + if (Objects.nonNull(userThirdInfo)) { + bindInfo.setBind(true); + bindInfo.setUsername(userThirdInfo.getUsername()); + bindInfo.setThirdUserId(userThirdInfo.getThirdUserId()); + } + return bindInfo; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserTiredOperateService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserTiredOperateService.java similarity index 81% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserTiredOperateService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserTiredOperateService.java index 468648f96..6f19003ce 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/third/service/UserTiredOperateService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/third/service/UserTiredOperateService.java @@ -1,13 +1,13 @@ -package cn.bootx.iam.core.third.service; +package cn.bootx.platform.iam.core.third.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.iam.core.third.dao.UserThirdInfoManager; -import cn.bootx.iam.core.third.dao.UserThirdManager; -import cn.bootx.iam.core.third.entity.UserThird; -import cn.bootx.iam.core.third.entity.UserThirdInfo; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.iam.core.third.dao.UserThirdInfoManager; +import cn.bootx.platform.iam.core.third.dao.UserThirdManager; +import cn.bootx.platform.iam.core.third.entity.UserThird; +import cn.bootx.platform.iam.core.third.entity.UserThirdInfo; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,7 +22,7 @@ * 用户绑定操作类 * * @author xxm - * @date 2022/7/22 + * @since 2022/7/22 */ @Slf4j @Service @@ -81,9 +81,11 @@ public void bindOpenInfo(Long userId, AuthUser authUser, String clientCode) { */ @Transactional(rollbackFor = Exception.class) public void bindOpenInfo(UserThirdInfo userThirdInfo) { - // 详细信息 存在就删除重新添加 + userThirdInfoManager.deleteByUserAndClientCode(userThirdInfo.getUserId(), userThirdInfo.getClientCode()); + userThirdInfoManager.save(userThirdInfo); + } } diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuManager.java new file mode 100644 index 000000000..6f3ae89e4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuManager.java @@ -0,0 +1,64 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.upms.entity.RoleMenu; +import cn.hutool.core.util.IdUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 角色权限关系 + * + * @author xxm + * @since 2021/8/3 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class RoleMenuManager extends BaseManager { + + public void deleteByPermission(Long permissionId) { + deleteByField(RoleMenu::getPermissionId, permissionId); + } + + public void deleteByRole(Long roleId) { + this.deleteByField(RoleMenu::getRoleId, roleId); + } + + public List findAllByRoles(List roleIds) { + return findAllByFields(RoleMenu::getRoleId, roleIds); + } + public List findAllByRole(Long roleId) { + return findAllByField(RoleMenu::getRoleId, roleId); + } + + + public List findAllByRoleAndClientCode(Long roleId, String clientCode) { + return lambdaQuery().eq(RoleMenu::getRoleId, roleId).eq(RoleMenu::getClientCode, clientCode).list(); + + } + + /** + * 根据角色id、客户端code、权限id进行删除 + */ + public void deleteByPermIds(Long roleId, String clientCode,List permissionIds) { + lambdaUpdate() + .eq(RoleMenu::getRoleId, roleId) + .eq(RoleMenu::getClientCode,clientCode) + .in(RoleMenu::getPermissionId,permissionIds) + .remove(); + } + + + @Override + public List saveAll(List list) { + list.forEach(roleMenu -> roleMenu.setId(IdUtil.getSnowflakeNextId())); + MpUtil.executeBatch(list, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); + return list; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuMapper.java new file mode 100644 index 000000000..c9d298c63 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RoleMenuMapper.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.iam.core.upms.entity.RoleMenu; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 角色权限关系 + * + * @author xxm + * @since 2021/8/3 + */ +@Mapper +public interface RoleMenuMapper extends BaseMapper { + + void saveAll(@Param("roleMenus") List roleMenus); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathManager.java new file mode 100644 index 000000000..33cbf40f1 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathManager.java @@ -0,0 +1,63 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.upms.entity.RolePath; +import cn.hutool.core.util.IdUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 角色权限 + * + * @author xxm + * @since 2020/5/27 16:02 + */ +@Repository +@RequiredArgsConstructor +public class RolePathManager extends BaseManager { + + private final RolePathMapper rolePathMapper; + + public List findAllByRole(Long roleId) { + return findAllByField(RolePath::getRoleId, roleId); + } + + public List findAllByRoles(List roleIds) { + return findAllByFields(RolePath::getRoleId, roleIds); + } + + public void deleteByRole(Long roleId) { + deleteByField(RolePath::getRoleId, roleId); + } + + public void deleteByPermission(Long permissionId) { + deleteByField(RolePath::getPermissionId, permissionId); + } + + public void deleteByPermissions(List permissionIds) { + deleteByFields(RolePath::getPermissionId, permissionIds); + } + + /** + * 替换为for方式 + */ + @Override + public List saveAll(List rolePaths) { + rolePaths.forEach(rolePath -> rolePath.setId(IdUtil.getSnowflakeNextId())); + MpUtil.executeBatch(rolePaths, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); + return rolePaths; + } + + /** + * 根据角色id 权限ids 删除关联关系 + */ + public void deleteByPermIds(Long roleId, List permissionIds) { + lambdaUpdate() + .eq(RolePath::getRoleId, roleId) + .in(RolePath::getPermissionId,permissionIds) + .remove(); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathMapper.java new file mode 100644 index 000000000..61efa044f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/RolePathMapper.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.iam.core.upms.entity.RolePath; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 角色权限 + * + * @author xxm + * @since 2020/11/14 + */ +@Mapper +public interface RolePathMapper extends BaseMapper { + + void saveAll(@Param("rolePaths") List rolePaths); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleManager.java new file mode 100644 index 000000000..2807eb804 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleManager.java @@ -0,0 +1,50 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.upms.entity.UserDataRole; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author xxm + * @since 2021/12/23 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class UserDataRoleManager extends BaseManager { + + public boolean existsByDataRoleId(Long dataRoleId) { + return this.existedByField(UserDataRole::getRoleId, dataRoleId); + } + + public void deleteByUser(Long userId) { + this.deleteByField(UserDataRole::getUserId, userId); + } + + public void deleteByUsers(List userIds) { + this.deleteByFields(UserDataRole::getUserId, userIds); + } + + public List findAllByUserId(Long userId) { + return this.findAllByField(UserDataRole::getUserId, userId); + } + + public Optional findByUserId(Long userId) { + return this.findByField(UserDataRole::getUserId, userId); + } + + @Override + public List saveAll(List dataScopes) { + MpUtil.initEntityList(dataScopes, SecurityUtil.getUserIdOrDefaultId()); + MpUtil.executeBatch(dataScopes, baseMapper::saveAll, this.DEFAULT_BATCH_SIZE); + return dataScopes; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleMapper.java new file mode 100644 index 000000000..e8f8eda65 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserDataRoleMapper.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.iam.core.upms.entity.UserDataRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户数据权限角色关系 + * @author xxm + * @since 2021/12/23 + */ +@Mapper +public interface UserDataRoleMapper extends BaseMapper { + + void saveAll(@Param("userDataRoles") List userDataRoles); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleManager.java similarity index 81% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleManager.java index d9f5e0b3a..3e50c1de8 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/dao/UserRoleManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleManager.java @@ -1,9 +1,9 @@ -package cn.bootx.iam.core.upms.dao; +package cn.bootx.platform.iam.core.upms.dao; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.upms.entity.UserRole; -import cn.bootx.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.upms.entity.UserRole; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @@ -14,7 +14,7 @@ * 用户角色关系 * * @author xxm - * @date 2021/8/3 + * @since 2021/8/3 */ @Slf4j @Repository diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleMapper.java new file mode 100644 index 000000000..4155234a8 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/dao/UserRoleMapper.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.upms.dao; + +import cn.bootx.platform.iam.core.upms.entity.UserRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户角色关系 + * + * @author xxm + * @since 2021/8/3 + */ +@Mapper +public interface UserRoleMapper extends BaseMapper { + + void saveAll(@Param("userRoles") List userRoles); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RoleMenu.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RoleMenu.java similarity index 78% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RoleMenu.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RoleMenu.java index 51a887fea..99a96e7da 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RoleMenu.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RoleMenu.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.upms.entity; +package cn.bootx.platform.iam.core.upms.entity; -import cn.bootx.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -8,10 +8,10 @@ import lombok.experimental.Accessors; /** - * 角色权限关联关系 + * 角色菜单(包含权限码)关联关系 * * @author xxm - * @date 2021/8/3 + * @since 2021/8/3 */ @EqualsAndHashCode(callSuper = true) @Data @@ -31,7 +31,7 @@ public class RoleMenu extends MpIdEntity { private String clientCode; /** - * 菜单权限id + * 菜单或权限码id */ private Long permissionId; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RolePath.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RolePath.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RolePath.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RolePath.java index 2c159c3c0..35b7edb27 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/RolePath.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/RolePath.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.upms.entity; +package cn.bootx.platform.iam.core.upms.entity; -import cn.bootx.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ * 角色路径权限表 * * @author xxm - * @date 2020/5/11 22:25 + * @since 2020/5/11 22:25 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserDataRole.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserDataRole.java new file mode 100644 index 000000000..802b8252d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserDataRole.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.core.upms.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 用户数据范围关联关系 + * + * @author xxm + * @since 2021/12/23 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@TableName("iam_user_data_role") +public class UserDataRole extends MpIdEntity { + + /** 用户id */ + private Long userId; + + /** 数据权限id */ + private Long roleId; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserRole.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserRole.java similarity index 78% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserRole.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserRole.java index e1b1c0c9c..f4853525a 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/upms/entity/UserRole.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/entity/UserRole.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.upms.entity; +package cn.bootx.platform.iam.core.upms.entity; -import cn.bootx.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ * 用户角色关系 * * @author xxm - * @date 2020/5/1 11:18 + * @since 2020/5/1 11:18 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePathService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePathService.java new file mode 100644 index 000000000..a9b9c63c2 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePathService.java @@ -0,0 +1,224 @@ +package cn.bootx.platform.iam.core.upms.service; + +import cn.bootx.platform.common.core.annotation.CountTime; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.iam.core.permission.service.PermPathService; +import cn.bootx.platform.iam.core.role.dao.RoleManager; +import cn.bootx.platform.iam.core.role.entity.Role; +import cn.bootx.platform.iam.core.role.service.RoleService; +import cn.bootx.platform.iam.core.upms.dao.RolePathManager; +import cn.bootx.platform.iam.core.upms.entity.RolePath; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.permission.PermPathDto; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.exception.role.RoleNotExistedException; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.extra.spring.SpringUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_PATH; + +/** + * 角色请求权限关系 + * + * @author xxm + * @since 2021/6/9 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class RolePathService { + + private final RolePathManager rolePathManager; + + private final PermPathService pathService; + + private final RoleService roleService; + + private final RoleManager roleManager; + + private final UserInfoManager userInfoManager; + + private final UserRoleService userRoleService; + + /** + * 保存角色路径授权 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_PATH }, allEntries = true) + @CountTime + public void addRolePath(Long roleId, List permissionIds,boolean updateAddChildren) { + // 先删后增 + List rolePaths = rolePathManager.findAllByRole(roleId); + List rolePathIds = rolePaths.stream().map(RolePath::getPermissionId).collect(Collectors.toList()); + // 需要删除的请求权限 + List deleteRolePaths = rolePaths.stream() + .filter(rolePath -> !permissionIds.contains(rolePath.getPermissionId())) + .collect(Collectors.toList()); + // 需要删除的关联ID + List deleteIds = deleteRolePaths.stream().map(RolePath::getId).collect(Collectors.toList()); + rolePathManager.deleteByIds(deleteIds); + + // 需要新增的权限关系 + List addRolePath = permissionIds.stream() + .filter(id -> !rolePathIds.contains(id)) + .map(permissionId -> new RolePath(roleId, permissionId)) + .collect(Collectors.toList()); + // 新增时验证是否超过了父级角色所拥有的权限 + Role role = roleManager.findById(roleId).orElseThrow(RoleNotExistedException::new); + if (Objects.nonNull(role.getPid())){ + List collect = rolePathManager.findAllByRole(role.getPid()) + .stream() + .map(RolePath::getPermissionId) + .collect(Collectors.toList()); + addRolePath = addRolePath.stream() + .filter(o->collect.contains(o.getPermissionId())) + .collect(Collectors.toList()); + } + rolePathManager.saveAll(addRolePath); + + // 级联更新子孙角色 + List deletePermIds = deleteRolePaths.stream().map(RolePath::getPermissionId).collect(Collectors.toList()); + if (updateAddChildren) { + // 新增的进行追加 + List addPermIds = addRolePath.stream() + .map(RolePath::getPermissionId) + .collect(Collectors.toList()); + this.updateChildren(roleId, addPermIds, deletePermIds); + } else { + // 新增的不进行追加 + this.updateChildren(roleId, null, deletePermIds); + } + } + + /** + * 更新子孙角色关联关系 + */ + private void updateChildren(Long roleId, List addPermIds, List deletePermIds) { + if (CollUtil.isNotEmpty(addPermIds) && CollUtil.isNotEmpty(deletePermIds)){ + return; + } + // 当前角色的子孙角色 + List children = roleService.findChildren(roleId); + // 新增 + if (CollUtil.isNotEmpty(addPermIds) && CollUtil.isNotEmpty(children)){ + List addRolePaths = new ArrayList<>(); + for (Long addPermId : addPermIds) { + for (RoleDto childrenRole : children) { + addRolePaths.add(new RolePath(childrenRole.getId(), addPermId)); + } + } + rolePathManager.saveAll(addRolePaths); + } + // 删除 + if (CollUtil.isNotEmpty(deletePermIds) && CollUtil.isNotEmpty(children)) { + // 子孙角色 + List childrenIds = children.stream() + .map(BaseDto::getId) + .collect(Collectors.toList()); + for (Long childrenId : childrenIds) { + rolePathManager.deleteByPermIds(childrenId,deletePermIds); + } + } + } + + /** + * 查询用户查询拥有的请求权限信息 + */ + public List findPathsByUser() { + Long userId = SecurityUtil.getUserId(); + return this.findPathsByUser(userId); + } + + /** + * 根据角色id获取关联权限id + */ + public List findIdsByRole(Long roleId) { + List rolePermissions = rolePathManager.findAllByRole(roleId); + return rolePermissions.stream().map(RolePath::getPermissionId).collect(Collectors.toList()); + } + + /** + * 查询用户拥有的路径权限信息( 路径路由拦截使用 ) + */ + @Cacheable(value = USER_PATH, key = "#method+':'+#userId") + public List findSimplePathsByUser(String method, Long userId) { + return SpringUtil.getBean(this.getClass()) + .findPathsByUser(userId) + .stream() + .filter(permPathDto -> Objects.equals(method, permPathDto.getRequestType())) + .map(PermPathDto::getPath) + .collect(Collectors.toList()); + } + + /** + * 查询用户拥有的路径权限信息 + */ + public List findPathsByUser(Long userId) { + UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); + List paths; + if (userInfo.isAdministrator()) { + paths = pathService.findAll(); + } + else { + paths = this.findPermissionsByUser(userId); + } + return paths; + } + + /** + * 查询用户查询拥有的权限信息 + */ + private List findPermissionsByUser(Long userId) { + List permissions = new ArrayList<>(0); + + List roleIds = userRoleService.findRoleIdsByUser(userId); + if (CollUtil.isEmpty(roleIds)) { + return permissions; + } + List rolePaths = rolePathManager.findAllByRoles(roleIds); + List permissionIds = rolePaths.stream() + .map(RolePath::getPermissionId) + .distinct() + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(permissionIds)) { + permissions = pathService.findByIds(permissionIds); + } + return permissions; + } + + /** + * 获取当前用户角色下可见的请求权限 + * 如果是顶级角色, 查询到的是当前角色拥有的权限 + * 如果是子角色, 查询到父级角色分配的权限,范围不会超过父级角色拥有的权限 + */ + public List findPathsByRole(Long roleId) { + List permPaths = pathService.findAll(); + Role role = roleManager.findById(roleId) + .orElseThrow(RoleNotExistedException::new); + // 如果有有父级角色, 进行过滤筛选, 防止越权 + if (Objects.nonNull(role.getPid())){ + List permissionIds = rolePathManager.findAllByRole(role.getPid()) + .stream() + .map(RolePath::getPermissionId) + .collect(Collectors.toList()); + permPaths = permPaths.stream() + .filter(o->permissionIds.contains(o.getId())) + .collect(Collectors.toList()); + } + return permPaths; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePermService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePermService.java new file mode 100644 index 000000000..421398941 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/RolePermService.java @@ -0,0 +1,305 @@ +package cn.bootx.platform.iam.core.upms.service; + +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.util.TreeBuildUtil; +import cn.bootx.platform.iam.code.PermissionCode; +import cn.bootx.platform.iam.core.permission.service.PermMenuService; +import cn.bootx.platform.iam.core.role.dao.RoleManager; +import cn.bootx.platform.iam.core.role.entity.Role; +import cn.bootx.platform.iam.core.role.service.RoleService; +import cn.bootx.platform.iam.core.upms.dao.RoleMenuManager; +import cn.bootx.platform.iam.core.upms.entity.RoleMenu; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.dto.upms.MenuAndResourceDto; +import cn.bootx.platform.iam.exception.role.RoleNotExistedException; +import cn.bootx.platform.starter.auth.entity.UserStatus; +import cn.bootx.platform.starter.auth.exception.NotLoginException; +import cn.bootx.platform.starter.auth.service.UserStatusService; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_PERM_CODE; + +/** + * 角色权限菜单关系 + * + * @author xxm + * @since 2021/8/3 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class RolePermService { + + private final UserStatusService userStatusService; + + private final RoleService roleService; + + private final RoleManager roleManager; + + private final RoleMenuManager roleMenuManager; + + private final UserRoleService userRoleService; + + private final PermMenuService permMenuService; + + /** + * 保存角色菜单(权限码)授权 + * 如果删除角色关门的权限关系, 将会级联删除子孙角色的权限关系 + * 新增角色权限关系, 会根据 updateAddChildren状态 来决定是否级联新增子孙角色的权限关系 + */ + @CacheEvict(value = { USER_PERM_CODE }, allEntries = true) + @Transactional(rollbackFor = Exception.class) + public void saveRoleMenu(Long roleId, String clientCode, List permissionIds, boolean updateAddChildren) { + List RoleMenus = roleMenuManager.findAllByRoleAndClientCode(roleId, clientCode); + List roleMenuIds = RoleMenus.stream().map(RoleMenu::getPermissionId).collect(Collectors.toList()); + // 需要删除的菜单 + List deleteRoleMenus = RoleMenus.stream() + .filter(rolePath -> !permissionIds.contains(rolePath.getPermissionId())) + .collect(Collectors.toList()); + // 需要删除的关联ID + List deleteRoleMenuIds = deleteRoleMenus.stream().map(RoleMenu::getId).collect(Collectors.toList()); + roleMenuManager.deleteByIds(deleteRoleMenuIds); + + // 需要新增的角色权限关系 + List addRoleMenus = permissionIds.stream() + .filter(id -> !roleMenuIds.contains(id)) + .map(permissionId -> new RoleMenu(roleId, clientCode, permissionId)) + .collect(Collectors.toList()); + // 新增时验证是否超过了父级角色所拥有的权限 + Role role = roleManager.findById(roleId) + .orElseThrow(RoleNotExistedException::new); + if (Objects.nonNull(role.getPid())){ + List collect = roleMenuManager.findAllByRoleAndClientCode(role.getPid(), clientCode) + .stream() + .map(RoleMenu::getPermissionId) + .collect(Collectors.toList()); + addRoleMenus = addRoleMenus.stream() + .filter(o->collect.contains(o.getPermissionId())) + .collect(Collectors.toList()); + } + roleMenuManager.saveAll(addRoleMenus); + + // 级联更新子孙角色 + List deletePermIds = deleteRoleMenus.stream().map(RoleMenu::getPermissionId).collect(Collectors.toList()); + if (updateAddChildren) { + // 新增的进行追加 + List addPermIds = addRoleMenus.stream() + .map(RoleMenu::getPermissionId) + .collect(Collectors.toList()); + this.updateChildren(roleId, clientCode, addPermIds, deletePermIds); + } else { + // 新增的不进行追加 + this.updateChildren(roleId, clientCode, null, deletePermIds); + } + } + + /** + * 级联更新子孙角色关联关系 + */ + private void updateChildren(Long roleId, String clientCode, List addPermIds, List deletePermIds){ + if (CollUtil.isNotEmpty(addPermIds) && CollUtil.isNotEmpty(deletePermIds)){ + return; + } + // 当前角色的子孙角色 + List children = roleService.findChildren(roleId); + // 新增 + if (CollUtil.isNotEmpty(addPermIds) && CollUtil.isNotEmpty(children)){ + List addRoleMenus = new ArrayList<>(); + for (Long addPermId : addPermIds) { + for (RoleDto childrenRole : children) { + addRoleMenus.add(new RoleMenu(childrenRole.getId(), clientCode, addPermId)); + } + } + roleMenuManager.saveAll(addRoleMenus); + } + // 删除 + if (CollUtil.isNotEmpty(deletePermIds) && CollUtil.isNotEmpty(children)) { + // 子孙角色 + List childrenIds = children.stream() + .map(BaseDto::getId) + .collect(Collectors.toList()); + for (Long childrenId : childrenIds) { + roleMenuManager.deleteByPermIds(childrenId,clientCode,deletePermIds); + } + } + } + + /** + * 查询当前角色已经选择的权限id + */ + public List findPermissionIdsByRole(Long roleId, String clientCode) { + List rolePermissions = roleMenuManager.findAllByRoleAndClientCode(roleId, clientCode); + return rolePermissions.stream().map(RoleMenu::getPermissionId).collect(Collectors.toList()); + } + + /** + * 获取菜单权限树, 不包含资源权限(权限码) + * 1. 用户为管理员, 返回所有菜单 + * 2. 如果用户为非管理员, 则返回当前用户角色下可见的菜单 + */ + public List findMenuTree(String clientCode) { + List permissions = this.findPermissions(clientCode); + List permissionsByNotButton = permissions.stream() + .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) + .collect(Collectors.toList()); + return this.recursiveBuildTree(permissionsByNotButton); + } + + /** + * 获取菜单和权限码树 + * 1. 用户为管理员, 返回所有菜单和资源权限(权限码) + * 2. 如果用户为非管理员, 则返回当前用户角色下可见的菜单和资源权限(权限码) + */ + public List findMenuAndPermCodeTree(String clientCode){ + List permissions = this.findPermissions(clientCode); + return this.recursiveBuildTree(permissions); + } + + /** + * 获取当前用户角色下可见的菜单树, 包含菜单和资源权限(权限码) + * 如果是顶级角色, 查询到的是当前角色拥有的权限 + * 如果是子角色, 查询到父级角色分配的权限,范围不会超过父级角色拥有的权限 + */ + public List findTreeByRole(String clientCode, Long roleId) { + List permissions = this.findPermissions(clientCode); + Role role = roleManager.findById(roleId) + .orElseThrow(RoleNotExistedException::new); + // 如果有有父级角色, 进行过滤筛选, 防止越权 + if (Objects.nonNull(role.getPid())){ + List permissionIds = roleMenuManager.findAllByRole(role.getPid()) + .stream() + .map(RoleMenu::getPermissionId) + .collect(Collectors.toList()); + permissions = permissions.stream() + .filter(o->permissionIds.contains(o.getId())) + .collect(Collectors.toList()); + } + return this.recursiveBuildTree(permissions); + } + + /** + * 获取权限菜单id列表,不包含资源权限(权限码) + */ + public List findMenuIds(String clientCode) { + List permissions = this.findPermissions(clientCode); + return permissions.stream() + .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) + .map(PermMenuDto::getId) + .collect(Collectors.toList()); + } + + /** + * 获取菜单和资源权限(权限码) 根据用户进行筛选 + */ + public MenuAndResourceDto getPermissions(String clientCode) { + List permissions = this.findPermissions(clientCode); + List resourcePerms = permissions.stream() + .filter(o -> Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) + .filter(PermMenuDto::isEffect) + .map(PermMenuDto::getPermCode) + .collect(Collectors.toList()); + List menus = permissions.stream() + .filter(o -> !Objects.equals(PermissionCode.MENU_TYPE_RESOURCE, o.getMenuType())) + .collect(Collectors.toList()); + return new MenuAndResourceDto().setResourcePerms(resourcePerms).setMenus(this.recursiveBuildTree(menus)); + } + + /** + * 获取权限信息列表 + */ + private List findPermissions(String clientCode) { + UserDetail userDetail = SecurityUtil.getCurrentUser().orElseThrow(NotLoginException::new); + List permissions; + + // 系统管理员,获取全部的权限 + if (userDetail.isAdmin()) { + permissions = permMenuService.findAllByClientCode(clientCode); + } else { + // 非管理员获取自身拥有的权限 + permissions = this.findPermissionsByUser(userDetail.getId()) + .stream() + .filter(o -> Objects.equals(clientCode, o.getClientCode())) + .collect(Collectors.toList()); + } + return permissions; + } + + /** + * 获取有效的资源(权限码)列表(后端使用,直接获取所有终端的权限码) + */ + @Cacheable(value = USER_PERM_CODE, key = "#userId") + @NestedPermission + public List findEffectPermCodesByUserId(Long userId) { + // 获取关联的的权限码 + List permissions = this.findPermissionsByUser(userId); + return permissions.stream() + .filter(o -> Objects.equals(o.getMenuType(), PermissionCode.MENU_TYPE_RESOURCE)) + .filter(PermMenuDto::isEffect) + .map(PermMenuDto::getPermCode) + .collect(Collectors.toList()); + } + + /** + * 查询用户查询拥有的权限信息(直接获取所有终端的权限码), + * 如果当前用户密码是否过期, 过期或者未修改密码, 返回权限为空 + */ + private List findPermissionsByUser(Long userId) { + // 判断当前用户密码是否过期, 过期或者未修改密码, 返回权限为空 + UserStatus userStatus = userStatusService.getUserStatus(); + if (userStatus.isExpirePassword() || userStatus.isInitialPassword()){ + return new ArrayList<>(0); + } + + List permissions = new ArrayList<>(0); + List roleIds = userRoleService.findRoleIdsByUser(userId); + if (CollUtil.isEmpty(roleIds)) { + return permissions; + } + List roleMenus = roleMenuManager.findAllByRoles(roleIds); + List permissionIds = roleMenus.stream() + .map(RoleMenu::getPermissionId) + .distinct() + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(permissionIds)) { + permissions = permMenuService.findByIds(permissionIds); + } + return permissions; + } + + /** + * 递归建树 + * @param permissions 查询出的菜单数据 + * @return 递归后的树列表 + */ + private List recursiveBuildTree(List permissions) { + return TreeBuildUtil.build(permissions, null, BaseDto::getId, PermMenuDto::getParentId, + PermMenuDto::setChildren, (o1, o2) -> { + // 先比较排序码 + if (ObjectUtil.isAllNotEmpty(o1.getSortNo(),o2.getSortNo())) { + int compare = o1.getSortNo().compareTo(o2.getSortNo()); + if (compare != 0) { + return compare; + } + } + // 后比较主键id + return o1.getId().compareTo(o2.getId()); + }); + + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserDataRoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserDataRoleService.java new file mode 100644 index 000000000..40cd1c586 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserDataRoleService.java @@ -0,0 +1,229 @@ +package cn.bootx.platform.iam.core.upms.service; + +import cn.bootx.platform.common.core.annotation.CountTime; +import cn.bootx.platform.common.core.annotation.NestedPermission; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.iam.core.scope.dao.DataRoleDeptManager; +import cn.bootx.platform.iam.core.scope.dao.DataRoleManager; +import cn.bootx.platform.iam.core.scope.dao.DataRoleUserManager; +import cn.bootx.platform.iam.core.scope.entity.DataRole; +import cn.bootx.platform.iam.core.scope.entity.DataRoleDept; +import cn.bootx.platform.iam.core.scope.entity.DataRoleUser; +import cn.bootx.platform.iam.core.upms.entity.UserDataRole; +import cn.bootx.platform.iam.core.user.dao.UserDeptManager; +import cn.bootx.platform.iam.core.user.entity.UserDept; +import cn.bootx.platform.iam.dto.scope.DataRoleDto; +import cn.bootx.platform.starter.data.perm.code.DataScopeEnum; +import cn.bootx.platform.starter.data.perm.scope.DataPermScope; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.iam.core.dept.dao.DeptManager; +import cn.bootx.platform.iam.core.dept.entity.Dept; +import cn.bootx.platform.iam.core.upms.dao.UserDataRoleManager; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_DATA_SCOPE; + +/** + * 用户数据权限关联关系 + * + * @author xxm + * @since 2021/12/23 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserDataRoleService { + + private final UserDataRoleManager userDataRoleManager; + + private final UserDeptManager userDeptManager; + + private final DataRoleManager dataRoleManager; + + private final DataRoleUserManager dataRoleUserManager; + + private final DataRoleDeptManager dataRoleDeptManager; + + private final DeptManager deptManager; + + /** + * 给用户数据权限关联关系 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_DATA_SCOPE }, key = "#userId") + public void saveAssign(Long userId, Long roleId) { + // 先删除用户拥有的数据权限 + userDataRoleManager.deleteByUser(userId); + if (Objects.nonNull(roleId)) { + userDataRoleManager.save(new UserDataRole(userId, roleId)); + } + } + + /** + * 给用户数据角色关联关系 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_DATA_SCOPE }, key = "#userIds") + public void saveAssignBatch(List userIds, Long roleId) { + // 先删除用户拥有的数据权限 + userDataRoleManager.deleteByUsers(userIds); + List userDataRoles = userIds.stream() + .map(userId -> new UserDataRole(userId, roleId)) + .collect(Collectors.toList()); + userDataRoleManager.saveAll(userDataRoles); + } + + /** + * 查询用户所对应的数据角色信息 + */ + public DataRoleDto findDataRoleByUser(Long userId) { + if (Objects.isNull(this.findDataRoleIdByUser(userId))) { + return new DataRoleDto(); + } + return dataRoleManager.findById(this.findDataRoleIdByUser(userId)) + .map(DataRole::toDto) + .orElseThrow(DataNotExistException::new); + } + + /** + * 查询用户所对应的数据角色id + */ + public Long findDataRoleIdByUser(Long userId) { + return userDataRoleManager.findByUserId(userId).map(UserDataRole::getRoleId).orElse(null); + + } + + /** + * 根据用户id获取对应的数据权限范围 + */ + @CountTime + @NestedPermission + @Cacheable(value = USER_DATA_SCOPE, key = "#userId") + public DataPermScope getDataPermScopeByUser(Long userId) { + DataPermScope dataPermScope = new DataPermScope(); + List userDataRoles = userDataRoleManager.findAllByUserId(userId); + + if (CollUtil.isEmpty(userDataRoles)) { + return dataPermScope.setScopeType(DataScopeEnum.SELF); + } + UserDataRole userDataRole = userDataRoles.get(0); + DataRole dataRole = dataRoleManager.findById(userDataRole.getRoleId()) + .orElseThrow(() -> new BizException("数据角色不存在")); + + dataPermScope.setScopeType(DataScopeEnum.findByCode(dataRole.getType())); + // 用户 + if (Objects.equals(dataRole.getType(), DataScopeEnum.USER_SCOPE.getCode())) { + Set userIds = dataRoleUserManager.findByDateRoleId(dataRole.getId()) + .stream() + .map(DataRoleUser::getUserId) + .collect(Collectors.toSet()); + return dataPermScope.setUserScopeIds(userIds); + } + // 部门 + else if (Objects.equals(dataRole.getType(), DataScopeEnum.DEPT_SCOPE.getCode())) { + Set deptIds = dataRoleDeptManager.findByDateRoleId(dataRole.getId()) + .stream() + .map(DataRoleDept::getDeptId) + .collect(Collectors.toSet()); + return dataPermScope.setDeptScopeIds(deptIds); + } + // 部门+下属部门 + else if (Objects.equals(dataRole.getType(), DataScopeEnum.SELF_DEPT_AND_SUB.getCode())) { + Set deptIds = dataRoleDeptManager.findByDateRoleId(dataRole.getId()) + .stream() + .map(DataRoleDept::getDeptId) + .collect(Collectors.toSet()); + return dataPermScope.setDeptScopeIds(this.findDeptAndSub(deptIds)); + } + // 用户和部门 + else if (Objects.equals(dataRole.getType(), DataScopeEnum.DEPT_AND_USER_SCOPE.getCode())) { + Set userIds = dataRoleUserManager.findByDateRoleId(dataRole.getId()) + .stream() + .map(DataRoleUser::getUserId) + .collect(Collectors.toSet()); + Set deptIds = dataRoleDeptManager.findByDateRoleId(dataRole.getId()) + .stream() + .map(DataRoleDept::getDeptId) + .collect(Collectors.toSet()); + return dataPermScope.setDeptScopeIds(deptIds).setUserScopeIds(userIds); + } + // 自己所属的部门 + else if (Objects.equals(dataRole.getType(), DataScopeEnum.SELF_DEPT.getCode())) { + Set deptIds = userDeptManager.findDeptIdsByUser(userId) + .stream() + .map(UserDept::getDeptId) + .collect(Collectors.toSet()); + return dataPermScope.setDeptScopeIds(deptIds); + } + // 自己所属的部门和下级部门 + else if (Objects.equals(dataRole.getType(), DataScopeEnum.SELF_DEPT_AND_SUB.getCode())) { + Set deptIds = this.findSelfDeptAndSub(userId); + return dataPermScope.setDeptScopeIds(deptIds); + } + else { + // 默认是只能查看自己的数据 + return dataPermScope; + } + } + + /** + * 查找自己及子级部门 + */ + private Set findSelfDeptAndSub(Long userId) { + Set deptIds = userDeptManager.findDeptIdsByUser(userId) + .stream() + .map(UserDept::getDeptId) + .collect(Collectors.toSet()); + Map deptMap = deptManager.findAll() + .stream() + .collect(Collectors.toMap(MpIdEntity::getId, Function.identity())); + Set deptOrgCodes = deptIds.stream().map(deptMap::get).map(Dept::getOrgCode).collect(Collectors.toSet()); + return deptMap.values() + .stream() + .filter(dept -> this.judgeSubDept(dept.getOrgCode(), deptOrgCodes)) + .map(MpIdEntity::getId) + .collect(Collectors.toSet()); + } + + + /** + * 查找部门及子级部门 + */ + private Set findDeptAndSub(Set deptIds) { + Map deptMap = deptManager.findAll() + .stream() + .collect(Collectors.toMap(MpIdEntity::getId, Function.identity())); + Set deptOrgCodes = deptIds.stream() + .map(deptMap::get) + .map(Dept::getOrgCode) + .collect(Collectors.toSet()); + return deptMap.values() + .stream() + .filter(dept -> this.judgeSubDept(dept.getOrgCode(), deptOrgCodes)) + .map(MpIdEntity::getId) + .collect(Collectors.toSet()); + } + + /** + * 判断是否是子部门 + */ + private boolean judgeSubDept(String orgCode, Set orgCodes) { + return orgCodes.stream().anyMatch(s -> StrUtil.startWith(orgCode,s) && orgCode.length()>=s.length()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserRoleService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserRoleService.java new file mode 100644 index 000000000..7da915228 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/upms/service/UserRoleService.java @@ -0,0 +1,107 @@ +package cn.bootx.platform.iam.core.upms.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.iam.core.role.dao.RoleManager; +import cn.bootx.platform.iam.core.upms.dao.UserRoleManager; +import cn.bootx.platform.iam.core.upms.entity.UserRole; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.event.user.UserAssignRoleEvent; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static cn.bootx.platform.iam.code.CachingCode.USER_PATH; +import static cn.bootx.platform.iam.code.CachingCode.USER_PERM_CODE; + +/** + * 用户角色关系 + * + * @author xxm + * @since 2021/8/3 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserRoleService { + + private final RoleManager roleManager; + + private final UserInfoManager userInfoManager; + + private final UserRoleManager userRoleManager; + + private final ApplicationEventPublisher eventPublisher; + + + /** + * 给用户分配角色 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_PATH, USER_PERM_CODE }, allEntries = true) + public void saveAssign(Long userId, List roleIds) { + // 先删除用户拥有的角色 + userRoleManager.deleteByUser(userId); + // 然后给用户添加角色 + List userRoles = this.createUserRoles(userId, roleIds); + userRoleManager.saveAll(userRoles); + eventPublisher.publishEvent(new UserAssignRoleEvent(this, Collections.singletonList(userId),roleIds)); + } + + /** + * 给用户分配角色 + */ + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = { USER_PATH, USER_PERM_CODE }, allEntries = true) + public void saveAssignBatch(List userIds, List roleIds) { + List userInfos = userInfoManager.findAllByIds(userIds); + if (userInfos.size() != userIds.size()) { + throw new BizException("用户数据有问题"); + } + userRoleManager.deleteByUsers(userIds); + List userRoles = userIds.stream() + .map(userId -> this.createUserRoles(userId, roleIds)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + userRoleManager.saveAll(userRoles); + eventPublisher.publishEvent(new UserAssignRoleEvent(this, userIds,roleIds)); + } + + /** + * 根据id查询角色id + */ + public List findRoleIdsByUser(Long userId) { + return userRoleManager.findAllByUser(userId) + .stream() + .map(UserRole::getRoleId) + .distinct() + .collect(Collectors.toList()); + } + + /** + * 查询用户所对应的角色 + */ + public List findRolesByUser(Long userId) { + return ResultConvertUtil.dtoListConvert(roleManager.findAllByIds(this.findRoleIdsByUser(userId))); + } + + /** + * 创建用户角色关联 + */ + private List createUserRoles(Long userId, List roleIds) { + return roleIds.stream() + .map(roleId -> new UserRole().setRoleId(roleId).setUserId(userId)) + .collect(Collectors.toList()); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/convert/UserConvert.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/convert/UserConvert.java new file mode 100644 index 000000000..38fd47f46 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/convert/UserConvert.java @@ -0,0 +1,25 @@ +package cn.bootx.platform.iam.core.user.convert; + +import cn.bootx.platform.iam.dto.online.OnlineUserInfoDto; +import cn.bootx.platform.iam.param.user.UserInfoParam; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.user.UserExpandInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface UserConvert { + + UserConvert CONVERT = Mappers.getMapper(UserConvert.class); + + UserInfo convert(UserInfoParam in); + + UserInfoDto convert(UserInfo in); + + UserExpandInfoDto convert(UserExpandInfo in); + + OnlineUserInfoDto toOnline(UserInfo in); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptManager.java similarity index 81% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptManager.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptManager.java index ec98086da..952a2b844 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/dao/UserDeptManager.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptManager.java @@ -1,9 +1,9 @@ -package cn.bootx.iam.core.user.dao; +package cn.bootx.platform.iam.core.user.dao; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.user.entity.UserDept; -import cn.bootx.starter.auth.util.SecurityUtil; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.user.entity.UserDept; +import cn.bootx.platform.starter.auth.util.SecurityUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @@ -14,7 +14,7 @@ * 用户部门关系 * * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Slf4j @Repository diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptMapper.java new file mode 100644 index 000000000..86bdcbdc4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserDeptMapper.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.core.user.dao; + +import cn.bootx.platform.iam.core.user.entity.UserDept; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户部门关系 + * + * @author xxm + * @since 2021/9/29 + */ +@Mapper +public interface UserDeptMapper extends BaseMapper { + + void saveAll(@Param("userDepots") List userDepots); + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoManager.java new file mode 100644 index 000000000..20cb287ef --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoManager.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.iam.core.user.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * 用户扩展信息 + * + * @author xxm + * @since 2022/1/8 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class UserExpandInfoManager extends BaseManager { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoMapper.java new file mode 100644 index 000000000..3c98f3540 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserExpandInfoMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.iam.core.user.dao; + +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2022/1/8 + */ +@Mapper +public interface UserExpandInfoMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoManager.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoManager.java new file mode 100644 index 000000000..72c4367d0 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoManager.java @@ -0,0 +1,103 @@ +package cn.bootx.platform.iam.core.user.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpDelEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.param.user.UserInfoParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +/** + * 用户信息 + * + * @author xxm + * @since 2020/4/24 15:32 + */ +@Repository +@RequiredArgsConstructor +public class UserInfoManager extends BaseManager { + + public boolean existsByUsername(String username) { + return existedByField(UserInfo::getUsername, username); + } + + public boolean existsByUsername(String username, Long id) { + return existedByField(UserInfo::getUsername, username, id); + } + + public boolean existsByEmail(String email) { + return existedByField(UserInfo::getEmail, email); + } + + public boolean existsByEmail(String email, Long id) { + return existedByField(UserInfo::getEmail, email, id); + } + + public boolean existsByPhone(String phone) { + return existedByField(UserInfo::getPhone, phone); + } + + public boolean existsByPhone(String phone, Long id) { + return existedByField(UserInfo::getPhone, phone, id); + } + + public Optional findByUsername(String username) { + return findByField(UserInfo::getUsername, username); + } + + public Optional findByEmail(String email) { + return findByField(UserInfo::getEmail, email); + } + + public Optional findByPhone(String phone) { + return findByField(UserInfo::getPhone, phone); + } + + public Page page(PageParam pageParam, UserInfoParam param) { + + Page mpPage = MpUtil.getMpPage(pageParam, UserInfo.class); + lambdaQuery().like(StrUtil.isNotBlank(param.getUsername()), UserInfo::getUsername, param.getUsername()) + .like(StrUtil.isNotBlank(param.getName()), UserInfo::getName, param.getName()) + .page(mpPage); + return mpPage; + } + + public void setUpStatus(Long userId, String status) { + lambdaUpdate().eq(MpIdEntity::getId, userId).set(UserInfo::getStatus, status).update(); + } + + /** + * 批量更新用户状态 + */ + public void setUpStatusBatch(List userIds, String status) { + lambdaUpdate() + .in(MpIdEntity::getId, userIds) + .set(UserInfo::getStatus, status) + .set(MpDelEntity::getLastModifiedTime, LocalDateTime.now()) + .set(MpDelEntity::getLastModifier, SecurityUtil.getUserIdOrDefaultId()) + .update(); + } + + /** + * 批量重置用户密码 + */ + public void restartPasswordBatch(List userIds,String password){ + lambdaUpdate() + .in(MpIdEntity::getId, userIds) + .set(UserInfo::getPassword, password) + .set(MpDelEntity::getLastModifiedTime, LocalDateTime.now()) + .set(MpDelEntity::getLastModifier, SecurityUtil.getUserIdOrDefaultId()) + .update(); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoMapper.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoMapper.java new file mode 100644 index 000000000..c264c513d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/dao/UserInfoMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.iam.core.user.dao; + +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户信息 + * + * @author xxm + * @since 2021/7/30 + */ +@Mapper +public interface UserInfoMapper extends BaseMapper { + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserDept.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserDept.java similarity index 80% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserDept.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserDept.java index fb2da7052..937182e19 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/entity/UserDept.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserDept.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.user.entity; +package cn.bootx.platform.iam.core.user.entity; -import cn.bootx.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; @@ -12,7 +12,7 @@ * 用户部门关联关系 * * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserExpandInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserExpandInfo.java new file mode 100644 index 000000000..6b2a9b041 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserExpandInfo.java @@ -0,0 +1,61 @@ +package cn.bootx.platform.iam.core.user.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.iam.core.user.convert.UserConvert; +import cn.bootx.platform.iam.dto.user.UserExpandInfoDto; +import cn.bootx.table.modify.annotation.DbTable; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 用户扩展信息 + * + * @author xxm + * @since 2022/1/8 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@DbTable(isAppend = true) +@Accessors(chain = true) +@TableName("iam_user_expand_info") +public class UserExpandInfo extends MpBaseEntity implements EntityBaseFunction { + + /** 性别 */ + private Integer sex; + + /** 头像 */ + private String avatar; + + /** 生日 */ + private LocalDate birthday; + + /** 上次登录时间 */ + private LocalDateTime lastLoginTime; + + /** 注册时间 */ + private LocalDateTime registerTime; + + /** 本次登录时间 */ + private LocalDateTime currentLoginTime; + + /** 是否初始密码 */ + private boolean initialPassword; + + /** 密码是否过期 */ + private boolean expirePassword; + + /** 上次修改密码时间 */ + private LocalDateTime lastChangePasswordTime; + + @Override + public UserExpandInfoDto toDto() { + return UserConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserInfo.java new file mode 100644 index 000000000..106bd710d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/entity/UserInfo.java @@ -0,0 +1,82 @@ +package cn.bootx.platform.iam.core.user.entity; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.common.mybatisplus.handler.LongListTypeHandler; +import cn.bootx.platform.iam.code.UserStatusCode; +import cn.bootx.platform.iam.core.user.convert.UserConvert; +import cn.bootx.platform.iam.dto.online.OnlineUserInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.param.user.UserInfoParam; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 用户的核心信息 + * + * @author xxm + * @since 2020/4/24 15:21 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName(value = "iam_user_info",autoResultMap = true) +public class UserInfo extends MpBaseEntity implements EntityBaseFunction { + + /** 名称 */ + private String name; + + /** 账号 */ + private String username; + + /** 密码 */ + private String password; + + /** 手机号 */ + private String phone; + + /** 邮箱 */ + private String email; + + /** 关联终端id集合 */ + @TableField(typeHandler = LongListTypeHandler.class) + private List clientIds; + + /** 是否管理员 */ + private boolean administrator; + + /** + * 账号状态 + * @see UserStatusCode + */ + private String status; + + @Override + public UserInfoDto toDto() { + return UserConvert.CONVERT.convert(this); + } + + public OnlineUserInfoDto toOnline(){ + return UserConvert.CONVERT.toOnline(this); + } + + public static UserInfo init(UserInfoParam param) { + return UserConvert.CONVERT.convert(param); + } + + public UserDetail toUserDetail() { + return new UserDetail().setId(this.getId()) + .setPassword(this.password) + .setUsername(this.getUsername()) + .setName(this.name) + .setAdmin(this.administrator) + .setStatus(this.status); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAdminService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAdminService.java new file mode 100644 index 000000000..2dbc842ab --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAdminService.java @@ -0,0 +1,232 @@ +package cn.bootx.platform.iam.core.user.service; + +import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.iam.code.UserStatusCode; +import cn.bootx.platform.iam.core.client.dao.ClientManager; +import cn.bootx.platform.iam.core.security.password.service.PasswordChangeHistoryService; +import cn.bootx.platform.iam.core.upms.service.UserRoleService; +import cn.bootx.platform.iam.core.user.dao.UserExpandInfoManager; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import cn.bootx.platform.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoWhole; +import cn.bootx.platform.iam.event.user.*; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.iam.param.user.UserInfoParam; +import cn.bootx.platform.iam.param.user.UserRegisterParam; +import cn.bootx.platform.starter.auth.util.PasswordEncoder; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 超级管理员操作类 + * + * @author xxm + * @since 2021/9/6 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserAdminService { + + private final UserInfoManager userInfoManager; + + private final UserExpandInfoManager userExpandInfoManager; + + private final UserRoleService userRoleService; + + private final UserDeptService userDeptService; + + private final PasswordEncoder passwordEncoder; + + private final UserQueryService userQueryService; + + private final CaptchaService captchaService; + + private final ClientManager clientManager; + + private final PasswordChangeHistoryService passwordChangeHistoryService; + + private final ApplicationEventPublisher eventPublisher; + + /** + * 分页查询 + */ + public PageResult page(PageParam pageParam, UserInfoParam userInfoParam) { + return MpUtil.convert2DtoPageResult(userInfoManager.page(pageParam, userInfoParam)); + } + + /** + * 封禁用户 + */ + public void ban(Long userId) { + userInfoManager.setUpStatus(userId, UserStatusCode.BAN); + eventPublisher.publishEvent(new UserDeactivateEvent(this, UserStatusCode.BAN, userId)); + } + + /** + * 批量封禁用户 + */ + public void banBatch(List userIds) { + userInfoManager.setUpStatusBatch(userIds, UserStatusCode.BAN); + eventPublisher.publishEvent(new UserDeactivateEvent(this, UserStatusCode.BAN, userIds)); + } + + /** + * 锁定用户 + */ + public void lock(Long userId) { + userInfoManager.setUpStatus(userId, UserStatusCode.LOCK); + eventPublisher.publishEvent(new UserDeactivateEvent(this, UserStatusCode.LOCK, userId)); + } + + /** + * 批量锁定用户 + */ + public void lockBatch(List userIds) { + userInfoManager.setUpStatusBatch(userIds, UserStatusCode.LOCK); + eventPublisher.publishEvent(new UserDeactivateEvent(this, UserStatusCode.LOCK, userIds)); + } + + /** + * 解锁用户 + */ + public void unlock(Long userId) { + userInfoManager.setUpStatus(userId, UserStatusCode.NORMAL); + eventPublisher.publishEvent(new UserUnlockEvent(this, userId)); + } + + /** + * 批量解锁用户 + */ + public void unlockBatch(List userIds) { + userInfoManager.setUpStatusBatch(userIds, UserStatusCode.NORMAL); + eventPublisher.publishEvent(new UserUnlockEvent(this, userIds)); + } + + /** + * 注册新用户 + */ + @Transactional(rollbackFor = Exception.class) + public void register(UserRegisterParam param) { + // 验证 + if (!captchaService.validateImgCaptcha(param.getCaptchaKey(), param.getCaptcha())) { + throw new BizException("验证码错误"); + } + UserInfoParam userInfoParam = new UserInfoParam(); + BeanUtil.copyProperties(param, userInfoParam); + userInfoParam.setName(param.getUsername()); + // 添加默认注册就有权限的终端 + List clientIds = clientManager.findAllByDefaultEndow(true) + .stream() + .map(MpIdEntity::getId) + .collect(Collectors.toList()); + userInfoParam.setClientIds(clientIds); + this.add(userInfoParam); + } + + /** + * 添加新用户 + */ + @Transactional(rollbackFor = Exception.class) + public void add(UserInfoParam userInfoParam) { + if (userQueryService.existsUsername(userInfoParam.getUsername())) { + throw new BizException("账号已存在"); + } + if (userQueryService.existsEmail(userInfoParam.getEmail())) { + throw new BizException("邮箱已存在"); + } + if (userQueryService.existsPhone(userInfoParam.getPhone())) { + throw new BizException("手机号已存在"); + } + // 注册时间 + UserInfo userInfo = UserInfo.init(userInfoParam); + userInfo.setAdministrator(false) + .setStatus(UserStatusCode.NORMAL) + .setPassword(passwordEncoder.encode(userInfo.getPassword())); + userInfoManager.save(userInfo); + // 扩展信息 + UserExpandInfo userExpandInfo = new UserExpandInfo() + .setRegisterTime(LocalDateTime.now()); + userExpandInfo.setId(userInfo.getId()); + passwordChangeHistoryService.saveChangeHistory(userInfo.getId(), userInfo.getPassword()); + userExpandInfoManager.save(userExpandInfo); + eventPublisher.publishEvent(new UserCreateEvent(this, userInfo.toDto())); + } + + /** + * 重置密码 + */ + @Transactional(rollbackFor = Exception.class) + public void restartPassword(Long userId, String newPassword) { + + UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); + // 新密码进行加密 + newPassword = passwordEncoder.encode(newPassword); + userInfo.setPassword(newPassword); + passwordChangeHistoryService.saveChangeHistory(userInfo.getId(), userInfo.getPassword()); + userInfoManager.updateById(userInfo); + eventPublisher.publishEvent(new UserRestartPasswordEvent(this, userInfo.getId())); + } + + /** + * 批量重置密码 + */ + @Transactional(rollbackFor = Exception.class) + public void restartPasswordBatch(List userIds, String newPassword){ + // 新密码进行加密 + String password = passwordEncoder.encode(newPassword); + userInfoManager.restartPasswordBatch(userIds,password); + passwordChangeHistoryService.saveBatchChangeHistory(userIds, password); + eventPublisher.publishEvent(new UserRestartPasswordEvent(this, userIds)); + } + + /** + * 编辑用户信息 + */ + public void update(UserInfoParam userInfoParam) { + UserInfo userInfo = userInfoManager.findById(userInfoParam.getId()) + .orElseThrow(UserInfoNotExistsException::new); + userInfoParam.setPassword(null); + BeanUtil.copyProperties(userInfoParam, userInfo, CopyOptions.create().ignoreNullValue()); + userInfo.setClientIds(userInfoParam.getClientIds()); + UserInfoDto userInfoDto = userInfoManager.updateById(userInfo).toDto(); + eventPublisher.publishEvent(new UserUpdateEvent(this, userInfoDto)); + } + + /** + * 获取用户详情 + */ + public UserInfoWhole getUserInfoWhole(Long userId) { + // 用户信息 + UserInfo userInfo = userInfoManager.findById(userId).orElseThrow(UserInfoNotExistsException::new); + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userId) + .orElseThrow(UserInfoNotExistsException::new); + // 角色信息 + List rolesByUser = userRoleService.findRolesByUser(userId); + // 部门组织 + List deptListByUser = userDeptService.findDeptListByUser(userId); + return new UserInfoWhole().setUserInfo(userInfo.toDto()) + .setUserExpandInfo(userExpandInfo.toDto()) + .setRoles(rolesByUser) + .setDeptList(deptListByUser); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAssistService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAssistService.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAssistService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAssistService.java index 26c705b93..bc2cff48f 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserAssistService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserAssistService.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.core.user.service; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.common.websocket.entity.WsRes; -import cn.bootx.common.websocket.service.UserWsNoticeService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.exception.user.UserInfoNotExistsException; -import cn.bootx.starter.auth.util.SecurityUtil; +package cn.bootx.platform.iam.core.user.service; + +import cn.bootx.platform.common.websocket.entity.WsRes; +import cn.bootx.platform.common.websocket.service.UserWsNoticeService; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.baseapi.core.captcha.service.CaptchaService; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +15,7 @@ * 用户操作支撑服务 * * @author xxm - * @date 2022/6/19 + * @since 2022/6/19 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserDeptService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserDeptService.java similarity index 85% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserDeptService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserDeptService.java index 6183a2d1e..cf092c7e0 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserDeptService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserDeptService.java @@ -1,11 +1,11 @@ -package cn.bootx.iam.core.user.service; +package cn.bootx.platform.iam.core.user.service; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.iam.core.dept.dao.DeptManager; -import cn.bootx.iam.core.dept.event.DeptDeleteEvent; -import cn.bootx.iam.core.user.dao.UserDeptManager; -import cn.bootx.iam.core.user.entity.UserDept; -import cn.bootx.iam.dto.dept.DeptDto; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.iam.core.dept.dao.DeptManager; +import cn.bootx.platform.iam.core.dept.event.DeptDeleteEvent; +import cn.bootx.platform.iam.core.user.dao.UserDeptManager; +import cn.bootx.platform.iam.core.user.entity.UserDept; +import cn.bootx.platform.iam.dto.dept.DeptDto; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; @@ -20,7 +20,7 @@ * 用户部门关联关系 * * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserExpandInfoService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserExpandInfoService.java new file mode 100644 index 000000000..84240ec9e --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserExpandInfoService.java @@ -0,0 +1,70 @@ +package cn.bootx.platform.iam.core.user.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.iam.core.user.dao.UserExpandInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.event.user.UserChangePasswordEvent; +import cn.bootx.platform.iam.event.user.UserRestartPasswordEvent; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 用户扩展信息服务 + * + * @author xxm + * @since 2022/1/8 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserExpandInfoService { + + private final UserExpandInfoManager userExpandInfoManager; + + /** + * 更新登录时间 + */ + @Async("asyncExecutor") + public void updateLoginTime(Long userId) { + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(userId).orElseThrow(BizException::new); + userExpandInfo.setLastLoginTime(userExpandInfo.getCurrentLoginTime()).setCurrentLoginTime(LocalDateTime.now()); + userExpandInfoManager.updateById(userExpandInfo); + } + + /** + * 密码过期处理, 更新状态用户状态 + */ + public void userExpirePwd(Long userId){ + UserExpandInfo userInfo = userExpandInfoManager.findById(userId) + .orElseThrow(UserInfoNotExistsException::new); + userInfo.setExpirePassword(true); + userExpandInfoManager.updateById(userInfo); + } + + /** + * 密码修改 + */ + @EventListener(UserChangePasswordEvent.class) + public void changePassword(UserChangePasswordEvent event){ + List userExpandInfos = userExpandInfoManager.findAllByIds(event.getUserIds()); + userExpandInfos.forEach(userExpandInfo -> userExpandInfo.setExpirePassword(false).setInitialPassword(false)); + userExpandInfoManager.updateAllById(userExpandInfos); + } + + /** + * 密码重置 + */ + @EventListener(UserRestartPasswordEvent.class) + public void restartPassword(UserRestartPasswordEvent event){ + List userExpandInfos = userExpandInfoManager.findAllByIds(event.getUserIds()); + userExpandInfos.forEach(userExpandInfo -> userExpandInfo.setExpirePassword(false).setInitialPassword(false)); + userExpandInfoManager.updateAllById(userExpandInfos); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserInfoService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserInfoService.java new file mode 100644 index 000000000..a77a3051f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserInfoService.java @@ -0,0 +1,267 @@ +package cn.bootx.platform.iam.core.user.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.iam.core.security.password.service.PasswordChangeHistoryService; +import cn.bootx.platform.iam.core.user.dao.UserExpandInfoManager; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.user.LoginAfterUserInfo; +import cn.bootx.platform.iam.dto.user.UserBaseInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.event.user.UserChangePasswordEvent; +import cn.bootx.platform.iam.event.user.UserRestartPasswordEvent; +import cn.bootx.platform.iam.event.user.UserUpdateEvent; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.iam.param.user.UserBaseInfoParam; +import cn.bootx.platform.starter.auth.util.PasswordEncoder; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 用户 + * + * @author xxm + * @since 2020/4/27 21:11 + */ +@Service +@RequiredArgsConstructor +public class UserInfoService { + + private final UserInfoManager userInfoManager; + + private final PasswordChangeHistoryService passwordChangeHistoryService; + + private final UserQueryService userQueryService; + + private final UserAssistService userAssistService; + + private final UserExpandInfoManager userExpandInfoManager; + + private final PasswordEncoder passwordEncoder; + + private final ApplicationEventPublisher eventPublisher; + + /** + * 登录后获取用户信息 + */ + public LoginAfterUserInfo getLoginAfterUserInfo() { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + return new LoginAfterUserInfo().setAvatar(userExpandInfo.getAvatar()) + .setUserId(userInfo.getId()) + .setUsername(userInfo.getUsername()) + .setName(userInfo.getName()); + } + + /** + * 获取用户安全信息 + */ + public UserInfoDto getUserSecurityInfo() { + return userInfoManager.findById(SecurityUtil.getUserId()) + .map(UserInfo::toDto) + .orElseThrow(UserInfoNotExistsException::new); + } + + /** + * 获取用户基本信息 + */ + public UserBaseInfoDto getUserBaseInfo() { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + return new UserBaseInfoDto().setId(userInfo.getId()) + .setSex(userExpandInfo.getSex()) + .setName(userInfo.getName()) + .setBirthday(userExpandInfo.getBirthday()) + .setAvatar(userExpandInfo.getAvatar()); + } + + /** + * 修改基本信息 + */ + @Transactional(rollbackFor = Exception.class) + public void updateUserBaseInfo(UserBaseInfoParam param) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + param.setId(null); + BeanUtil.copyProperties(param, userExpandInfo, CopyOptions.create().ignoreNullValue()); + BeanUtil.copyProperties(param, userInfo, CopyOptions.create().ignoreNullValue()); + userExpandInfoManager.updateById(userExpandInfo); + userInfoManager.updateById(userInfo); + eventPublisher.publishEvent(new UserUpdateEvent(this, userInfo.toDto())); + } + + /** + * 修改密码 + * @param password 原密码 + * @param newPassword 新密码 + */ + @Transactional(rollbackFor = Exception.class) + public void updatePassword(String password, String newPassword) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + + // 新密码进行加密 + newPassword = passwordEncoder.encode(newPassword); + + // 判断原密码是否正确 + if (!passwordEncoder.matches(password, userInfo.getPassword())) { + throw new BizException("旧密码错误"); + } + // 判断新密码是否在最近几次使用过 + if (passwordChangeHistoryService.isRecentlyUsed(userInfo.getId(), newPassword)){ + throw new BizException("新密码不能与最近使用过的密码相同"); + } + + userInfo.setPassword(newPassword); + userInfoManager.updateById(userInfo); + passwordChangeHistoryService.saveChangeHistory(userInfo.getId(), userInfo.getPassword()); + eventPublisher.publishEvent(new UserChangePasswordEvent(this,userInfo.getId())); + } + + /** + * 修改手机号 + * @param phone 要更更换的手机号 + * @param oldCaptcha 旧手机号的验证码 + * @param newCaptcha 新手机的验证码 + */ + @Transactional(rollbackFor = Exception.class) + public void updatePhone(String phone, String oldCaptcha, String newCaptcha) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + // 判断旧手机的验证码是否正常 + if (!userAssistService.validatePhoneChangeCaptcha(userInfo.getPhone(), oldCaptcha)) { + throw new BizException("短信验证码不正确"); + } + // 判断新手机验证码是否正常 + if (!userAssistService.validatePhoneChangeCaptcha(phone, newCaptcha)) { + throw new BizException("短信验证码不正确"); + } + // 手机号是否已经存在 + if (userQueryService.existsPhone(phone)) { + throw new BizException("该手机号已经被使用"); + } + userAssistService.deletePhoneChangeCaptcha(userInfo.getPhone()); + userInfo.setPhone(phone); + userInfoManager.updateById(userInfo); + userAssistService.deletePhoneChangeCaptcha(phone); + eventPublisher.publishEvent(new UserUpdateEvent(this,userInfo.toDto())); + } + + /** + * 更改邮箱 + */ + @Transactional(rollbackFor = Exception.class) + public void updateEmail(String email, String oldCaptcha, String newCaptcha) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + // 判断旧手机的验证码是否正常 + if (!userAssistService.validatePhoneChangeCaptcha(userInfo.getPhone(), oldCaptcha)) { + throw new BizException("短信验证码不正确"); + } + // 判断新邮箱验证码是否正常 + if (!userAssistService.validatePhoneChangeCaptcha(email, newCaptcha)) { + throw new BizException("短信验证码不正确"); + } + // 邮箱是否已经存在 + if (!userQueryService.existsEmail(email)) { + throw new BizException("该邮箱已经被使用"); + } + userAssistService.deleteEmailChangeCaptcha(userInfo.getEmail()); + userInfo.setEmail(email); + userInfoManager.updateById(userInfo); + userAssistService.deleteEmailChangeCaptcha(email); + eventPublisher.publishEvent(new UserUpdateEvent(this,userInfo.toDto())); + } + + /** + * 找回密码 手机 + */ + @Transactional(rollbackFor = Exception.class) + public void forgetPasswordByPhone(String phone, String captcha, String password) { + if (!userAssistService.validatePhoneForgetCaptcha(phone, captcha)) { + throw new BizException("短信验证码不正确"); + } + UserInfo userInfo = userInfoManager.findByPhone(phone).orElseThrow(UserInfoNotExistsException::new); + userInfo.setPassword(passwordEncoder.encode(password)); + // 判断新密码是否在最近几次使用过 + if (passwordChangeHistoryService.isRecentlyUsed(userInfo.getId(), userInfo.getPassword())){ + throw new BizException("新密码不能与最近使用过的密码相同"); + } + userInfoManager.updateById(userInfo); + passwordChangeHistoryService.saveChangeHistory(userInfo.getId(), userInfo.getPassword()); + userAssistService.deletePhoneForgetCaptcha(phone); + eventPublisher.publishEvent(new UserRestartPasswordEvent(this, userInfo.getId())); + } + + /** + * 找回密码 邮箱 + */ + public void forgetPasswordByEmail(String email, String captcha, String password) { + if (!userAssistService.validateEmailForgetCaptcha(email, captcha)) { + throw new BizException("短信验证码不正确"); + } + UserInfo userInfo = userInfoManager.findByEmail(email).orElseThrow(UserInfoNotExistsException::new); + userInfo.setPassword(passwordEncoder.encode(password)); + // 判断新密码是否在最近几次使用过 + if (passwordChangeHistoryService.isRecentlyUsed(userInfo.getId(), userInfo.getPassword())){ + throw new BizException("新密码不能与最近使用过的密码相同"); + } + userInfoManager.updateById(userInfo); + passwordChangeHistoryService.saveChangeHistory(userInfo.getId(), userInfo.getPassword()); + userAssistService.deleteEmailForgetCaptcha(email); + eventPublisher.publishEvent(new UserRestartPasswordEvent(this, userInfo.getId())); + } + + /** + * 绑定手机号 + */ + public void bindPhone(String phone, String captcha) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + // 判断新手机验证码是否正常 + if (!userAssistService.validatePhoneChangeCaptcha(phone, captcha)) { + throw new BizException("短信验证码不正确"); + } + // 手机号是否已经存在 + if (userQueryService.existsPhone(phone)) { + throw new BizException("该手机号已经被使用"); + } + userInfo.setPhone(phone); + userInfoManager.updateById(userInfo); + userAssistService.deletePhoneChangeCaptcha(phone); + eventPublisher.publishEvent(new UserUpdateEvent(this, userInfo.toDto())); + } + + /** + * 绑定邮箱 + */ + public void bindEmail(String email, String captcha) { + UserInfo userInfo = userInfoManager.findById(SecurityUtil.getUserId()) + .orElseThrow(UserInfoNotExistsException::new); + // 判断新邮箱验证码是否正常 + if (!userAssistService.validateEmailChangeCaptcha(email, captcha)) { + throw new BizException("短信验证码不正确"); + } + // 邮箱是否已经存在 + if (!userQueryService.existsEmail(email)) { + throw new BizException("该邮箱已经被使用"); + } + userInfo.setEmail(email); + userInfoManager.updateById(userInfo); + userAssistService.deleteEmailChangeCaptcha(userInfo.getEmail()); + eventPublisher.publishEvent(new UserUpdateEvent(this, userInfo.toDto())); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserQueryService.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserQueryService.java similarity index 86% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserQueryService.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserQueryService.java index cdbc2160b..55a1a119c 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/service/UserQueryService.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/core/user/service/UserQueryService.java @@ -1,12 +1,12 @@ -package cn.bootx.iam.core.user.service; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.function.UserDetailService; -import cn.bootx.iam.core.user.dao.UserInfoManager; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.starter.auth.exception.UserNotFoundException; +package cn.bootx.platform.iam.core.user.service; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.function.UserDetailService; +import cn.bootx.platform.starter.auth.exception.UserNotFoundException; +import cn.bootx.platform.iam.core.user.dao.UserInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserInfo; +import cn.bootx.platform.iam.dto.user.UserInfoDto; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,7 +18,7 @@ * 用户信息查询服务 * * @author xxm - * @date 2022/6/19 + * @since 2022/6/19 */ @Slf4j @Service diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/auth/LoginContentResult.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/auth/LoginContentResult.java new file mode 100644 index 000000000..7ab92950a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/auth/LoginContentResult.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.iam.dto.auth; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 登录页上下⽂信息 + * @author xxm + * @since 2023/8/17 + */ +@Data +@Accessors(chain = true) +@Schema(title = "登录页上下⽂信息") +public class LoginContentResult { + + /** 支持登录方式 */ + @Schema(description = "支持登录方式") + private List loginTypes; + + @Schema(description = "是否启用验证码") + private boolean enableCaptcha; + + @Schema(description = "密码是否加密传输") + private boolean passwordEncrypted; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/ClientDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/ClientDto.java similarity index 75% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/ClientDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/ClientDto.java index 54c801eb6..c4b848820 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/ClientDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/ClientDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.client; +package cn.bootx.platform.iam.dto.client; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,7 +13,7 @@ * 认证应用 * * @author xxm - * @date 2022-06-27 + * @since 2022-06-27 */ @EqualsAndHashCode(callSuper = true) @Data @@ -28,15 +28,18 @@ public class ClientDto extends BaseDto { private String name; @Schema(description = "是否系统内置") - private Boolean system; + private Boolean internal; @Schema(description = "是否可用") private Boolean enable; + @Schema(description = "新注册的用户是否默认赋予该终端") + private Boolean defaultEndow; + @Schema(description = "关联登录方式id") private List loginTypeIdList = new ArrayList<>(); @Schema(description = "描述") private String description; -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/LoginTypeDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/LoginTypeDto.java similarity index 87% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/LoginTypeDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/LoginTypeDto.java index 51c19d1e0..1c9b71c77 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/client/LoginTypeDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/client/LoginTypeDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.client; +package cn.bootx.platform.iam.dto.client; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ * 登录方式 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @EqualsAndHashCode(callSuper = true) @Data @@ -31,7 +31,7 @@ public class LoginTypeDto extends BaseDto { private String type; @Schema(description = "是否系统内置") - private boolean system; + private boolean internal; @Schema(description = "在线时长 分钟") private Long timeout; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptDto.java similarity index 84% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptDto.java index 289f4862e..37e153f26 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptDto.java @@ -1,7 +1,7 @@ -package cn.bootx.iam.dto.dept; +package cn.bootx.platform.iam.dto.dept; -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.iam.code.OrgCategoryCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ /** * @author xxm - * @date 2020/5/7 18:29 + * @since 2020/5/7 18:29 */ @EqualsAndHashCode(callSuper = true) @Data @@ -31,7 +31,7 @@ public class DeptDto extends BaseDto implements Serializable { private Double sortNo; /** - * @see cn.bootx.iam.code.OrgCategoryCode + * @see OrgCategoryCode */ @Schema(description = "机构类别") private Integer orgCategory; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptTreeResult.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptTreeResult.java similarity index 94% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptTreeResult.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptTreeResult.java index be065b5a6..a1d5f0ba2 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/dept/DeptTreeResult.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/dept/DeptTreeResult.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.dto.dept; +package cn.bootx.platform.iam.dto.dept; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ /** * @author xxm - * @date 2020/5/10 15:25 + * @since 2020/5/10 15:25 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserInfoDto.java new file mode 100644 index 000000000..7a50ad00c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserInfoDto.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.iam.dto.online; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 在线用户信息 + * @author xxm + * @since 2023/12/4 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "在线用户信息") +public class OnlineUserInfoDto extends BaseDto { + + @Schema(description = "名称") + private String name; + + @Schema(description = "账号") + private String username; + + @Schema(description = "手机号") + @SensitiveInfo(SensitiveInfo.SensitiveType.MOBILE_PHONE) + private String phone; + + @Schema(description = "邮箱") + @SensitiveInfo(SensitiveInfo.SensitiveType.EMAIL) + private String email; + + @Schema(description = "状态") + private String status; +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserSessionDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserSessionDto.java new file mode 100644 index 000000000..0604c64a7 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/online/OnlineUserSessionDto.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.iam.dto.online; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 在线用户会话信息 + * @author xxm + * @since 2023/12/4 + */ +@Data +@Accessors(chain = true) +@Schema(title = "在线用户会话信息") +public class OnlineUserSessionDto { + + @Schema(description = "会话id") + private String sessionId; + + @Schema(description = "ip") + private String ip; + + @Schema(description = "uri") + private String uri; + + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermMenuDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermMenuDto.java similarity index 94% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermMenuDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermMenuDto.java index 7d40840a6..c151e7bc6 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermMenuDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermMenuDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.permission; +package cn.bootx.platform.iam.dto.permission; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ /** * @author xxm - * @date 2021/7/12 + * @since 2021/7/12 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermPathDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermPathDto.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermPathDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermPathDto.java index 5494f7769..699369269 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/permission/PermPathDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/permission/PermPathDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.permission; +package cn.bootx.platform.iam.dto.permission; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/role/RoleDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/role/RoleDto.java new file mode 100644 index 000000000..01e5962ff --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/role/RoleDto.java @@ -0,0 +1,41 @@ +package cn.bootx.platform.iam.dto.role; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author xxm + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "角色") +public class RoleDto extends BaseDto implements Serializable { + + private static final long serialVersionUID = 5532196699667233754L; + + @Schema(description = "角色code") + private String code; + + @Schema(description = "角色名称") + private String name; + + @Schema(description = "是否系统内置") + private boolean internal; + + @Schema(description = "父级Id") + private Long pid; + + @Schema(description = "描述") + private String remark; + + @Schema(description = "子节点") + private List children; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleDto.java new file mode 100644 index 000000000..9d216ea40 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleDto.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.dto.scope; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2021/12/24 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "数据角色") +public class DataRoleDto extends BaseDto { + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "类型") + private String type; + + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleUserDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleUserDto.java new file mode 100644 index 000000000..464155152 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/scope/DataRoleUserDto.java @@ -0,0 +1,30 @@ +package cn.bootx.platform.iam.dto.scope; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户数据范围权限详细信息 + * + * @author xxm + * @since 2022/1/5 + */ +@Data +@Accessors(chain = true) +@Schema(title = "用户数据范围权限详细信息") +public class DataRoleUserDto { + + @Schema(description = "权限关联id") + private Long id; + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "用户名称") + private String name; + + @Schema(description = "用户账号") + private String username; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/LoginSecurityConfigDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/LoginSecurityConfigDto.java new file mode 100644 index 000000000..15c3e7278 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/LoginSecurityConfigDto.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.iam.dto.security; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "登录安全策略") +@Accessors(chain = true) +public class LoginSecurityConfigDto extends BaseDto { + + @Schema(description = "关联终端ID") + private Long clientId; + @Schema(description = "最大密码错误数") + private Integer maxPwdErrorCount; + @Schema(description = "密码错误锁定时间(秒)") + private Integer errorLockTime; + @Schema(description = "") + private Boolean requireChangePwd; + @Schema(description = "修改密码是否需要重新登录") + private Boolean requireLoginChangePwd; + @Schema(description = "默认启用验证码") + private Boolean captchaEnable; + @Schema(description = "出现验证码的错误次数") + private Integer maxCaptchaErrorCount; + @Schema(description = "同端是否允许同时登录") + private Boolean allowMultiLogin; + @Schema(description = "多终端是否允许同时登录") + private Boolean allowMultiTerminalLogin; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/PasswordSecurityConfigDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/PasswordSecurityConfigDto.java new file mode 100644 index 000000000..d9e335b38 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/PasswordSecurityConfigDto.java @@ -0,0 +1,50 @@ +package cn.bootx.platform.iam.dto.security; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "密码安全策略") +@Accessors(chain = true) +public class PasswordSecurityConfigDto extends BaseDto { + + @Schema(description = "最大密码错误数") + private int maxPwdErrorCount; + @Schema(description = "密码错误锁定时间(分钟)") + private int errorLockTime; + @Schema(description = "密码安全级别") + private String securityLevel; + @Schema(description = "强制修改初始密码") + private boolean requireChangePwd; + @Schema(description = "密码更新频率(天)") + private int updateFrequency; + @Schema(description = "到期提醒(天)") + private int expireRemind; + @Schema(description = "允许与登录名相同") + private boolean sameAsLoginName; + @Schema(description = "不能与近期多少次密码相同") + private int recentPassword; + + /** + * 默认配置 + */ + public static PasswordSecurityConfigDto defaultObject() { + return new PasswordSecurityConfigDto() + .setMaxPwdErrorCount(5) + .setErrorLockTime(10) + .setRequireChangePwd(true) + .setUpdateFrequency(90) + .setExpireRemind(15) + .setSameAsLoginName(false) + .setRecentPassword(5); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/UserVerifyStateResult.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/UserVerifyStateResult.java new file mode 100644 index 000000000..3215ee01e --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/UserVerifyStateResult.java @@ -0,0 +1,30 @@ +package cn.bootx.platform.iam.dto.security; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户认证状态结果 + * @author xxm + * @since 2023/9/21 + */ +@Data +@Accessors(chain = true) +@Schema(title = "用户认证状态结果") +public class UserVerifyStateResult { + + /** 验证是否通过 */ + private boolean verify; + /** 认证失败原因 */ + private String reason; + + public static UserVerifyStateResult success(){ + return new UserVerifyStateResult().setVerify(true); + } + + public static UserVerifyStateResult fail(String reason) { + return new UserVerifyStateResult().setVerify(false).setReason(reason); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/passwordSecurityCheckResult.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/passwordSecurityCheckResult.java new file mode 100644 index 000000000..af783936c --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/security/passwordSecurityCheckResult.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.iam.dto.security; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户密码各种状态的检查 + * @author xxm + * @since 2023/9/25 + */ +@Data +@Accessors(chain = true) +@Schema(title = "用户密码各种状态的检查") +public class passwordSecurityCheckResult { + + @Schema(description = "默认密码修改提示") + private boolean defaultPwd; + + @Schema(description = "密码过期") + private boolean expirePwd; + + @Schema(description = "密码过期倒计时") + private boolean expireRemind; + + @Schema(description = "距离过期天数") + private int expireRemindNum; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/upms/MenuAndResourceDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/upms/MenuAndResourceDto.java similarity index 80% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/upms/MenuAndResourceDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/upms/MenuAndResourceDto.java index 75383bb63..5edb74db5 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/upms/MenuAndResourceDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/upms/MenuAndResourceDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.upms; +package cn.bootx.platform.iam.dto.upms; -import cn.bootx.iam.dto.permission.PermMenuDto; +import cn.bootx.platform.iam.dto.permission.PermMenuDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -11,7 +11,7 @@ * 用户菜单及资源权限返回类 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/LoginAfterUserInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/LoginAfterUserInfo.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/LoginAfterUserInfo.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/LoginAfterUserInfo.java index aba087008..0c3e32ec4 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/LoginAfterUserInfo.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/LoginAfterUserInfo.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 用户登录后所需的基础信息信息 * * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserBaseInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserBaseInfoDto.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserBaseInfoDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserBaseInfoDto.java index 078c4d361..dfeca86fb 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserBaseInfoDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserBaseInfoDto.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserExpandInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserExpandInfoDto.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserExpandInfoDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserExpandInfoDto.java index 496a08ee0..a3592f947 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserExpandInfoDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserExpandInfoDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +11,7 @@ /** * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @EqualsAndHashCode(callSuper = true) @Data @@ -37,6 +37,9 @@ public class UserExpandInfoDto extends BaseDto { @Schema(description = "是否初始密码") private boolean initialPassword; + @Schema(description = "密码是否过期") + private boolean expirePassword; + @Schema(description = "上次修改密码时间") private LocalDateTime lastChangePasswordTime; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoDto.java new file mode 100644 index 000000000..c05a78e2f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoDto.java @@ -0,0 +1,68 @@ +package cn.bootx.platform.iam.dto.user; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.iam.code.UserStatusCode; +import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author xxm + * @since 2020/4/24 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "用户信息") +public class UserInfoDto extends BaseDto implements Serializable { + + private static final long serialVersionUID = 5881350477107722635L; + + @Schema(description = "名称") + private String name; + + @Schema(description = "账号") + private String username; + + @Schema(description = "密码") + @SensitiveInfo(SensitiveInfo.SensitiveType.PASSWORD) + private String password; + + @Schema(description = "手机号") + @SensitiveInfo(SensitiveInfo.SensitiveType.MOBILE_PHONE) + private String phone; + + @Schema(description = "邮箱") + @SensitiveInfo(SensitiveInfo.SensitiveType.EMAIL) + private String email; + + @Schema(description = "终端id列表") + private List clientIds; + + @Schema(description = "是否管理员") + private boolean administrator; + + /** + * @see UserStatusCode + */ + @Schema(description = "账号状态") + private String status; + + + public UserDetail toUserDetail() { + return new UserDetail().setId(this.getId()) + .setPassword(this.password) + .setUsername(this.getUsername()) + .setName(this.name) + .setAdmin(this.administrator) + .setClientIds(this.clientIds) + .setStatus(this.status); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoWhole.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoWhole.java similarity index 79% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoWhole.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoWhole.java index 280b954ad..df07aafd4 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserInfoWhole.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserInfoWhole.java @@ -1,7 +1,7 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; -import cn.bootx.iam.dto.dept.DeptDto; -import cn.bootx.iam.dto.role.RoleDto; +import cn.bootx.platform.iam.dto.dept.DeptDto; +import cn.bootx.platform.iam.dto.role.RoleDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -10,7 +10,7 @@ /** * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdBindInfo.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdBindInfo.java similarity index 80% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdBindInfo.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdBindInfo.java index 0a336d3ae..52c1d75d9 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdBindInfo.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdBindInfo.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 用户三方绑定信息 * * @author xxm - * @date 2022/7/2 + * @since 2022/7/2 */ @Data @Accessors(chain = true) @@ -29,6 +29,10 @@ public class UserThirdBindInfo { @Schema(description = "钉钉绑定信息") private BindInfo dingTalk; + @Schema(description = "钉钉绑定信息") + private BindInfo weChatApplet; + + @Getter @Setter @Schema(title = "用户信息") @@ -40,6 +44,9 @@ public static class BindInfo { @Schema(description = "名称") private String username; + @Schema(description = "第三方UUID") + private String thirdUserId; + } } diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdDto.java similarity index 87% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdDto.java index 65440d221..575d8c6bb 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ /** * @author xxm - * @date 2021/8/4 + * @since 2021/8/4 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdInfoDto.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdInfoDto.java similarity index 86% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdInfoDto.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdInfoDto.java index 27d19aade..564ad0545 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/dto/user/UserThirdInfoDto.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/dto/user/UserThirdInfoDto.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.dto.user; +package cn.bootx.platform.iam.dto.user; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ * 用户三方登录绑定详情 * * @author xxm - * @date 2022-07-02 + * @since 2022-07-02 */ @EqualsAndHashCode(callSuper = true) @Data @@ -33,4 +33,4 @@ public class UserThirdInfoDto extends BaseDto { @Schema(description = "用户头像") private String avatar; -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleCreateEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleCreateEvent.java new file mode 100644 index 000000000..a224af4e5 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleCreateEvent.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.iam.event.role; + +import cn.bootx.platform.iam.dto.role.RoleDto; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 角色创建时间 + * @author xxm + * @since 2023/7/31 + */ +@Getter +public class RoleCreateEvent extends ApplicationEvent { + private final RoleDto role; + public RoleCreateEvent(Object source, RoleDto role) { + super(source); + this.role = role; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleDeleteEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleDeleteEvent.java new file mode 100644 index 000000000..93d08c668 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleDeleteEvent.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.event.role; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 角色删除事件 + * @author xxm + * @since 2023/8/2 + */ +@Getter +public class RoleDeleteEvent extends ApplicationEvent { + private final List roleIds; + + + public RoleDeleteEvent(Object source, Long ...roleIds) { + super(source); + if (Objects.nonNull(roleIds)){ + this.roleIds = Arrays.asList(roleIds); + } else { + this.roleIds = null; + } + } + public RoleDeleteEvent(Object source, List roleIds) { + super(source); + this.roleIds = roleIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleUpdateEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleUpdateEvent.java new file mode 100644 index 000000000..5c0fa1c8d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/role/RoleUpdateEvent.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.iam.event.role; + +import cn.bootx.platform.iam.dto.role.RoleDto; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 角色更新事件 + * @author xxm + * @since 2023/7/31 + */ +@Getter +public class RoleUpdateEvent extends ApplicationEvent { + private final RoleDto role; + public RoleUpdateEvent(Object source, RoleDto role) { + super(source); + this.role = role; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserAssignRoleEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserAssignRoleEvent.java new file mode 100644 index 000000000..e3aec38e3 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserAssignRoleEvent.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.List; + +/** + * 用户分配角色事件 + * @author xxm + * @since 2023/8/3 + */ +@Getter +public class UserAssignRoleEvent extends ApplicationEvent { + private final List userIds; + private final List roleIds; + + public UserAssignRoleEvent(Object source, List userIds, List roleIds) { + super(source); + this.userIds = userIds; + this.roleIds = roleIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserChangePasswordEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserChangePasswordEvent.java new file mode 100644 index 000000000..6e2e4971d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserChangePasswordEvent.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 更改用户密码操作 + * @author xxm + * @since 2023/8/2 + */ +@Getter +public class UserChangePasswordEvent extends ApplicationEvent { + private final List userIds; + + public UserChangePasswordEvent(Object source, Long ...userIds) { + super(source); + if (Objects.nonNull(userIds)){ + this.userIds = Arrays.asList(userIds); + } else { + this.userIds = null; + } + } + + public UserChangePasswordEvent(Object source, List userIds) { + super(source); + this.userIds = userIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/event/UserCreateEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserCreateEvent.java similarity index 76% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/event/UserCreateEvent.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserCreateEvent.java index e701747c7..983fb7605 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/core/user/event/UserCreateEvent.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserCreateEvent.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.core.user.event; +package cn.bootx.platform.iam.event.user; -import cn.bootx.iam.dto.user.UserInfoDto; +import cn.bootx.platform.iam.dto.user.UserInfoDto; import lombok.Getter; import org.springframework.context.ApplicationEvent; @@ -8,11 +8,10 @@ * 用户创建事件 * * @author xxm - * @date 2022/7/2 + * @since 2022/7/2 */ @Getter public class UserCreateEvent extends ApplicationEvent { - private final UserInfoDto userInfo; public UserCreateEvent(Object source, UserInfoDto userInfo) { diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeactivateEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeactivateEvent.java new file mode 100644 index 000000000..79b8a1c2f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeactivateEvent.java @@ -0,0 +1,40 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 停用用户, 类型可以是封禁/锁定 + * @author xxm + * @since 2023/7/29 + */ +@Getter +public class UserDeactivateEvent extends ApplicationEvent { + + private final List userIds; + + /** + * @see cn.bootx.platform.iam.code.UserStatusCode + */ + private final String type; + + + public UserDeactivateEvent(Object source, String type, Long ...userIds) { + super(source); + this.type = type; + if (Objects.nonNull(userIds)){ + this.userIds = Arrays.asList(userIds); + } else { + this.userIds = null; + } + } + public UserDeactivateEvent(Object source, String type, List userIds) { + super(source); + this.userIds = userIds; + this.type = type; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeleteEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeleteEvent.java new file mode 100644 index 000000000..df430a3e8 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserDeleteEvent.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 用户删除事件 + * @author xxm + * @since 2023/7/31 + */ +@Getter +public class UserDeleteEvent extends ApplicationEvent { + private final List userIds; + + public UserDeleteEvent(Object source, Long ...userIds) { + super(source); + if (Objects.nonNull(userIds)){ + this.userIds = Arrays.asList(userIds); + } else { + this.userIds = null; + } + } + + public UserDeleteEvent(Object source, List userIds) { + super(source); + this.userIds = userIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserRestartPasswordEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserRestartPasswordEvent.java new file mode 100644 index 000000000..9a23a18ba --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserRestartPasswordEvent.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 重置用户密码操作 + * @author xxm + * @since 2023/7/31 + */ +@Getter +public class UserRestartPasswordEvent extends ApplicationEvent { + private final List userIds; + + public UserRestartPasswordEvent(Object source, Long ...userIds) { + super(source); + if (Objects.nonNull(userIds)){ + this.userIds = Arrays.asList(userIds); + } else { + this.userIds = null; + } + } + public UserRestartPasswordEvent(Object source, List userIds) { + super(source); + this.userIds = userIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUnlockEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUnlockEvent.java new file mode 100644 index 000000000..62ce405a5 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUnlockEvent.java @@ -0,0 +1,32 @@ +package cn.bootx.platform.iam.event.user; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * 解锁用户 + * @author xxm + * @since 2023/7/29 + */ +@Getter +public class UserUnlockEvent extends ApplicationEvent { + + private final List userIds; + + public UserUnlockEvent(Object source, Long ...userIds) { + super(source); + if (Objects.nonNull(userIds)){ + this.userIds = Arrays.asList(userIds); + } else { + this.userIds = null; + } + } + public UserUnlockEvent(Object source, List userIds) { + super(source); + this.userIds = userIds; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUpdateEvent.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUpdateEvent.java new file mode 100644 index 000000000..47364327e --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/event/user/UserUpdateEvent.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.event.user; + +import cn.bootx.platform.iam.dto.user.UserInfoDto; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 用户信息更新事件 + * @author xxm + * @since 2023/7/31 + */ +@Getter +public class UserUpdateEvent extends ApplicationEvent { + private final UserInfoDto userInfo; + + public UserUpdateEvent(Object source, UserInfoDto userInfo) { + super(source); + this.userInfo = userInfo; + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/login/UserPasswordInvalidException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/login/UserPasswordInvalidException.java new file mode 100644 index 000000000..891bb6d63 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/login/UserPasswordInvalidException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.exception.login; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.USER_PASSWORD_INVALID; + +/** + * 用户密码不正确异常 + * + * @author xxm + * @since 2020/5/7 18:16 + */ +public class UserPasswordInvalidException extends BizException implements Serializable { + + private static final long serialVersionUID = 6321083408077778554L; + + public UserPasswordInvalidException() { + super(USER_PASSWORD_INVALID, "用户密码不正确"); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/permission/PermissionDBErrorException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/permission/PermissionDBErrorException.java new file mode 100644 index 000000000..1b8d4dd16 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/permission/PermissionDBErrorException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.exception.permission; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.PERMISSION_DB_ERROR; + +/** + * @author xxm + * @since 2020/5/7 18:01 + */ +public class PermissionDBErrorException extends BizException implements Serializable { + + private static final long serialVersionUID = -2698918595713722011L; + + public PermissionDBErrorException() { + super(PERMISSION_DB_ERROR, "用户没有权限."); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyExistedException.java new file mode 100644 index 000000000..38205f929 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyExistedException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.exception.role; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.ROLE_ALREADY_EXISTED; + +/** + * @author xxm + * @since 2020/4/29 14:37 + */ +public class RoleAlreadyExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = -9126473695763034719L; + + public RoleAlreadyExistedException() { + super(ROLE_ALREADY_EXISTED, "角色已经存在."); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyUsedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyUsedException.java new file mode 100644 index 000000000..bc7fd89c6 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleAlreadyUsedException.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.iam.exception.role; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.ROLE_ALREADY_USED; + +/** + * @author xxm + * @since 2020/4/29 14:42 + */ +public class RoleAlreadyUsedException extends BizException implements Serializable { + + private static final long serialVersionUID = 3704932788916299672L; + + public RoleAlreadyUsedException() { + super(ROLE_ALREADY_USED, "该角色下分配了用户,您无法将其删除."); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleHaschildrenException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleHaschildrenException.java new file mode 100644 index 000000000..d17139d5a --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleHaschildrenException.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.iam.exception.role; + +import cn.bootx.platform.common.core.exception.BizException; + +import static cn.bootx.platform.iam.code.IamErrorCode.ROLE_HAS_CHILD; + +/** + * 含有下级角色异常 + * @author xxm + * @since 2023/12/5 + */ +public class RoleHaschildrenException extends BizException { + + public RoleHaschildrenException() { + super(ROLE_HAS_CHILD, "该角色下分配了用户,您无法将其删除."); + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleNotExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleNotExistedException.java new file mode 100644 index 000000000..3a4a31223 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/role/RoleNotExistedException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.exception.role; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.ROLE_NOT_EXISTED; + +/** + * 角色不存在 + * + * @author xxm + * @since 2020/5/7 18:04 + */ +public class RoleNotExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = -6651799569179960110L; + + public RoleNotExistedException() { + super(ROLE_NOT_EXISTED, "角色不存在."); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserInfoNotExistsException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserInfoNotExistsException.java new file mode 100644 index 000000000..dbc23d340 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserInfoNotExistsException.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.iam.exception.user; + +import cn.bootx.platform.common.core.exception.FatalException; + +import static cn.bootx.platform.iam.code.IamErrorCode.USER_INFO_NOT_EXISTS; + +/** + * 用户信息不存在异常 + * + * @author xxm + * @since 2020/5/7 18:29 + */ +public class UserInfoNotExistsException extends FatalException { + + public UserInfoNotExistsException() { + super(USER_INFO_NOT_EXISTS, "用户信息不存在"); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserNonePhoneAndEmailException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserNonePhoneAndEmailException.java new file mode 100644 index 000000000..069a7af8f --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserNonePhoneAndEmailException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.exception.user; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.NONE_PHONE_AND_EMAIL; + +/** + * 用户手机号和邮箱不可都为空的异常 + * + * @author xxm + * @since 2020/5/7 18:30 + */ +public class UserNonePhoneAndEmailException extends BizException implements Serializable { + + private static final long serialVersionUID = -6866507370268138197L; + + public UserNonePhoneAndEmailException() { + super(NONE_PHONE_AND_EMAIL, "用户的电话和电子邮件必须包含一个"); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserPhoneAlreadyExistedException.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserPhoneAlreadyExistedException.java new file mode 100644 index 000000000..640193aa8 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/exception/user/UserPhoneAlreadyExistedException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.exception.user; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.iam.code.IamErrorCode.USER_PHONE_ALREADY_EXISTED; + +/** + * 用户手机已存在异常 + * + * @author xxm + * @since 2020/5/7 18:25 + */ +public class UserPhoneAlreadyExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = -8925952529440870552L; + + public UserPhoneAlreadyExistedException() { + super(USER_PHONE_ALREADY_EXISTED, "用户手机已存在"); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/DataPermScopeHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/DataPermScopeHandlerImpl.java new file mode 100644 index 000000000..41855c678 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/DataPermScopeHandlerImpl.java @@ -0,0 +1,42 @@ +package cn.bootx.platform.iam.handler; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.iam.core.upms.service.UserDataRoleService; +import cn.bootx.platform.starter.data.perm.exception.NotLoginPermException; +import cn.bootx.platform.starter.data.perm.local.DataPermContextHolder; +import cn.bootx.platform.starter.data.perm.scope.DataPermScope; +import cn.bootx.platform.starter.data.perm.scope.DataPermScopeHandler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +/** + * 数据权限业务实现 + * + * @author xxm + * @since 2021/12/22 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DataPermScopeHandlerImpl implements DataPermScopeHandler { + + /** + * 需要进行懒加载方式的注入, 因为 DataPermScopeHandler bean创建时机比UserDataScopeService早 + */ + @Lazy + private final UserDataRoleService userDataRoleService; + + /** + * 获取数据权限范围配置 + */ + @Override + public DataPermScope getDataPermScope() { + Long userId = DataPermContextHolder.getUserDetail() + .map(UserDetail::getId) + .orElseThrow(NotLoginPermException::new); + return userDataRoleService.getDataPermScopeByUser(userId); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/IgnorePathRouterCheck.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/IgnorePathRouterCheck.java similarity index 78% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/IgnorePathRouterCheck.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/IgnorePathRouterCheck.java index 46b01375f..4aa3d002c 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/IgnorePathRouterCheck.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/IgnorePathRouterCheck.java @@ -1,8 +1,8 @@ -package cn.bootx.iam.handler; +package cn.bootx.platform.iam.handler; -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.iam.core.permission.service.PermPathService; -import cn.bootx.starter.auth.authentication.RouterCheck; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.common.spring.util.WebServletUtil; +import cn.bootx.platform.iam.core.permission.service.PermPathService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.util.AntPathMatcher; @@ -13,7 +13,7 @@ * 跳过不启用权限控制的路径 * * @author xxm - * @date 2022/5/27 + * @since 2022/5/27 */ @Component @RequiredArgsConstructor diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/PermCodeRouterCheck.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/PermCodeRouterCheck.java new file mode 100644 index 000000000..b9b35a129 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/PermCodeRouterCheck.java @@ -0,0 +1,86 @@ +package cn.bootx.platform.iam.handler; + +import cn.bootx.platform.common.core.annotation.PermCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.starter.auth.entity.UserStatus; +import cn.bootx.platform.starter.auth.service.UserStatusService; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.iam.core.upms.service.RolePermService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * 权限码方式请求路径拦截 + * + * @author xxm + * @since 2023/1/22 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PermCodeRouterCheck implements RouterCheck { + + private final RolePermService rolePermService; + + private final UserStatusService userStatusService; + + /** + * 路由检查 + */ + @Override + public boolean check(Object handler) { + if (handler instanceof HandlerMethod) { + HandlerMethod handlerMethod = (HandlerMethod) handler; + // controller上是否加了权限码鉴权注解 + PermCode permCode = handlerMethod.getBeanType().getAnnotation(PermCode.class); + if (Objects.isNull(permCode)) { + // 方法上上是否加了跳过鉴权注解 + permCode = handlerMethod.getMethodAnnotation(PermCode.class); + } + else { + // controller和方法上都加了跳过鉴权注解,以方法上为准 + PermCode annotation = handlerMethod.getMethodAnnotation(PermCode.class); + if (Objects.nonNull(annotation)) { + permCode = annotation; + } + } + return this.ignoreAuth(permCode); + } + return false; + } + + /** + * 权限码鉴权注解处理 + */ + private boolean ignoreAuth(PermCode permCode) { + // 没有权限码 + if (Objects.isNull(permCode)) { + return false; + } + List permCodes = CollUtil.newArrayList(permCode.value()); + if (CollUtil.isEmpty(permCodes)) { + return false; + } + // 未登录 + Optional UserDetailOpt = SecurityUtil.getCurrentUser(); + if (!UserDetailOpt.isPresent()) { + return false; + } + // 初始密码或者密码过期 + UserStatus userStatus = userStatusService.getUserStatus(); + if (userStatus.isExpirePassword()||userStatus.isInitialPassword()){ + return false; + } + List userPermCodes = rolePermService.findEffectPermCodesByUserId(UserDetailOpt.get().getId()); + return userPermCodes.stream().anyMatch(permCodes::contains); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/SelectFieldPermHandlerImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/SelectFieldPermHandlerImpl.java similarity index 87% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/SelectFieldPermHandlerImpl.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/SelectFieldPermHandlerImpl.java index ec80ecc8e..c6675cbb6 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/SelectFieldPermHandlerImpl.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/SelectFieldPermHandlerImpl.java @@ -1,11 +1,11 @@ -package cn.bootx.iam.handler; +package cn.bootx.platform.iam.handler; -import cn.bootx.common.core.annotation.PermCode; -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.upms.service.RolePermService; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.bootx.starter.data.perm.select.SelectFieldPermHandler; +import cn.bootx.platform.common.core.annotation.PermCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.starter.data.perm.select.SelectFieldPermHandler; +import cn.bootx.platform.iam.core.upms.service.RolePermService; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import lombok.RequiredArgsConstructor; @@ -21,7 +21,7 @@ * 数据字段权限业务逻辑实现 * * @author xxm - * @date 2023/1/22 + * @since 2023/1/22 */ @Slf4j @Component diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java new file mode 100644 index 000000000..03075eb68 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserInfoStatusCheckImpl.java @@ -0,0 +1,94 @@ +package cn.bootx.platform.iam.handler; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.util.LocalDateTimeUtil; +import cn.bootx.platform.iam.code.UserStatusCode; +import cn.bootx.platform.iam.core.security.password.dao.PasswordLoginFailRecordManager; +import cn.bootx.platform.iam.core.security.password.entity.PasswordLoginFailRecord; +import cn.bootx.platform.iam.core.security.password.service.PasswordLoginFailRecordService; +import cn.bootx.platform.iam.core.security.password.service.PasswordSecurityConfigService; +import cn.bootx.platform.iam.core.user.service.UserAdminService; +import cn.bootx.platform.iam.dto.security.PasswordSecurityConfigDto; +import cn.bootx.platform.starter.auth.authentication.UserInfoStatusCheck; +import cn.bootx.platform.starter.auth.configuration.AuthProperties; +import cn.bootx.platform.starter.auth.entity.AuthClient; +import cn.bootx.platform.starter.auth.entity.AuthInfoResult; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import cn.bootx.platform.starter.auth.exception.LoginFailureException; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + +/** + * 用户状态检查实现类 + * @author xxm + * @since 2023/9/21 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class UserInfoStatusCheckImpl implements UserInfoStatusCheck { + private final PasswordLoginFailRecordManager loginFailRecordManager; + private final PasswordLoginFailRecordService loginFailRecordService; + private final PasswordSecurityConfigService securityConfigService; + private final UserAdminService userAdminService; + + /** + * 检查用户状态 + * @param authInfoResult 认证返回结果 + * @param context 登录认证上下文 + */ + @Override + public void check(AuthInfoResult authInfoResult, LoginAuthContext context) { + UserDetail userDetail = authInfoResult.getUserDetail(); + AuthClient authClient = context.getAuthClient(); + AuthProperties authProperties = context.getAuthProperties(); + // 判断是否开启了超级管理员 + if (!authProperties.isEnableAdmin() && userDetail.isAdmin()) { + throw new LoginFailureException("未开启超级管理员权限"); + } + // 管理员跳过各种限制 + if (userDetail.isAdmin()) { + return; + } + // 判断用户是否拥有认证应用的权限 + if (!userDetail.getClientIds().contains(authClient.getId())) { + throw new LoginFailureException("该用户不拥有该终端的权限"); + } + // 判断用户是否被禁用 + if (Objects.equals(userDetail.getStatus(), UserStatusCode.BAN)){ + throw new LoginFailureException("该用户已被禁用"); + } + + // 密码是否因为错误被锁定 + if (Objects.equals(userDetail.getStatus(), UserStatusCode.LOCK)){ + this.checkLock(userDetail); + } + } + + /** + * 密码是否因为错误被锁定, 同时处理锁定结束, 解锁用户 + */ + private void checkLock(UserDetail userDetail){ + PasswordSecurityConfigDto securityConfig = securityConfigService.getDefault(); + PasswordLoginFailRecord loginFailRecord = loginFailRecordManager.findByUserId(userDetail.getId()) + .orElse(null); + if (Objects.isNull(loginFailRecord)){ + throw new LoginFailureException("该用户已被锁定,请联系管理员进行解锁"); + } + // 判断锁定时间是否已经结束, 结束了就清空错误次数, 并对用户进行解锁 + LocalDateTime failOverTime = LocalDateTimeUtil.offset(loginFailRecord.getFailTime(), securityConfig.getErrorLockTime(), ChronoUnit.MINUTES); + long seconds = LocalDateTimeUtil.between(LocalDateTime.now(), failOverTime, ChronoUnit.SECONDS); + if (seconds>0){ + loginFailRecordService.clearFailCount(userDetail.getId()); + userAdminService.unlock(seconds); + } else { + throw new LoginFailureException(StrUtil.format("该用户已被锁定,请 {} 秒后再试",seconds)); + } + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserPathRouterCheck.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserPathRouterCheck.java new file mode 100644 index 000000000..ce9cddcd4 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserPathRouterCheck.java @@ -0,0 +1,57 @@ +package cn.bootx.platform.iam.handler; + +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.spring.util.WebServletUtil; +import cn.bootx.platform.iam.core.upms.service.RolePathService; +import cn.bootx.platform.starter.auth.entity.UserStatus; +import cn.bootx.platform.starter.auth.service.RouterCheck; +import cn.bootx.platform.starter.auth.service.UserStatusService; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; + +import java.util.List; +import java.util.Optional; + +/** + * 用户路径路由拦截 + * + * @author xxm + * @since 2021/12/21 + */ +@Component +@RequiredArgsConstructor +public class UserPathRouterCheck implements RouterCheck { + + private final RolePathService rolePathService; + + private final UserStatusService userStatusService; + + private final AntPathMatcher matcher = new AntPathMatcher(); + + @Override + public int sortNo() { + return 10; + } + + @Override + public boolean check(Object handler) { + String method = WebServletUtil.getMethod(); + String path = WebServletUtil.getPath(); + + Optional UserDetailOpt = SecurityUtil.getCurrentUser(); + if (!UserDetailOpt.isPresent()) { + return false; + } + // 初始密码或者密码过期 + UserStatus userStatus = userStatusService.getUserStatus(); + if (userStatus.isExpirePassword()||userStatus.isInitialPassword()){ + return false; + } + UserDetail userDetail = UserDetailOpt.get(); + List paths = rolePathService.findSimplePathsByUser(method, userDetail.getId()); + return paths.stream().anyMatch(pattern -> matcher.match(pattern, path)); + } + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserStatusServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserStatusServiceImpl.java new file mode 100644 index 000000000..7da2eb01b --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/UserStatusServiceImpl.java @@ -0,0 +1,43 @@ +package cn.bootx.platform.iam.handler; + +import cn.bootx.platform.iam.core.user.dao.UserExpandInfoManager; +import cn.bootx.platform.iam.core.user.entity.UserExpandInfo; +import cn.bootx.platform.iam.exception.user.UserInfoNotExistsException; +import cn.bootx.platform.starter.auth.cache.SessionCacheLocal; +import cn.bootx.platform.starter.auth.entity.UserStatus; +import cn.bootx.platform.starter.auth.service.UserStatusService; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * 用户状态获取实现类 + * @author xxm + * @since 2023/11/25 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserStatusServiceImpl implements UserStatusService { + + private final UserExpandInfoManager userExpandInfoManager; + + /** + * 获取用户状态 + */ + @Override + public UserStatus getUserStatus(){ + UserStatus userStatus = SessionCacheLocal.getUserStatusContext(); + if (Objects.isNull(userStatus)){ + UserExpandInfo userExpandInfo = userExpandInfoManager.findById(SecurityUtil.getUserId()).orElseThrow(UserInfoNotExistsException::new); + userStatus = new UserStatus() + .setExpirePassword(userExpandInfo.isExpirePassword()) + .setInitialPassword(userExpandInfo.isInitialPassword()); + SessionCacheLocal.putUserStatus(userStatus); + } + return userStatus; + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/WsUserAuthServiceImpl.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/WsUserAuthServiceImpl.java similarity index 82% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/WsUserAuthServiceImpl.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/WsUserAuthServiceImpl.java index ff3925ed7..30e83067e 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/handler/WsUserAuthServiceImpl.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/handler/WsUserAuthServiceImpl.java @@ -1,6 +1,6 @@ -package cn.bootx.iam.handler; +package cn.bootx.platform.iam.handler; -import cn.bootx.common.websocket.func.WsUserAuthService; +import cn.bootx.platform.common.websocket.func.WsUserAuthService; import cn.dev33.satoken.stp.StpUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -12,7 +12,7 @@ * websocket 用户认证接口实现 * * @author xxm - * @date 2022/6/9 + * @since 2022/6/9 */ @Slf4j @Component diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/auth/LoginContentParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/auth/LoginContentParam.java new file mode 100644 index 000000000..7f3c96709 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/auth/LoginContentParam.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.param.auth; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 前端登录页信息 + * @author xxm + * @since 2023/8/17 + */ +@Data +@Accessors(chain = true) +@Schema(title = "登录页信息") +public class LoginContentParam { + + @Schema(description = "终端Code") + private String clientId; + + @Schema(description = "账号") + private String username; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/ClientParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/ClientParam.java similarity index 80% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/ClientParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/ClientParam.java index a8e3d7116..7bc90013a 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/ClientParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/ClientParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.client; +package cn.bootx.platform.iam.param.client; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 认证应用 * * @author xxm - * @date 2022-06-27 + * @since 2022-06-27 */ @Data @Schema(title = "认证应用") @@ -32,10 +32,13 @@ public class ClientParam { @Schema(description = "是否可用") private Boolean enable; + @Schema(description = "新注册的用户是否默认赋予该终端") + private Boolean defaultEndow; + @Schema(description = "关联终端") private List loginTypeIdList; @Schema(description = "描述") private String description; -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/LoginTypeParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/LoginTypeParam.java similarity index 93% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/LoginTypeParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/LoginTypeParam.java index 779bce3d3..63bf49041 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/client/LoginTypeParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/client/LoginTypeParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.client; +package cn.bootx.platform.iam.param.client; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 认证终端 * * @author xxm - * @date 2021/8/25 + * @since 2021/8/25 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/dept/DeptParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/dept/DeptParam.java similarity index 93% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/dept/DeptParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/dept/DeptParam.java index c2d8ff3f1..f87f3d2a8 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/dept/DeptParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/dept/DeptParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.dept; +package cn.bootx.platform.iam.param.dept; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2020/5/7 18:29 + * @since 2020/5/7 18:29 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermMenuParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermMenuParam.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermMenuParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermMenuParam.java index 20ede5de5..00666d65c 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermMenuParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermMenuParam.java @@ -1,7 +1,6 @@ -package cn.bootx.iam.param.permission; +package cn.bootx.platform.iam.param.permission; -import cn.bootx.common.core.validation.ValidationGroup; -import cn.bootx.common.core.validation.ValidationGroup.edit; +import cn.bootx.platform.common.core.validation.ValidationGroup; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -13,7 +12,7 @@ /** * @author xxm - * @date 2021/7/12 + * @since 2021/7/12 */ @Data @Accessors(chain = true) @@ -22,7 +21,7 @@ public class PermMenuParam implements Serializable { private static final long serialVersionUID = 3017200753543614579L; - @Null(groups = { edit.class }) + @Null(groups = { ValidationGroup.edit.class }) @NotNull(groups = { ValidationGroup.add.class }) @Schema(description = "主键") private Long id; @@ -30,7 +29,7 @@ public class PermMenuParam implements Serializable { @Schema(description = "父id") private Long parentId; - @NotEmpty(groups = { ValidationGroup.add.class, edit.class }) + @NotEmpty(groups = { ValidationGroup.add.class, ValidationGroup.edit.class }) @Schema(description = "关联应用code") private String clientCode; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathBatchEnableParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathBatchEnableParam.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathBatchEnableParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathBatchEnableParam.java index dcbf8619f..a7124555e 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathBatchEnableParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathBatchEnableParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.permission; +package cn.bootx.platform.iam.param.permission; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,7 +11,7 @@ * 请求权限批量启停用 * * @author xxm - * @date 2022/6/6 + * @since 2022/6/6 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathParam.java similarity index 92% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathParam.java index fc386ef5b..0cbe67388 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/permission/PermPathParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/permission/PermPathParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.permission; +package cn.bootx.platform.iam.param.permission; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2021/6/16 + * @since 2021/6/16 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/role/RoleParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/role/RoleParam.java similarity index 79% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/role/RoleParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/role/RoleParam.java index f1df483ef..2de329db0 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/role/RoleParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/role/RoleParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.role; +package cn.bootx.platform.iam.param.role; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -6,7 +6,7 @@ /** * @author xxm - * @date 2021/6/17 + * @since 2021/6/17 */ @Data @Accessors(chain = true) @@ -22,6 +22,9 @@ public class RoleParam { @Schema(description = "角色名称") private String name; + @Schema(description = "父级Id") + private Long pid; + @Schema(description = "描述") private String remark; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleDeptParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleDeptParam.java new file mode 100644 index 000000000..27a65c697 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleDeptParam.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.param.scope; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author xxm + * @since 2021/12/24 + */ +@Data +@Accessors(chain = true) +@Schema(title = "部门范围") +public class DataRoleDeptParam { + + @Schema(description = "数据角色id") + private Long dataRoleId; + + @Schema(description = "部门id集合") + private List deptIds; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleParam.java new file mode 100644 index 000000000..a434c62f3 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleParam.java @@ -0,0 +1,31 @@ +package cn.bootx.platform.iam.param.scope; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2021/12/24 + */ +@Data +@Accessors(chain = true) +@Schema(title = "数据角色") +public class DataRoleParam { + + @Schema(description = "主键") + private Long id; + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "类型") + private String type; + + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleUserParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleUserParam.java new file mode 100644 index 000000000..0d43e1b13 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/scope/DataRoleUserParam.java @@ -0,0 +1,24 @@ +package cn.bootx.platform.iam.param.scope; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author xxm + * @since 2021/12/24 + */ +@Data +@Accessors(chain = true) +@Schema(title = "部门范围") +public class DataRoleUserParam { + + @Schema(description = "数据角色id") + private Long dataRoleId; + + @Schema(description = "用户id") + private List userIds; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/LoginSecurityConfigParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/LoginSecurityConfigParam.java new file mode 100644 index 000000000..68316a4ae --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/LoginSecurityConfigParam.java @@ -0,0 +1,41 @@ +package cn.bootx.platform.iam.param.security; + +import cn.bootx.platform.common.core.annotation.QueryParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 登录安全策略 + * @author xxm + * @since 2023-09-19 + */ +@QueryParam(type = QueryParam.CompareTypeEnum.LIKE) +@Data +@Schema(title = "登录安全策略") +@Accessors(chain = true) +public class LoginSecurityConfigParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "关联终端ID") + private Long clientId; + @Schema(description = "最大密码错误数") + private Integer maxPwdErrorCount; + @Schema(description = "密码错误锁定时间(秒)") + private Integer errorLockTime; + @Schema(description = "") + private Boolean requireChangePwd; + @Schema(description = "修改密码是否需要重新登录") + private Boolean requireLoginChangePwd; + @Schema(description = "默认启用验证码") + private Boolean captchaEnable; + @Schema(description = "出现验证码的错误次数") + private Integer maxCaptchaErrorCount; + @Schema(description = "同端是否允许同时登录") + private Boolean allowMultiLogin; + @Schema(description = "多终端是否允许同时登录") + private Boolean allowMultiTerminalLogin; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/PasswordSecurityConfigParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/PasswordSecurityConfigParam.java new file mode 100644 index 000000000..cc3983635 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/security/PasswordSecurityConfigParam.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.iam.param.security; + +import cn.bootx.platform.common.core.annotation.QueryParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 密码安全策略 + * @author xxm + * @since 2023-09-20 + */ +@QueryParam(type = QueryParam.CompareTypeEnum.LIKE) +@Data +@Schema(title = "密码安全策略") +@Accessors(chain = true) +public class PasswordSecurityConfigParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "最大密码错误数") + private int maxPwdErrorCount; + @Schema(description = "密码错误锁定时间(分钟)") + private int errorLockTime; + @Schema(description = "强制修改初始密码") + private boolean requireChangePwd; + @Schema(description = "更新频率") + private int updateFrequency; + @Schema(description = "到期提醒(天数)") + private int expireRemind; + @Schema(description = "与登录名相同") + private boolean sameAsLoginName; + @Schema(description = "不能与近期多少次密码相同") + private int recentPassword; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/RolePermissionParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/RolePermissionParam.java new file mode 100644 index 000000000..f9a0ca973 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/RolePermissionParam.java @@ -0,0 +1,42 @@ +package cn.bootx.platform.iam.param.upms; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * @author xxm + * @since 2021/6/9 + */ +@Data +@Accessors(chain = true) +@Schema(title = "角色权限(菜单/权限码/请求)") +public class RolePermissionParam implements Serializable { + + private static final long serialVersionUID = 4344723093613370279L; + + @Schema(description = "角色的ID") + @NotNull(message = "角色不可为空") + private Long roleId; + + @Schema(description = "终端code") + @NotBlank(message = "终端不可为空", groups = {PermMenu.class}) + private String clientCode; + + @Schema(description = "权限id") + private List permissionIds; + + @Schema(description = "新增时是否更新子节点") + private boolean updateChildren; + + /** + * 菜单权限需要终端, 请求权限不需要 + */ + public interface PermMenu {} + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleBatchParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleBatchParam.java new file mode 100644 index 000000000..1dec8937d --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleBatchParam.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.iam.param.upms; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; + +/** + * @author xxm + * @since 2022/6/7 + */ +@Data +@Schema(title = "用户数据权限批量设置参数") +public class UserDataRoleBatchParam { + + @Schema(description = "用户的ID", requiredMode = REQUIRED) + @NotEmpty(message = "用户集合不能为空") + private List userIds; + + @Schema(description = "数据角色ID", requiredMode = REQUIRED) + private Long dataRoleId; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleParam.java new file mode 100644 index 000000000..67a6258bd --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserDataRoleParam.java @@ -0,0 +1,25 @@ +package cn.bootx.platform.iam.param.upms; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; + +/** + * @author xxm + * @since 2022/1/2 + */ +@Data +@Schema(title = "用户数据权限参数") +public class UserDataRoleParam { + + @Schema(description = "用户的ID", requiredMode = REQUIRED) + @NotNull(message = "用户ID不能为空") + private Long userId; + + @Schema(description = "数据角色ID", requiredMode = REQUIRED) + private Long dataRoleId; + +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleBatchParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleBatchParam.java similarity index 87% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleBatchParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleBatchParam.java index 70ab39f44..00f8b3b3d 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleBatchParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleBatchParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.upms; +package cn.bootx.platform.iam.param.upms; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2020/5/1 18:10 + * @since 2020/5/1 18:10 */ @Data @Schema(title = "用户角色参数") diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleParam.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleParam.java index 1cefe8158..c6c838d94 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/upms/UserRoleParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/upms/UserRoleParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.upms; +package cn.bootx.platform.iam.param.upms; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2020/5/1 18:10 + * @since 2020/5/1 18:10 */ @Data @Schema(title = "用户角色参数") diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBaseInfoParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBaseInfoParam.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBaseInfoParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBaseInfoParam.java index 6f51d56b6..90a1f00dd 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBaseInfoParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBaseInfoParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBindThirdParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBindThirdParam.java similarity index 92% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBindThirdParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBindThirdParam.java index d4b07d412..caac0efe0 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserBindThirdParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserBindThirdParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 用户绑定第三方开放平台参数 * * @author xxm - * @date 2022/7/2 + * @since 2022/7/2 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangeEmailParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangeEmailParam.java similarity index 92% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangeEmailParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangeEmailParam.java index fd3e955e8..e9dc676e2 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangeEmailParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangeEmailParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,7 +11,7 @@ * 用户修改邮箱参数 * * @author xxm - * @date 2022/6/19 + * @since 2022/6/19 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangePhoneParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangePhoneParam.java similarity index 92% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangePhoneParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangePhoneParam.java index 014977eaf..0479d3189 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserChangePhoneParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserChangePhoneParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 用户修改手机号参数 * * @author xxm - * @date 2022/6/19 + * @since 2022/6/19 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptBatchParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptBatchParam.java similarity index 89% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptBatchParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptBatchParam.java index 9c4127119..4c38a032e 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptBatchParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptBatchParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptParam.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptParam.java index ef439cbf9..f5272b2c4 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserDeptParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserDeptParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2021/9/29 + * @since 2021/9/29 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserExpandInfoParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserExpandInfoParam.java similarity index 88% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserExpandInfoParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserExpandInfoParam.java index 16963a6e4..c666b4ce4 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserExpandInfoParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserExpandInfoParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2022/1/8 + * @since 2022/1/8 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetEmailParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetEmailParam.java similarity index 92% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetEmailParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetEmailParam.java index 989b03e33..ae28f4e84 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetEmailParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetEmailParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,7 +11,7 @@ * 通过邮件验证码忘记密码参数 * * @author xxm - * @date 2022/6/26 + * @since 2022/6/26 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetPhoneParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetPhoneParam.java similarity index 91% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetPhoneParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetPhoneParam.java index 3f63251f0..2e56662d7 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserForgetPhoneParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserForgetPhoneParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 通过手机验证码忘记密码参数 * * @author xxm - * @date 2022/6/26 + * @since 2022/6/26 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserInfoParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserInfoParam.java similarity index 90% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserInfoParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserInfoParam.java index a599ad4a0..24ce2d3e9 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserInfoParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserInfoParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2021/6/2 + * @since 2021/6/2 */ @Data @Accessors(chain = true) @@ -34,7 +34,7 @@ public class UserInfoParam implements Serializable { private String email; @Schema(description = "终端id列表") - private List clientIdList; + private List clientIds; @Schema(description = "头像") private String avatar; diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserRegisterParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserRegisterParam.java similarity index 91% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserRegisterParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserRegisterParam.java index 42dc0c71f..e94833f10 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserRegisterParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserRegisterParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 注册用户参数 * * @author xxm - * @date 2022/6/26 + * @since 2022/6/26 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserThirdInfoParam.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserThirdInfoParam.java similarity index 91% rename from bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserThirdInfoParam.java rename to bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserThirdInfoParam.java index 4d1bb56c8..20940d040 100644 --- a/bootx-services/service-iam/src/main/java/cn/bootx/iam/param/user/UserThirdInfoParam.java +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/param/user/UserThirdInfoParam.java @@ -1,4 +1,4 @@ -package cn.bootx.iam.param.user; +package cn.bootx.platform.iam.param.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 用户三方登录绑定详情 * * @author xxm - * @date 2022-07-02 + * @since 2022-07-02 */ @Data @Schema(title = "用户三方登录绑定详情") @@ -33,4 +33,4 @@ public class UserThirdInfoParam { @Schema(description = "用户头像") private String avatar; -} \ No newline at end of file +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/CheckPasswordExpireTask.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/CheckPasswordExpireTask.java new file mode 100644 index 000000000..25f02931b --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/CheckPasswordExpireTask.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.iam.task; + +import cn.bootx.platform.iam.core.user.service.UserInfoService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.stereotype.Service; + +/** + * 密码过期检查任务 + * @author xxm + * @since 2023/11/25 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CheckPasswordExpireTask implements Job { + private final UserInfoService userInfoService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + + } +} diff --git a/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/UserUnlockTask.java b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/UserUnlockTask.java new file mode 100644 index 000000000..a500f08a2 --- /dev/null +++ b/bootx-services/service-iam/src/main/java/cn/bootx/platform/iam/task/UserUnlockTask.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.iam.task; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.stereotype.Service; + +/** + * 用户解除锁定任务 + * @author xxm + * @since 2023/11/25 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserUnlockTask implements Job { + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + + } +} diff --git a/bootx-services/service-iam/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-iam/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 693087320..031ecddb5 100644 --- a/bootx-services/service-iam/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-services/service-iam/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.iam.IamApplication \ No newline at end of file +cn.bootx.platform.iam.IamApplication diff --git a/bootx-services/service-iam/src/main/resources/mapper/PermPathMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/PermPathMapper.xml index 8b992b9eb..2d8dea07a 100644 --- a/bootx-services/service-iam/src/main/resources/mapper/PermPathMapper.xml +++ b/bootx-services/service-iam/src/main/resources/mapper/PermPathMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO iam_perm_path @@ -27,4 +27,4 @@ - \ No newline at end of file + diff --git a/bootx-services/service-iam/src/main/resources/mapper/RoleMenuMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/RoleMenuMapper.xml index d6b2dc7d2..6fc319aba 100644 --- a/bootx-services/service-iam/src/main/resources/mapper/RoleMenuMapper.xml +++ b/bootx-services/service-iam/src/main/resources/mapper/RoleMenuMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO iam_role_menu @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/bootx-services/service-iam/src/main/resources/mapper/RolePathMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/RolePathMapper.xml index 334870b68..bb98be3b1 100644 --- a/bootx-services/service-iam/src/main/resources/mapper/RolePathMapper.xml +++ b/bootx-services/service-iam/src/main/resources/mapper/RolePathMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO iam_role_path @@ -15,4 +15,4 @@ - \ No newline at end of file + diff --git a/bootx-services/service-iam/src/main/resources/mapper/UserDataRoleMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/UserDataRoleMapper.xml new file mode 100644 index 000000000..4e7fbb134 --- /dev/null +++ b/bootx-services/service-iam/src/main/resources/mapper/UserDataRoleMapper.xml @@ -0,0 +1,17 @@ + + + + + + INSERT INTO iam_user_data_role + (id, user_id, data_role_id) + values + + ( + #{o.id}, + #{o.userId}, + #{o.dataRoleId} + ) + + + diff --git a/bootx-services/service-iam/src/main/resources/mapper/UserDataScopeMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/UserDataScopeMapper.xml deleted file mode 100644 index 6eb03de71..000000000 --- a/bootx-services/service-iam/src/main/resources/mapper/UserDataScopeMapper.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - INSERT INTO iam_user_data_scope - (id, user_id, data_scope_id) - values - - ( - #{o.id}, - #{o.userId}, - #{o.dataScopeId} - ) - - - \ No newline at end of file diff --git a/bootx-services/service-iam/src/main/resources/mapper/UserDeptMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/UserDeptMapper.xml index 38d71f3d2..0b5815bb5 100644 --- a/bootx-services/service-iam/src/main/resources/mapper/UserDeptMapper.xml +++ b/bootx-services/service-iam/src/main/resources/mapper/UserDeptMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO iam_user_dept @@ -14,4 +14,4 @@ ) - \ No newline at end of file + diff --git a/bootx-services/service-iam/src/main/resources/mapper/UserRoleMapper.xml b/bootx-services/service-iam/src/main/resources/mapper/UserRoleMapper.xml index be9fab6b4..32c19388b 100644 --- a/bootx-services/service-iam/src/main/resources/mapper/UserRoleMapper.xml +++ b/bootx-services/service-iam/src/main/resources/mapper/UserRoleMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO iam_user_role @@ -14,4 +14,4 @@ ) - \ No newline at end of file + diff --git a/bootx-services/service-miniapp/pom.xml b/bootx-services/service-miniapp/pom.xml new file mode 100644 index 000000000..0cc58cf9d --- /dev/null +++ b/bootx-services/service-miniapp/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + cn.bootx.platform + bootx-services + 1.3.6.2 + + + service-miniapp + + + + + com.mysql + mysql-connector-j + runtime + + + + + com.baomidou + mybatis-plus-boot-starter + + + + + cn.bootx.platform + common-starter-auth + + + + + cn.bootx.platform + common-starter-audit-log + + + + cn.bootx.platform + common-super-query + + + + + cn.bootx.platform + service-baseapi + ${bootx-platform.version} + + + + diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/MiniAppApplication.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/MiniAppApplication.java new file mode 100644 index 000000000..16fe14e9b --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/MiniAppApplication.java @@ -0,0 +1,15 @@ +package cn.bootx.platform.miniapp; + +import org.apache.ibatis.annotations.Mapper; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.ComponentScan; + +/** + * 微信小程序 + * @author xxm + * @since 2023/8/2 + */ +@ComponentScan +@MapperScan(annotationClass = Mapper.class) +public class MiniAppApplication { +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/FeedbackInfoController.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/FeedbackInfoController.java new file mode 100644 index 000000000..ed195a6a5 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/FeedbackInfoController.java @@ -0,0 +1,81 @@ +package cn.bootx.platform.miniapp.controller; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.miniapp.core.feedback.service.FeedbackInfoService; +import cn.bootx.platform.miniapp.dto.feedback.FeedbackInfoDto; +import cn.bootx.platform.miniapp.param.feedback.FeedbackInfoParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Tag(name ="用户反馈信息") +@RestController +@RequestMapping("/feedback") +@RequiredArgsConstructor +public class FeedbackInfoController { + private final FeedbackInfoService feedbackInfoService; + + @Operation( summary = "添加") + @PostMapping(value = "/add") + public ResResult add(@Validated @RequestBody FeedbackInfoParam param, BindingResult bindingResult){ + if (bindingResult.hasErrors()){ + throw new BizException("参数绑定异常"); + } + feedbackInfoService.add(param); + return Res.ok(); + } + + @Operation( summary = "修改") + @PostMapping(value = "/update") + public ResResult update(@RequestBody FeedbackInfoParam param){ + feedbackInfoService.update(param); + return Res.ok(); + } + + @Operation( summary = "删除") + @DeleteMapping(value = "/delete") + public ResResult delete(Long id){ + feedbackInfoService.delete(id); + return Res.ok(); + } + + @Operation(summary = "批量删除") + @DeleteMapping("/deleteBatch") + public ResResult deleteBatch(@RequestBody List ids) { + feedbackInfoService.deleteBatch(ids); + return Res.ok(); + } + + @Operation( summary = "通过ID查询") + @GetMapping(value = "/findById") + public ResResult findById(Long id){ + return Res.ok(feedbackInfoService.findById(id)); + } + + @Operation( summary = "查询所有") + @GetMapping(value = "/findAll") + public ResResult> findAll(){ + return Res.ok(feedbackInfoService.findAll()); + } + + @Operation( summary = "分页查询") + @GetMapping(value = "/page") + public ResResult> page(PageParam pageParam, FeedbackInfoParam query){ + return Res.ok(feedbackInfoService.page(pageParam,query)); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/UserProtocolController.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/UserProtocolController.java new file mode 100644 index 000000000..cc45f6ca1 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/controller/UserProtocolController.java @@ -0,0 +1,67 @@ +package cn.bootx.platform.miniapp.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.miniapp.core.protocol.service.UserProtocolService; +import cn.bootx.platform.miniapp.dto.protocol.UserProtocolDto; +import cn.bootx.platform.miniapp.param.protocol.UserProtocolParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Tag(name ="用户协议") +@RestController +@RequestMapping("/user/protocol") +@RequiredArgsConstructor +public class UserProtocolController { + private final UserProtocolService userProtocolService; + + @Operation( summary = "添加") + @PostMapping(value = "/add") + public ResResult add(@RequestBody UserProtocolParam param){ + userProtocolService.add(param); + return Res.ok(); + } + + @Operation( summary = "修改") + @PostMapping(value = "/update") + public ResResult update(@RequestBody UserProtocolParam param){ + userProtocolService.update(param); + return Res.ok(); + } + + @Operation( summary = "删除") + @DeleteMapping(value = "/delete") + public ResResult delete(Long id){ + userProtocolService.delete(id); + return Res.ok(); + } + + @Operation( summary = "通过ID查询") + @GetMapping(value = "/findById") + public ResResult findById(Long id){ + return Res.ok(userProtocolService.findById(id)); + } + + @Operation( summary = "查询所有") + @GetMapping(value = "/findAll") + public ResResult> findAll(){ + return Res.ok(userProtocolService.findAll()); + } + + @Operation( summary = "分页查询") + @GetMapping(value = "/page") + public ResResult> page(PageParam pageParam, UserProtocolParam userProtocolParam){ + return Res.ok(userProtocolService.page(pageParam,userProtocolParam)); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/convert/FeedbackInfoConvert.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/convert/FeedbackInfoConvert.java new file mode 100644 index 000000000..8281bfad0 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/convert/FeedbackInfoConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.miniapp.core.feedback.convert; + +import cn.bootx.platform.miniapp.core.feedback.entity.FeedbackInfo; +import cn.bootx.platform.miniapp.dto.feedback.FeedbackInfoDto; +import cn.bootx.platform.miniapp.param.feedback.FeedbackInfoParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Mapper +public interface FeedbackInfoConvert { + FeedbackInfoConvert CONVERT = Mappers.getMapper(FeedbackInfoConvert.class); + + FeedbackInfo convert(FeedbackInfoParam in); + + FeedbackInfoDto convert(FeedbackInfo in); + +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoManager.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoManager.java new file mode 100644 index 000000000..1dcbd8b68 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoManager.java @@ -0,0 +1,33 @@ +package cn.bootx.platform.miniapp.core.feedback.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import cn.bootx.platform.miniapp.core.feedback.entity.FeedbackInfo; +import cn.bootx.platform.miniapp.param.feedback.FeedbackInfoParam; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Repository +@RequiredArgsConstructor +public class FeedbackInfoManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, FeedbackInfoParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, FeedbackInfo.class); + QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(FeedbackInfo::getId)); + return this.page(mpPage,wrapper); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoMapper.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoMapper.java new file mode 100644 index 000000000..17534f6c5 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/dao/FeedbackInfoMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.miniapp.core.feedback.dao; + +import cn.bootx.platform.miniapp.core.feedback.entity.FeedbackInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Mapper +public interface FeedbackInfoMapper extends BaseMapper { +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/entity/FeedbackInfo.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/entity/FeedbackInfo.java new file mode 100644 index 000000000..b1ed92f93 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/entity/FeedbackInfo.java @@ -0,0 +1,62 @@ +package cn.bootx.platform.miniapp.core.feedback.entity; + +import cn.bootx.table.modify.annotation.DbComment; +import cn.bootx.table.modify.annotation.DbTable; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.miniapp.core.feedback.convert.FeedbackInfoConvert; +import cn.bootx.platform.miniapp.dto.feedback.FeedbackInfoDto; +import cn.bootx.platform.miniapp.param.feedback.FeedbackInfoParam; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023/8/15 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("miniapp_feedback_info") +public class FeedbackInfo extends MpBaseEntity implements EntityBaseFunction { + + /** 问题分类 */ + @DbComment("问题分类") + private String classify; + + /** 时间 */ + @DbComment("时间") + private LocalDateTime time; + + /** 联系方式 */ + @DbComment("联系方式") + private String contact; + + /** 姓名 */ + @DbComment("姓名") + private String name; + + /** 反馈用户ID */ + @DbComment("反馈用户ID") + private Long userId; + + /** 内容 */ + @DbComment("内容") + private String content; + + /** 创建对象 */ + public static FeedbackInfo init(FeedbackInfoParam in) { + return FeedbackInfoConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public FeedbackInfoDto toDto() { + return FeedbackInfoConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/service/FeedbackInfoService.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/service/FeedbackInfoService.java new file mode 100644 index 000000000..d1e665333 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/feedback/service/FeedbackInfoService.java @@ -0,0 +1,84 @@ +package cn.bootx.platform.miniapp.core.feedback.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.miniapp.core.feedback.dao.FeedbackInfoManager; +import cn.bootx.platform.miniapp.core.feedback.entity.FeedbackInfo; +import cn.bootx.platform.miniapp.dto.feedback.FeedbackInfoDto; +import cn.bootx.platform.miniapp.param.feedback.FeedbackInfoParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class FeedbackInfoService { + private final FeedbackInfoManager feedbackInfoManager; + + /** + * 添加 + */ + public void add(FeedbackInfoParam param){ + FeedbackInfo feedbackInfo = FeedbackInfo.init(param); + feedbackInfoManager.save(feedbackInfo); + } + + /** + * 修改 + */ + public void update(FeedbackInfoParam param){ + FeedbackInfo feedbackInfo = feedbackInfoManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + + BeanUtil.copyProperties(param,feedbackInfo, CopyOptions.create().ignoreNullValue()); + feedbackInfoManager.updateById(feedbackInfo); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam,FeedbackInfoParam query){ + return MpUtil.convert2DtoPageResult(feedbackInfoManager.page(pageParam,query)); + } + + /** + * 获取单条 + */ + public FeedbackInfoDto findById(Long id){ + return feedbackInfoManager.findById(id).map(FeedbackInfo::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取全部 + */ + public List findAll(){ + return ResultConvertUtil.dtoListConvert(feedbackInfoManager.findAll()); + } + + /** + * 删除 + */ + public void delete(Long id){ + feedbackInfoManager.deleteById(id); + } + + + /** + * 批量删除 + */ + public void deleteBatch(List ids){ + feedbackInfoManager.deleteByIds(ids); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/convert/UserProtocolConvert.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/convert/UserProtocolConvert.java new file mode 100644 index 000000000..00670e764 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/convert/UserProtocolConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.miniapp.core.protocol.convert; + +import cn.bootx.platform.miniapp.core.protocol.entity.UserProtocol; +import cn.bootx.platform.miniapp.dto.protocol.UserProtocolDto; +import cn.bootx.platform.miniapp.param.protocol.UserProtocolParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Mapper +public interface UserProtocolConvert { + UserProtocolConvert CONVERT = Mappers.getMapper(UserProtocolConvert.class); + + UserProtocol convert(UserProtocolParam in); + + UserProtocolDto convert(UserProtocol in); + +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolManager.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolManager.java new file mode 100644 index 000000000..b5f0928ea --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolManager.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.miniapp.core.protocol.dao; + +import cn.bootx.platform.miniapp.param.protocol.UserProtocolParam; +import cn.bootx.platform.miniapp.core.protocol.entity.UserProtocol; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Repository +@RequiredArgsConstructor +public class UserProtocolManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, UserProtocolParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, UserProtocol.class); + QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(UserProtocol::getId)); + return this.page(mpPage,wrapper); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolMapper.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolMapper.java new file mode 100644 index 000000000..23fe1e652 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/dao/UserProtocolMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.miniapp.core.protocol.dao; + +import cn.bootx.platform.miniapp.core.protocol.entity.UserProtocol; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Mapper +public interface UserProtocolMapper extends BaseMapper { +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/entity/UserProtocol.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/entity/UserProtocol.java new file mode 100644 index 000000000..9c2064a7c --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/entity/UserProtocol.java @@ -0,0 +1,48 @@ +package cn.bootx.platform.miniapp.core.protocol.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.miniapp.core.protocol.convert.UserProtocolConvert; +import cn.bootx.platform.miniapp.dto.protocol.UserProtocolDto; +import cn.bootx.platform.miniapp.param.protocol.UserProtocolParam; +import cn.bootx.table.modify.annotation.DbColumn; +import cn.bootx.table.modify.mysql.annotation.DbMySqlFieldType; +import cn.bootx.table.modify.mysql.constants.MySqlFieldTypeEnum; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** +* 用户协议 +* @author xxm +* @since 2023-08-02 +*/ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("miniapp_user_protocol") +public class UserProtocol extends MpBaseEntity implements EntityBaseFunction{ + + /** 编码 */ + @DbColumn(comment = "编码") + private String code; + /** 内容 */ + @DbColumn(comment = "内容") + @DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT) + private String content; + /** 备注 */ + @DbColumn(comment = "备注") + private String remark; + + /** 创建对象 */ + public static UserProtocol init(UserProtocolParam in) { + return UserProtocolConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public UserProtocolDto toDto() { + return UserProtocolConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/service/UserProtocolService.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/service/UserProtocolService.java new file mode 100644 index 000000000..1d43b0a03 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/core/protocol/service/UserProtocolService.java @@ -0,0 +1,76 @@ +package cn.bootx.platform.miniapp.core.protocol.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.miniapp.core.protocol.dao.UserProtocolManager; +import cn.bootx.platform.miniapp.core.protocol.entity.UserProtocol; +import cn.bootx.platform.miniapp.dto.protocol.UserProtocolDto; +import cn.bootx.platform.miniapp.param.protocol.UserProtocolParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserProtocolService { + private final UserProtocolManager userProtocolManager; + + /** + * 添加 + */ + public void add(UserProtocolParam param){ + UserProtocol userProtocol = UserProtocol.init(param); + userProtocolManager.save(userProtocol); + } + + /** + * 修改 + */ + public void update(UserProtocolParam param){ + UserProtocol userProtocol = userProtocolManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + + BeanUtil.copyProperties(param,userProtocol, CopyOptions.create().ignoreNullValue()); + userProtocolManager.updateById(userProtocol); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam,UserProtocolParam userProtocolParam){ + return MpUtil.convert2DtoPageResult(userProtocolManager.page(pageParam,userProtocolParam)); + } + + /** + * 获取单条 + */ + public UserProtocolDto findById(Long id){ + return userProtocolManager.findById(id).map(UserProtocol::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取全部 + */ + public List findAll(){ + return ResultConvertUtil.dtoListConvert(userProtocolManager.findAll()); + } + + /** + * 删除 + */ + public void delete(Long id){ + userProtocolManager.deleteById(id); + } +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/feedback/FeedbackInfoDto.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/feedback/FeedbackInfoDto.java new file mode 100644 index 000000000..5c6735357 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/feedback/FeedbackInfoDto.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.miniapp.dto.feedback; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "用户反馈信息") +@Accessors(chain = true) +public class FeedbackInfoDto extends BaseDto { + + @Schema(description = "问题分类") + private String classify; + @Schema(description = "时间") + private LocalDateTime time; + @Schema(description = "联系方式") + private String contact; + @Schema(description = "姓名") + private String name; + @Schema(description = "反馈用户ID") + private Long userId; + @Schema(description = "内容") + private String content; + +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/protocol/UserProtocolDto.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/protocol/UserProtocolDto.java new file mode 100644 index 000000000..05a098ffe --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/dto/protocol/UserProtocolDto.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.miniapp.dto.protocol; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "用户协议") +@Accessors(chain = true) +public class UserProtocolDto extends BaseDto { + + @Schema(description = "编码") + private String code; + @Schema(description = "内容") + private String content; + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/feedback/FeedbackInfoParam.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/feedback/FeedbackInfoParam.java new file mode 100644 index 000000000..c80e8795f --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/feedback/FeedbackInfoParam.java @@ -0,0 +1,37 @@ +package cn.bootx.platform.miniapp.param.feedback; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import java.time.LocalDateTime; + +/** + * 用户反馈信息 + * @author xxm + * @since 2023-08-15 + */ +@Data +@Schema(title = "用户反馈信息") +@Accessors(chain = true) +public class FeedbackInfoParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "问题分类") + private String classify; + @Schema(description = "时间") + private LocalDateTime time; + @Schema(description = "联系方式") + private String contact; + @Schema(description = "姓名") + private String name; + @Schema(description = "反馈用户ID") + private Long userId; + @Length(max = 200,min = 1,message = "反馈内容长度应处于1到1000之间") + @Schema(description = "内容") + private String content; + +} diff --git a/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/protocol/UserProtocolParam.java b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/protocol/UserProtocolParam.java new file mode 100644 index 000000000..a4f2b5343 --- /dev/null +++ b/bootx-services/service-miniapp/src/main/java/cn/bootx/platform/miniapp/param/protocol/UserProtocolParam.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.miniapp.param.protocol; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户协议 + * @author xxm + * @since 2023-08-02 + */ +@Data +@Schema(title = "用户协议") +@Accessors(chain = true) +public class UserProtocolParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "编码") + private String code; + @Schema(description = "内容") + private String content; + @Schema(description = "备注") + private String remark; +} diff --git a/bootx-services/service-miniapp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-miniapp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..96eb62d2b --- /dev/null +++ b/bootx-services/service-miniapp/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +cn.bootx.platform.miniapp.MiniAppApplication diff --git a/bootx-services/service-notice/pom.xml b/bootx-services/service-notice/pom.xml index 9c168d032..9b9c194a4 100644 --- a/bootx-services/service-notice/pom.xml +++ b/bootx-services/service-notice/pom.xml @@ -5,7 +5,7 @@ bootx-services cn.bootx.platform - 1.2.3 + 1.3.6.2 4.0.0 @@ -73,5 +73,11 @@ cn.bootx.platform common-starter-wecom + + + + org.dromara.sms4j + sms4j-spring-boot-starter + diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MessageTemplateCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MessageTemplateCode.java deleted file mode 100644 index 7b1adb507..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MessageTemplateCode.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.notice.code; - -/** - * 消息模板类型 - * - * @author xxm - * @date 2021/8/10 - */ -public interface MessageTemplateCode { - - /** 站内信 */ - int SITE = 0; - - /** 钉钉 */ - int DING_TALK = 1; - - /** 钉钉机器人 */ - int DING_TALK_ROBOT = 2; - - /** 短信 */ - int SMS = 3; - - /** Email */ - int EMAIL = 4; - - /** 微信 */ - int WECHAT = 5; - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/SiteMessageController.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/SiteMessageController.java deleted file mode 100644 index 5b79092a2..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/SiteMessageController.java +++ /dev/null @@ -1,87 +0,0 @@ -package cn.bootx.notice.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.notice.core.site.domain.SiteMessageInfo; -import cn.bootx.notice.core.site.service.SiteMessageService; -import cn.bootx.notice.dto.site.SiteMessageDto; -import cn.bootx.notice.param.site.SendSiteMessageParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -/** - * @author xxm - * @date 2021/8/8 - */ -@Tag(name = "站内信") -@RestController -@RequestMapping("/site/message") -@RequiredArgsConstructor -public class SiteMessageController { - - private final SiteMessageService siteMessageService; - - @Operation(summary = "保存站内信草稿") - @PostMapping("/saveOrUpdate") - public ResResult saveOrUpdate(@RequestBody SendSiteMessageParam param) { - siteMessageService.saveOrUpdate(param); - return Res.ok(); - } - - @Operation(summary = "发送站内信") - @PostMapping("/send") - public ResResult send(Long id) { - siteMessageService.send(id); - return Res.ok(); - } - - @Operation(summary = "消息详情") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(siteMessageService.findById(id)); - } - - @Operation(summary = "获取未读的接收消息条数") - @GetMapping("/countByReceiveNotRead") - public ResResult countByReceiveNotRead(SiteMessageInfo query) { - return Res.ok(siteMessageService.countByReceiveNotRead(query)); - } - - @Operation(summary = "接收消息分页") - @GetMapping("/pageByReceive") - public ResResult> pageByReceive(PageParam pageParam, SiteMessageInfo query) { - return Res.ok(siteMessageService.pageByReceive(pageParam, query)); - } - - @Operation(summary = "发送消息分页") - @GetMapping("/pageBySender") - public ResResult> pageBySender(PageParam pageParam, SiteMessageInfo query) { - return Res.ok(siteMessageService.pageBySender(pageParam, query)); - } - - @Operation(summary = "撤回消息") - @PostMapping("/cancel") - public ResResult cancel(Long id) { - siteMessageService.cancel(id); - return Res.ok(); - } - - @Operation(summary = "删除消息") - @DeleteMapping("/delete") - public ResResult delete(Long id) { - siteMessageService.delete(id); - return Res.ok(); - } - - @Operation(summary = "标为已读") - @PostMapping("/read") - public ResResult read(Long id) { - siteMessageService.read(id); - return Res.ok(); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java deleted file mode 100644 index ae253a91c..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.chat; - -import cn.bootx.notice.core.dingtalk.entity.msg.DingMsg; -import cn.bootx.starter.dingtalk.param.notice.ChatNotice; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 企业群消息参数 - * - * @author xxm - * @date 2022/7/20 - */ -@Data -@Accessors(chain = true) -@Schema(title = "企业群消息参数") -public class DingChatNoticeParam { - - @Schema(description = "群Id") - private String chatId; - - @Schema(description = "钉钉消息内容") - private DingMsg dingMsg; - - public ChatNotice toDingChatNotice() { - return new ChatNotice().setChatId(chatId).setMsg(dingMsg.toDingMsg()); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingFileMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingFileMsg.java deleted file mode 100644 index 7c2b2b387..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingFileMsg.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.FileMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉文件工作通知消息 - * - * @author xxm - * @date 2022/7/19 - */ -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@Schema(title = "钉钉图片工作通知消息") -public class DingFileMsg implements DingMsg { - - @Schema(description = "媒体文件id") - private String mediaId; - - /** - * 转换成钉钉消息 - */ - @Override - public Msg toDingMsg() { - return new FileMsg(mediaId); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingImageMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingImageMsg.java deleted file mode 100644 index 4f7b17a84..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingImageMsg.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.ImageMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.RequiredArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉图片工作通知消息 - * - * @author xxm - * @date 2022/7/19 - */ -@Data -@Accessors(chain = true) -@AllArgsConstructor -@RequiredArgsConstructor -@Schema(title = "钉钉图片工作通知消息") -public class DingImageMsg implements DingMsg { - - @Schema(description = "媒体文件id") - private String mediaId; - - /** - * 转换成钉钉消息 - */ - @Override - public Msg toDingMsg() { - return new ImageMsg(mediaId); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java deleted file mode 100644 index 12f8e67f0..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.MarkdownMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2022/7/20 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉MarkDown工作通知消息") -public class DingMarkDownMsg implements DingMsg { - - @Schema(description = "标题") - private String title; - - @Schema(description = "内容") - private String text; - - @Override - public Msg toDingMsg() { - return new MarkdownMsg(title, text); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMsg.java deleted file mode 100644 index b3b80352e..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingMsg.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; - -/** - * 钉钉消息接口 - * - * @author xxm - * @date 2022/7/20 - */ -public interface DingMsg { - - /** - * 转换成钉钉消息 - */ - Msg toDingMsg(); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingOaMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingOaMsg.java deleted file mode 100644 index 294399a2c..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingOaMsg.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.starter.dingtalk.param.notice.msg.OaMsg; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import static cn.bootx.starter.dingtalk.param.notice.msg.OaMsg.*; -import static cn.bootx.starter.dingtalk.param.notice.msg.OaMsg.Oa.*; - -/** - * @author xxm - * @date 2022/7/19 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉OA消息") -public class DingOaMsg implements DingMsg { - - @JsonProperty("message_url") - @Schema(description = "消息点击链接地址") - private String messageUrl; - - @JsonProperty("pc_message_url") - @Schema(description = "PC端点击消息时跳转到的地址") - private String pcMessageUrl; - - @Schema(description = "消息头部内容") - private Head head; - - @Schema(description = "消息体") - private Body body; - - @JsonProperty("status_bar") - @Schema(description = "消息状态栏") - private StatusBar statusBar; - - /** - * 转换成钉钉消息 - */ - @Override - public Msg toDingMsg() { - Oa oa = new Oa().setMessageUrl(messageUrl) - .setPcMessageUrl(pcMessageUrl) - .setHead(head) - .setBody(body) - .setStatusBar(statusBar); - - return new OaMsg(oa); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingTextMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingTextMsg.java deleted file mode 100644 index cb9ce333a..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingTextMsg.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.starter.dingtalk.param.notice.msg.TextMsg; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉工作通知消息 - * - * @author xxm - * @date 2022/7/19 - */ -@Data -@Accessors(chain = true) -@NoArgsConstructor -@AllArgsConstructor -@Schema(title = "钉钉文本工作通知消息") -public class DingTextMsg implements DingMsg { - - @Schema(description = "文本内容") - private String content; - - /** - * 转换成钉钉消息 - */ - public Msg toDingMsg() { - return new TextMsg(content); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingVoiceMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingVoiceMsg.java deleted file mode 100644 index 5b1d5afd7..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingVoiceMsg.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; - -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.starter.dingtalk.param.notice.msg.VoiceMsg; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 声音消息 - * - * @author xxm - * @date 2022/7/19 - */ -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@Schema(title = "声音消息") -public class DingVoiceMsg implements DingMsg { - - @Schema(description = "媒体文件id") - private String mediaId; - - @Schema(description = "音频时长") - private String duration; - - /** - * 转换成钉钉消息 - */ - @Override - public Msg toDingMsg() { - return new VoiceMsg(mediaId, duration); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java deleted file mode 100644 index a7fcc93c8..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.notice.core.dingtalk.service; - -import cn.bootx.notice.service.DingRobotNoticeSender; -import cn.bootx.starter.dingtalk.core.robot.service.DingRobotSendService; -import cn.bootx.starter.dingtalk.param.notice.msg.LinkMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.MarkdownMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.TextMsg; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 钉钉机器人消息 - * - * @author xxm - * @date 2022/7/19 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingRobotNoticeSenderImpl implements DingRobotNoticeSender { - - private final DingRobotSendService dingRobotSendService; - - @Override - public void sendSimpleText(String code, String msg) { - TextMsg dingTalkTextNotice = new TextMsg(msg); - dingRobotSendService.sendNotice(code, dingTalkTextNotice); - } - - @Override - public void sendText(String code, TextMsg dingTalkTextNotice) { - dingRobotSendService.sendNotice(code, dingTalkTextNotice); - } - - @Override - public void sendLink(String code, LinkMsg notice) { - dingRobotSendService.sendNotice(code, notice); - } - - @Override - public void sendMarkdown(String code, MarkdownMsg notice) { - dingRobotSendService.sendNotice(code, notice); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/convert/MailConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/convert/MailConvert.java deleted file mode 100644 index de05c29df..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/convert/MailConvert.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.notice.core.mail.convert; - -import cn.bootx.notice.core.mail.entity.MailConfig; -import cn.bootx.notice.dto.mail.MailConfigDto; -import cn.bootx.notice.param.mail.MailConfigParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 钉钉相关类转换 - * - * @author xxm - * @date 2021/8/5 - */ -@Mapper -public interface MailConvert { - - MailConvert CONVERT = Mappers.getMapper(MailConvert.class); - - MailConfig convert(MailConfigDto in); - - MailConfig convert(MailConfigParam in); - - MailConfigDto convert(MailConfig in); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigMapper.java deleted file mode 100644 index 78590135d..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.notice.core.mail.dao; - -import cn.bootx.notice.core.mail.entity.MailConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 邮件[配置 - * - * @author xxm - * @date 2020/4/8 13:22 - */ -@Mapper -public interface MailConfigMapper extends BaseMapper { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/entity/MailConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/entity/MailConfig.java deleted file mode 100644 index 97805efdf..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/entity/MailConfig.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.bootx.notice.core.mail.entity; - -import cn.bootx.common.core.annotation.EncryptionField; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.notice.core.mail.convert.MailConvert; -import cn.bootx.notice.dto.mail.MailConfigDto; -import cn.bootx.notice.param.mail.MailConfigParam; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 邮件配置 - * - * @author xxm - * @date 2020/4/8 11:14 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -@TableName("notice_mail_config") -public class MailConfig extends MpBaseEntity implements EntityBaseFunction { - - /** 编号 */ - private String code; - - /** 名称 */ - private String name; - - /** 邮箱服务器 host */ - private String host; - - /** 邮箱服务器 端口 */ - private Integer port; - - /** 邮箱服务器 账号 */ - @EncryptionField - private String username; - - /** 邮箱服务器 密码 */ - @EncryptionField - private String password; - - /** 邮箱服务器 发送人名称 */ - private String sender; - - /** 邮箱服务器 发送人邮箱账号 */ - @TableField("from_") - private String from; - - /** 是否默认配置 */ - private Boolean activity; - - /** 安全方式 */ - private Integer securityType; - - public static MailConfig init(MailConfigParam in) { - return MailConvert.CONVERT.convert(in); - } - - @Override - public MailConfigDto toDto() { - return MailConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/convert/SiteMessageConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/convert/SiteMessageConvert.java deleted file mode 100644 index 60f4763c0..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/convert/SiteMessageConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.notice.core.site.convert; - -import cn.bootx.notice.core.site.entity.SiteMessage; -import cn.bootx.notice.dto.site.SiteMessageDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 站内信转换 - * - * @author xxm - * @date 2021/8/7 - */ -@Mapper -public interface SiteMessageConvert { - - SiteMessageConvert CONVERT = Mappers.getMapper(SiteMessageConvert.class); - - SiteMessageDto convert(SiteMessage in); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageManager.java deleted file mode 100644 index c8d97fcf9..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageManager.java +++ /dev/null @@ -1,92 +0,0 @@ -package cn.bootx.notice.core.site.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.notice.code.SiteMessageCode; -import cn.bootx.notice.core.site.domain.SiteMessageInfo; -import cn.bootx.notice.core.site.entity.SiteMessage; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.springframework.stereotype.Repository; - -import java.time.LocalDate; -import java.util.Objects; - -import static cn.bootx.notice.code.SiteMessageCode.STATE_SENT; - -/** - * 站内信 - * - * @author xxm - * @date 2021/8/7 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class SiteMessageManager extends BaseManager { - - /** - * 接收用户消息分页 - */ - public Page pageByReceive(PageParam pageParam, SiteMessageInfo query, Long userId) { - val mpPage = MpUtil.getMpPage(pageParam, SiteMessageInfo.class); - - val wrapper = new LambdaQueryWrapper() - .and(o -> o - .and(p -> p.eq(SiteMessageInfo::getReceiveType, SiteMessageCode.RECEIVE_ALL) - .gt(SiteMessageInfo::getEfficientTime, LocalDate.now())) - .or() - .eq(SiteMessageInfo::getReceiveId, userId)) - .eq(SiteMessageInfo::getSendState, STATE_SENT) - .eq(StrUtil.isNotBlank(query.getTitle()), SiteMessageInfo::getTitle, query.getTitle()) - .orderByAsc(SiteMessageInfo::getHaveRead) - .orderByDesc(SiteMessageInfo::getReadTime); - if (Objects.equals(query.getHaveRead(), true)) { - wrapper.eq(SiteMessageInfo::getHaveRead, query.getHaveRead()); - } - // 已读为空也视为未读 - if (Objects.equals(query.getHaveRead(), false)) { - wrapper.and(o -> o.eq(SiteMessageInfo::getHaveRead, false).or().isNull(SiteMessageInfo::getHaveRead)); - - } - - return baseMapper.pageMassage(mpPage, wrapper); - } - - /** - * 查询未读的消息数量 - */ - public Integer countByReceiveNotRead(Long userId) { - val wrapper = new LambdaQueryWrapper() - .and(o -> o - .and(p -> p.eq(SiteMessageInfo::getReceiveType, SiteMessageCode.RECEIVE_ALL) - .gt(SiteMessageInfo::getEfficientTime, LocalDate.now())) - .or() - .eq(SiteMessageInfo::getReceiveId, userId)) - .and(o -> o.eq(SiteMessageInfo::getHaveRead, false).or().isNull(SiteMessageInfo::getHaveRead)) - .eq(SiteMessageInfo::getSendState, STATE_SENT) - .orderByAsc(SiteMessageInfo::getHaveRead) - .orderByDesc(SiteMessageInfo::getReadTime); - return baseMapper.countMassage(wrapper); - } - - /** - * 发送人消息分页 - */ - public Page pageBySender(PageParam pageParam, SiteMessageInfo query, Long userId) { - Page mpPage = MpUtil.getMpPage(pageParam, SiteMessage.class); - return lambdaQuery().select(SiteMessage.class, MpUtil::excludeBigField) - .eq(SiteMessage::getSenderId, userId) - .like(StrUtil.isNotBlank(query.getTitle()), SiteMessage::getSenderId, query.getTitle()) - .eq(StrUtil.isNotBlank(query.getSendState()), SiteMessage::getSendState, query.getSendState()) - .eq(StrUtil.isNotBlank(query.getReceiveType()), SiteMessage::getReceiveType, query.getReceiveType()) - .orderByDesc(SiteMessage::getId) - .page(mpPage); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageMapper.java deleted file mode 100644 index 531abbbd7..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.notice.core.site.dao; - -import cn.bootx.notice.core.site.domain.SiteMessageInfo; -import cn.bootx.notice.core.site.entity.SiteMessage; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * 站内信 - * - * @author xxm - * @date 2021/8/7 - */ -@Mapper -public interface SiteMessageMapper extends BaseMapper { - - Page pageMassage(Page page, - @Param(Constants.WRAPPER) Wrapper wrapper); - - Integer countMassage(@Param(Constants.WRAPPER) Wrapper wrapper); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserMapper.java deleted file mode 100644 index c79a01ae5..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.notice.core.site.dao; - -import cn.bootx.notice.core.site.entity.SiteMessageUser; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/8/14 - */ -@Mapper -public interface SiteMessageUserMapper extends BaseMapper { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessage.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessage.java deleted file mode 100644 index b7dc80ed4..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessage.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.bootx.notice.core.site.entity; - -import cn.bootx.common.core.annotation.BigField; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.notice.code.SiteMessageCode; -import cn.bootx.notice.core.site.convert.SiteMessageConvert; -import cn.bootx.notice.dto.site.SiteMessageDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -/** - * 站内信 - * - * @author xxm - * @date 2021/8/7 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("notice_site_message") -public class SiteMessage extends MpBaseEntity implements EntityBaseFunction { - - /** 消息标题 */ - private String title; - - /** 消息内容 */ - @BigField - private String content; - - /** - * 接收对象类型 全体/指定用户 - * @see SiteMessageCode#RECEIVE_ALL - */ - private String receiveType; - - /** - * 发布状态 - * @see SiteMessageCode#STATE_SENT - */ - private String sendState; - - /** 发送者id */ - private Long senderId; - - /** 发送者姓名 */ - private String senderName; - - /** 发送时间 */ - private LocalDateTime senderTime; - - /** 撤销时间 */ - private LocalDateTime cancelTime; - - /** 截至有效期 有效超过有效期后全体通知将无法看到 */ - private LocalDate efficientTime; - - @Override - public SiteMessageDto toDto() { - return SiteMessageConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/service/SiteMessageService.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/service/SiteMessageService.java deleted file mode 100644 index b9045b88f..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/service/SiteMessageService.java +++ /dev/null @@ -1,234 +0,0 @@ -package cn.bootx.notice.core.site.service; - -import cn.bootx.common.core.entity.UserDetail; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.websocket.entity.WsRes; -import cn.bootx.common.websocket.service.UserWsNoticeService; -import cn.bootx.notice.core.site.dao.SiteMessageManager; -import cn.bootx.notice.core.site.dao.SiteMessageUserManager; -import cn.bootx.notice.core.site.domain.SiteMessageInfo; -import cn.bootx.notice.core.site.entity.SiteMessage; -import cn.bootx.notice.core.site.entity.SiteMessageUser; -import cn.bootx.notice.dto.site.SiteMessageDto; -import cn.bootx.notice.param.site.SendSiteMessageParam; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.util.DesensitizedUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import static cn.bootx.common.core.code.CommonCode.SYSTEM_DEFAULT_USERID; -import static cn.bootx.common.core.code.CommonCode.SYSTEM_DEFAULT_USERNAME; -import static cn.bootx.notice.code.SiteMessageCode.*; - -/** - * 站内信 - * - * @author xxm - * @date 2021/8/7 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class SiteMessageService { - - private final SiteMessageManager siteMessageManager; - - private final SiteMessageUserManager siteMessageUserManager; - - private final UserWsNoticeService userWsNoticeService; - - /** - * 保存或更新草稿 - */ - @Transactional(rollbackFor = Exception.class) - public void saveOrUpdate(SendSiteMessageParam param) { - SiteMessage siteMessage; - if (Objects.nonNull(param.getId())) { - siteMessage = siteMessageManager.findById(param.getId()) - .orElseThrow(() -> new DataNotExistException("站内信信息不存在")); - BeanUtil.copyProperties(param, siteMessage, CopyOptions.create().ignoreNullValue()); - } - else { - siteMessage = new SiteMessage().setTitle(param.getTitle()) - .setSendState(STATE_DRAFT) - .setContent(param.getContent()) - .setReceiveType(param.getReceiveType()) - .setEfficientTime(param.getEfficientTime()) - .setSenderTime(LocalDateTime.now()); - // 添加消息关联人信息 暂时这段逻辑用不到, 现在发布的都是全体用户信心 - if (Objects.equals(RECEIVE_USER, param.getReceiveType())) { - List siteMessageUsers = param.getReceiveIds() - .stream() - .map(userId -> new SiteMessageUser().setMessageId(param.getId()).setReceiveId(userId)) - .collect(Collectors.toList()); - siteMessageUserManager.saveAll(siteMessageUsers); - } - } - // 新增或更新站内信内容 - val userDetail = SecurityUtil.getCurrentUser(); - siteMessage.setTitle(param.getTitle()) - .setSenderId(userDetail.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) - .setSenderName(userDetail.map(UserDetail::getName).orElse("未知")); - siteMessageManager.saveOrUpdate(siteMessage); - - } - - /** - * 站内信发送消息 - */ - @Transactional(rollbackFor = Exception.class) - public void send(Long id) { - SiteMessage siteMessage = siteMessageManager.findById(id) - .orElseThrow(() -> new DataNotExistException("站内信信息不存在")); - val userDetail = SecurityUtil.getCurrentUser(); - - // 新增站内信内容 - siteMessage.setSenderId(userDetail.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) - .setSendState(STATE_SENT) - .setSenderName(userDetail.map(UserDetail::getName).orElse("未知")) - .setSenderTime(LocalDateTime.now()); - siteMessageManager.updateById(siteMessage); - userWsNoticeService.sendMessageByAll(WsRes.eventNotice(EVENT_MESSAGE_UPDATE)); - } - - /** - * 发送站内信 - */ - @Transactional(rollbackFor = Exception.class) - public void send(SendSiteMessageParam param) { - - // 新增站内信内容 - SiteMessage siteMessage = new SiteMessage().setTitle(param.getTitle()) - .setContent(param.getContent()) - .setSendState(STATE_SENT) - .setReceiveType(param.getReceiveType()) - .setEfficientTime(param.getEfficientTime()) - .setSenderId(param.getSenderId()) - .setSenderName(param.getSenderName()) - .setSenderTime(LocalDateTime.now()); - siteMessageManager.save(siteMessage); - // 添加消息关联人信息 - if (Objects.equals(RECEIVE_USER, param.getReceiveType())) { - - List siteMessageUsers = param.getReceiveIds() - .stream() - .map(userId -> new SiteMessageUser().setMessageId(siteMessage.getId()).setReceiveId(userId)) - .collect(Collectors.toList()); - siteMessageUserManager.saveAll(siteMessageUsers); - userWsNoticeService.sendMessageByUsers(WsRes.eventNotice(EVENT_MESSAGE_UPDATE), param.getReceiveIds()); - } - } - - /** - * 发送给单个用户信息, 发送人为系统 - */ - public void sendSingleUserBySystem(String title, String content, Long userId) { - val param = new SendSiteMessageParam().setTitle(title) - .setContent(content) - .setSenderId(SYSTEM_DEFAULT_USERID) - .setSenderName(SYSTEM_DEFAULT_USERNAME) - .setReceiveType(RECEIVE_USER) - .setReceiveIds(Collections.singletonList(userId)); - this.send(param); - } - - /** - * 发送给多个用户信息, 发送人为系统 - */ - public void sendMultiUserBySystem(String title, String content, List userIds) { - val param = new SendSiteMessageParam().setTitle(title) - .setContent(content) - .setSenderId(SYSTEM_DEFAULT_USERID) - .setSenderName(SYSTEM_DEFAULT_USERNAME) - .setReceiveType(RECEIVE_USER) - .setReceiveIds(userIds); - this.send(param); - } - - /** - * 撤回消息 - */ - @Transactional(rollbackFor = Exception.class) - public void cancel(Long messageId) { - SiteMessage siteMessage = siteMessageManager.findById(messageId) - .orElseThrow(() -> new DataNotExistException("站内信不存在")); - siteMessage.setCancelTime(LocalDateTime.now()).setSendState(STATE_CANCEL); - siteMessageManager.updateById(siteMessage); - userWsNoticeService.sendMessageByAll(WsRes.eventNotice(EVENT_MESSAGE_UPDATE)); - } - - /** - * 删除消息 - */ - @Transactional(rollbackFor = Exception.class) - public void delete(Long messageId) { - SiteMessage siteMessage = siteMessageManager.findById(messageId) - .orElseThrow(() -> new DataNotExistException("站内信不存在")); - if (!CollUtil.toList(STATE_CANCEL, STATE_DRAFT).contains(siteMessage.getSendState())) { - throw new BizException("站内信不是撤回或草稿状态,无法被删除"); - } - siteMessageManager.deleteById(messageId); - siteMessageUserManager.deleteByMessageId(messageId); - } - - /** - * 未读消息数量 - */ - public Integer countByReceiveNotRead(SiteMessageInfo query) { - Long userId = SecurityUtil.getUserId(); - // Long userId = 0L; - return siteMessageManager.countByReceiveNotRead(userId); - } - - /** - * 接收消息分页 - */ - public PageResult pageByReceive(PageParam pageParam, SiteMessageInfo query) { - Long userId = SecurityUtil.getUserId(); - return MpUtil.convert2PageResult(siteMessageManager.pageByReceive(pageParam, query, userId)); - } - - /** - * 发送消息分页 - */ - public PageResult pageBySender(PageParam pageParam, SiteMessageInfo query) { - Long userId = SecurityUtil.getUserId(); - return MpUtil.convert2DtoPageResult(siteMessageManager.pageBySender(pageParam, query, userId)); - } - - /** - * 查询详情 - */ - public SiteMessageDto findById(Long id) { - return siteMessageManager.findById(id).map(SiteMessage::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 阅读 - */ - public void read(Long messageId) { - Long userId = SecurityUtil.getUserId(); - // Long userId = 0L; - SiteMessageUser siteMessageUser = siteMessageUserManager.findByMessageId(messageId) - .orElse(new SiteMessageUser().setReceiveId(userId).setMessageId(messageId)); - siteMessageUser.setHaveRead(true).setReadTime(LocalDateTime.now()); - siteMessageUserManager.saveOrUpdate(siteMessageUser); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigManager.java deleted file mode 100644 index 908bc3aaf..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigManager.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.bootx.notice.core.sms.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.notice.core.sms.entity.SmsChannelConfig; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -@Slf4j -@Service -@RequiredArgsConstructor -public class SmsChannelConfigManager extends BaseManager { -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigMapper.java deleted file mode 100644 index 4c7e3b04e..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/dao/SmsChannelConfigMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.bootx.notice.core.sms.dao; - -import cn.bootx.notice.core.sms.entity.SmsChannelConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2023/3/28 - */ -@Mapper -public interface SmsChannelConfigMapper extends BaseMapper { -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/entity/SmsChannelConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/entity/SmsChannelConfig.java deleted file mode 100644 index c38e98e2f..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/sms/entity/SmsChannelConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.notice.core.sms.entity; - -import cn.bootx.common.core.annotation.actable.Column; -import cn.bootx.common.core.annotation.actable.Table; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 短信渠道配置 - * @author xxm - * @date 2023/3/28 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("notice_sms_channel_config") -@Table(comment = "短信渠道配置") -public class SmsChannelConfig extends MpBaseEntity { - - /** 渠道编码 */ - @Column(comment = "渠道编码") - private String code; - /** 短信签名 */ - @Column(comment = "短信签名") - private String signature; - /** 短信ApiKey */ - @Column(comment = "短信ApiKey") - private String apiKey; - /** 短信Api秘钥 */ - @Column(comment = "短信Api秘钥") - private String apiSecret; - /** 回调地址 */ - @Column(comment = "回调地址") - private String url; - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/convert/MessageTemplateConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/convert/MessageTemplateConvert.java deleted file mode 100644 index a6ec88fd2..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/convert/MessageTemplateConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.notice.core.template.convert; - -import cn.bootx.notice.core.template.entity.MessageTemplate; -import cn.bootx.notice.dto.template.MessageTemplateDto; -import cn.bootx.notice.param.template.MessageTemplateParam; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 消息模板转换 - * - * @author xxm - * @date 2021/8/10 - */ -@Mapper -public interface MessageTemplateConvert { - - MessageTemplateConvert CONVERT = Mappers.getMapper(MessageTemplateConvert.class); - - MessageTemplateDto convert(MessageTemplate in); - - MessageTemplate convert(MessageTemplateDto in); - - MessageTemplate convert(MessageTemplateParam in); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateManager.java deleted file mode 100644 index e8674be38..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateManager.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.notice.core.template.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.notice.core.template.entity.MessageTemplate; -import cn.bootx.notice.param.template.MessageTemplateParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 消息模板 - * - * @author xxm - * @date 2021/8/9 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class MessageTemplateManager extends BaseManager { - - public Optional findByCode(String code) { - return findByField(MessageTemplate::getCode, code); - } - - public boolean existsByCode(String code) { - return existedByField(MessageTemplate::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return existedByField(MessageTemplate::getCode, code, id); - } - - public Page page(PageParam pageParam, MessageTemplateParam query) { - Page mpPage = MpUtil.getMpPage(pageParam, MessageTemplate.class); - return lambdaQuery().like(StrUtil.isNotBlank(query.getCode()), MessageTemplate::getCode, query.getCode()) - .like(StrUtil.isNotBlank(query.getName()), MessageTemplate::getName, query.getName()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateMapper.java deleted file mode 100644 index bb503b9e6..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/dao/MessageTemplateMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.notice.core.template.dao; - -import cn.bootx.notice.core.template.entity.MessageTemplate; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2021/8/9 - */ -@Mapper -public interface MessageTemplateMapper extends BaseMapper { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/entity/MessageTemplate.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/entity/MessageTemplate.java deleted file mode 100644 index f1dc0f27d..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/entity/MessageTemplate.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.notice.core.template.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.notice.code.MessageTemplateCode; -import cn.bootx.notice.core.template.convert.MessageTemplateConvert; -import cn.bootx.notice.dto.template.MessageTemplateDto; -import cn.bootx.notice.param.template.MessageTemplateParam; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("notice_message_template") -@Accessors(chain = true) -public class MessageTemplate extends MpBaseEntity implements EntityBaseFunction { - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** 内容 */ - private String data; - - /** 备注 */ - private String remark; - - /** - * 模板类型 - * @see MessageTemplateCode - */ - private Integer type; - - public static MessageTemplate init(MessageTemplateParam in) { - return MessageTemplateConvert.CONVERT.convert(in); - } - - @Override - public MessageTemplateDto toDto() { - return MessageTemplateConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigManager.java deleted file mode 100644 index fa67fcee8..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigManager.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bootx.notice.core.wechat.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.notice.core.wechat.entity.WeChatNoticeConfig; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * 微信消息配置 - * - * @author xxm - * @date 2021/8/10 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class WeChatNoticeConfigManager extends BaseManager { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigMapper.java deleted file mode 100644 index 6d161f15a..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/dao/WeChatNoticeConfigMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.notice.core.wechat.dao; - -import cn.bootx.notice.core.wechat.entity.WeChatNoticeConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2021/8/10 - */ -@Mapper -public interface WeChatNoticeConfigMapper extends BaseMapper { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/entity/WeChatNoticeConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/entity/WeChatNoticeConfig.java deleted file mode 100644 index fd8978682..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wechat/entity/WeChatNoticeConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.notice.core.wechat.entity; - -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 微信消息配置 - * - * @author xxm - * @date 2021/8/10 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("notice_wechat_config") -public class WeChatNoticeConfig extends MpBaseEntity { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/template/MessageTemplateDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/template/MessageTemplateDto.java deleted file mode 100644 index ea3d5c79f..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/template/MessageTemplateDto.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.notice.dto.template; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 消息模板 - * - * @author xxm - * @date 2021/8/10 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "消息模板") -public class MessageTemplateDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -1377790220501836009L; - - /** 编码 */ - private String code; - - /** 名称 */ - private String name; - - /** 内容 */ - private String data; - - /** 备注 */ - private String remark; - - /** - * 模板类型 - * @see cn.bootx.notice.code.MessageTemplateCode - */ - private Integer type; - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/CodeTemplateExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/CodeTemplateExistedException.java deleted file mode 100644 index 908b356f2..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/CodeTemplateExistedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.notice.exception; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_CODE_ALREADY_EXISTED; - -/** - * 邮箱代码已经存在 - * - * @author xxm - * @date 2020/6/10 16:21 - */ -public class CodeTemplateExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = 6804308428872546951L; - - public CodeTemplateExistedException() { - super(MAIL_CONFIG_CODE_ALREADY_EXISTED, "邮箱代码已经存在."); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/DefaultMailConfigAlreadyExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/DefaultMailConfigAlreadyExistedException.java deleted file mode 100644 index fd13f9be5..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/DefaultMailConfigAlreadyExistedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.notice.exception; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.notice.code.NoticeCenterErrorCode.DEFAULT_MAIL_CONFIG_ALREADY_EXISTED; - -/** - * 默认邮箱配置 已存在异常 - * - * @author xxm - * @date 2020/5/2 14:43 - */ -public class DefaultMailConfigAlreadyExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = 2775127389987392832L; - - public DefaultMailConfigAlreadyExistedException() { - super(DEFAULT_MAIL_CONFIG_ALREADY_EXISTED, "默认邮箱配置已存在"); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigCodeAlreadyExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigCodeAlreadyExistedException.java deleted file mode 100644 index 281c40c19..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigCodeAlreadyExistedException.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.notice.exception; - -import cn.bootx.common.core.exception.BizException; - -import java.io.Serializable; - -import static cn.bootx.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_CODE_ALREADY_EXISTED; - -/** - * 邮箱配置编号 已存在异常 - * - * @author xxm - * @date 2020/5/2 14:12 - */ -public class MailConfigCodeAlreadyExistedException extends BizException implements Serializable { - - private static final long serialVersionUID = 6572063368550031815L; - - public MailConfigCodeAlreadyExistedException() { - super(MAIL_CONFIG_CODE_ALREADY_EXISTED, "邮箱配置编号 已存在异常"); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigNotExistException.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigNotExistException.java deleted file mode 100644 index c4e22ce14..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailConfigNotExistException.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.notice.exception; - -import cn.bootx.common.core.exception.FatalException; - -import static cn.bootx.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_NOT_EXIST; - -/** - * 邮箱配置不存在异常 - */ -public class MailConfigNotExistException extends FatalException { - - public MailConfigNotExistException() { - super(MAIL_CONFIG_NOT_EXIST, "邮箱配置不存在异常"); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailTemplateNotExistException.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailTemplateNotExistException.java deleted file mode 100644 index e35ab936d..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/exception/MailTemplateNotExistException.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.notice.exception; - -import cn.bootx.common.core.exception.FatalException; - -import static cn.bootx.notice.code.NoticeCenterErrorCode.MAIL_TEMPLATE_NOT_EXIST; - -/** - * 模板不存在 - * - * @author xxm - * @date 2020/11/18 - */ -public class MailTemplateNotExistException extends FatalException { - - public MailTemplateNotExistException() { - super(MAIL_TEMPLATE_NOT_EXIST, "邮箱模板不存在异常"); - } - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingRobotNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingRobotNoticeSender.java deleted file mode 100644 index 5def7740b..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingRobotNoticeSender.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.notice.service; - -import cn.bootx.starter.dingtalk.param.notice.msg.LinkMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.MarkdownMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.TextMsg; - -/** - * 钉钉机器人消息通知 - * - * @author xxm - * @date 2022/7/16 - */ -public interface DingRobotNoticeSender { - - /** - * 简单文本消息发送 - */ - void sendSimpleText(String code, String msg); - - /** - * 文本消息发送 - */ - void sendText(String code, TextMsg dingTalkTextNotice); - - /** - * 发送链接消息 - */ - void sendLink(String code, LinkMsg notice); - - /** - * 发送Markdown消息 - */ - void sendMarkdown(String code, MarkdownMsg notice); - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/SmsNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/SmsNoticeSender.java deleted file mode 100644 index cf073632e..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/SmsNoticeSender.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.bootx.notice.service; - -/** - * 短信通知服务 - * - * @author xxm - * @date 2022/7/16 - */ -public interface SmsNoticeSender { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeChatNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeChatNoticeSender.java deleted file mode 100644 index dd4922af9..000000000 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeChatNoticeSender.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.bootx.notice.service; - -/** - * 微信消息服务 - * - * @author xxm - * @date 2022/7/16 - */ -public interface WeChatNoticeSender { - -} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/NoticeApplication.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/NoticeApplication.java similarity index 84% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/NoticeApplication.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/NoticeApplication.java index d5f7ee08a..89ee0ab17 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/NoticeApplication.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/NoticeApplication.java @@ -1,4 +1,4 @@ -package cn.bootx.notice; +package cn.bootx.platform.notice; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -8,7 +8,7 @@ * 通知中心 * * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ @ComponentScan @MapperScan(annotationClass = Mapper.class) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MailCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MailCode.java similarity index 83% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MailCode.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MailCode.java index 2dd1ec46f..365467142 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/MailCode.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MailCode.java @@ -1,10 +1,10 @@ -package cn.bootx.notice.code; +package cn.bootx.platform.notice.code; /** * 邮箱常量 * * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ public interface MailCode { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MessageTemplateCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MessageTemplateCode.java new file mode 100644 index 000000000..a8e24118f --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/MessageTemplateCode.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.notice.code; + +/** + * 消息模板类型 + * + * @author xxm + * @since 2021/8/10 + */ +public interface MessageTemplateCode { + + /** 站内信 */ + String SITE = "site"; + + /** 钉钉 */ + String DING_TALK = "ding_talk"; + + /** 钉钉机器人 */ + String DING_TALK_ROBOT = "ding_talk_robot"; + + /** Email */ + String EMAIL = "email"; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/NoticeCenterErrorCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/NoticeCenterErrorCode.java similarity index 94% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/code/NoticeCenterErrorCode.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/NoticeCenterErrorCode.java index cc6f9db41..7cabadf0b 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/NoticeCenterErrorCode.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/NoticeCenterErrorCode.java @@ -1,10 +1,10 @@ -package cn.bootx.notice.code; +package cn.bootx.platform.notice.code; /** * 通知中心错误码 * * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ public interface NoticeCenterErrorCode { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/SiteMessageCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SiteMessageCode.java similarity index 89% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/code/SiteMessageCode.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SiteMessageCode.java index 42e8ceaf4..44887d554 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/code/SiteMessageCode.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SiteMessageCode.java @@ -1,10 +1,10 @@ -package cn.bootx.notice.code; +package cn.bootx.platform.notice.code; /** * 站内信编码 * * @author xxm - * @date 2022/8/14 + * @since 2022/8/14 */ public interface SiteMessageCode { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SmsChannelStatusCode.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SmsChannelStatusCode.java new file mode 100644 index 000000000..ae6a7b9d5 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/code/SmsChannelStatusCode.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.notice.code; + +/** + * 短信渠道商配置状态 + * @author xxm + * @since 2023/8/3 + */ +public interface SmsChannelStatusCode { + /** 正常 */ + String NORMAL = "normal"; + + /** 停用 */ + String FORBIDDEN = "forbidden"; +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MailConfigController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MailConfigController.java similarity index 81% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MailConfigController.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MailConfigController.java index 9d153418b..8160bd4af 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MailConfigController.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MailConfigController.java @@ -1,13 +1,13 @@ -package cn.bootx.notice.controller; +package cn.bootx.platform.notice.controller; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.notice.core.mail.service.MailConfigService; -import cn.bootx.notice.dto.mail.MailConfigDto; -import cn.bootx.notice.param.mail.MailConfigParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ValidationUtil; +import cn.bootx.platform.notice.core.mail.service.MailConfigService; +import cn.bootx.platform.notice.dto.mail.MailConfigDto; +import cn.bootx.platform.notice.param.mail.MailConfigParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; @@ -15,7 +15,7 @@ /** * @author xxm - * @date 2020/5/2 14:38 + * @since 2020/5/2 14:38 */ @Tag(name = "邮箱配置") @RestController diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MessageTemplateController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MessageTemplateController.java similarity index 82% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MessageTemplateController.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MessageTemplateController.java index 957342e14..913512506 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/MessageTemplateController.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/MessageTemplateController.java @@ -1,12 +1,12 @@ -package cn.bootx.notice.controller; +package cn.bootx.platform.notice.controller; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.notice.core.template.service.MessageTemplateService; -import cn.bootx.notice.dto.template.MessageTemplateDto; -import cn.bootx.notice.param.template.MessageTemplateParam; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.notice.core.template.service.MessageTemplateService; +import cn.bootx.platform.notice.dto.template.MessageTemplateDto; +import cn.bootx.platform.notice.param.template.MessageTemplateParam; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; @@ -18,7 +18,7 @@ * 消息模板 * * @author xxm - * @date 2021/8/10 + * @since 2021/8/10 */ @Tag(name = "消息模板") @RestController diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/NcDemoController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/NcDemoController.java similarity index 84% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/NcDemoController.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/NcDemoController.java index 298bc252a..8d9ed2192 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/controller/NcDemoController.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/NcDemoController.java @@ -1,16 +1,16 @@ -package cn.bootx.notice.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; -import cn.bootx.notice.core.dingtalk.entity.msg.DingTextMsg; -import cn.bootx.notice.core.template.service.MessageTemplateService; -import cn.bootx.notice.core.wecom.entity.WeComNoticeReceive; -import cn.bootx.notice.core.wecom.entity.msg.WeComTextMsg; -import cn.bootx.notice.service.DingTalkNoticeSender; -import cn.bootx.notice.service.EmailNoticeSender; -import cn.bootx.notice.service.WeComNoticeSender; -import cn.bootx.notice.service.WeComRobotNoticeSender; +package cn.bootx.platform.notice.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; +import cn.bootx.platform.notice.core.dingtalk.entity.msg.DingTextMsg; +import cn.bootx.platform.notice.core.template.service.MessageTemplateService; +import cn.bootx.platform.notice.core.wecom.entity.WeComNoticeReceive; +import cn.bootx.platform.notice.core.wecom.entity.msg.WeComTextMsg; +import cn.bootx.platform.notice.service.DingTalkNoticeSender; +import cn.bootx.platform.notice.service.EmailNoticeSender; +import cn.bootx.platform.notice.service.WeComNoticeSender; +import cn.bootx.platform.notice.service.WeComRobotNoticeSender; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SiteMessageController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SiteMessageController.java new file mode 100644 index 000000000..0c173b261 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SiteMessageController.java @@ -0,0 +1,99 @@ +package cn.bootx.platform.notice.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.notice.core.site.domain.SiteMessageInfo; +import cn.bootx.platform.notice.core.site.service.SiteMessageService; +import cn.bootx.platform.notice.dto.site.SiteMessageDto; +import cn.bootx.platform.notice.param.site.SendSiteMessageParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author xxm + * @since 2021/8/8 + */ +@Tag(name = "站内信") +@RestController +@RequestMapping("/site/message") +@RequiredArgsConstructor +public class SiteMessageController { + + private final SiteMessageService siteMessageService; + + @Operation(summary = "保存站内信草稿") + @PostMapping("/saveOrUpdate") + public ResResult saveOrUpdate(@RequestBody SendSiteMessageParam param) { + siteMessageService.saveOrUpdate(param); + return Res.ok(); + } + + @Operation(summary = "发送站内信") + @PostMapping("/send") + public ResResult send(Long id) { + siteMessageService.send(id); + return Res.ok(); + } + + @Operation(summary = "消息详情") + @GetMapping("/findById") + public ResResult findById(Long id) { + return Res.ok(siteMessageService.findById(id)); + } + + @IgnoreAuth + @Operation(summary = "获取未读的接收消息条数") + @GetMapping("/countByReceiveNotRead") + public ResResult countByReceiveNotRead(SiteMessageInfo query) { + return Res.ok(siteMessageService.countByReceiveNotRead(query)); + } + + @IgnoreAuth + @Operation(summary = "接收消息分页") + @GetMapping("/pageByReceive") + public ResResult> pageByReceive(PageParam pageParam, SiteMessageInfo query) { + return Res.ok(siteMessageService.pageByReceive(pageParam, query)); + } + + @Operation(summary = "发送消息分页") + @GetMapping("/pageBySender") + public ResResult> pageBySender(PageParam pageParam, SiteMessageInfo query) { + return Res.ok(siteMessageService.pageBySender(pageParam, query)); + } + + @Operation(summary = "撤回消息") + @PostMapping("/cancel") + public ResResult cancel(Long id) { + siteMessageService.cancel(id); + return Res.ok(); + } + + @Operation(summary = "删除消息") + @DeleteMapping("/delete") + public ResResult delete(Long id) { + siteMessageService.delete(id); + return Res.ok(); + } + + @IgnoreAuth + @Operation(summary = "标为已读") + @PostMapping("/read") + public ResResult read(Long id) { + siteMessageService.read(id); + return Res.ok(); + } + + @IgnoreAuth + @Operation(summary = "小程序获取未读的接收消息标题列表") + @GetMapping("/listByReceiveNotRead") + public ResResult> listByReceiveNotRead(SiteMessageInfo query) { + return Res.ok(siteMessageService.listByReceiveNotRead(query)); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsChannelConfigController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsChannelConfigController.java new file mode 100644 index 000000000..5ed30259e --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsChannelConfigController.java @@ -0,0 +1,60 @@ +package cn.bootx.platform.notice.controller; + +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.notice.core.sms.service.SmsChannelConfigService; +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import cn.bootx.platform.notice.param.sms.SmsChannelConfigParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * + * @author xxm + * @since 2023/8/5 + */ +@Tag(name = "短信渠道配置") +@RestController +@RequestMapping("/sms/config") +@RequiredArgsConstructor +public class SmsChannelConfigController { + private final SmsChannelConfigService configService; + + @Operation(summary = "添加") + @PostMapping(value = "/add") + public ResResult add(@RequestBody Map map) { + configService.add(map); + return Res.ok(); + } + + @Operation(summary = "修改") + @PostMapping(value = "/update") + public ResResult update(@RequestBody Map map) { + configService.update(map); + return Res.ok(); + } + + @Operation(summary = "通过ID查询") + @GetMapping(value = "/findById") + public ResResult findById(Long id) { + return Res.ok(configService.findById(id)); + } + + @Operation(summary = "通过Code查询") + @GetMapping(value = "/findByCode") + public ResResult findByCode(String code) { + return Res.ok(configService.findByCode(code)); + } + + @Operation(summary = "查询所有") + @GetMapping(value = "/findAll") + public ResResult> findAll() { + return Res.ok(configService.findAll()); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsTemplateController.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsTemplateController.java new file mode 100644 index 000000000..3f6075305 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/controller/SmsTemplateController.java @@ -0,0 +1,67 @@ +package cn.bootx.platform.notice.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.notice.core.sms.service.SmsTemplateService; +import cn.bootx.platform.notice.dto.sms.SmsTemplateDto; +import cn.bootx.platform.notice.param.sms.SmsTemplateParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Tag(name ="短信模板配置") +@RestController +@RequestMapping("/sms/template") +@RequiredArgsConstructor +public class SmsTemplateController { + private final SmsTemplateService smsTemplateService; + + @Operation( summary = "添加") + @PostMapping(value = "/add") + public ResResult add(@RequestBody SmsTemplateParam param){ + smsTemplateService.add(param); + return Res.ok(); + } + + @Operation( summary = "修改") + @PostMapping(value = "/update") + public ResResult update(@RequestBody SmsTemplateParam param){ + smsTemplateService.update(param); + return Res.ok(); + } + + @Operation( summary = "删除") + @DeleteMapping(value = "/delete") + public ResResult delete(Long id){ + smsTemplateService.delete(id); + return Res.ok(); + } + + @Operation( summary = "通过ID查询") + @GetMapping(value = "/findById") + public ResResult findById(Long id){ + return Res.ok(smsTemplateService.findById(id)); + } + + @Operation( summary = "查询所有") + @GetMapping(value = "/findAll") + public ResResult> findAll(){ + return Res.ok(smsTemplateService.findAll()); + } + + @Operation( summary = "分页查询") + @GetMapping(value = "/page") + public ResResult> page(PageParam pageParam, SmsTemplateParam smsTemplateParam){ + return Res.ok(smsTemplateService.page(pageParam,smsTemplateParam)); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java new file mode 100644 index 000000000..e900fc2e5 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/chat/DingChatNoticeParam.java @@ -0,0 +1,30 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.chat; + +import cn.bootx.platform.starter.dingtalk.param.notice.ChatNotice; +import cn.bootx.platform.notice.core.dingtalk.entity.msg.DingMsg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 企业群消息参数 + * + * @author xxm + * @since 2022/7/20 + */ +@Data +@Accessors(chain = true) +@Schema(title = "企业群消息参数") +public class DingChatNoticeParam { + + @Schema(description = "群Id") + private String chatId; + + @Schema(description = "钉钉消息内容") + private DingMsg dingMsg; + + public ChatNotice toDingChatNotice() { + return new ChatNotice().setChatId(chatId).setMsg(dingMsg.toDingMsg()); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java similarity index 80% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java index d0751b850..ad83dc652 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeParam.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.core.dingtalk.entity.corp; +package cn.bootx.platform.notice.core.dingtalk.entity.corp; -import cn.bootx.notice.core.dingtalk.entity.msg.DingMsg; -import cn.bootx.starter.dingtalk.param.notice.CorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.CorpNotice; +import cn.bootx.platform.notice.core.dingtalk.entity.msg.DingMsg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -12,7 +12,7 @@ * 钉钉企业通知消息父类 * * @author xxm - * @date 2022/7/19 + * @since 2022/7/19 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java similarity index 91% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java index 0d780ac0f..b2f5b33ad 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeReceive.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.dingtalk.entity.corp; +package cn.bootx.platform.notice.core.dingtalk.entity.corp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 企业通知接收人配置 * * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java similarity index 83% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java index 4a6baca3f..78e51a4ba 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/corp/DingCorpNoticeUpdate.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.core.dingtalk.entity.corp; +package cn.bootx.platform.notice.core.dingtalk.entity.corp; -import cn.bootx.starter.dingtalk.param.notice.UpdateCorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.UpdateCorpNotice; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -9,7 +9,7 @@ * 企业通知(OA消息)更新 * * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingActionCardMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingActionCardMsg.java similarity index 76% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingActionCardMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingActionCardMsg.java index 182a5c3f0..c5638a138 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingActionCardMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingActionCardMsg.java @@ -1,9 +1,8 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; +package cn.bootx.platform.notice.core.dingtalk.entity.msg; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.starter.dingtalk.param.notice.msg.ActionCardMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.ActionCardMsg.ActionCard; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.ActionCardMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -16,7 +15,7 @@ * 钉钉卡片工作通知消息 * * @author xxm - * @date 2022/7/20 + * @since 2022/7/20 */ @Data @Accessors(chain = true) @@ -59,14 +58,14 @@ public static class OrientationBtn { * 转换成钉钉消息 */ public Msg toDingMsg() { - ActionCard actionCard = new ActionCard().setTitle(title) + ActionCardMsg.ActionCard actionCard = new ActionCardMsg.ActionCard().setTitle(title) .setMarkdown(markdown) .setSingleTitle(singleTitle) .setSingleUrl(singleUrl) .setBtnOrientation(btnOrientation); if (CollUtil.isNotEmpty(orientationBtnList)) { - List btnJsons = orientationBtnList.stream() - .map(o -> new ActionCard.BtnJson().setTitle(o.title).setActionUrl(o.actionUrl)) + List btnJsons = orientationBtnList.stream() + .map(o -> new ActionCardMsg.ActionCard.BtnJson().setTitle(o.title).setActionUrl(o.actionUrl)) .collect(Collectors.toList()); actionCard.setBtnJsonList(btnJsons); } diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingFileMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingFileMsg.java new file mode 100644 index 000000000..50dca7a73 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingFileMsg.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.FileMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 钉钉文件工作通知消息 + * + * @author xxm + * @since 2022/7/19 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@Schema(title = "钉钉图片工作通知消息") +public class DingFileMsg implements DingMsg { + + @Schema(description = "媒体文件id") + private String mediaId; + + /** + * 转换成钉钉消息 + */ + @Override + public Msg toDingMsg() { + return new FileMsg(mediaId); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingImageMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingImageMsg.java new file mode 100644 index 000000000..9d88fcdc1 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingImageMsg.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.ImageMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 钉钉图片工作通知消息 + * + * @author xxm + * @since 2022/7/19 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@RequiredArgsConstructor +@Schema(title = "钉钉图片工作通知消息") +public class DingImageMsg implements DingMsg { + + @Schema(description = "媒体文件id") + private String mediaId; + + /** + * 转换成钉钉消息 + */ + @Override + public Msg toDingMsg() { + return new ImageMsg(mediaId); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingLinkMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingLinkMsg.java similarity index 77% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingLinkMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingLinkMsg.java index 0da19a4ca..3bcb6bac3 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/entity/msg/DingLinkMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingLinkMsg.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.core.dingtalk.entity.msg; +package cn.bootx.platform.notice.core.dingtalk.entity.msg; -import cn.bootx.starter.dingtalk.param.notice.msg.LinkMsg; -import cn.bootx.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.LinkMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -10,7 +10,7 @@ * 钉钉链接信息 * * @author xxm - * @date 2022/7/19 + * @since 2022/7/19 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java new file mode 100644 index 000000000..36bc79ec1 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMarkDownMsg.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.MarkdownMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2022/7/20 + */ +@Data +@Accessors(chain = true) +@Schema(title = "钉钉MarkDown工作通知消息") +public class DingMarkDownMsg implements DingMsg { + + @Schema(description = "标题") + private String title; + + @Schema(description = "内容") + private String text; + + @Override + public Msg toDingMsg() { + return new MarkdownMsg(title, text); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMsg.java new file mode 100644 index 000000000..2c85da399 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingMsg.java @@ -0,0 +1,18 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; + +/** + * 钉钉消息接口 + * + * @author xxm + * @since 2022/7/20 + */ +public interface DingMsg { + + /** + * 转换成钉钉消息 + */ + Msg toDingMsg(); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingOaMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingOaMsg.java new file mode 100644 index 000000000..24e582f1d --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingOaMsg.java @@ -0,0 +1,51 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.OaMsg; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author xxm + * @since 2022/7/19 + */ +@Data +@Accessors(chain = true) +@Schema(title = "钉钉OA消息") +public class DingOaMsg implements DingMsg { + + @JsonProperty("message_url") + @Schema(description = "消息点击链接地址") + private String messageUrl; + + @JsonProperty("pc_message_url") + @Schema(description = "PC端点击消息时跳转到的地址") + private String pcMessageUrl; + + @Schema(description = "消息头部内容") + private OaMsg.Oa.Head head; + + @Schema(description = "消息体") + private OaMsg.Oa.Body body; + + @JsonProperty("status_bar") + @Schema(description = "消息状态栏") + private OaMsg.Oa.StatusBar statusBar; + + /** + * 转换成钉钉消息 + */ + @Override + public Msg toDingMsg() { + OaMsg.Oa oa = new OaMsg.Oa().setMessageUrl(messageUrl) + .setPcMessageUrl(pcMessageUrl) + .setHead(head) + .setBody(body) + .setStatusBar(statusBar); + + return new OaMsg(oa); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingTextMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingTextMsg.java new file mode 100644 index 000000000..c0956a14d --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingTextMsg.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.TextMsg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 钉钉工作通知消息 + * + * @author xxm + * @since 2022/7/19 + */ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "钉钉文本工作通知消息") +public class DingTextMsg implements DingMsg { + + @Schema(description = "文本内容") + private String content; + + /** + * 转换成钉钉消息 + */ + public Msg toDingMsg() { + return new TextMsg(content); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingVoiceMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingVoiceMsg.java new file mode 100644 index 000000000..879b95cb8 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/entity/msg/DingVoiceMsg.java @@ -0,0 +1,38 @@ +package cn.bootx.platform.notice.core.dingtalk.entity.msg; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.VoiceMsg; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 声音消息 + * + * @author xxm + * @since 2022/7/19 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@Schema(title = "声音工作通知消息") +public class DingVoiceMsg implements DingMsg { + + @Schema(description = "媒体文件id") + private String mediaId; + + @Schema(description = "音频时长") + private String duration; + + /** + * 转换成钉钉消息 + */ + @Override + public Msg toDingMsg() { + return new VoiceMsg(mediaId, duration); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java new file mode 100644 index 000000000..f5adfe929 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingRobotNoticeSenderImpl.java @@ -0,0 +1,46 @@ +package cn.bootx.platform.notice.core.dingtalk.service; + +import cn.bootx.platform.notice.service.DingRobotNoticeSender; +import cn.bootx.platform.starter.dingtalk.core.robot.service.DingRobotSendService; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.LinkMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.MarkdownMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.TextMsg; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 钉钉机器人消息 + * + * @author xxm + * @since 2022/7/19 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingRobotNoticeSenderImpl implements DingRobotNoticeSender { + + private final DingRobotSendService dingRobotSendService; + + @Override + public void sendSimpleText(String code, String msg) { + TextMsg dingTalkTextNotice = new TextMsg(msg); + dingRobotSendService.sendNotice(code, dingTalkTextNotice); + } + + @Override + public void sendText(String code, TextMsg dingTalkTextNotice) { + dingRobotSendService.sendNotice(code, dingTalkTextNotice); + } + + @Override + public void sendLink(String code, LinkMsg notice) { + dingRobotSendService.sendNotice(code, notice); + } + + @Override + public void sendMarkdown(String code, MarkdownMsg notice) { + dingRobotSendService.sendNotice(code, notice); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java similarity index 83% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java index 9be42dcf2..692a42463 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/dingtalk/service/DingTalkNoticeSenderImpl.java @@ -1,21 +1,22 @@ -package cn.bootx.notice.core.dingtalk.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeParam; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeUpdate; -import cn.bootx.notice.core.dingtalk.entity.msg.*; -import cn.bootx.notice.service.DingTalkNoticeSender; -import cn.bootx.starter.dingtalk.configuration.DingTalkProperties; -import cn.bootx.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.starter.dingtalk.core.media.service.DingMediaService; -import cn.bootx.starter.dingtalk.core.notice.result.ChatNoticeResult; -import cn.bootx.starter.dingtalk.core.notice.result.CorpNoticeResult; -import cn.bootx.starter.dingtalk.core.notice.service.DingNoticeService; -import cn.bootx.starter.dingtalk.param.notice.ChatNotice; -import cn.bootx.starter.dingtalk.param.notice.CorpNotice; -import cn.bootx.starter.dingtalk.param.notice.RecallCorpNotice; -import cn.bootx.starter.dingtalk.param.notice.UpdateCorpNotice; +package cn.bootx.platform.notice.core.dingtalk.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.notice.core.dingtalk.entity.msg.*; +import cn.bootx.platform.notice.service.DingTalkNoticeSender; +import cn.bootx.platform.starter.dingtalk.code.DingTalkCode; +import cn.bootx.platform.starter.dingtalk.configuration.DingTalkProperties; +import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; +import cn.bootx.platform.starter.dingtalk.core.media.service.DingMediaService; +import cn.bootx.platform.starter.dingtalk.core.notice.result.ChatNoticeResult; +import cn.bootx.platform.starter.dingtalk.core.notice.result.CorpNoticeResult; +import cn.bootx.platform.starter.dingtalk.core.notice.service.DingNoticeService; +import cn.bootx.platform.starter.dingtalk.param.notice.ChatNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.CorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.RecallCorpNotice; +import cn.bootx.platform.starter.dingtalk.param.notice.UpdateCorpNotice; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeParam; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeUpdate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -23,13 +24,11 @@ import java.io.InputStream; import java.util.Objects; -import static cn.bootx.starter.dingtalk.code.DingTalkCode.*; - /** * 钉钉消息通知 * * @author xxm - * @date 2022/7/16 + * @since 2022/7/16 */ @Slf4j @Service @@ -66,7 +65,7 @@ public Long sendImageCorpNotice(DingImageMsg dingImageMsg, DingCorpNoticeReceive */ @Override public Long sendImageCorpNotice(InputStream inputStream, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, MEDIA_IMAGE); + String mediaId = dingMediaService.uploadMedia(inputStream, DingTalkCode.MEDIA_IMAGE); DingImageMsg dingImageMsg = new DingImageMsg(mediaId); return this.sendCorpNotice(dingImageMsg, receive); } @@ -77,7 +76,7 @@ public Long sendImageCorpNotice(InputStream inputStream, DingCorpNoticeReceive r */ @Override public Long sendImageCorpNotice(InputStream inputStream, String filename, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, filename, MEDIA_IMAGE); + String mediaId = dingMediaService.uploadMedia(inputStream, filename, DingTalkCode.MEDIA_IMAGE); DingImageMsg dingImageMsg = new DingImageMsg(mediaId); return this.sendCorpNotice(dingImageMsg, receive); } @@ -97,7 +96,7 @@ public Long sendVoiceCorpNotice(DingVoiceMsg dingVoiceMsg, DingCorpNoticeReceive */ @Override public Long sendVoiceCorpNotice(InputStream inputStream, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, MEDIA_VOICE); + String mediaId = dingMediaService.uploadMedia(inputStream, DingTalkCode.MEDIA_VOICE); DingVoiceMsg dingVoiceMsg = new DingVoiceMsg(mediaId, "10"); return this.sendCorpNotice(dingVoiceMsg, receive); } @@ -108,7 +107,7 @@ public Long sendVoiceCorpNotice(InputStream inputStream, DingCorpNoticeReceive r */ @Override public Long sendVoiceCorpNotice(InputStream inputStream, String filename, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, filename, MEDIA_VOICE); + String mediaId = dingMediaService.uploadMedia(inputStream, filename, DingTalkCode.MEDIA_VOICE); DingVoiceMsg dingVoiceMsg = new DingVoiceMsg(mediaId, "10"); return this.sendCorpNotice(dingVoiceMsg, receive); } @@ -128,7 +127,7 @@ public Long sendFileCorpNotice(DingFileMsg dingFileMsg, DingCorpNoticeReceive re */ @Override public Long sendFileCorpNotice(InputStream inputStream, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, MEDIA_FILE); + String mediaId = dingMediaService.uploadMedia(inputStream, DingTalkCode.MEDIA_FILE); DingFileMsg dingFileMsg = new DingFileMsg(mediaId); return this.sendCorpNotice(dingFileMsg, receive); } @@ -139,7 +138,7 @@ public Long sendFileCorpNotice(InputStream inputStream, DingCorpNoticeReceive re */ @Override public Long sendFileCorpNotice(InputStream inputStream, String filename, DingCorpNoticeReceive receive) { - String mediaId = dingMediaService.uploadMedia(inputStream, filename, MEDIA_FILE); + String mediaId = dingMediaService.uploadMedia(inputStream, filename, DingTalkCode.MEDIA_FILE); DingFileMsg dingFileMsg = new DingFileMsg(mediaId); return this.sendCorpNotice(dingFileMsg, receive); } @@ -187,7 +186,7 @@ private Long sendCorpNotice(DingMsg dingMsg, DingCorpNoticeReceive receive) { corpNotice.setAgentId(dingTalkProperties.getAgentId()); CorpNoticeResult result = dingNoticeService.sendCorpNotice(corpNotice); - if (!Objects.equals(result.getCode(), SUCCESS_CODE)) { + if (!Objects.equals(result.getCode(), DingTalkCode.SUCCESS_CODE)) { throw new BizException(result.getMsg()); } return result.getTaskId(); @@ -201,7 +200,7 @@ public void updateOaCorpNotice(DingCorpNoticeUpdate updateCorpNotice) { UpdateCorpNotice dingUpdateCorpNotice = updateCorpNotice.toDingUpdateCorpNotice(); dingUpdateCorpNotice.setAgentId(dingTalkProperties.getAgentId()); CorpNoticeResult result = dingNoticeService.updateCorpNotice(dingUpdateCorpNotice); - if (!Objects.equals(result.getCode(), SUCCESS_CODE)) { + if (!Objects.equals(result.getCode(), DingTalkCode.SUCCESS_CODE)) { throw new BizException(result.getMsg()); } } @@ -213,7 +212,7 @@ public void updateOaCorpNotice(DingCorpNoticeUpdate updateCorpNotice) { public void recallCorpNotice(Long msgTaskId) { RecallCorpNotice recallCorpNotice = new RecallCorpNotice(dingTalkProperties.getAgentId(), msgTaskId); DingTalkResult result = dingNoticeService.recallCorpNotice(recallCorpNotice); - if (!Objects.equals(result.getCode(), SUCCESS_CODE)) { + if (!Objects.equals(result.getCode(), DingTalkCode.SUCCESS_CODE)) { throw new BizException(result.getMsg()); } } @@ -307,7 +306,7 @@ private String sendChatNotice(DingMsg dingMsg, String chatId) { ChatNotice chatNotice = new ChatNotice(chatId, dingMsg.toDingMsg()); ChatNoticeResult result = dingNoticeService.sendChatNotice(chatNotice); - if (!Objects.equals(result.getCode(), SUCCESS_CODE)) { + if (!Objects.equals(result.getCode(), DingTalkCode.SUCCESS_CODE)) { throw new BizException(result.getMsg()); } return result.getMessageId(); diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/convert/MailConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/convert/MailConvert.java new file mode 100644 index 000000000..6cb7e1e0b --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/convert/MailConvert.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.notice.core.mail.convert; + +import cn.bootx.platform.notice.param.mail.MailConfigParam; +import cn.bootx.platform.notice.core.mail.entity.MailConfig; +import cn.bootx.platform.notice.dto.mail.MailConfigDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 钉钉相关类转换 + * + * @author xxm + * @since 2021/8/5 + */ +@Mapper +public interface MailConvert { + + MailConvert CONVERT = Mappers.getMapper(MailConvert.class); + + MailConfig convert(MailConfigDto in); + + MailConfig convert(MailConfigParam in); + + MailConfigDto convert(MailConfig in); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigManager.java similarity index 77% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigManager.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigManager.java index 5006b1008..8fa429669 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/dao/MailConfigManager.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigManager.java @@ -1,11 +1,11 @@ -package cn.bootx.notice.core.mail.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.notice.core.mail.entity.MailConfig; -import cn.bootx.notice.param.mail.MailConfigParam; +package cn.bootx.platform.notice.core.mail.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.core.mail.entity.MailConfig; +import cn.bootx.platform.notice.param.mail.MailConfigParam; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -16,7 +16,7 @@ /** * @author xxm - * @date 2020/4/8 13:27 + * @since 2020/4/8 13:27 */ @Slf4j @Repository diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigMapper.java new file mode 100644 index 000000000..614327ef6 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/dao/MailConfigMapper.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.notice.core.mail.dao; + +import cn.bootx.platform.notice.core.mail.entity.MailConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 邮件[配置 + * + * @author xxm + * @since 2020/4/8 13:22 + */ +@Mapper +public interface MailConfigMapper extends BaseMapper { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/entity/MailConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/entity/MailConfig.java new file mode 100644 index 000000000..8f71bc3ee --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/entity/MailConfig.java @@ -0,0 +1,69 @@ +package cn.bootx.platform.notice.core.mail.entity; + +import cn.bootx.platform.common.core.annotation.EncryptionField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.notice.core.mail.convert.MailConvert; +import cn.bootx.platform.notice.param.mail.MailConfigParam; +import cn.bootx.platform.notice.dto.mail.MailConfigDto; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 邮件配置 + * + * @author xxm + * @since 2020/4/8 11:14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName("notice_mail_config") +public class MailConfig extends MpBaseEntity implements EntityBaseFunction { + + /** 编号 */ + private String code; + + /** 名称 */ + private String name; + + /** 邮箱服务器 host */ + private String host; + + /** 邮箱服务器 端口 */ + private Integer port; + + /** 邮箱服务器 账号 */ + @EncryptionField + private String username; + + /** 邮箱服务器 密码 */ + @EncryptionField + private String password; + + /** 邮箱服务器 发送人名称 */ + private String sender; + + /** 邮箱服务器 发送人邮箱账号 */ + @TableField("from_") + private String from; + + /** 是否默认配置 */ + private Boolean activity; + + /** 安全方式 */ + private Integer securityType; + + public static MailConfig init(MailConfigParam in) { + return MailConvert.CONVERT.convert(in); + } + + @Override + public MailConfigDto toDto() { + return MailConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/EmailNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/EmailNoticeSenderImpl.java similarity index 95% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/EmailNoticeSenderImpl.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/EmailNoticeSenderImpl.java index ef0e6dba4..9d49534a8 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/EmailNoticeSenderImpl.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/EmailNoticeSenderImpl.java @@ -1,11 +1,11 @@ -package cn.bootx.notice.core.mail.service; - -import cn.bootx.notice.code.MailCode; -import cn.bootx.notice.dto.mail.MailConfigDto; -import cn.bootx.notice.dto.mail.MailFileParam; -import cn.bootx.notice.dto.mail.SendMailParam; -import cn.bootx.notice.exception.MailConfigNotExistException; -import cn.bootx.notice.service.EmailNoticeSender; +package cn.bootx.platform.notice.core.mail.service; + +import cn.bootx.platform.notice.exception.MailConfigNotExistException; +import cn.bootx.platform.notice.service.EmailNoticeSender; +import cn.bootx.platform.notice.code.MailCode; +import cn.bootx.platform.notice.dto.mail.MailConfigDto; +import cn.bootx.platform.notice.dto.mail.MailFileParam; +import cn.bootx.platform.notice.dto.mail.SendMailParam; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; @@ -36,7 +36,7 @@ * 邮件发送服务 * * @author xxm - * @date 2020/5/2 16:06 + * @since 2020/5/2 16:06 */ @Slf4j @Service diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/MailConfigService.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/MailConfigService.java similarity index 81% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/MailConfigService.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/MailConfigService.java index 67aacbb3b..ca7bf74dc 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/mail/service/MailConfigService.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/mail/service/MailConfigService.java @@ -1,15 +1,15 @@ -package cn.bootx.notice.core.mail.service; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.core.util.ResultConvertUtil; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.notice.core.mail.dao.MailConfigManager; -import cn.bootx.notice.core.mail.entity.MailConfig; -import cn.bootx.notice.dto.mail.MailConfigDto; -import cn.bootx.notice.exception.MailConfigCodeAlreadyExistedException; -import cn.bootx.notice.exception.MailConfigNotExistException; -import cn.bootx.notice.param.mail.MailConfigParam; +package cn.bootx.platform.notice.core.mail.service; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.exception.MailConfigCodeAlreadyExistedException; +import cn.bootx.platform.notice.exception.MailConfigNotExistException; +import cn.bootx.platform.notice.param.mail.MailConfigParam; +import cn.bootx.platform.notice.core.mail.dao.MailConfigManager; +import cn.bootx.platform.notice.core.mail.entity.MailConfig; +import cn.bootx.platform.notice.dto.mail.MailConfigDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import lombok.AllArgsConstructor; @@ -20,7 +20,7 @@ * 邮件配置 * * @author xxm - * @date 2020/4/8 13:29 + * @since 2020/4/8 13:29 */ @Service @AllArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/convert/SiteMessageConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/convert/SiteMessageConvert.java new file mode 100644 index 000000000..6b27d1cfc --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/convert/SiteMessageConvert.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.notice.core.site.convert; + +import cn.bootx.platform.notice.core.site.entity.SiteMessage; +import cn.bootx.platform.notice.dto.site.SiteMessageDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 站内信转换 + * + * @author xxm + * @since 2021/8/7 + */ +@Mapper +public interface SiteMessageConvert { + + SiteMessageConvert CONVERT = Mappers.getMapper(SiteMessageConvert.class); + + SiteMessageDto convert(SiteMessage in); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageManager.java new file mode 100644 index 000000000..7df9a5dde --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageManager.java @@ -0,0 +1,112 @@ +package cn.bootx.platform.notice.core.site.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.core.site.domain.SiteMessageInfo; +import cn.bootx.platform.notice.core.site.entity.SiteMessage; +import cn.bootx.platform.notice.code.SiteMessageCode; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.stereotype.Repository; + +import java.time.LocalDate; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.bootx.platform.notice.code.SiteMessageCode.STATE_SENT; + +/** + * 站内信 + * + * @author xxm + * @since 2021/8/7 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class SiteMessageManager extends BaseManager { + + /** + * 接收用户消息分页 + */ + public Page pageByReceive(PageParam pageParam, SiteMessageInfo query, Long userId) { + val mpPage = MpUtil.getMpPage(pageParam, SiteMessageInfo.class); + + val wrapper = new LambdaQueryWrapper() + .and(o -> o + .and(p -> p.eq(SiteMessageInfo::getReceiveType, SiteMessageCode.RECEIVE_ALL) + .gt(SiteMessageInfo::getEfficientTime, LocalDate.now())) + .or() + .eq(SiteMessageInfo::getReceiveId, userId)) + .eq(SiteMessageInfo::getSendState, STATE_SENT) + .eq(StrUtil.isNotBlank(query.getTitle()), SiteMessageInfo::getTitle, query.getTitle()) + .orderByAsc(SiteMessageInfo::getHaveRead) + .orderByDesc(SiteMessageInfo::getReadTime); + if (Objects.equals(query.getHaveRead(), true)) { + wrapper.eq(SiteMessageInfo::getHaveRead, query.getHaveRead()); + } + // 已读为空也视为未读 + if (Objects.equals(query.getHaveRead(), false)) { + wrapper.and(o -> o.eq(SiteMessageInfo::getHaveRead, false).or().isNull(SiteMessageInfo::getHaveRead)); + + } + + return baseMapper.pageMassage(mpPage, wrapper); + } + + /** + * 查询未读的消息数量 + */ + public Integer countByReceiveNotRead(Long userId) { + val wrapper = new LambdaQueryWrapper() + .and(o -> o + .and(p -> p.eq(SiteMessageInfo::getReceiveType, SiteMessageCode.RECEIVE_ALL) + .gt(SiteMessageInfo::getEfficientTime, LocalDate.now())) + .or() + .eq(SiteMessageInfo::getReceiveId, userId)) + .and(o -> o.eq(SiteMessageInfo::getHaveRead, false).or().isNull(SiteMessageInfo::getHaveRead)) + .eq(SiteMessageInfo::getSendState, STATE_SENT) + .orderByAsc(SiteMessageInfo::getHaveRead) + .orderByDesc(SiteMessageInfo::getReadTime); + return baseMapper.countMassage(wrapper); + } + + public List listByReceiveNotRead(Long userId) { + Page page = new Page<>(); + page.setSize(5); + page.setSize(1); + val wrapper = new LambdaQueryWrapper() + .and(o -> o + .and(p -> p.eq(SiteMessageInfo::getReceiveType, SiteMessageCode.RECEIVE_ALL) + .gt(SiteMessageInfo::getEfficientTime, LocalDate.now())) + .or() + .eq(SiteMessageInfo::getReceiveId, userId)) + .and(o -> o.eq(SiteMessageInfo::getHaveRead, false).or().isNull(SiteMessageInfo::getHaveRead)) + .eq(SiteMessageInfo::getSendState, STATE_SENT) + .orderByAsc(SiteMessageInfo::getHaveRead) + .orderByDesc(SiteMessageInfo::getReadTime); + return baseMapper.pageMassage(page, wrapper).getRecords().stream() + .map(SiteMessageInfo::getTitle).collect(Collectors.toList()); + } + + /** + * 发送人消息分页 + */ + public Page pageBySender(PageParam pageParam, SiteMessageInfo query, Long userId) { + Page mpPage = MpUtil.getMpPage(pageParam, SiteMessage.class); + return lambdaQuery().select(SiteMessage.class, MpUtil::excludeBigField) + .eq(SiteMessage::getSenderId, userId) + .like(StrUtil.isNotBlank(query.getTitle()), SiteMessage::getSenderId, query.getTitle()) + .eq(StrUtil.isNotBlank(query.getSendState()), SiteMessage::getSendState, query.getSendState()) + .eq(StrUtil.isNotBlank(query.getReceiveType()), SiteMessage::getReceiveType, query.getReceiveType()) + .orderByDesc(SiteMessage::getId) + .page(mpPage); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageMapper.java new file mode 100644 index 000000000..2ce415b49 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageMapper.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.notice.core.site.dao; + +import cn.bootx.platform.notice.core.site.domain.SiteMessageInfo; +import cn.bootx.platform.notice.core.site.entity.SiteMessage; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 站内信 + * + * @author xxm + * @since 2021/8/7 + */ +@Mapper +public interface SiteMessageMapper extends BaseMapper { + + Page pageMassage(Page page, + @Param(Constants.WRAPPER) Wrapper wrapper); + + Integer countMassage(@Param(Constants.WRAPPER) Wrapper wrapper); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserManager.java similarity index 79% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserManager.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserManager.java index c2dbb6b40..3620ed892 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/dao/SiteMessageUserManager.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserManager.java @@ -1,8 +1,8 @@ -package cn.bootx.notice.core.site.dao; +package cn.bootx.platform.notice.core.site.dao; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.notice.core.site.entity.SiteMessageUser; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.notice.core.site.entity.SiteMessageUser; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @@ -12,7 +12,7 @@ /** * @author xxm - * @date 2022/8/14 + * @since 2022/8/14 */ @Slf4j @Repository diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserMapper.java new file mode 100644 index 000000000..b8917594d --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/dao/SiteMessageUserMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.notice.core.site.dao; + +import cn.bootx.platform.notice.core.site.entity.SiteMessageUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2022/8/14 + */ +@Mapper +public interface SiteMessageUserMapper extends BaseMapper { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfo.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfo.java similarity index 94% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfo.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfo.java index 5a681afdf..5e41cdf14 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfo.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfo.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.site.domain; +package cn.bootx.platform.notice.core.site.domain; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -12,7 +12,7 @@ * 站内信信息详情 * * @author xxm - * @date 2022/8/14 + * @since 2022/8/14 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfoMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfoMapper.java similarity index 77% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfoMapper.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfoMapper.java index b56c2100d..26e909a10 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/domain/SiteMessageInfoMapper.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/domain/SiteMessageInfoMapper.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.site.domain; +package cn.bootx.platform.notice.core.site.domain; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -7,7 +7,7 @@ * 只用来生成字段缓存 * * @author xxm - * @date 2022/8/14 + * @since 2022/8/14 */ @Mapper public interface SiteMessageInfoMapper extends BaseMapper { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessage.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessage.java new file mode 100644 index 000000000..7102e5412 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessage.java @@ -0,0 +1,68 @@ +package cn.bootx.platform.notice.core.site.entity; + +import cn.bootx.platform.common.core.annotation.BigField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.notice.core.site.convert.SiteMessageConvert; +import cn.bootx.platform.notice.code.SiteMessageCode; +import cn.bootx.platform.notice.dto.site.SiteMessageDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 站内信 + * + * @author xxm + * @since 2021/8/7 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("notice_site_message") +public class SiteMessage extends MpBaseEntity implements EntityBaseFunction { + + /** 消息标题 */ + private String title; + + /** 消息内容 */ + @BigField + private String content; + + /** + * 接收对象类型 全体/指定用户 + * @see SiteMessageCode#RECEIVE_ALL + */ + private String receiveType; + + /** + * 发布状态 + * @see SiteMessageCode#STATE_SENT + */ + private String sendState; + + /** 发送者id */ + private Long senderId; + + /** 发送者姓名 */ + private String senderName; + + /** 发送时间 */ + private LocalDateTime senderTime; + + /** 撤销时间 */ + private LocalDateTime cancelTime; + + /** 截至有效期 有效超过有效期后全体通知将无法看到 */ + private LocalDate efficientTime; + + @Override + public SiteMessageDto toDto() { + return SiteMessageConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessageUser.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessageUser.java similarity index 81% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessageUser.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessageUser.java index 6442470fe..7539feb03 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/site/entity/SiteMessageUser.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/entity/SiteMessageUser.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.core.site.entity; +package cn.bootx.platform.notice.core.site.entity; -import cn.bootx.common.mybatisplus.base.MpCreateEntity; +import cn.bootx.platform.common.mybatisplus.base.MpCreateEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 消息用户关联信息 * * @author xxm - * @date 2022/8/13 + * @since 2022/8/13 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/service/SiteMessageService.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/service/SiteMessageService.java new file mode 100644 index 000000000..d8312a70a --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/site/service/SiteMessageService.java @@ -0,0 +1,235 @@ +package cn.bootx.platform.notice.core.site.service; + +import cn.bootx.platform.common.core.code.CommonCode; +import cn.bootx.platform.common.core.entity.UserDetail; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.websocket.entity.WsRes; +import cn.bootx.platform.common.websocket.service.UserWsNoticeService; +import cn.bootx.platform.notice.param.site.SendSiteMessageParam; +import cn.bootx.platform.starter.auth.util.SecurityUtil; +import cn.bootx.platform.notice.core.site.dao.SiteMessageManager; +import cn.bootx.platform.notice.core.site.dao.SiteMessageUserManager; +import cn.bootx.platform.notice.core.site.domain.SiteMessageInfo; +import cn.bootx.platform.notice.core.site.entity.SiteMessage; +import cn.bootx.platform.notice.core.site.entity.SiteMessageUser; +import cn.bootx.platform.notice.dto.site.SiteMessageDto; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.DesensitizedUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.bootx.platform.notice.code.SiteMessageCode.*; + +/** + * 站内信 + * + * @author xxm + * @since 2021/8/7 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SiteMessageService { + + private final SiteMessageManager siteMessageManager; + + private final SiteMessageUserManager siteMessageUserManager; + + private final UserWsNoticeService userWsNoticeService; + + /** + * 保存或更新草稿 + */ + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(SendSiteMessageParam param) { + SiteMessage siteMessage; + if (Objects.nonNull(param.getId())) { + siteMessage = siteMessageManager.findById(param.getId()) + .orElseThrow(() -> new DataNotExistException("站内信信息不存在")); + BeanUtil.copyProperties(param, siteMessage, CopyOptions.create().ignoreNullValue()); + } else { + siteMessage = new SiteMessage().setTitle(param.getTitle()) + .setSendState(STATE_DRAFT) + .setContent(param.getContent()) + .setReceiveType(param.getReceiveType()) + .setEfficientTime(param.getEfficientTime()) + .setSenderTime(LocalDateTime.now()); + // 添加消息关联人信息 暂时这段逻辑用不到, 现在发布的都是全体用户信心 + if (Objects.equals(RECEIVE_USER, param.getReceiveType())) { + List siteMessageUsers = param.getReceiveIds() + .stream() + .map(userId -> new SiteMessageUser().setMessageId(param.getId()).setReceiveId(userId)) + .collect(Collectors.toList()); + siteMessageUserManager.saveAll(siteMessageUsers); + } + } + // 新增或更新站内信内容 + val userDetail = SecurityUtil.getCurrentUser(); + siteMessage.setTitle(param.getTitle()) + .setSenderId(userDetail.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) + .setSenderName(userDetail.map(UserDetail::getName).orElse("未知")); + siteMessageManager.saveOrUpdate(siteMessage); + + } + + /** + * 站内信发送消息 + */ + @Transactional(rollbackFor = Exception.class) + public void send(Long id) { + SiteMessage siteMessage = siteMessageManager.findById(id) + .orElseThrow(() -> new DataNotExistException("站内信信息不存在")); + val userDetail = SecurityUtil.getCurrentUser(); + + // 新增站内信内容 + siteMessage.setSenderId(userDetail.map(UserDetail::getId).orElse(DesensitizedUtil.userId())) + .setSendState(STATE_SENT) + .setSenderName(userDetail.map(UserDetail::getName).orElse("未知")) + .setSenderTime(LocalDateTime.now()); + siteMessageManager.updateById(siteMessage); + userWsNoticeService.sendMessageByAll(WsRes.eventNotice(EVENT_MESSAGE_UPDATE)); + } + + /** + * 发送站内信 + */ + @Transactional(rollbackFor = Exception.class) + public void send(SendSiteMessageParam param) { + + // 新增站内信内容 + SiteMessage siteMessage = new SiteMessage().setTitle(param.getTitle()) + .setContent(param.getContent()) + .setSendState(STATE_SENT) + .setReceiveType(param.getReceiveType()) + .setEfficientTime(param.getEfficientTime()) + .setSenderId(param.getSenderId()) + .setSenderName(param.getSenderName()) + .setSenderTime(LocalDateTime.now()); + siteMessageManager.save(siteMessage); + // 添加消息关联人信息 + if (Objects.equals(RECEIVE_USER, param.getReceiveType())) { + + List siteMessageUsers = param.getReceiveIds() + .stream() + .map(userId -> new SiteMessageUser().setMessageId(siteMessage.getId()).setReceiveId(userId)) + .collect(Collectors.toList()); + siteMessageUserManager.saveAll(siteMessageUsers); + userWsNoticeService.sendMessageByUsers(WsRes.eventNotice(EVENT_MESSAGE_UPDATE), param.getReceiveIds()); + } + } + + /** + * 发送给单个用户信息, 发送人为系统 + */ + public void sendSingleUserBySystem(String title, String content, Long userId) { + val param = new SendSiteMessageParam().setTitle(title) + .setContent(content) + .setSenderId(CommonCode.SYSTEM_DEFAULT_USERID) + .setSenderName(CommonCode.SYSTEM_DEFAULT_USERNAME) + .setReceiveType(RECEIVE_USER) + .setReceiveIds(Collections.singletonList(userId)); + this.send(param); + } + + /** + * 发送给多个用户信息, 发送人为系统 + */ + public void sendMultiUserBySystem(String title, String content, List userIds) { + val param = new SendSiteMessageParam().setTitle(title) + .setContent(content) + .setSenderId(CommonCode.SYSTEM_DEFAULT_USERID) + .setSenderName(CommonCode.SYSTEM_DEFAULT_USERNAME) + .setReceiveType(RECEIVE_USER) + .setReceiveIds(userIds); + this.send(param); + } + + /** + * 撤回消息 + */ + @Transactional(rollbackFor = Exception.class) + public void cancel(Long messageId) { + SiteMessage siteMessage = siteMessageManager.findById(messageId) + .orElseThrow(() -> new DataNotExistException("站内信不存在")); + siteMessage.setCancelTime(LocalDateTime.now()).setSendState(STATE_CANCEL); + siteMessageManager.updateById(siteMessage); + userWsNoticeService.sendMessageByAll(WsRes.eventNotice(EVENT_MESSAGE_UPDATE)); + } + + /** + * 删除消息 + */ + @Transactional(rollbackFor = Exception.class) + public void delete(Long messageId) { + SiteMessage siteMessage = siteMessageManager.findById(messageId) + .orElseThrow(() -> new DataNotExistException("站内信不存在")); + if (!CollUtil.toList(STATE_CANCEL, STATE_DRAFT).contains(siteMessage.getSendState())) { + throw new BizException("站内信不是撤回或草稿状态,无法被删除"); + } + siteMessageManager.deleteById(messageId); + siteMessageUserManager.deleteByMessageId(messageId); + } + + /** + * 未读消息数量 + */ + public Integer countByReceiveNotRead(SiteMessageInfo query) { + Long userId = SecurityUtil.getUserId(); + // Long userId = 0L; + return siteMessageManager.countByReceiveNotRead(userId); + } + + /** + * 接收消息分页 + */ + public PageResult pageByReceive(PageParam pageParam, SiteMessageInfo query) { + Long userId = SecurityUtil.getUserId(); + return MpUtil.convert2PageResult(siteMessageManager.pageByReceive(pageParam, query, userId)); + } + + /** + * 发送消息分页 + */ + public PageResult pageBySender(PageParam pageParam, SiteMessageInfo query) { + Long userId = SecurityUtil.getUserId(); + return MpUtil.convert2DtoPageResult(siteMessageManager.pageBySender(pageParam, query, userId)); + } + + /** + * 查询详情 + */ + public SiteMessageDto findById(Long id) { + return siteMessageManager.findById(id).map(SiteMessage::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 阅读 + */ + public void read(Long messageId) { + Long userId = SecurityUtil.getUserId(); + SiteMessageUser siteMessageUser = siteMessageUserManager.findByMessageId(messageId) + .orElse(new SiteMessageUser().setReceiveId(userId).setMessageId(messageId)); + siteMessageUser.setHaveRead(true).setReadTime(LocalDateTime.now()); + siteMessageUserManager.saveOrUpdate(siteMessageUser); + } + + public List listByReceiveNotRead(SiteMessageInfo query) { + Long userId = SecurityUtil.getUserId(); + return siteMessageManager.listByReceiveNotRead(userId); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsChannelConfigConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsChannelConfigConvert.java new file mode 100644 index 000000000..ccfdf66da --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsChannelConfigConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.notice.core.sms.convert; + +import cn.bootx.platform.notice.core.sms.entity.SmsChannelConfig; +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import cn.bootx.platform.notice.param.sms.SmsChannelConfigParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 短信渠道配置 + * @author xxm + * @since 2023-08-03 + */ +@Mapper +public interface SmsChannelConfigConvert { + SmsChannelConfigConvert CONVERT = Mappers.getMapper(SmsChannelConfigConvert.class); + + SmsChannelConfig convert(SmsChannelConfigParam in); + + SmsChannelConfigDto convert(SmsChannelConfig in); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsTemplateConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsTemplateConvert.java new file mode 100644 index 000000000..e65f82fd6 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/convert/SmsTemplateConvert.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.notice.core.sms.convert; + +import cn.bootx.platform.notice.core.sms.entity.SmsTemplate; +import cn.bootx.platform.notice.dto.sms.SmsTemplateDto; +import cn.bootx.platform.notice.param.sms.SmsTemplateParam; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Mapper +public interface SmsTemplateConvert { + SmsTemplateConvert CONVERT = Mappers.getMapper(SmsTemplateConvert.class); + + SmsTemplate convert(SmsTemplateParam in); + + SmsTemplateDto convert(SmsTemplate in); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigManager.java new file mode 100644 index 000000000..918a328d6 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigManager.java @@ -0,0 +1,27 @@ +package cn.bootx.platform.notice.core.sms.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.notice.core.sms.entity.SmsChannelConfig; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SmsChannelConfigManager extends BaseManager { + + + public boolean existsByCode(String code){ + return existedByField(SmsChannelConfig::getCode,code); + } + public boolean existsByCode(String code,Long id){ + return existedByField(SmsChannelConfig::getCode,code,id); + } + + public Optional findByCode(String code){ + return findByField(SmsChannelConfig::getCode,code); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigMapper.java new file mode 100644 index 000000000..63cde2888 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsChannelConfigMapper.java @@ -0,0 +1,13 @@ +package cn.bootx.platform.notice.core.sms.dao; + +import cn.bootx.platform.notice.core.sms.entity.SmsChannelConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2023/3/28 + */ +@Mapper +public interface SmsChannelConfigMapper extends BaseMapper { +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateManager.java new file mode 100644 index 000000000..812128692 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateManager.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.notice.core.sms.dao; + +import cn.bootx.platform.notice.param.sms.SmsTemplateParam; +import cn.bootx.platform.notice.core.sms.entity.SmsTemplate; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.common.query.generator.QueryGenerator; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Repository +@RequiredArgsConstructor +public class SmsTemplateManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, SmsTemplateParam param) { + Page mpPage = MpUtil.getMpPage(pageParam, SmsTemplate.class); + QueryWrapper wrapper = QueryGenerator.generator(param, this.getEntityClass()); + wrapper.select(this.getEntityClass(),MpUtil::excludeBigField) + .orderByDesc(MpUtil.getColumnName(SmsTemplate::getId)); + return this.page(mpPage,wrapper); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateMapper.java new file mode 100644 index 000000000..09ee2fbe3 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/dao/SmsTemplateMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.notice.core.sms.dao; + +import cn.bootx.platform.notice.core.sms.entity.SmsTemplate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Mapper +public interface SmsTemplateMapper extends BaseMapper { +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsChannelConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsChannelConfig.java new file mode 100644 index 000000000..bea4b6958 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsChannelConfig.java @@ -0,0 +1,91 @@ +package cn.bootx.platform.notice.core.sms.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.notice.core.sms.convert.SmsChannelConfigConvert; +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import cn.bootx.platform.notice.param.sms.SmsChannelConfigParam; +import cn.bootx.table.modify.annotation.DbColumn; +import cn.bootx.table.modify.mysql.annotation.DbMySqlFieldType; +import cn.bootx.table.modify.mysql.constants.MySqlFieldTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.dromara.sms4j.provider.enumerate.SupplierType; + +import static com.baomidou.mybatisplus.annotation.FieldStrategy.ALWAYS; +import static com.baomidou.mybatisplus.annotation.FieldStrategy.NEVER; + +/** + * 短信渠道配置 + * @author xxm + * @since 2023/3/28 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("notice_sms_channel_config") +public class SmsChannelConfig extends MpBaseEntity implements EntityBaseFunction { + + /** + * 渠道类型编码 + * @see SupplierType#name() + */ + @DbColumn(comment = "渠道类型编码") + @TableField(updateStrategy = NEVER) + private String code; + + /** + * 渠道类型名称 + * @see SupplierType#getName() + */ + @DbColumn(comment = "渠道类型名称") + private String name; + + /** + * 状态 + * @see cn.bootx.platform.notice.code.SmsChannelStatusCode + */ + @DbColumn(comment = "状态") + private String state; + + /** AccessKey */ + @DbColumn(comment = "AccessKey") + private String accessKey; + + /** AccessSecret */ + @DbColumn(comment = "AccessSecret") + private String accessSecret; + + /** 配置字符串 */ + @DbMySqlFieldType(MySqlFieldTypeEnum.TEXT) + @DbColumn(comment = "配置字符串") + @TableField(updateStrategy = ALWAYS) + private String config; + + /** 图片 */ + @TableField(updateStrategy = ALWAYS) + @DbColumn(comment = "图片") + private Long image; + + /** 排序 */ + @DbColumn(comment = "排序") + private Double sortNo; + + /** 备注 */ + @DbColumn(comment = "备注") + private String remark; + + /** 创建对象 */ + public static SmsChannelConfig init(SmsChannelConfigParam in) { + return SmsChannelConfigConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public SmsChannelConfigDto toDto() { + return SmsChannelConfigConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsTemplate.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsTemplate.java new file mode 100644 index 000000000..38b6fcfc6 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/entity/SmsTemplate.java @@ -0,0 +1,43 @@ +package cn.bootx.platform.notice.core.sms.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.notice.core.sms.convert.SmsTemplateConvert; +import cn.bootx.platform.notice.dto.sms.SmsTemplateDto; +import cn.bootx.platform.notice.param.sms.SmsTemplateParam; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** +* 短信模板配置 +* @author xxm +* @since 2023-08-03 +*/ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("notice_sms_template") +public class SmsTemplate extends MpBaseEntity implements EntityBaseFunction{ + + /** 短信渠道商类型 */ + private String supplierType; + /** 短信模板id */ + private String templateId; + /** 短信模板名称 */ + private String name; + /** 短信模板内容 */ + private String content; + + /** 创建对象 */ + public static SmsTemplate init(SmsTemplateParam in) { + return SmsTemplateConvert.CONVERT.convert(in); + } + + /** 转换成dto */ + @Override + public SmsTemplateDto toDto() { + return SmsTemplateConvert.CONVERT.convert(this); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsChannelConfigService.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsChannelConfigService.java new file mode 100644 index 000000000..8720228d9 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsChannelConfigService.java @@ -0,0 +1,246 @@ +package cn.bootx.platform.notice.core.sms.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.function.CollectorsFunction; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.notice.core.sms.dao.SmsChannelConfigManager; +import cn.bootx.platform.notice.core.sms.entity.SmsChannelConfig; +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import cn.bootx.platform.notice.event.sms.SmsChannelAddEvent; +import cn.bootx.platform.notice.event.sms.SmsChannelUpdateEvent; +import cn.bootx.platform.notice.param.sms.SmsChannelConfigParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.dromara.sms4j.aliyun.config.AlibabaConfig; +import org.dromara.sms4j.api.universal.SupplierConfig; +import org.dromara.sms4j.cloopen.config.CloopenConfig; +import org.dromara.sms4j.comm.exception.SmsBlendException; +import org.dromara.sms4j.core.config.SupplierFactory; +import org.dromara.sms4j.ctyun.config.CtyunConfig; +import org.dromara.sms4j.emay.config.EmayConfig; +import org.dromara.sms4j.huawei.config.HuaweiConfig; +import org.dromara.sms4j.jdcloud.config.JdCloudConfig; +import org.dromara.sms4j.netease.config.NeteaseConfig; +import org.dromara.sms4j.provider.enumerate.SupplierType; +import org.dromara.sms4j.tencent.config.TencentConfig; +import org.dromara.sms4j.unisms.config.UniConfig; +import org.dromara.sms4j.yunpian.config.YunpianConfig; +import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SmsChannelConfigService { + + private final SmsChannelConfigManager configManager; + + private final ApplicationEventPublisher eventPublisher; + + /** + * 添加 + */ + @Transactional(rollbackFor = Exception.class) + public void add(Map map){ + SmsChannelConfigParam param = BeanUtil.toBean(map, SmsChannelConfigParam.class); + SmsChannelConfig channelConfig = SmsChannelConfig.init(param); + // 编码不能重复 + if (configManager.existsByCode(param.getCode())) { + throw new BizException("编码已存在"); + } + String supplierConfig = getSupplierConfig(channelConfig, map); + channelConfig.setConfig(supplierConfig); + configManager.save(channelConfig); + this.initChannelConfig(channelConfig); + eventPublisher.publishEvent(new SmsChannelAddEvent(this,channelConfig.toDto())); + } + + /** + * 更新 + */ + @Transactional(rollbackFor = Exception.class) + public void update(Map map){ + SmsChannelConfigParam param = BeanUtil.toBean(map, SmsChannelConfigParam.class); + SmsChannelConfig channelConfig = configManager.findById(param.getId()) + .orElseThrow(DataNotExistException::new); + // 编码不能重复 + if (configManager.existsByCode(param.getCode(), param.getId())) { + throw new BizException("编码已存在"); + } + BeanUtil.copyProperties(param, channelConfig, CopyOptions.create().ignoreNullValue()); + String supplierConfig = getSupplierConfig(channelConfig, map); + channelConfig.setConfig(supplierConfig); + configManager.updateById(channelConfig); + this.initChannelConfig(channelConfig); + eventPublisher.publishEvent(new SmsChannelUpdateEvent(this,channelConfig.toDto())); + } + + + /** + * 查询全部配置 + */ + public List findAll(){ + // 遍历数据库 + Map map = configManager.findAll() + .stream() + .collect(Collectors.toMap(SmsChannelConfig::getCode, Function.identity(), CollectorsFunction::retainLatest)); + return Arrays.stream(SupplierType.values()) + .map(type-> Optional.ofNullable(map.get(type.name().toLowerCase())) + .orElse(new SmsChannelConfig() + .setCode(type.name().toLowerCase()) + .setSortNo(0.0) + .setName(type.getName()))) + .sorted(Comparator.comparing(SmsChannelConfig::getSortNo)) + .map(SmsChannelConfig::toDto) + .collect(Collectors.toList()); + } + + /** + * 根据ID查询 + */ + public SmsChannelConfigDto findById(Long id) { + return configManager.findById(id).map(SmsChannelConfig::toDto) + .orElseThrow(DataNotExistException::new); + } + + /** + * 根据code查询 + */ + public SmsChannelConfigDto findByCode(String code) { + return configManager.findByCode(code).map(SmsChannelConfig::toDto) + .orElseThrow(DataNotExistException::new); + } + + /** + * 启动成功后初始化所有的短信通道配置 + */ + @EventListener(WebServerInitializedEvent.class) + public void initChannelConfig(){ + List smsChannelConfigs = configManager.findAll(); + smsChannelConfigs.forEach(this::initChannelConfig); + } + + /** + * 启动成功后初始化所有的短信通道配置 + */ + public void initChannelConfig(SmsChannelConfig channelConfig){ + SupplierType supplierType = getSupplierType(channelConfig.getCode()); + String config = channelConfig.getConfig(); + if (StrUtil.isBlank(config)){ + return; + } + SupplierConfig bean; + if (supplierType == SupplierType.ALIBABA) { + bean = JacksonUtil.toBean(config, AlibabaConfig.class); + } else if (supplierType == SupplierType.HUAWEI) { + bean = JacksonUtil.toBean(config, HuaweiConfig.class); + } else if (supplierType == SupplierType.UNI_SMS) { + bean = JacksonUtil.toBean(config, UniConfig.class); + } else if (supplierType == SupplierType.TENCENT) { + bean = JacksonUtil.toBean(config, TencentConfig.class); + } else if (supplierType == SupplierType.YUNPIAN) { + bean = JacksonUtil.toBean(config, YunpianConfig.class); + } else if (supplierType == SupplierType.JD_CLOUD) { + bean = JacksonUtil.toBean(config, JdCloudConfig.class); + } else if (supplierType == SupplierType.CLOOPEN) { + bean = JacksonUtil.toBean(config, CloopenConfig.class); + } else if (supplierType == SupplierType.EMAY) { + bean = JacksonUtil.toBean(config, EmayConfig.class); + } else if (supplierType == SupplierType.CTYUN) { + bean = JacksonUtil.toBean(config, CtyunConfig.class); + } else if (supplierType == SupplierType.NETEASE) { + bean = JacksonUtil.toBean(config, NeteaseConfig.class); + } else { + throw new SmsBlendException("短信加载失败!请检查配置类型."); + } + SupplierFactory.setSupplierConfig(bean); + } + + /** + * 获取供应商配置的序列化 + */ + private String getSupplierConfig(SmsChannelConfig channelConfig, Map map){ + SupplierType supplierType = getSupplierType(channelConfig.getCode()); + if (CollUtil.isEmpty(map)){ + return null; + } + if (supplierType == SupplierType.ALIBABA) { + val bean = BeanUtil.toBean(map, AlibabaConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.HUAWEI) { + val bean = BeanUtil.toBean(map, HuaweiConfig.class); + bean.setAppKey(channelConfig.getAccessKey()); + bean.setAppSecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.UNI_SMS) { + val bean = BeanUtil.toBean(map, UniConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.TENCENT) { + val bean = BeanUtil.toBean(map, TencentConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.YUNPIAN) { + val bean = BeanUtil.toBean(map, YunpianConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.JD_CLOUD) { + val bean = BeanUtil.toBean(map, JdCloudConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.CLOOPEN) { + val bean = BeanUtil.toBean(map, CloopenConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.EMAY) { + val bean = BeanUtil.toBean(map, EmayConfig.class); + bean.setAppId(channelConfig.getAccessKey()); + bean.setSecretKey(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.CTYUN) { + val bean = BeanUtil.toBean(map, CtyunConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else if (supplierType == SupplierType.NETEASE) { + val bean = BeanUtil.toBean(map, NeteaseConfig.class); + bean.setAccessKeyId(channelConfig.getAccessKey()); + bean.setAccessKeySecret(channelConfig.getAccessSecret()); + return JacksonUtil.toJson(bean); + } else { + throw new SmsBlendException("短信加载失败!请检查配置类型."); + } + + } + + /** + * 获取 短信供应商 枚举 + */ + public SupplierType getSupplierType(String code){ + return Arrays.stream(SupplierType.values()) + .filter(supplierType -> supplierType.name().equalsIgnoreCase(code)) + .findFirst() + .orElseThrow(() -> new BizException("短信供应商未找到")); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsTemplateService.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsTemplateService.java new file mode 100644 index 000000000..22c1c354d --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/sms/service/SmsTemplateService.java @@ -0,0 +1,75 @@ +package cn.bootx.platform.notice.core.sms.service; + +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.core.util.ResultConvertUtil; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.core.sms.dao.SmsTemplateManager; +import cn.bootx.platform.notice.core.sms.entity.SmsTemplate; +import cn.bootx.platform.notice.dto.sms.SmsTemplateDto; +import cn.bootx.platform.notice.param.sms.SmsTemplateParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SmsTemplateService { + private final SmsTemplateManager smsTemplateManager; + + /** + * 添加 + */ + public void add(SmsTemplateParam param){ + SmsTemplate smsTemplate = SmsTemplate.init(param); + smsTemplateManager.save(smsTemplate); + } + + /** + * 修改 + */ + public void update(SmsTemplateParam param){ + SmsTemplate smsTemplate = smsTemplateManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + BeanUtil.copyProperties(param,smsTemplate, CopyOptions.create().ignoreNullValue()); + smsTemplateManager.updateById(smsTemplate); + } + + /** + * 分页 + */ + public PageResult page(PageParam pageParam,SmsTemplateParam smsTemplateParam){ + return MpUtil.convert2DtoPageResult(smsTemplateManager.page(pageParam,smsTemplateParam)); + } + + /** + * 获取单条 + */ + public SmsTemplateDto findById(Long id){ + return smsTemplateManager.findById(id).map(SmsTemplate::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取全部 + */ + public List findAll(){ + return ResultConvertUtil.dtoListConvert(smsTemplateManager.findAll()); + } + + /** + * 删除 + */ + public void delete(Long id){ + smsTemplateManager.deleteById(id); + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/convert/MessageTemplateConvert.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/convert/MessageTemplateConvert.java new file mode 100644 index 000000000..cdaf3044b --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/convert/MessageTemplateConvert.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.notice.core.template.convert; + +import cn.bootx.platform.notice.param.template.MessageTemplateParam; +import cn.bootx.platform.notice.core.template.entity.MessageTemplate; +import cn.bootx.platform.notice.dto.template.MessageTemplateDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 消息模板转换 + * + * @author xxm + * @since 2021/8/10 + */ +@Mapper +public interface MessageTemplateConvert { + + MessageTemplateConvert CONVERT = Mappers.getMapper(MessageTemplateConvert.class); + + MessageTemplateDto convert(MessageTemplate in); + + MessageTemplate convert(MessageTemplateDto in); + + MessageTemplate convert(MessageTemplateParam in); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateManager.java new file mode 100644 index 000000000..0fb1fb914 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateManager.java @@ -0,0 +1,48 @@ +package cn.bootx.platform.notice.core.template.dao; + +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.core.template.entity.MessageTemplate; +import cn.bootx.platform.notice.param.template.MessageTemplateParam; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * 消息模板 + * + * @author xxm + * @since 2021/8/9 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class MessageTemplateManager extends BaseManager { + + public Optional findByCode(String code) { + return findByField(MessageTemplate::getCode, code); + } + + public boolean existsByCode(String code) { + return existedByField(MessageTemplate::getCode, code); + } + + public boolean existsByCode(String code, Long id) { + return existedByField(MessageTemplate::getCode, code, id); + } + + public Page page(PageParam pageParam, MessageTemplateParam query) { + Page mpPage = MpUtil.getMpPage(pageParam, MessageTemplate.class); + return lambdaQuery().like(StrUtil.isNotBlank(query.getCode()), MessageTemplate::getCode, query.getCode()) + .like(StrUtil.isNotBlank(query.getName()), MessageTemplate::getName, query.getName()) + .orderByDesc(MpIdEntity::getId) + .page(mpPage); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateMapper.java new file mode 100644 index 000000000..038c07bec --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/dao/MessageTemplateMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.notice.core.template.dao; + +import cn.bootx.platform.notice.core.template.entity.MessageTemplate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/8/9 + */ +@Mapper +public interface MessageTemplateMapper extends BaseMapper { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/entity/MessageTemplate.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/entity/MessageTemplate.java new file mode 100644 index 000000000..931748f4a --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/entity/MessageTemplate.java @@ -0,0 +1,47 @@ +package cn.bootx.platform.notice.core.template.entity; + +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.notice.core.template.convert.MessageTemplateConvert; +import cn.bootx.platform.notice.param.template.MessageTemplateParam; +import cn.bootx.platform.notice.code.MessageTemplateCode; +import cn.bootx.platform.notice.dto.template.MessageTemplateDto; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("notice_message_template") +@Accessors(chain = true) +public class MessageTemplate extends MpBaseEntity implements EntityBaseFunction { + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 内容 */ + private String data; + + /** 备注 */ + private String remark; + + /** + * 模板类型 + * @see MessageTemplateCode + */ + private String type; + + public static MessageTemplate init(MessageTemplateParam in) { + return MessageTemplateConvert.CONVERT.convert(in); + } + + @Override + public MessageTemplateDto toDto() { + return MessageTemplateConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/service/MessageTemplateService.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/service/MessageTemplateService.java similarity index 82% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/service/MessageTemplateService.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/service/MessageTemplateService.java index b5f850ad6..609f040c0 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/template/service/MessageTemplateService.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/template/service/MessageTemplateService.java @@ -1,14 +1,14 @@ -package cn.bootx.notice.core.template.service; +package cn.bootx.platform.notice.core.template.service; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.notice.core.template.dao.MessageTemplateManager; -import cn.bootx.notice.core.template.entity.MessageTemplate; -import cn.bootx.notice.dto.template.MessageTemplateDto; -import cn.bootx.notice.param.template.MessageTemplateParam; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.notice.param.template.MessageTemplateParam; +import cn.bootx.platform.notice.core.template.dao.MessageTemplateManager; +import cn.bootx.platform.notice.core.template.entity.MessageTemplate; +import cn.bootx.platform.notice.dto.template.MessageTemplateDto; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.extra.template.Template; @@ -24,7 +24,7 @@ * 消息模板 * * @author xxm - * @date 2021/8/9 + * @since 2021/8/9 */ @Slf4j @Service diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigManager.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigManager.java new file mode 100644 index 000000000..1a87485e4 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigManager.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.notice.core.wechat.dao; + +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.notice.core.wechat.entity.WeChatNoticeConfig; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * 微信消息配置 + * + * @author xxm + * @since 2021/8/10 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class WeChatNoticeConfigManager extends BaseManager { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigMapper.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigMapper.java new file mode 100644 index 000000000..57010736a --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/dao/WeChatNoticeConfigMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.notice.core.wechat.dao; + +import cn.bootx.platform.notice.core.wechat.entity.WeChatNoticeConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2021/8/10 + */ +@Mapper +public interface WeChatNoticeConfigMapper extends BaseMapper { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/entity/WeChatNoticeConfig.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/entity/WeChatNoticeConfig.java new file mode 100644 index 000000000..972c7cf4f --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wechat/entity/WeChatNoticeConfig.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.notice.core.wechat.entity; + +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 微信消息配置 + * + * @author xxm + * @since 2021/8/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("notice_wechat_config") +public class WeChatNoticeConfig extends MpBaseEntity { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeParam.java similarity index 85% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeParam.java index f852a08fa..4466a9a86 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeParam.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.core.wecom.entity; +package cn.bootx.platform.notice.core.wecom.entity; -import cn.bootx.notice.core.wecom.entity.msg.WeComMsg; +import cn.bootx.platform.notice.core.wecom.entity.msg.WeComMsg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -12,7 +12,7 @@ * 企业微信发送消息参数 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeReceive.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeReceive.java similarity index 91% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeReceive.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeReceive.java index 33f66c1d9..2dcff4128 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/WeComNoticeReceive.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/WeComNoticeReceive.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.core.wecom.entity; +package cn.bootx.platform.notice.core.wecom.entity; -import cn.bootx.common.core.util.CollUtil; +import cn.bootx.platform.common.core.util.CollUtil; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -10,7 +10,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComFileMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComFileMsg.java similarity index 86% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComFileMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComFileMsg.java index ca474f8bd..41b16ca2e 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComFileMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComFileMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -7,7 +7,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComImageMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComImageMsg.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComImageMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComImageMsg.java index 96ec9da19..7dbc5189e 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComImageMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComImageMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @NoArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMarkdownMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMarkdownMsg.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMarkdownMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMarkdownMsg.java index cc6e59258..cfd8f6d44 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMarkdownMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMarkdownMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @AllArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMpNewsMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMpNewsMsg.java similarity index 85% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMpNewsMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMpNewsMsg.java index 2bd4f6b78..27663e7c3 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMpNewsMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMpNewsMsg.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.CollUtil; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.CollUtil; import cn.hutool.core.util.ArrayUtil; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +15,7 @@ * mpnews类型的图文消息,跟普通的图文消息一致,唯一的差异是图文内容存储在企业微信。 多次发送mpnews,会被认为是不同的图文,阅读、点赞的统计会被分开计算。 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMsg.java similarity index 76% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMsg.java index 6a17afeed..7f4a58251 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import me.chanjar.weixin.cp.bean.message.WxCpMessage; @@ -6,7 +6,7 @@ * 企业微信通知消息 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ public interface WeComMsg { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComNewsMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComNewsMsg.java similarity index 81% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComNewsMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComNewsMsg.java index eef40f181..b74b443dc 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComNewsMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComNewsMsg.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.CollUtil; +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.util.CollUtil; import cn.hutool.core.util.ArrayUtil; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +15,7 @@ * 暂未支持 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComRobotReceive.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComRobotReceive.java similarity index 83% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComRobotReceive.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComRobotReceive.java index 45baac92d..ddad5674a 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComRobotReceive.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComRobotReceive.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 企微机器人接收人配置 * * @author xxm - * @date 2022/7/24 + * @since 2022/7/24 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextCardMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextCardMsg.java similarity index 90% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextCardMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextCardMsg.java index fdad47d23..cf5e72954 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextCardMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextCardMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -7,7 +7,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextMsg.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextMsg.java index e892a73c3..0bf517c0b 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComTextMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComTextMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @AllArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVideoMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVideoMsg.java similarity index 91% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVideoMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVideoMsg.java index 67ce2c15d..662a419d6 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVideoMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVideoMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @NoArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVoiceMsg.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVoiceMsg.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVoiceMsg.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVoiceMsg.java index 96d0fbe94..04d7def47 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/entity/msg/WeComVoiceMsg.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/entity/msg/WeComVoiceMsg.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.core.wecom.entity.msg; +package cn.bootx.platform.notice.core.wecom.entity.msg; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Data @AllArgsConstructor diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComNoticeSenderImpl.java similarity index 89% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComNoticeSenderImpl.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComNoticeSenderImpl.java index 9ad0b21e7..0454ec561 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComNoticeSenderImpl.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComNoticeSenderImpl.java @@ -1,10 +1,10 @@ -package cn.bootx.notice.core.wecom.service; +package cn.bootx.platform.notice.core.wecom.service; -import cn.bootx.notice.core.wecom.entity.WeComNoticeParam; -import cn.bootx.notice.core.wecom.entity.WeComNoticeReceive; -import cn.bootx.notice.core.wecom.entity.msg.*; -import cn.bootx.notice.service.WeComNoticeSender; -import cn.bootx.starter.wecom.core.notice.service.WeComNoticeService; +import cn.bootx.platform.notice.core.wecom.entity.msg.*; +import cn.bootx.platform.notice.service.WeComNoticeSender; +import cn.bootx.platform.starter.wecom.core.notice.service.WeComNoticeService; +import cn.bootx.platform.notice.core.wecom.entity.WeComNoticeParam; +import cn.bootx.platform.notice.core.wecom.entity.WeComNoticeReceive; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.api.WxConsts; @@ -16,7 +16,7 @@ * 实现类 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Slf4j @Service diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java similarity index 92% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java index 2650006c9..ae141917b 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/core/wecom/service/WeComRobotNoticeSenderImpl.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.core.wecom.service; +package cn.bootx.platform.notice.core.wecom.service; -import cn.bootx.notice.service.WeComRobotNoticeSender; -import cn.bootx.starter.wecom.core.robot.service.WeComRobotNoticeService; +import cn.bootx.platform.notice.service.WeComRobotNoticeSender; +import cn.bootx.platform.starter.wecom.core.robot.service.WeComRobotNoticeService; import cn.hutool.core.codec.Base64; import cn.hutool.core.io.IoUtil; import cn.hutool.crypto.digest.DigestUtil; @@ -18,7 +18,7 @@ * 微信机器人消息发送 * * @author xxm - * @date 2022/7/23 + * @since 2022/7/23 */ @Slf4j @Service diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/BaseMailParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/BaseMailParam.java similarity index 81% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/BaseMailParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/BaseMailParam.java index 5dd3bedeb..acd5b20ba 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/BaseMailParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/BaseMailParam.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; import lombok.Data; import lombok.experimental.Accessors; @@ -9,7 +9,7 @@ * 基础通知参数 * * @author xxm - * @date 2020/5/2 20:32 + * @since 2020/5/2 20:32 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailConfigDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailConfigDto.java similarity index 82% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailConfigDto.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailConfigDto.java index b98878ba2..61a088ba8 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailConfigDto.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailConfigDto.java @@ -1,7 +1,8 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.notice.code.MailCode; +import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -11,7 +12,7 @@ /** * @author xxm - * @date 2020/5/2 14:42 + * @since 2020/5/2 14:42 */ @EqualsAndHashCode(callSuper = true) @Data @@ -51,7 +52,7 @@ public class MailConfigDto extends BaseDto implements Serializable { private Boolean activity = false; /** - * @see cn.bootx.notice.code.MailCode + * @see MailCode */ @Schema(description = "安全方式") private Integer securityType; diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailFileParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailFileParam.java similarity index 86% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailFileParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailFileParam.java index c8a4056ac..92c715905 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailFileParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailFileParam.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; import lombok.Data; import lombok.experimental.Accessors; @@ -7,7 +7,7 @@ * 邮件附件参数 * * @author xxm - * @date 2020/5/2 20:33 + * @since 2020/5/2 20:33 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailTemplateDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailTemplateDto.java similarity index 82% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailTemplateDto.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailTemplateDto.java index f1450ad69..2344a3d61 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/MailTemplateDto.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/MailTemplateDto.java @@ -1,7 +1,6 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/NoticeReceiverDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/NoticeReceiverDto.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/NoticeReceiverDto.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/NoticeReceiverDto.java index b1397aa19..9ae793846 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/NoticeReceiverDto.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/NoticeReceiverDto.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,7 +13,7 @@ * 测试通知接收者管理 * * @author xxm - * @date 2020/5/3 10:56 + * @since 2020/5/3 10:56 */ @EqualsAndHashCode(callSuper = true) @Schema(title = "通知接收者配置dto") diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/SendMailParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/SendMailParam.java similarity index 95% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/SendMailParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/SendMailParam.java index 8efdbfff5..b4a163191 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/SendMailParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/SendMailParam.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -12,7 +12,7 @@ * 发邮件的参数 * * @author xxm - * @date 2020/5/2 20:31 + * @since 2020/5/2 20:31 */ @Schema(title = "发邮件的参数") @Data diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/ToUserRequiredMailParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/ToUserRequiredMailParam.java similarity index 82% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/ToUserRequiredMailParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/ToUserRequiredMailParam.java index 3dffa4af5..0b3a85d28 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/mail/ToUserRequiredMailParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/mail/ToUserRequiredMailParam.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.dto.mail; +package cn.bootx.platform.notice.dto.mail; import lombok.Data; import lombok.experimental.Accessors; @@ -9,7 +9,7 @@ * touser 必需时使用的参数 * * @author xxm - * @date 2020/5/2 20:32 + * @since 2020/5/2 20:32 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/site/SiteMessageDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/site/SiteMessageDto.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/site/SiteMessageDto.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/site/SiteMessageDto.java index 00f76d0e1..46b3cdf9c 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/site/SiteMessageDto.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/site/SiteMessageDto.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.dto.site; +package cn.bootx.platform.notice.dto.site; -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.notice.code.SiteMessageCode; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.notice.code.SiteMessageCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,7 +14,7 @@ * 站内信 * * @author xxm - * @date 2021/8/7 + * @since 2021/8/7 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsChannelConfigDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsChannelConfigDto.java new file mode 100644 index 000000000..495b06594 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsChannelConfigDto.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.notice.dto.sms; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 短信渠道配置 + * @author xxm + * @since 2023-08-04 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "短信渠道配置") +@Accessors(chain = true) +public class SmsChannelConfigDto extends BaseDto { + + @Schema(description = "渠道类型编码") + private String code; + @Schema(description = "渠道类型名称") + private String name; + @Schema(description = "状态") + private String state; + @Schema(description = "AccessKey") + private String accessKey; + @Schema(description = "AccessSecret") + private String accessSecret; + @Schema(description = "配置") + private String config; + @Schema(description = "排序") + private Double sortNo; + @Schema(description = "图片") + private Long image; + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsTemplateDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsTemplateDto.java new file mode 100644 index 000000000..5dd0d135a --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/sms/SmsTemplateDto.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.notice.dto.sms; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Schema(title = "短信模板配置") +@Accessors(chain = true) +public class SmsTemplateDto extends BaseDto { + + @Schema(description = "短信渠道商类型") + private String supplierType; + @Schema(description = "短信模板id") + private String templateId; + @Schema(description = "短信模板名称") + private String name; + @Schema(description = "短信模板内容") + private String content; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/template/MessageTemplateDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/template/MessageTemplateDto.java new file mode 100644 index 000000000..e330b2923 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/template/MessageTemplateDto.java @@ -0,0 +1,44 @@ +package cn.bootx.platform.notice.dto.template; + +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.notice.code.MessageTemplateCode; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 消息模板 + * + * @author xxm + * @since 2021/8/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@Schema(title = "消息模板") +public class MessageTemplateDto extends BaseDto implements Serializable { + + private static final long serialVersionUID = -1377790220501836009L; + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 内容 */ + private String data; + + /** 备注 */ + private String remark; + + /** + * 模板类型 + * @see MessageTemplateCode + */ + private String type; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/wechat/WeChatNoticeConfigDto.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/wechat/WeChatNoticeConfigDto.java similarity index 80% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/wechat/WeChatNoticeConfigDto.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/wechat/WeChatNoticeConfigDto.java index b20b45c45..d60fcd499 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/dto/wechat/WeChatNoticeConfigDto.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/dto/wechat/WeChatNoticeConfigDto.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.dto.wechat; +package cn.bootx.platform.notice.dto.wechat; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +12,7 @@ * 微信通知配置 * * @author xxm - * @date 2021/8/10 + * @since 2021/8/10 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelAddEvent.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelAddEvent.java new file mode 100644 index 000000000..dcbedc55e --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelAddEvent.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.notice.event.sms; + +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 短信渠道添加事件 + * @author xxm + * @since 2023/8/5 + */ +@Getter +public class SmsChannelAddEvent extends ApplicationEvent { + private final SmsChannelConfigDto channelConfig; + + public SmsChannelAddEvent(Object source, SmsChannelConfigDto channelConfig) { + super(source); + this.channelConfig = channelConfig; + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelDisableEnableEvent.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelDisableEnableEvent.java new file mode 100644 index 000000000..81261da41 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelDisableEnableEvent.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.notice.event.sms; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 短信通道停用事件 + * @author xxm + * @since 2023/8/5 + */ +@Getter +public class SmsChannelDisableEnableEvent extends ApplicationEvent { + private final String code; + + public SmsChannelDisableEnableEvent(Object source, String code) { + super(source); + this.code = code; + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelEnableEvent.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelEnableEvent.java new file mode 100644 index 000000000..21fd75b8e --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelEnableEvent.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.notice.event.sms; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 短信通道启用事件 + * @author xxm + * @since 2023/8/5 + */ +@Getter +public class SmsChannelEnableEvent extends ApplicationEvent { + private final String code; + + public SmsChannelEnableEvent(Object source, String code) { + super(source); + this.code = code; + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelUpdateEvent.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelUpdateEvent.java new file mode 100644 index 000000000..44b2102c5 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/event/sms/SmsChannelUpdateEvent.java @@ -0,0 +1,20 @@ +package cn.bootx.platform.notice.event.sms; + +import cn.bootx.platform.notice.dto.sms.SmsChannelConfigDto; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 短信渠道更新事件 + * @author xxm + * @since 2023/8/5 + */ +@Getter +public class SmsChannelUpdateEvent extends ApplicationEvent { + private final SmsChannelConfigDto channelConfig; + + public SmsChannelUpdateEvent(Object source, SmsChannelConfigDto channelConfig) { + super(source); + this.channelConfig = channelConfig; + } +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/CodeTemplateExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/CodeTemplateExistedException.java new file mode 100644 index 000000000..df47db075 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/CodeTemplateExistedException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.notice.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_CODE_ALREADY_EXISTED; + +/** + * 邮箱代码已经存在 + * + * @author xxm + * @since 2020/6/10 16:21 + */ +public class CodeTemplateExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = 6804308428872546951L; + + public CodeTemplateExistedException() { + super(MAIL_CONFIG_CODE_ALREADY_EXISTED, "邮箱代码已经存在."); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/DefaultMailConfigAlreadyExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/DefaultMailConfigAlreadyExistedException.java new file mode 100644 index 000000000..4aac9e62b --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/DefaultMailConfigAlreadyExistedException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.notice.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.notice.code.NoticeCenterErrorCode.DEFAULT_MAIL_CONFIG_ALREADY_EXISTED; + +/** + * 默认邮箱配置 已存在异常 + * + * @author xxm + * @since 2020/5/2 14:43 + */ +public class DefaultMailConfigAlreadyExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = 2775127389987392832L; + + public DefaultMailConfigAlreadyExistedException() { + super(DEFAULT_MAIL_CONFIG_ALREADY_EXISTED, "默认邮箱配置已存在"); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigCodeAlreadyExistedException.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigCodeAlreadyExistedException.java new file mode 100644 index 000000000..100424133 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigCodeAlreadyExistedException.java @@ -0,0 +1,23 @@ +package cn.bootx.platform.notice.exception; + +import cn.bootx.platform.common.core.exception.BizException; + +import java.io.Serializable; + +import static cn.bootx.platform.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_CODE_ALREADY_EXISTED; + +/** + * 邮箱配置编号 已存在异常 + * + * @author xxm + * @since 2020/5/2 14:12 + */ +public class MailConfigCodeAlreadyExistedException extends BizException implements Serializable { + + private static final long serialVersionUID = 6572063368550031815L; + + public MailConfigCodeAlreadyExistedException() { + super(MAIL_CONFIG_CODE_ALREADY_EXISTED, "邮箱配置编号 已存在异常"); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigNotExistException.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigNotExistException.java new file mode 100644 index 000000000..a1ee1c4b1 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailConfigNotExistException.java @@ -0,0 +1,16 @@ +package cn.bootx.platform.notice.exception; + +import cn.bootx.platform.common.core.exception.FatalException; + +import static cn.bootx.platform.notice.code.NoticeCenterErrorCode.MAIL_CONFIG_NOT_EXIST; + +/** + * 邮箱配置不存在异常 + */ +public class MailConfigNotExistException extends FatalException { + + public MailConfigNotExistException() { + super(MAIL_CONFIG_NOT_EXIST, "邮箱配置不存在异常"); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailTemplateNotExistException.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailTemplateNotExistException.java new file mode 100644 index 000000000..1e58621b0 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/exception/MailTemplateNotExistException.java @@ -0,0 +1,19 @@ +package cn.bootx.platform.notice.exception; + +import cn.bootx.platform.common.core.exception.FatalException; + +import static cn.bootx.platform.notice.code.NoticeCenterErrorCode.MAIL_TEMPLATE_NOT_EXIST; + +/** + * 模板不存在 + * + * @author xxm + * @since 2020/11/18 + */ +public class MailTemplateNotExistException extends FatalException { + + public MailTemplateNotExistException() { + super(MAIL_TEMPLATE_NOT_EXIST, "邮箱模板不存在异常"); + } + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailConfigParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailConfigParam.java similarity index 90% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailConfigParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailConfigParam.java index c928d6267..594e8e8bf 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailConfigParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailConfigParam.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.param.mail; +package cn.bootx.platform.notice.param.mail; -import cn.bootx.notice.code.MailCode; +import cn.bootx.platform.notice.code.MailCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ /** * @author xxm - * @date 2020/5/2 14:42 + * @since 2020/5/2 14:42 */ @Data @Schema(title = "邮箱配置 DTO") diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailTemplateParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailTemplateParam.java similarity index 91% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailTemplateParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailTemplateParam.java index 870843cae..e21335960 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/mail/MailTemplateParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/mail/MailTemplateParam.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.param.mail; +package cn.bootx.platform.notice.param.mail; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,7 +9,7 @@ * 邮件模板 * * @author xxm - * @date 2021/8/5 + * @since 2021/8/5 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/site/SendSiteMessageParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/site/SendSiteMessageParam.java similarity index 88% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/param/site/SendSiteMessageParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/site/SendSiteMessageParam.java index 3ae3c0e53..152df4268 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/site/SendSiteMessageParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/site/SendSiteMessageParam.java @@ -1,5 +1,6 @@ -package cn.bootx.notice.param.site; +package cn.bootx.platform.notice.param.site; +import cn.bootx.platform.notice.code.SiteMessageCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -11,7 +12,7 @@ * 站内信发送参数 * * @author xxm - * @date 2021/8/8 + * @since 2021/8/8 */ @Data @Accessors(chain = true) @@ -35,7 +36,7 @@ public class SendSiteMessageParam { /** * 接收者类型 - * @see cn.bootx.notice.code.SiteMessageCode#RECEIVE_ALL + * @see SiteMessageCode#RECEIVE_ALL */ private String receiveType; diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsChannelConfigParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsChannelConfigParam.java new file mode 100644 index 000000000..960b70199 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsChannelConfigParam.java @@ -0,0 +1,39 @@ +package cn.bootx.platform.notice.param.sms; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 短信渠道配置 + * @author xxm + * @since 2023-08-04 + */ +@Data +@Schema(title = "短信渠道配置") +@Accessors(chain = true) +public class SmsChannelConfigParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "渠道类型编码") + private String code; + @Schema(description = "渠道类型名称") + private String name; + @Schema(description = "状态") + private String state; + @Schema(description = "AccessKey") + private String accessKey; + @Schema(description = "AccessSecret") + private String accessSecret; + @Schema(description = "图片") + private Long image; + @Schema(description = "排序") + private Double sortNo; + @Schema(description = "配置") + private String config; + @Schema(description = "备注") + private String remark; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsTemplateParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsTemplateParam.java new file mode 100644 index 000000000..2b88b36ed --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/sms/SmsTemplateParam.java @@ -0,0 +1,29 @@ +package cn.bootx.platform.notice.param.sms; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 短信模板配置 + * @author xxm + * @since 2023-08-03 + */ +@Data +@Schema(title = "短信模板配置") +@Accessors(chain = true) +public class SmsTemplateParam { + + @Schema(description= "主键") + private Long id; + + @Schema(description = "短信渠道商类型") + private String supplierType; + @Schema(description = "短信模板id") + private String templateId; + @Schema(description = "短信模板名称") + private String name; + @Schema(description = "短信模板内容") + private String content; + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/template/MessageTemplateParam.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/template/MessageTemplateParam.java similarity index 78% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/param/template/MessageTemplateParam.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/template/MessageTemplateParam.java index c7f85e680..3002ff1f1 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/param/template/MessageTemplateParam.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/param/template/MessageTemplateParam.java @@ -1,6 +1,6 @@ -package cn.bootx.notice.param.template; +package cn.bootx.platform.notice.param.template; -import io.swagger.v3.oas.annotations.media.Schema; +import cn.bootx.platform.notice.code.MessageTemplateCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -9,7 +9,7 @@ /** * @author xxm - * @date 2021/8/10 + * @since 2021/8/10 */ @Data @Accessors(chain = true) @@ -43,8 +43,7 @@ public class MessageTemplateParam implements Serializable { /** * 模板类型 - * @see cn.bootx.notice.code.MessageTemplateCode + * @see MessageTemplateCode */ - private Integer type; - + private String type; } diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingRobotNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingRobotNoticeSender.java new file mode 100644 index 000000000..c8efdb2e7 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingRobotNoticeSender.java @@ -0,0 +1,35 @@ +package cn.bootx.platform.notice.service; + +import cn.bootx.platform.starter.dingtalk.param.notice.msg.LinkMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.MarkdownMsg; +import cn.bootx.platform.starter.dingtalk.param.notice.msg.TextMsg; + +/** + * 钉钉机器人消息通知 + * + * @author xxm + * @since 2022/7/16 + */ +public interface DingRobotNoticeSender { + + /** + * 简单文本消息发送 + */ + void sendSimpleText(String code, String msg); + + /** + * 文本消息发送 + */ + void sendText(String code, TextMsg dingTalkTextNotice); + + /** + * 发送链接消息 + */ + void sendLink(String code, LinkMsg notice); + + /** + * 发送Markdown消息 + */ + void sendMarkdown(String code, MarkdownMsg notice); + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingTalkNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingTalkNoticeSender.java similarity index 93% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingTalkNoticeSender.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingTalkNoticeSender.java index 6db2e6fcc..5041b6b9c 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/DingTalkNoticeSender.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/DingTalkNoticeSender.java @@ -1,8 +1,8 @@ -package cn.bootx.notice.service; +package cn.bootx.platform.notice.service; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; -import cn.bootx.notice.core.dingtalk.entity.corp.DingCorpNoticeUpdate; -import cn.bootx.notice.core.dingtalk.entity.msg.*; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeReceive; +import cn.bootx.platform.notice.core.dingtalk.entity.corp.DingCorpNoticeUpdate; +import cn.bootx.platform.notice.core.dingtalk.entity.msg.*; import java.io.InputStream; @@ -10,7 +10,7 @@ * 钉钉消息通知服务 * * @author xxm - * @date 2022/7/16 + * @since 2022/7/16 */ public interface DingTalkNoticeSender { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/EmailNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/EmailNoticeSender.java similarity index 76% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/service/EmailNoticeSender.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/EmailNoticeSender.java index a5d68fed9..49d50ffdb 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/EmailNoticeSender.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/EmailNoticeSender.java @@ -1,12 +1,12 @@ -package cn.bootx.notice.service; +package cn.bootx.platform.notice.service; -import cn.bootx.notice.dto.mail.SendMailParam; +import cn.bootx.platform.notice.dto.mail.SendMailParam; /** * 邮件发送服务 * * @author xxm - * @date 2022/7/16 + * @since 2022/7/16 */ public interface EmailNoticeSender { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/SmsNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/SmsNoticeSender.java new file mode 100644 index 000000000..bddc1765c --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/SmsNoticeSender.java @@ -0,0 +1,11 @@ +package cn.bootx.platform.notice.service; + +/** + * 短信通知服务 + * + * @author xxm + * @since 2022/7/16 + */ +public interface SmsNoticeSender { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeChatNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeChatNoticeSender.java new file mode 100644 index 000000000..ccdf917c4 --- /dev/null +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeChatNoticeSender.java @@ -0,0 +1,11 @@ +package cn.bootx.platform.notice.service; + +/** + * 微信消息服务 + * + * @author xxm + * @since 2022/7/16 + */ +public interface WeChatNoticeSender { + +} diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComNoticeSender.java similarity index 89% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComNoticeSender.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComNoticeSender.java index 4e966687d..ff028d87d 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComNoticeSender.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComNoticeSender.java @@ -1,7 +1,7 @@ -package cn.bootx.notice.service; +package cn.bootx.platform.notice.service; -import cn.bootx.notice.core.wecom.entity.WeComNoticeReceive; -import cn.bootx.notice.core.wecom.entity.msg.*; +import cn.bootx.platform.notice.core.wecom.entity.WeComNoticeReceive; +import cn.bootx.platform.notice.core.wecom.entity.msg.*; import java.io.InputStream; @@ -9,7 +9,7 @@ * 企业微信通知服务 * * @author xxm - * @date 2022/7/16 + * @since 2022/7/16 */ public interface WeComNoticeSender { diff --git a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComRobotNoticeSender.java b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComRobotNoticeSender.java similarity index 94% rename from bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComRobotNoticeSender.java rename to bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComRobotNoticeSender.java index d5ae19c86..acde17ea5 100644 --- a/bootx-services/service-notice/src/main/java/cn/bootx/notice/service/WeComRobotNoticeSender.java +++ b/bootx-services/service-notice/src/main/java/cn/bootx/platform/notice/service/WeComRobotNoticeSender.java @@ -1,4 +1,4 @@ -package cn.bootx.notice.service; +package cn.bootx.platform.notice.service; import me.chanjar.weixin.cp.bean.article.NewArticle; @@ -9,7 +9,7 @@ * 企业微信机器人配置 * * @author xxm - * @date 2022/7/16 + * @since 2022/7/16 */ public interface WeComRobotNoticeSender { diff --git a/bootx-services/service-notice/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-notice/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index b7932d201..ffdfb163c 100644 --- a/bootx-services/service-notice/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-services/service-notice/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.notice.NoticeApplication \ No newline at end of file +cn.bootx.platform.notice.NoticeApplication diff --git a/bootx-services/service-notice/src/main/resources/mapper/SiteMessageMapper.xml b/bootx-services/service-notice/src/main/resources/mapper/SiteMessageMapper.xml index 7524d35b1..2dedc17d5 100644 --- a/bootx-services/service-notice/src/main/resources/mapper/SiteMessageMapper.xml +++ b/bootx-services/service-notice/src/main/resources/mapper/SiteMessageMapper.xml @@ -1,8 +1,8 @@ - + - select nsm.id as id, nsm.title as title, @@ -28,4 +28,4 @@ ${ew.customSqlSegment} - \ No newline at end of file + diff --git a/bootx-services/service-office/README.md b/bootx-services/service-office/README.md deleted file mode 100644 index 98dd8af84..000000000 --- a/bootx-services/service-office/README.md +++ /dev/null @@ -1 +0,0 @@ -# 办公服务 \ No newline at end of file diff --git a/bootx-services/service-office/pom.xml b/bootx-services/service-office/pom.xml deleted file mode 100644 index 6baef7d7b..000000000 --- a/bootx-services/service-office/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - bootx-services - cn.bootx.platform - 1.2.3 - - 4.0.0 - - service-office - 办公模块 - - - - - com.mysql - mysql-connector-j - runtime - - - - - com.baomidou - mybatis-plus-boot-starter - - - - - cn.bootx.platform - service-iam - ${bootx-platform.version} - - - - - cn.bootx.platform - service-notice - ${bootx-platform.version} - - - - - cn.bootx.platform - service-baseapi - ${bootx-platform.version} - - - - - cn.bootx.platform - common-starter-flowable - - - - diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/OfficeApplication.java b/bootx-services/service-office/src/main/java/cn/bootx/office/OfficeApplication.java deleted file mode 100644 index e071d0a29..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/OfficeApplication.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.office; - -import org.apache.ibatis.annotations.Mapper; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.ComponentScan; - -/** - * 办公服务 - * - * @author xxm - * @date 2022/8/23 - */ -@ComponentScan -@MapperScan(annotationClass = Mapper.class) -public class OfficeApplication { - -} diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/code/NoticeMessageCode.java b/bootx-services/service-office/src/main/java/cn/bootx/office/code/NoticeMessageCode.java deleted file mode 100644 index 51e45be14..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/code/NoticeMessageCode.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.office.code; - -/** - * 消息通知 - * - * @author xxm - * @date 2022/9/18 - */ -public interface NoticeMessageCode { - - String BPM_TASK_CREATED = "BpmTaskCreated"; - - String BPM_TASK_ASSIGN_CREATED = "BpmTaskAssignCreated"; - - String BPM_TASK_ASSIGN_CANCEL = "BpmTaskAssignCancel"; - - String BPM_TASK_COMPLETED = "BpmTaskCompleted"; - - String BPM_TASK_CANCEL = "BpmTaskCancel"; - - String BPM_TASK_REJECT = "BpmTaskReject"; - - String BPM_TASK_BACK = "BpmTaskBack"; - - String BPM_INSTANCE_COMPLETED = "BpmInstanceCompleted"; - - String BPM_INSTANCE_CANCEL = "BpmInstanceCancel"; - -} diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmMultiInstanceBehaviorServiceImpl.java b/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmMultiInstanceBehaviorServiceImpl.java deleted file mode 100644 index 94d2dfeca..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmMultiInstanceBehaviorServiceImpl.java +++ /dev/null @@ -1,197 +0,0 @@ -package cn.bootx.office.handler.behavior; - -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.iam.core.upms.dao.UserRoleManager; -import cn.bootx.iam.core.upms.entity.UserRole; -import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager; -import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager; -import cn.bootx.starter.flowable.core.instance.entity.BpmInstance; -import cn.bootx.starter.flowable.core.instance.entity.BpmTask; -import cn.bootx.starter.flowable.core.model.dao.BpmModelNodeManager; -import cn.bootx.starter.flowable.core.model.entity.BpmModelNode; -import cn.bootx.starter.flowable.exception.ModelNodeNotExistException; -import cn.bootx.starter.flowable.handler.behavior.BpmMultiInstanceBehaviorService; -import cn.bootx.starter.flowable.local.BpmContext; -import cn.bootx.starter.flowable.local.BpmContextLocal; -import cn.hutool.core.util.NumberUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.flowable.engine.delegate.DelegateExecution; -import org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -import static cn.bootx.starter.flowable.code.ModelNodeCode.*; -import static cn.bootx.starter.flowable.code.TaskCode.RESULT_PASS; -import static cn.bootx.starter.flowable.code.TaskCode.STATE_REJECT; - -/** - * 重写 flowable 多实例行为服务 - * - * @author xxm - * @date 2022/9/4 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class BpmMultiInstanceBehaviorServiceImpl implements BpmMultiInstanceBehaviorService { - - private final BpmModelNodeManager bpmModelNodeManager; - - private final BpmInstanceManager bpmInstanceManager; - - private final BpmTaskManager bpmTaskManager; - - private final UserRoleManager userRoleManager; - - /** - * 人员分配 - * @return - */ - @Override - public List getTaskUsers(DelegateExecution execution, MultiInstanceActivityBehavior behavior) { - BpmContext bpmContext = BpmContextLocal.get(); - - // 获取节点配置并设置处理人 - BpmModelNode modelNode = bpmModelNodeManager - .findByDefIdAndNodeId(execution.getProcessDefinitionId(), execution.getCurrentActivityId()) - .orElseThrow(ModelNodeNotExistException::new); - - // 处理驳回情况的人员分配 - if (Objects.equals(bpmContext.getTaskState(), STATE_REJECT)) { - return this.rejectOrBack(execution, modelNode, bpmContext, behavior); - } - // 正常获取配置的处理人 - return this.getUserIds(execution, modelNode, bpmContext); - - } - - /** - * 获取处理人 - */ - public List getUserIds(DelegateExecution execution, BpmModelNode modelNode, BpmContext bpmContext) { - List userIds = new ArrayList<>(0); - // 发起人 - if (Objects.equals(modelNode.getAssignType(), ASSIGN_SPONSOR)) { - Long startUserId = this.getStartUserId(execution.getProcessInstanceId()); - userIds = Collections.singletonList(String.valueOf(startUserId)); - } - // 用户手动选择 - if (Objects.equals(modelNode.getAssignType(), ASSIGN_SELECT)) { - // noinspection unchecked - userIds = (List) bpmContext.getNextAssign(); - } - - // 指定用户组 - if (Objects.equals(modelNode.getAssignType(), ASSIGN_USER_GROUP)) { - // noinspection unchecked - userIds = (List) modelNode.getAssignRaw(); - } - - // 指定角色 - if (Objects.equals(modelNode.getAssignType(), ASSIGN_GROUP)) { - // noinspection unchecked - List roleIds = (List) modelNode.getAssignRaw(); - userIds = getUserIdsByRole(roleIds); - } - - return userIds; - } - - /** - * 驳回处理 - */ - private List rejectOrBack(DelegateExecution execution, BpmModelNode modelNode, BpmContext bpmContext, - MultiInstanceActivityBehavior behavior) { - // 查询当前环节的任务 - List tasks = bpmTaskManager.findByInstanceIdAndNodeId(execution.getProcessInstanceId(), - execution.getCurrentActivityId()); - // noinspection OptionalGetWithoutIsPresent - Long multiId = tasks.stream().max(Comparator.comparingLong(MpIdEntity::getId)).map(BpmTask::getMultiId).get(); - // 会签和串签处理方式不同 - if (Objects.equals(modelNode.getSequential(), true)) { - // 串签只能拿到之前执行了的任务, 未执行到的不会进行生成 - List processedUserIds = tasks.stream() - .filter(task -> Objects.equals(multiId, task.getMultiId())) - .map(BpmTask::getUserId) - .map(String::valueOf) - .collect(Collectors.toList()); - - // 补全未执行到的任务信息 - List userIds = this.getUserIds(execution, modelNode, bpmContext); - if (processedUserIds.size() >= userIds.size()) { - return processedUserIds; - } - else { - int size = processedUserIds.size(); - // 例如角色一类的分配规则, 重新分配变动了, 可能会出问题, 但我暂时不打算解决 - return CollUtil.sub(userIds, size, userIds.size()); - } - } - else { - // 会签可以拿到之前所有的任务 - return tasks.stream() - .filter(task -> Objects.equals(multiId, task.getMultiId())) - .map(BpmTask::getUserId) - .map(String::valueOf) - .collect(Collectors.toList()); - } - } - - /** - * 获取发起人id - */ - private Long getStartUserId(String processInstanceId) { - return bpmInstanceManager.findByInstanceId(processInstanceId).map(BpmInstance::getStartUserId).orElse(null); - } - - /** - * 根据角色获取人员id集合 - */ - private List getUserIdsByRole(List roleIds) { - return userRoleManager.findAllByRoles(roleIds) - .stream() - .map(UserRole::getUserId) - .map(String::valueOf) - .collect(Collectors.toList()); - } - - /** - * 是否满足结束条件 - */ - @Override - public boolean completionConditionSatisfied(DelegateExecution execution, MultiInstanceActivityBehavior behavior) { - BpmContext bpmContext = BpmContextLocal.get(); - - // 获取节点配置 - BpmModelNode node = bpmModelNodeManager - .findByDefIdAndNodeId(execution.getProcessDefinitionId(), execution.getCurrentActivityId()) - .orElseThrow(ModelNodeNotExistException::new); - // 判断是否是或签 - if (Objects.equals(node.getOrSign(), true)) { - // 获取当前人是否是通过选择了通过 - execution.getId(); - if (Objects.equals(RESULT_PASS, bpmContext.getTaskResult())) { - return true; - } - } - // 判断是否是比例通过 - if (Objects.equals(node.getRatioPass(), true)) { - double passRatio = Optional.ofNullable(node.getPassRatio()).orElse(50.0); - // 查询当前任务完成的个数 - List tasks = bpmTaskManager.findByInstanceIdAndNodeId(execution.getProcessInstanceId(), - execution.getCurrentActivityId()); - long passCount = tasks.stream().filter(o -> Objects.equals(o.getResult(), RESULT_PASS)).count(); - double ratio = NumberUtil.div(passCount, tasks.size()) * 100; - if (ratio >= passRatio) { - return true; - } - } - - return false; - } - -} diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmUserTaskAssignServiceImpl.java b/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmUserTaskAssignServiceImpl.java deleted file mode 100644 index 9a3b43d2c..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/behavior/BpmUserTaskAssignServiceImpl.java +++ /dev/null @@ -1,143 +0,0 @@ -package cn.bootx.office.handler.behavior; - -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.iam.core.upms.dao.UserRoleManager; -import cn.bootx.iam.core.upms.entity.UserRole; -import cn.bootx.starter.flowable.core.instance.dao.BpmInstanceManager; -import cn.bootx.starter.flowable.core.instance.dao.BpmTaskManager; -import cn.bootx.starter.flowable.core.instance.entity.BpmInstance; -import cn.bootx.starter.flowable.core.instance.entity.BpmTask; -import cn.bootx.starter.flowable.core.model.dao.BpmModelNodeManager; -import cn.bootx.starter.flowable.core.model.entity.BpmModelNode; -import cn.bootx.starter.flowable.exception.ModelNodeNotExistException; -import cn.bootx.starter.flowable.handler.behavior.BpmUserTaskAssignService; -import cn.bootx.starter.flowable.local.BpmContext; -import cn.bootx.starter.flowable.local.BpmContextLocal; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.flowable.common.engine.impl.el.ExpressionManager; -import org.flowable.engine.delegate.DelegateExecution; -import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior; -import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; -import org.flowable.engine.impl.util.TaskHelper; -import org.flowable.task.service.TaskService; -import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import org.springframework.stereotype.Service; - -import java.util.Comparator; -import java.util.List; -import java.util.Objects; - -import static cn.bootx.starter.flowable.code.BpmnCode.MULTI_TASK_ID; -import static cn.bootx.starter.flowable.code.ModelNodeCode.*; -import static cn.bootx.starter.flowable.code.TaskCode.STATE_REJECT; - -/** - * 处理普通任务人员分配 - * - * @author xxm - * @date 2022/9/4 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class BpmUserTaskAssignServiceImpl implements BpmUserTaskAssignService { - - private final BpmModelNodeManager bpmModelNodeManager; - - private final BpmInstanceManager bpmInstanceManager; - - private final BpmTaskManager bpmTaskManager; - - private final UserRoleManager userRoleManager; - - @Override - public void handleAssignments(TaskService taskService, String assignee, String owner, List candidateUsers, - List candidateGroups, TaskEntity task, ExpressionManager expressionManager, - DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration, - UserTaskActivityBehavior userTaskActivityBehavior) { - Long userId = null; - BpmContext bpmContext = BpmContextLocal.get(); - - // 情况一,如果是多实例的任务,例如说会签、串签等情况,已经被分配完毕, 直接从 Variable 中获取。 - val multiInstanceActivityBehavior = userTaskActivityBehavior.getMultiInstanceActivityBehavior(); - if (Objects.nonNull(userTaskActivityBehavior.getMultiInstanceActivityBehavior())) { - Object multiId = execution.getVariable(MULTI_TASK_ID); - if (Objects.nonNull(multiId)) { - bpmContext.setTaskMultiId((Long) multiId); - } - - val userIdStr = execution.getVariable(multiInstanceActivityBehavior.getCollectionElementVariable()); - TaskHelper.changeTaskAssignee(task, userIdStr.toString()); - return; - } - - // 情况二,驳回/退回处理 - if (Objects.equals(bpmContext.getTaskState(), STATE_REJECT)) { - Long rejectUserId = this.getRejectOrBackUserId(task); - TaskHelper.changeTaskAssignee(task, String.valueOf(rejectUserId)); - return; - } - - // 情况三,如果非多实例的任务,则获取节点配置并设置处理人 - BpmModelNode modelTask = bpmModelNodeManager - .findByDefIdAndNodeId(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) - .orElseThrow(ModelNodeNotExistException::new); - // 发起人 - if (Objects.equals(modelTask.getAssignType(), ASSIGN_SPONSOR)) { - userId = this.getStartUserId(execution.getProcessInstanceId()); - } - // 用户手动选择 - if (Objects.equals(modelTask.getAssignType(), ASSIGN_SELECT)) { - userId = Long.valueOf(bpmContext.getNextAssign().toString()); - } - - // 指定用户 - if (Objects.equals(modelTask.getAssignType(), ASSIGN_USER)) { - userId = Long.valueOf(modelTask.getAssignRaw().toString()); - } - - // 指定角色 角色有多个, 只会从里面抽一个人 - if (Objects.equals(modelTask.getAssignType(), ASSIGN_ROLE)) { - Long roleId = Long.valueOf(modelTask.getAssignRaw().toString()); - userId = this.getUserIdByRole(roleId); - } - // 部门负责人 负责人有多个, 只会从里面抽一个人 - if (Objects.equals(modelTask.getAssignType(), ASSIGN_DEPT_LEADER)) { - Long deptId = Long.valueOf(modelTask.getAssignRaw().toString()); - - } - TaskHelper.changeTaskAssignee(task, String.valueOf(userId)); - } - - /** - * 获取被驳回/退回人的用户id - */ - private Long getRejectOrBackUserId(TaskEntity task) { - // 查询当前环节的历史任务 - List tasks = bpmTaskManager.findByInstanceIdAndNodeId(task.getProcessInstanceId(), - task.getTaskDefinitionKey()); - // noinspection OptionalGetWithoutIsPresent - return tasks.stream() - .filter(o -> Objects.nonNull(o.getEndTime())) - .max(Comparator.comparingLong(MpIdEntity::getId)) - .map(BpmTask::getUserId) - .get(); - } - - /** - * 获取发起人id - */ - private Long getStartUserId(String processInstanceId) { - return bpmInstanceManager.findByInstanceId(processInstanceId).map(BpmInstance::getStartUserId).orElse(null); - } - - /** - * 根据角色获取人员id集合 - */ - private Long getUserIdByRole(Long roleId) { - return userRoleManager.findAllByRole(roleId).stream().map(UserRole::getUserId).findAny().orElse(null); - } - -} diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmInstanceNoticeService.java b/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmInstanceNoticeService.java deleted file mode 100644 index b3479b9ba..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmInstanceNoticeService.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.bootx.office.handler.message; - -import cn.bootx.notice.core.site.service.SiteMessageService; -import cn.bootx.notice.core.template.service.MessageTemplateService; -import cn.bootx.starter.flowable.core.instance.entity.BpmInstance; -import cn.bootx.starter.flowable.event.ProcessCancelEvent; -import cn.bootx.starter.flowable.event.ProcessCompletedEvent; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; - -import static cn.bootx.office.code.NoticeMessageCode.BPM_INSTANCE_CANCEL; -import static cn.bootx.office.code.NoticeMessageCode.BPM_INSTANCE_COMPLETED; - -/** - * 流程实例消息发送 - * - * @author xxm - * @date 2022/9/18 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class BpmInstanceNoticeService { - - private final SiteMessageService messageService; - - private final MessageTemplateService messageTemplateService; - - /** - * 流程完成时通知发起人 - */ - @EventListener - public void ProcessCompleted(ProcessCompletedEvent event) { - BpmInstance bpmInstance = event.getBpmInstance(); - // 发送完成消息 - String title = StrUtil.format("{} 流程执行完成", bpmInstance.getInstanceName()); - Map map = new HashMap<>(); - String content = messageTemplateService.rendering(BPM_INSTANCE_COMPLETED, map); - messageService.sendSingleUserBySystem(title, content, bpmInstance.getStartUserId()); - } - - /** - * 流程取消时通知发起人 - */ - @EventListener - public void ProcessCancel(ProcessCancelEvent event) { - BpmInstance bpmInstance = event.getBpmInstance(); - String title = StrUtil.format("{} 流程被取消", bpmInstance.getInstanceName()); - Map map = new HashMap<>(); - String content = messageTemplateService.rendering(BPM_INSTANCE_CANCEL, map); - messageService.sendSingleUserBySystem(title, content, bpmInstance.getStartUserId()); - } - -} diff --git a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmTaskNoticeService.java b/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmTaskNoticeService.java deleted file mode 100644 index 2f95b7868..000000000 --- a/bootx-services/service-office/src/main/java/cn/bootx/office/handler/message/BpmTaskNoticeService.java +++ /dev/null @@ -1,123 +0,0 @@ -package cn.bootx.office.handler.message; - -import cn.bootx.notice.core.site.service.SiteMessageService; -import cn.bootx.notice.core.template.service.MessageTemplateService; -import cn.bootx.office.code.NoticeMessageCode; -import cn.bootx.starter.flowable.core.instance.entity.BpmTask; -import cn.bootx.starter.flowable.event.*; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.event.EventListener; -import org.springframework.retry.annotation.Backoff; -import org.springframework.retry.annotation.Retryable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; -import java.util.Map; - -/** - * 消息发送 - * - * @author xxm - * @date 2022/9/18 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class BpmTaskNoticeService { - - private final SiteMessageService messageService; - - private final MessageTemplateService messageTemplateService; - - /** - * 流程任务创建事件 - */ - @EventListener - public void taskCreated(TaskCreatedEvent event) { - BpmTask bpmTask = event.getBpmTask(); - Map map = new HashMap<>(); - String title = StrUtil.format("{} 的 {} 需要处理", bpmTask.getInstanceName(), bpmTask.getNodeName()); - String content = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_CREATED, map); - messageService.sendSingleUserBySystem(title, content, bpmTask.getUserId()); - } - - /** - * 流程任务更改处理人事件 - */ - @EventListener - @Transactional(rollbackFor = Exception.class) - @Retryable(value = Exception.class, maxAttempts = 2, backoff = @Backoff(value = 2000L)) - public void taskAssign(TaskAssignEvent event) { - // 发送给原处理人 - BpmTask bpmTask = event.getBpmTask(); - Map oldMap = new HashMap<>(); - String oldTitle = StrUtil.format("{} 的 {} 任务已成功被委派给 {}", bpmTask.getInstanceName(), bpmTask.getNodeName(), - event.getNewAssignName()); - String oldContent = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_ASSIGN_CANCEL, oldMap); - messageService.sendSingleUserBySystem(oldTitle, oldContent, event.getOldAssign()); - // 发送给新处理人 - Map newMap = new HashMap<>(); - String newTitle = StrUtil.format("{} 的 {} {} 任务已经委派给您", event.getOldAssignName(), bpmTask.getInstanceName(), - bpmTask.getNodeName()); - String newContent = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_ASSIGN_CREATED, newMap); - messageService.sendSingleUserBySystem(newTitle, newContent, event.getNewAssign()); - } - - /** - * 流程任务完成事件 - */ - @EventListener - public void taskCompleted(TaskCompletedEvent event) { - if (!event.isMulti()) { - return; - } - for (BpmTask bpmTask : event.getBpmTasks()) { - // 发送给新处理人 - Map newMap = new HashMap<>(); - String newTitle = StrUtil.format("{} {} 任务已经被完成", bpmTask.getInstanceName(), bpmTask.getNodeName()); - String newContent = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_COMPLETED, newMap); - messageService.sendSingleUserBySystem(newTitle, newContent, bpmTask.getUserId()); - } - } - - /** - * 流程任务取消事件 - */ - @EventListener - public void taskCancel(TaskCancelEvent event) { - for (BpmTask bpmTask : event.getBpmTasks()) { - Map map = new HashMap<>(); - String title = StrUtil.format("{} {} 任务已经被完成", bpmTask.getInstanceName(), bpmTask.getNodeName()); - String content = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_CANCEL, map); - messageService.sendSingleUserBySystem(title, content, bpmTask.getUserId()); - } - } - - /** - * 流程任务驳回事件 - */ - @EventListener - public void taskReject(TaskRejectEvent event) { - BpmTask bpmTask = event.getBpmTask(); - Map map = new HashMap<>(); - String title = StrUtil.format("{} {} 任务已经被驳回", bpmTask.getInstanceName(), bpmTask.getNodeName()); - String content = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_REJECT, map); - messageService.sendSingleUserBySystem(title, content, bpmTask.getUserId()); - } - - /** - * 流程任务驳回事件 - */ - @EventListener - public void taskBack(TaskBackEvent event) { - BpmTask bpmTask = event.getBpmTask(); - Map map = new HashMap<>(); - String title = StrUtil.format("{} {} 任务已经被退回", bpmTask.getInstanceName(), bpmTask.getNodeName()); - String content = messageTemplateService.rendering(NoticeMessageCode.BPM_TASK_BACK, map); - messageService.sendSingleUserBySystem(title, content, bpmTask.getUserId()); - } - -} diff --git a/bootx-services/service-office/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-office/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index d307106db..000000000 --- a/bootx-services/service-office/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.bootx.office.OfficeApplication \ No newline at end of file diff --git a/bootx-services/service-payment/README.md b/bootx-services/service-payment/README.md deleted file mode 100644 index c352cbf3d..000000000 --- a/bootx-services/service-payment/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# 支付中心 - -## 介绍 - -## 能力 -1. 支付 - - 支付宝 - - 微信 - - 银联云闪付 - - 电子钱包 - - 现金支付 -2. 组合支付,支持三方支付和自有(钱包、现金等)共同使用 -4. 聚合支付,支持微信支付宝的聚合扫码和付款码支付 -5. 支付记录 -6. 支付回调记录 -7. 分账 - -## 核心概念 -### 对象 -- Payment 主支付记录: 用于记录当前支付的公共信息,同时每个不同的支付方式都有对应的子payment,比如:AliPayPayment,WeChatPayment,PointPayment等 -- PayChannel 支付通道,例如支付宝、微信、钱包、现金等,包含通道网关地址,支持具体支付方式等 -- PayMode 支付方式 与支付通道相对应,支付方式会更细化,PayMode包含具体支付类型(扫码、付款码)和支付金额,以及支付扩展参数。 -- OrderBilling 账单,每个PayMode生成一个账单。 -- OrderBillingItem 账单项 每个支付的项都会在其支持的PayMode下面生成一个对应的账单项。 -###其他 -- 同步支付 调用支付后直接就完成支付的支付方式 -- 异步支付 调用支付后,需要支付通道网关回调才能确认支付完成的支付方式,如支付宝、微信、云闪付等三方支付 -## 使用 - -### 支付路由 - -### 支付调用 -> 通常支付前会先下订单,然后再进行支付,订单号做为业务单号。演示DEMO参见shop-engine文档 - -1. 根据传入请求,组装出PayMode支付方式参数, -2. 组装请求参数,调用pay方法,根据返回值进行下一步操作 -3. 如果是同步支付,直接根据返回的payment对象进行处理 -4. 如果是异步支付方式,获取返回异步支付参数,根据异步支付参数调起支付 diff --git a/bootx-services/service-payment/pom.xml b/bootx-services/service-payment/pom.xml deleted file mode 100644 index f42c4963c..000000000 --- a/bootx-services/service-payment/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - cn.bootx.platform - bootx-services - 1.2.3 - - - 4.0.0 - - service-payment - jar - - - - - - com.mysql - mysql-connector-j - runtime - - - - - com.baomidou - mybatis-plus-boot-starter - - - - - com.github.javen205 - IJPay-AliPay - ${IJPay.version} - - - cn.hutool - hutool-all - - - xml-apis - xml-apis - - - fastjson - com.alibaba - - - - - - - com.github.javen205 - IJPay-WxPay - ${IJPay.version} - - - - - com.github.javen205 - IJPay-UnionPay - ${IJPay.version} - - - - - cn.bootx.platform - service-iam - ${bootx-platform.version} - - - - - cn.bootx.platform - common-starter-auth - - - - - cn.bootx.platform - common-starter-file - - - - - cn.bootx.platform - common-super-query - - - - - cn.bootx.platform - common-rabbitmq - - - - - cn.bootx.platform - common-starter-quartz - - - - - - diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/PaymentApplication.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/PaymentApplication.java deleted file mode 100644 index 576fd2ac9..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/PaymentApplication.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment; - -import org.apache.ibatis.annotations.Mapper; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.context.annotation.ComponentScan; - -/** - * 支付中心 - * - * @author xxm - * @date 2021/7/27 - */ -@ComponentScan -@ConfigurationPropertiesScan -@MapperScan(annotationClass = Mapper.class) -public class PaymentApplication { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/CachingCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/CachingCode.java deleted file mode 100644 index 7aa0a83d1..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/CachingCode.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.payment.code; - -/** - * 支付服务缓存 - * - * @author xxm - * @date 2022/7/11 - */ -public interface CachingCode { - - /** 支付单(主键) */ - String PAYMENT_ID = "pay:payment:id"; - - /** 支付单(业务号码) */ - String PAYMENT_BUSINESS_ID = "pay:payment:business"; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentCenterErrorCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentCenterErrorCode.java deleted file mode 100644 index 5183fc452..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentCenterErrorCode.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.payment.code; - -/** - * 错误码 - * - * @author xxm - * @date 2020/12/7 - */ -public interface PaymentCenterErrorCode { - - // 支付过程相关 - /** - * 支付金额异常 - */ - int PAYMENT_AMOUNT_ABNORMAL = 28100; - - /** - * 支付记录不存在 - */ - int PAYMENT_RECORD_NOT_EXISTED = 28101; - - /** - * 支付在进行中 - */ - int PAYMENT_IS_PROCESSING = 28102; - - /** - * 支付失败 - */ - int PAY_FAILURE = 28103; - - /** - * 支付已经存在 - */ - int PAYMENT_HAS_EXISTED = 28104; - - /** - * 支付手动取消 - */ - int PAYMENT_CANCEL = 28105; - - /** - * 不支持的支付方式 - */ - int PAYMENT_METHOD_UNSUPPORT = 28106; - - /** - * 钱包已存在 - */ - int WALLET_ALREADY_EXISTS = 28814; - - /** - * 钱包不存在 - */ - int WALLET_NOT_EXISTS = 28815; - - /** - * 钱包已被禁用 - */ - int WALLET_BANNED = 28816; - - /** - * 钱包余额不足 - */ - int WALLET_BALANCE_NOT_ENOUGH = 28817; - - /** - * wallet 信息不存在 - */ - int WALLET_INFO_NOT_EXISTS = 28819; - - /** - * 钱包日志异常(类型不正确,或者充值金额小于0等场景) - */ - int WALLET_LOG_ERROR = 28827; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentEventCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentEventCode.java deleted file mode 100644 index 07cb8c14c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/PaymentEventCode.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bootx.payment.code; - -public interface PaymentEventCode { - - /** 支付中心交换机 */ - String EXCHANGE_PAYMENT = "service.payment"; - - /** 支付完成 */ - String PAY_COMPLETE = "pay.complete"; - - /** 支付取消 */ - String PAY_CANCEL = "pay.cancel"; - - /** 支付退款 */ - String PAY_REFUND = "pay.refund"; - - /** 支付单超时 */ - String PAYMENT_EXPIRED_TIME = "payment.expired:time"; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelCode.java deleted file mode 100644 index e4e11205a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelCode.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.payment.code.pay; - -import java.util.Arrays; -import java.util.List; - -/** - * 支付通道 - * - * @author xxm - * @date 2021/2/24 - */ -public interface PayChannelCode { - - /** - * 支付通道类型 1.支付宝 2.微信 3.云闪付 4.现金 5.钱包 6.储值卡 8.信用卡 9.ApplePay 10.渠道方支付 99.聚合支付 - */ - int ALI = 1; - - int WECHAT = 2; - - int UNION_PAY = 3; - - int CASH = 4; - - int WALLET = 5; - - int VOUCHER = 6; - - int CREDIT_CARD = 8; - - int APPLE_PAY = 9; - - int CHANNEL_PAY = 10; - - int AGGREGATION = 99; - - /** 支付宝 UA */ - String UA_ALI_PAY = "Alipay"; - - /** 微信 UA */ - String UA_WECHAT_PAY = "MicroMessenger"; - - /** 异步支付通道 */ - List ASYNC_TYPE = Arrays.asList(ALI, WECHAT, UNION_PAY, APPLE_PAY); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelEnum.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelEnum.java deleted file mode 100644 index cb8d47a94..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayChannelEnum.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.bootx.payment.code.pay; - -import cn.bootx.payment.exception.payment.PayFailureException; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Arrays; -import java.util.Objects; - -/** - * 支付通道枚举 - * - * @author xxm - * @date 2021/7/26 - */ -@Getter -@AllArgsConstructor -public enum PayChannelEnum { - - ALI(PayChannelCode.ALI, "ALI"), WECHAT(PayChannelCode.WECHAT, "WECHAT"), - UNION_PAY(PayChannelCode.UNION_PAY, "UNION_PAY"), CASH(PayChannelCode.CASH, "CASH"), - WALLET(PayChannelCode.WALLET, "WALLET"), VOUCHER(PayChannelCode.VOUCHER, "VOUCHER"), - CREDIT_CARD(PayChannelCode.CREDIT_CARD, "CREDIT"), APPLE_PAY(PayChannelCode.APPLE_PAY, "APPLE"), - CHANNEL_PAY(PayChannelCode.CHANNEL_PAY, "CHANNEL"), AGGREGATION(PayChannelCode.AGGREGATION, "AGGREGATION"); - - /** 支付通道数字编码 */ - private final int no; - - /** 支付通道字符编码 */ - private final String code; - - /** - * 根据数字编号获取 - */ - public static PayChannelEnum findByNo(int no) { - return Arrays.stream(PayChannelEnum.values()) - .filter(e -> e.getNo() == no) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付通道")); - } - - /** - * 根据字符编码获取 - */ - public static PayChannelEnum findByCode(String code) { - return Arrays.stream(PayChannelEnum.values()) - .filter(e -> Objects.equals(code, e.getCode())) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付通道")); - } - - public static boolean existsByCode(String code) { - return Arrays.stream(PayChannelEnum.values()) - .anyMatch(payChannelEnum -> Objects.equals(payChannelEnum.getCode(), code)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayModelExtraCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayModelExtraCode.java deleted file mode 100644 index 06c043b8a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayModelExtraCode.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.payment.code.pay; - -/** - * 支付方式扩展字段 - * - * @author xxm - * @date 2022/2/27 - */ -public interface PayModelExtraCode { - - /** 付款码 */ - String AUTH_CODE = "authCode"; - - /** openId */ - String OPEN_ID = "openId"; - - /** 单张储值卡 */ - String VOUCHER_NO = "voucherNo"; - - /** 同步通知路径 支付完成跳转的页面地址 */ - String RETURN_URL = "returnUrl"; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayStatusCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayStatusCode.java deleted file mode 100644 index 8ac68f115..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayStatusCode.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.bootx.payment.code.pay; - -/** - * 支付状态 - * - * @author xxm - * @date 2021/3/1 - */ -public interface PayStatusCode { - - /** - * 支付状态 0.支付中 1.成功 2.失败 3.支付取消(超时/手动取消/订单已经关闭,撤销支付单) 4.退款中 5.已退款 - */ - int TRADE_PROGRESS = 0; - - int TRADE_SUCCESS = 1; - - int TRADE_FAIL = 2; - - int TRADE_CANCEL = 3; - - int TRADE_REFUNDING = 4; - - int TRADE_REFUNDED = 5; - - /** - * 回调信息支付状态 0.失败 1.成功 - */ - int NOTIFY_TRADE_FAIL = 0; - - int NOTIFY_TRADE_SUCCESS = 1; - - /** 回调处理状态 */ - int NOTIFY_PROCESS_FAIL = 0; - - int NOTIFY_PROCESS_SUCCESS = 1; - - int NOTIFY_PROCESS_IGNORE = 2; - - /** 退款处理状态 0.失败 1.成功 */ - int REFUND_PROCESS_FAIL = 0; - - int REFUND_PROCESS_SUCCESS = 1; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PaySyncStatus.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PaySyncStatus.java deleted file mode 100644 index a1464a6df..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PaySyncStatus.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.bootx.payment.code.pay; - -/** - * 支付网关同步状态 - * - * @author xxm - * @date 2021/4/21 - */ -public interface PaySyncStatus { - - /** -1 不需要同步 */ - int NOT_SYNC = -1; - - /** 1 远程支付成功 */ - int TRADE_SUCCESS = 1; - - /** 2 交易创建,等待买家付款 */ - int WAIT_BUYER_PAY = 2; - - /** 3 已关闭 */ - int TRADE_CLOSED = 3; - - /** 4 已退款 */ - int TRADE_REFUND = 4; - - /** 5 查询不到订单 */ - int NOT_FOUND = 5; - - /** 4 查询失败 */ - int FAIL = 6; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayCode.java deleted file mode 100644 index 8e407db58..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayCode.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.payment.code.pay; - -/** - * 支付方式 1-10 通用支付方式 10 以上是各支付通道特色支付方式, 规则 {通道代码}+{特色支付方式代码}, 如微信小程序支付, 23 微信代码2, 小程序3 - * - * @author xxm - * @date 2021/7/26 - */ -public interface PayWayCode { - - /** - * 常规支付. 钱包/积分等 - */ - int NORMAL = 0; - - /** wap支付 */ - int WAP = 1; - - /** 应用支付 */ - int APP = 2; - - /** web支付 */ - int WEB = 3; - - /** 二维码扫码支付 */ - int QRCODE = 4; - - /** 付款码支付 */ - int BARCODE = 5; - - /** - * 微信公众号支付或者小程序支付 - */ - int JSAPI = 23; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayEnum.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayEnum.java deleted file mode 100644 index c1b550d01..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/pay/PayWayEnum.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.bootx.payment.code.pay; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.exception.payment.PayFailureException; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.Arrays; -import java.util.Objects; - -/** - * 支付方式 - * - * @author xxm - * @date 2021/7/26 - */ -@Getter -@AllArgsConstructor -public enum PayWayEnum { - - NORMAL(PayWayCode.NORMAL, "NORMAL", "常规支付"), WAP(PayWayCode.WAP, "WAP", "wap支付"), - APP(PayWayCode.APP, "APP", "应用支付"), WEB(PayWayCode.WEB, "WEB", "web支付"), - QRCODE(PayWayCode.QRCODE, "QRCODE", "扫码支付"), BARCODE(PayWayCode.BARCODE, "BARCODE", "付款码"), - - JSAPI(PayWayCode.JSAPI, "JSAPI", "公众号/小程序支付"); - - /** 支付方式数字编码 */ - private final int no; - - /** 支付方式字符编码 */ - private final String code; - - /** 名称 */ - private final String name; - - /** - * 根据数字编号获取 - */ - public static PayWayEnum findByNo(int no) { - return Arrays.stream(PayWayEnum.values()) - .filter(e -> e.getNo() == no) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - - /** - * 根据字符编码获取 - */ - public static PayWayEnum findByCode(String code) { - return Arrays.stream(PayWayEnum.values()) - .filter(e -> Objects.equals(code, e.getCode())) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayCode.java deleted file mode 100644 index 9f31b34f6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayCode.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -/** - * 支付宝支付参数 - * - * @author xxm - * @date 2021/2/27 - */ -public interface AliPayCode { - - // 认证类型 - /** 公钥 */ - int AUTH_TYPE_KEY = 1; - - /** 证书 */ - int AUTH_TYPE_CART = 2; - - // 渠道枚举 - /** 目前PC支付必填 */ - String FAST_INSTANT_TRADE_PAY = "FAST_INSTANT_TRADE_PAY"; - - /** WAP支付必填 手机网站支付产品 */ - String QUICK_WAP_PAY = "QUICK_WAP_WAY"; - - /** APP支付必填 APP支付产品 */ - String QUICK_MSECURITY_PAY = "QUICK_MSECURITY_PAY"; - - /** 付款码支付 */ - String BAR_CODE = "bar_code"; - - // 响应字段 - /** 支付状态 */ - String TRADE_STATUS = "trade_status"; - - /** 公用回传参数 */ - String PASS_BACK_PARAMS = "passback_params"; - - /** 对交易或商品的描述(在没有公用回传参数的时候, 这个作为公用回传参数) */ - String BODY = "body"; - - /** 外部订单号-paymentId */ - String OUT_TRADE_NO = "out_trade_no"; - - /** 支付宝流水号 */ - String TRADE_NO = "trade_no"; - - /** appId */ - String APP_ID = "app_id"; - - // 交易状态说明 - /** 交易创建,等待买家付款 */ - String PAYMENT_WAIT_BUYER_PAY = "WAIT_BUYER_PAY"; - - /** 未付款交易超时关闭,或支付完成后全额退款 */ - String PAYMENT_TRADE_CLOSED = "TRADE_CLOSED"; - - /** 交易支付成功 */ - String PAYMENT_TRADE_SUCCESS = "TRADE_SUCCESS"; - - /** 交易结束,不可退款 */ - String PAYMENT_TRADE_FINISHED = "TRADE_FINISHED"; - - // 通知触发条件 - /** 交易完成 */ - String NOTIFY_TRADE_FINISHED = "TRADE_FINISHED"; - - /** 支付成功 */ - String NOTIFY_TRADE_SUCCESS = "TRADE_SUCCESS"; - - /** 交易创建,不触发通知 */ - String NOTIFY_WAIT_BUYER_PAY = "WAIT_BUYER_PAY"; - - /** 交易关闭 */ - String NOTIFY_TRADE_CLOSED = "TRADE_CLOSED"; - - // 错误提示 - /** 交易不存在 */ - String ACQ_TRADE_NOT_EXIST = "ACQ.TRADE_NOT_EXIST"; - - // 网关返回码 - String SUCCESS = "10000"; - - // 网关返回码 支付进行中 order success pay inprocess - String INPROCESS = "10003"; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayWay.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayWay.java deleted file mode 100644 index 0649b3bb2..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/AliPayWay.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.pay.PayWayEnum; -import cn.bootx.payment.exception.payment.PayFailureException; -import lombok.experimental.UtilityClass; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -/** - * 支付宝支付方式 - * - * @author xxm - * @date 2021/7/2 - */ -@UtilityClass -public class AliPayWay { - - // 支付方式 - private static final List PAY_WAYS = Arrays.asList(PayWayEnum.WAP, PayWayEnum.APP, PayWayEnum.WEB, - PayWayEnum.QRCODE, PayWayEnum.BARCODE); - - /** - * 根据数字编号获取 - */ - public PayWayEnum findByNo(int no) { - return PAY_WAYS.stream() - .filter(e -> e.getNo() == no) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - - /** - * 根据数字编号获取 - */ - public PayWayEnum findByCode(String code) { - return PAY_WAYS.stream() - .filter(e -> Objects.equals(code, e.getCode())) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - - /** - * 获取支持的支付方式 - */ - public List getPayWays() { - return PAY_WAYS; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/VoucherCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/VoucherCode.java deleted file mode 100644 index 55a1929dd..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/VoucherCode.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -/** - * 储值卡常量 - * - * @author xxm - * @date 2022/3/14 - */ -public interface VoucherCode { - - /** - * 状态-启用 - */ - int STATUS_NORMAL = 1; - - /** - * 状态-停用 - */ - int STATUS_FORBIDDEN = 2; - - /** - * 储值卡日志-开通 - */ - int LOG_ACTIVE = 1; - - /** - * 储值卡日志-支付 - */ - int LOG_PAY = 2; - - /** - * 储值卡日志-退款 - */ - int LOG_CLOSE = 3; - - /** - * 储值卡日志-退款 - */ - int LOG_REFUND = 4; - - /** - * 储值卡日志-Admin余额变动 - */ - int LOG_ADMIN_CHANGER = 4; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WalletCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WalletCode.java deleted file mode 100644 index 96ff4cbc4..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WalletCode.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -/** - * 钱包涉及到的常量 - * - * @author xxm - * @date 2020/12/8 - */ -public interface WalletCode { - - /** - * 系统操作 - */ - int OPERATION_SOURCE_SYSTEM = 1; - - /** - * 管理员操作 - */ - int OPERATION_SOURCE_ADMIN = 2; - - /** - * 用户操作 - */ - int OPERATION_SOURCE_USER = 3; - - /** - * 钱包状态-正常 - */ - int STATUS_NORMAL = 1; - - /** - * 钱包状态-禁用 - */ - int STATUS_FORBIDDEN = 2; - - /** - * 钱包日志-开通 - */ - int LOG_ACTIVE = 1; - - /** - * 钱包日志-主动充值 - */ - int LOG_RECHARGE = 2; - - /** - * 钱包日志-自动充值 - */ - int LOG_AUTO_RECHARGE = 3; - - /** - * 钱包日志-Admin余额变动 - */ - int LOG_ADMIN_CHANGER = 4; - - /** - * 钱包日志-支付 - */ - int LOG_PAY = 5; - - /** - * 钱包日志-系统扣除余额的日志 - */ - int LOG_SYSTEM_REDUCE_BALANCE = 6; - - /** - * 钱包日志-退款 - */ - int LOG_REFUND = 7; - - /** - * 钱包日志-取消支付返还 - */ - int LOG_PAY_CLOSE = 8; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayCode.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayCode.java deleted file mode 100644 index cee0d3409..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayCode.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -/** - * 微信参数 - * - * @author xxm - * @date 2021/6/21 - */ -public interface WeChatPayCode { - - // 版本 - String API_V2 = "api_v2"; - - String API_V3 = "api_v3"; - - // 请求参数 - /** jsapi发起获取AuthCode时的重定向参数 */ - String JSAPI_REDIRECT_URL = "JsapiRedirectUrl"; - - // 返回参数 - /** 二维码链接 */ - String CODE_URL = "code_url"; - - /** 支付跳转链接 */ - String MWEB_URL = "mweb_url"; - - /** 预支付交易会话ID */ - String PREPAY_ID = "prepay_id"; - - /** 返回状态码 */ - String RETURN_CODE = "return_code"; - - /** 返回信息 */ - String RETURN_MSG = "return_msg"; - - /** 返回错误代码(例如付款码返回的支付中状态就在这里面) */ - String ERR_CODE = "err_code"; - - /** 返回错误信息 */ - String ERR_CODE_DES = "err_code_des"; - - /** 业务结果(部分结果不在这个参数里, 例如付款码的响应码) */ - String RESULT_CODE = "result_code"; - - /** 交易类型 */ - String TRADE_TYPE = "trade_type"; - - /** appid */ - String APPID = "appid"; - - /** 交易状态 */ - String TRADE_STATE = "trade_state"; - - /** 商户订单号 */ - String OUT_TRADE_NO = "out_trade_no"; - - /** 微信交易单号 */ - String TRANSACTION_ID = "transaction_id"; - - // 交易状态 - /** 支付成功 */ - String TRADE_SUCCESS = "SUCCESS"; - - /** 支付失败 */ - String TRADE_FAIL = "FAIL"; - - /** 退款 */ - String TRADE_REFUND = "REFUND"; - - /** 未支付 */ - String TRADE_NOTPAY = "NOTPAY"; - - /** 已关闭 */ - String TRADE_CLOSED = "CLOSED"; - - /** 已接收,等待扣款 */ - String TRADE_ACCEPT = "ACCEPT"; - - /** 已撤销(刷卡支付) */ - String TRADE_REVOKED = "REVOKED"; - - /** 用户支付中(刷卡支付) */ - String TRADE_USERPAYING = "USERPAYING"; - - /** 支付失败(刷卡支付) */ - String TRADE_PAYERROR = "PAYERROR"; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayWay.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayWay.java deleted file mode 100644 index c4c2c727f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/code/paymodel/WeChatPayWay.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.bootx.payment.code.paymodel; - -import cn.bootx.payment.code.pay.PayWayEnum; -import cn.bootx.payment.exception.payment.PayFailureException; -import lombok.experimental.UtilityClass; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -/** - * 微信支付方式 - * - * @author xxm - * @date 2021/7/2 - */ -@UtilityClass -public class WeChatPayWay { - - private static final List PAY_WAYS = Arrays.asList(PayWayEnum.WAP, PayWayEnum.APP, PayWayEnum.JSAPI, - PayWayEnum.QRCODE, PayWayEnum.BARCODE); - - /** - * 根据数字编号获取 - */ - public PayWayEnum findByNo(int no) { - return PAY_WAYS.stream() - .filter(e -> e.getNo() == no) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - - /** - * 根据数字编号获取 - */ - public PayWayEnum findByCode(String code) { - return PAY_WAYS.stream() - .filter(e -> Objects.equals(code, e.getCode())) - .findFirst() - .orElseThrow(() -> new PayFailureException("不存在的支付方式")); - } - - /** - * 获取支持的支付方式 - */ - public List getPayWays() { - return PAY_WAYS; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/configuration/PaymentRabbitMqConfiguration.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/configuration/PaymentRabbitMqConfiguration.java deleted file mode 100644 index c8273e591..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/configuration/PaymentRabbitMqConfiguration.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.bootx.payment.configuration; - -import cn.bootx.payment.code.PaymentEventCode; -import org.springframework.amqp.core.Binding; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.DirectExchange; -import org.springframework.amqp.core.Queue; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * 消息队列配置 - * - * @author xxm - * @date 2021/6/25 - */ -@Configuration -public class PaymentRabbitMqConfiguration { - - /** 支付完成队列 */ - @Bean - public Queue payComplete() { - return new Queue(PaymentEventCode.PAY_COMPLETE); - } - - /** 支付关闭/撤销队列 */ - @Bean - public Queue payCancel() { - return new Queue(PaymentEventCode.PAY_CANCEL); - } - - /** 支付退款队列 */ - @Bean - public Queue payRefund() { - return new Queue(PaymentEventCode.PAY_REFUND); - } - - /** 支付超时通知队列 */ - @Bean - public Queue paymentExpiredTime() { - return new Queue(PaymentEventCode.PAYMENT_EXPIRED_TIME); - } - - /** 交换机 */ - @Bean - public DirectExchange paymentExchange() { - return new DirectExchange(PaymentEventCode.EXCHANGE_PAYMENT); - } - - /** 绑定支付完成 */ - @Bean - public Binding bindPayComplete() { - return BindingBuilder.bind(payComplete()).to(paymentExchange()).with(PaymentEventCode.PAY_COMPLETE); - } - - /** 绑定支付关闭/撤销 */ - @Bean - public Binding bindPayCancel() { - return BindingBuilder.bind(payCancel()).to(paymentExchange()).with(PaymentEventCode.PAY_CANCEL); - } - - /** 绑定支付退款 */ - @Bean - public Binding bindPayRefund() { - return BindingBuilder.bind(payRefund()).to(paymentExchange()).with(PaymentEventCode.PAY_REFUND); - } - - /** 绑定支付超时通知 */ - @Bean - public Binding bindPaymentExpiredTime() { - return BindingBuilder.bind(paymentExpiredTime()) - .to(paymentExchange()) - .with(PaymentEventCode.PAYMENT_EXPIRED_TIME); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AggregateController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AggregateController.java deleted file mode 100644 index 43e8dd17d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AggregateController.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.payment.core.aggregate.service.AggregateService; -import cn.bootx.payment.param.cashier.CashierSinglePayParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 聚合支付 - * - * @author xxm - * @date 2022/3/6 - */ -@IgnoreAuth -@Tag(name = "聚合支付") -@RestController -@RequestMapping("/aggregate") -@RequiredArgsConstructor -public class AggregateController { - - private final AggregateService aggregateService; - - @Operation(summary = "创建聚合支付") - @PostMapping("/createAggregatePay") - public ResResult createAggregatePay(@RequestBody CashierSinglePayParam param) { - return Res.ok(aggregateService.createAggregatePay(param)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AlipayConfigController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AlipayConfigController.java deleted file mode 100644 index 83d20d23b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/AlipayConfigController.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.paymodel.alipay.service.AlipayConfigService; -import cn.bootx.payment.dto.paymodel.alipay.AlipayConfigDto; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigParam; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigQuery; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Operation; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/2/26 - */ -@Tag(name = "支付宝配置") -@RestController -@RequestMapping("/alipay") -@AllArgsConstructor -public class AlipayConfigController { - - private final AlipayConfigService alipayConfigService; - - @Operation(summary = "添加") - @PostMapping("/add") - public ResResult add(@RequestBody AlipayConfigParam param) { - alipayConfigService.add(param); - return Res.ok(); - } - - @Operation(summary = "更新") - @PostMapping("/update") - public ResResult update(@RequestBody AlipayConfigParam param) { - alipayConfigService.update(param); - return Res.ok(); - } - - @Operation(summary = "启用指定的支付宝配置") - @PostMapping("/setUpActivity") - public ResResult setUpActivity(Long id) { - alipayConfigService.setUpActivity(id); - return Res.ok(); - } - - @Operation(summary = "清除指定的支付宝配置") - @PostMapping("/clearActivity") - public ResResult clearActivity(Long id) { - alipayConfigService.clearActivity(id); - return Res.ok(); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, AlipayConfigQuery param) { - return Res.ok(alipayConfigService.page(pageParam, param)); - } - - @Operation(summary = "根据Id查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(alipayConfigService.findById(id)); - } - - @Operation(summary = "支付宝支持支付方式") - @GetMapping("/findPayWayList") - public ResResult> findPayWayList() { - return Res.ok(alipayConfigService.findPayWayList()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/CashierController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/CashierController.java deleted file mode 100644 index 17f8359dc..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/CashierController.java +++ /dev/null @@ -1,66 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.payment.core.cashier.service.CashierService; -import cn.bootx.payment.dto.pay.PayResult; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.param.cashier.CashierCombinationPayParam; -import cn.bootx.payment.param.cashier.CashierSinglePayParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; - -import java.util.Map; - -import static org.springframework.http.HttpHeaders.USER_AGENT; - -/** - * @author xxm - * @date 2022/2/23 - */ -@IgnoreAuth -@Tag(name = "结算台") -@RestController -@RequestMapping("/cashier") -@RequiredArgsConstructor -public class CashierController { - - private final CashierService cashierService; - - @Operation(summary = "发起支付(单渠道,包括聚合付款码方式)") - @PostMapping("/singlePay") - public ResResult singlePay(@RequestBody CashierSinglePayParam cashierSinglePayParam) { - return Res.ok(cashierService.singlePay(cashierSinglePayParam)); - } - - @Operation(summary = "发起支付(组合支付)") - @PostMapping("/combinationPay") - public ResResult combinationPay(@RequestBody CashierCombinationPayParam param) { - return Res.ok(cashierService.combinationPay(param)); - } - - @Operation(summary = "扫码聚合支付(单渠道)") - @GetMapping("/aggregatePay") - public ModelAndView aggregatePay(String key, @RequestHeader(USER_AGENT) String ua) { - try { - String url = cashierService.aggregatePay(key, ua); - return new ModelAndView("redirect:" + url); - } - catch (PayUnsupportedMethodException e) { - return new ModelAndView("errorCashier"); - } - } - - @Operation(summary = "微信jsapi支付(回调)") - @GetMapping("/wxJsapiPay") - public ModelAndView wxJsapiPay(String code, String state) { - Map map = cashierService.wxJsapiPay(code, state); - // 跳转页面, 调起微信jsapi支付 - return new ModelAndView("wechatJsapiPay").addAllObjects(map); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayCallbackController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayCallbackController.java deleted file mode 100644 index 003b35182..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayCallbackController.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.payment.core.paymodel.alipay.service.AliPayCallbackService; -import cn.bootx.payment.core.paymodel.wechat.service.WeChatPayCallbackService; -import com.ijpay.alipay.AliPayApi; -import com.ijpay.core.kit.HttpKit; -import com.ijpay.core.kit.WxPayKit; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import java.util.Map; - -/** - * @author xxm - * @date 2021/2/27 - */ -@IgnoreAuth -@Slf4j -@Tag(name = "支付回调") -@RestController -@RequestMapping("/pay/callback") -@AllArgsConstructor -public class PayCallbackController { - - private final AliPayCallbackService aliPayCallbackService; - - private final WeChatPayCallbackService weChatPayCallbackService; - - @SneakyThrows - @Operation(summary = "支付宝回调") - @PostMapping("/alipay") - public String aliPay(HttpServletRequest request) { - Map stringStringMap = AliPayApi.toMap(request); - return aliPayCallbackService.payCallback(stringStringMap); - } - - @SneakyThrows - @Operation(summary = "微信支付回调") - @PostMapping("/wechat") - public String wechat(HttpServletRequest request) { - String xmlMsg = HttpKit.readData(request); - Map params = WxPayKit.xmlToMap(xmlMsg); - return weChatPayCallbackService.payCallback(params); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayController.java deleted file mode 100644 index d4ea6523a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayController.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.payment.core.pay.service.PayCancelService; -import cn.bootx.payment.core.pay.service.PayRefundService; -import cn.bootx.payment.core.pay.service.PayService; -import cn.bootx.payment.core.pay.service.PaySyncService; -import cn.bootx.payment.dto.pay.PayResult; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.param.refund.RefundParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author xxm - * @date 2020/12/9 - */ -@Tag(name = "统一支付") -@RestController -@RequestMapping("/uni_pay") -@AllArgsConstructor -public class PayController { - - private final PayService payService; - - private final PayCancelService payCancelService; - - private final PayRefundService payRefundService; - - private final PaySyncService paySyncService; - - @Operation(summary = "支付") - @PostMapping("/pay") - public ResResult pay(@RequestBody PayParam payParam) { - return Res.ok(payService.pay(payParam)); - } - - @Operation(summary = "取消支付(支付id)") - @PostMapping("/cancelByPaymentId") - public ResResult cancelByPaymentId(@Parameter(description = "支付id") Long paymentId) { - payCancelService.cancelByPaymentId(paymentId); - return Res.ok(); - } - - @Operation(summary = "取消支付(业务id)") - @PostMapping("/cancelByBusinessId") - public ResResult cancelByBusinessId(@Parameter(description = "业务id") String businessId) { - payCancelService.cancelByBusinessId(businessId); - return Res.ok(); - } - - @Operation(summary = "刷新指定业务id的支付单状态") - @PostMapping("/syncByBusinessId") - public ResResult syncByBusinessId(@Parameter(description = "业务id") String businessId) { - paySyncService.syncByBusinessId(businessId); - return Res.ok(); - } - - @Operation(summary = "退款") - @PostMapping("/refund") - public ResResult refund(@RequestBody RefundParam refundParam) { - payRefundService.refund(refundParam); - return Res.ok(); - } - - @Operation(summary = "全额退款(业务id)") - @PostMapping("/refundByBusinessId") - public ResResult refundByBusinessId(@Parameter(description = "业务id") String businessId) { - payRefundService.refundByBusinessId(businessId); - return Res.ok(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayNotifyRecordController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayNotifyRecordController.java deleted file mode 100644 index 79a823ca2..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PayNotifyRecordController.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.notify.service.PayNotifyRecordService; -import cn.bootx.payment.dto.notify.PayNotifyRecordDto; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Operation; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 回调记录 - * - * @author xxm - * @date 2021/7/22 - */ -@Tag(name = "支付回调记录") -@RestController -@RequestMapping("/pay/notify/record") -@RequiredArgsConstructor -public class PayNotifyRecordController { - - private final PayNotifyRecordService notifyRecordService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, PayNotifyRecordDto param) { - return Res.ok(notifyRecordService.page(pageParam, param)); - } - - @Operation(summary = "根据id查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(notifyRecordService.findById(id)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PaymentController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PaymentController.java deleted file mode 100644 index 14d7b6c47..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/PaymentController.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.OrderParam; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.payment.core.payment.service.PaymentQueryService; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.PaymentDto; -import cn.bootx.payment.param.payment.PaymentQuery; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/6/28 - */ -@Tag(name = "支付记录") -@RestController -@RequestMapping("/payment") -@RequiredArgsConstructor -public class PaymentController { - - private final PaymentQueryService paymentQueryService; - - @Operation(summary = "根据id获取") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(paymentQueryService.findById(id)); - } - - @Operation(summary = "根据userId获取列表") - @GetMapping("/findByUser") - public ResResult> findByUser(Long userid) { - return Res.ok(paymentQueryService.findByUser(userid)); - } - - @Operation(summary = "分页查询") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, PaymentQuery param, OrderParam orderParam) { - return Res.ok(paymentQueryService.page(pageParam, param, orderParam)); - } - - @Operation(summary = "分页查询(超级查询)") - @PostMapping("/superPage") - public ResResult> superPage(PageParam pageParam, @RequestBody QueryParams queryParams) { - return Res.ok(paymentQueryService.superPage(pageParam, queryParams)); - } - - @IgnoreAuth - @Operation(summary = "根据业务ID获取支付状态`") - @GetMapping("/findStatusByBusinessId") - public ResResult findStatusByBusinessId(String businessId) { - return Res.ok(paymentQueryService.findStatusByBusinessId(businessId)); - } - - @IgnoreAuth - @Operation(summary = "根据businessId获取订单支付方式") - @GetMapping("/findPayTypeInfoByBusinessId") - public ResResult> findPayTypeInfoByBusinessId(String businessId) { - return Res.ok(paymentQueryService.findPayTypeInfoByBusinessId(businessId)); - } - - @Operation(summary = "根据id获取订单支付方式") - @GetMapping("/findPayTypeInfoById") - public ResResult> findPayTypeInfoById(Long id) { - return Res.ok(paymentQueryService.findPayTypeInfoById(id)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/RefundRecordController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/RefundRecordController.java deleted file mode 100644 index 5abf68bd6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/RefundRecordController.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.refund.service.RefundRecordService; -import cn.bootx.payment.dto.refund.RefundRecordDto; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 退款记录 - * - * @author xxm - * @date 2022/3/3 - */ -@Tag(name = "退款记录") -@RestController -@RequestMapping("/pay/refund") -@RequiredArgsConstructor -public class RefundRecordController { - - private final RefundRecordService refundRecordService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, RefundRecordDto param) { - return Res.ok(refundRecordService.page(pageParam, param)); - } - - @Operation(summary = "根据id查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(refundRecordService.findById(id)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/VoucherController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/VoucherController.java deleted file mode 100644 index d5ea74dff..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/VoucherController.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.paymodel.voucher.service.VoucherQueryService; -import cn.bootx.payment.core.paymodel.voucher.service.VoucherService; -import cn.bootx.payment.dto.paymodel.voucher.VoucherDto; -import cn.bootx.payment.param.paymodel.voucher.VoucherGenerationParam; -import cn.bootx.payment.param.paymodel.voucher.VoucherParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Tag(name = "储值卡") -@RestController -@RequestMapping("/voucher") -@RequiredArgsConstructor -public class VoucherController { - - private final VoucherService voucherService; - - private final VoucherQueryService voucherQueryService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, VoucherParam param) { - return Res.ok(voucherQueryService.page(pageParam, param)); - } - - @Operation(summary = "单条查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(voucherQueryService.findById(id)); - } - - @Operation(summary = "根据卡号查询") - @GetMapping("/findByCardNo") - public ResResult findByCardNo(String cardNo) { - return Res.ok(voucherQueryService.findByCardNo(cardNo)); - } - - @Operation(summary = "批量生成储值卡") - @PostMapping("/generationBatch") - public ResResult generationBatch(@RequestBody VoucherGenerationParam param) { - voucherService.generationBatch(param); - return Res.ok(); - } - - @Operation(summary = "冻结") - @PostMapping("/lock") - public ResResult lock(Long id) { - voucherService.lock(id); - return Res.ok(); - } - - @Operation(summary = "启用") - @PostMapping("/unlock") - public ResResult unlock(Long id) { - voucherService.unlock(id); - return Res.ok(); - } - - @Operation(summary = "批量冻结") - @PostMapping("/lockBatch") - public ResResult lockBatch(@RequestBody List ids) { - voucherService.lockBatch(ids); - return Res.ok(); - } - - @Operation(summary = "批量启用") - @PostMapping("/unlockBatch") - public ResResult unlockBatch(@RequestBody List ids) { - voucherService.unlockBatch(ids); - return Res.ok(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletController.java deleted file mode 100644 index 22afe8366..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletController.java +++ /dev/null @@ -1,106 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.annotation.OperateLog; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.bootx.payment.core.paymodel.wallet.service.WalletQueryService; -import cn.bootx.payment.core.paymodel.wallet.service.WalletService; -import cn.bootx.payment.dto.paymodel.wallet.WalletDto; -import cn.bootx.payment.dto.paymodel.wallet.WalletInfoDto; -import cn.bootx.payment.param.paymodel.wallet.WalletPayParam; -import cn.bootx.payment.param.paymodel.wallet.WalletRechargeParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 钱包 - * - * @author xxm - * @date 2021/2/24 - */ -@Tag(name = "钱包相关的接口") -@RestController -@RequestMapping("wallet") -@AllArgsConstructor -public class WalletController { - - private final WalletService walletService; - - private final WalletQueryService walletQueryService; - - @Operation(summary = "开通用户钱包操作") - @PostMapping("createWallet") - public ResResult createWallet(Long userId) { - walletService.createWallet(userId); - return Res.ok(); - } - - @Operation(summary = "批量开通用户钱包操作") - @PostMapping("createWalletBatch") - public ResResult createWalletBatch(@RequestBody List userIds) { - walletService.createWalletBatch(userIds); - return Res.ok(); - } - - @Operation(summary = "解锁钱包") - @OperateLog(title = "解锁钱包", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @PostMapping("/unlock") - public ResResult unlock(Long walletId) { - walletService.unlock(walletId); - return Res.ok(); - } - - @Operation(summary = "锁定钱包") - @OperateLog(title = "锁定钱包", businessType = OperateLog.BusinessType.UPDATE, saveParam = true) - @PostMapping("/lock") - public ResResult lock(Long walletId) { - walletService.lock(walletId); - return Res.ok(); - } - - @Operation(summary = "充值操作(增减余额)") - @PostMapping("/changerBalance") - public ResResult changerBalance(@RequestBody WalletRechargeParam param) { - walletService.changerBalance(param); - return Res.ok(); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, WalletPayParam param) { - return Res.ok(walletQueryService.page(pageParam, param)); - } - - @Operation(summary = "分页") - @GetMapping("/pageByNotWallet") - public ResResult> pageByNotWallet(PageParam pageParam, UserInfoParam param) { - return Res.ok(walletQueryService.pageByNotWallet(pageParam, param)); - } - - @Operation(summary = "根据用户查询钱包") - @GetMapping("/findByUser") - public ResResult findByUser() { - return Res.ok(walletQueryService.findByUser()); - } - - @Operation(summary = "根据钱包ID查询钱包") - @GetMapping("/findById") - public ResResult findById(Long walletId) { - return Res.ok(walletQueryService.findById(walletId)); - } - - @Operation(summary = "获取钱包综合信息") - @GetMapping("/getWalletInfo") - public ResResult getWalletInfo(Long walletId) { - return Res.ok(walletQueryService.getWalletInfo(walletId)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletLogController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletLogController.java deleted file mode 100644 index ca131b404..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WalletLogController.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.paymodel.wallet.service.WalletLogService; -import cn.bootx.payment.dto.paymodel.wallet.WalletLogDto; -import cn.bootx.payment.param.paymodel.wallet.WalletLogQueryParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springdoc.api.annotations.ParameterObject; -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; - -/** - * 钱包日志相关接口 - * - * @author xxm - * @date 2020/12/8 - */ -@Tag(name = "钱包日志相关的接口") -@RestController -@RequestMapping("/wallet/log") -@AllArgsConstructor -public class WalletLogController { - - private final WalletLogService walletLogService; - - @Operation(summary = "个人钱包日志") - @PostMapping("/pageByPersonal") - public ResResult> pageByPersonal(@ParameterObject PageParam pageParam, - @ParameterObject WalletLogQueryParam param) { - return Res.ok(walletLogService.pageByPersonal(pageParam, param)); - } - - @Operation(summary = "查询钱包日志(分页)") - @GetMapping("/page") - public ResResult> page(@ParameterObject PageParam pageParam, - @ParameterObject WalletLogQueryParam param) { - return Res.ok(walletLogService.page(pageParam, param)); - } - - @Operation(summary = "根据钱包id查询钱包日志(分页)") - @GetMapping("/pageByWalletId") - public ResResult> pageByWalletId(@ParameterObject PageParam pageParam, - @ParameterObject WalletLogQueryParam param) { - return Res.ok(walletLogService.pageByWalletId(pageParam, param)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WeChatPayConfigController.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WeChatPayConfigController.java deleted file mode 100644 index 29162b78e..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/controller/WeChatPayConfigController.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.bootx.payment.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.paymodel.wechat.service.WeChatPayConfigService; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPayConfigDto; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayConfigParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @date 2021/3/19 - */ -@Tag(name = "微信支付配置") -@RestController -@RequestMapping("/wechat/pay") -@AllArgsConstructor -public class WeChatPayConfigController { - - private final WeChatPayConfigService weChatPayConfigService; - - @Operation(summary = "添加微信支付配置") - @PostMapping("/add") - public ResResult add(@RequestBody WeChatPayConfigParam param) { - weChatPayConfigService.add(param); - return Res.ok(); - } - - @Operation(summary = "更新") - @PostMapping("/update") - public ResResult update(@RequestBody WeChatPayConfigParam param) { - weChatPayConfigService.update(param); - return Res.ok(); - } - - @Operation(summary = "设置启用的微信支付配置") - @PostMapping("/setUpActivity") - public ResResult setUpActivity(Long id) { - weChatPayConfigService.setUpActivity(id); - return Res.ok(); - } - - @Operation(summary = "清除指定的微信支付配置") - @PostMapping("/clearActivity") - public ResResult clearActivity(Long id) { - weChatPayConfigService.clearActivity(id); - return Res.ok(); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, WeChatPayConfigParam param) { - return Res.ok(weChatPayConfigService.page(pageParam, param)); - } - - @Operation(summary = "根据Id查询") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(weChatPayConfigService.findById(id)); - } - - @Operation(summary = "微信支持支付方式") - @GetMapping("/findPayWayList") - public ResResult> findPayWayList() { - return Res.ok(weChatPayConfigService.findPayWayList()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/entity/AggregatePayInfo.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/entity/AggregatePayInfo.java deleted file mode 100644 index 2f1d7dfb5..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/entity/AggregatePayInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.core.aggregate.entity; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 聚合支付发起信息 - * - * @author xxm - * @date 2022/3/5 - */ -@Data -@Accessors(chain = true) -public class AggregatePayInfo { - - /** 标题 */ - private String title; - - /** 订单ID */ - private String businessId; - - /** 支付金额 */ - private BigDecimal amount; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/service/AggregateService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/service/AggregateService.java deleted file mode 100644 index 02c38f661..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/aggregate/service/AggregateService.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.payment.core.aggregate.service; - -import cn.bootx.common.redis.RedisClient; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.core.aggregate.entity.AggregatePayInfo; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.cashier.CashierSinglePayParam; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -/** - * 聚合支付 - * - * @author xxm - * @date 2022/3/6 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AggregateService { - - private final RedisClient redisClient; - - private final String PREFIX_KEY = "cashier:pay:aggregate:"; - - /** - * 创建聚合支付QR支付, 单渠道 - */ - public String createAggregatePay(CashierSinglePayParam param) { - // 保存并生成code - AggregatePayInfo aggregatePayInfo = new AggregatePayInfo().setAmount(param.getAmount()) - .setTitle(param.getTitle()) - .setBusinessId(param.getBusinessId()); - String key = RandomUtil.randomString(10); - redisClient.setWithTimeout(PREFIX_KEY + key, JSONUtil.toJsonStr(aggregatePayInfo), 5 * 60 * 1000); - return key; - } - - /** - * 获取聚合支付信息 - */ - public AggregatePayInfo getAggregateInfo(String key) { - String jsonStr = Optional.ofNullable(redisClient.get(PREFIX_KEY + key)) - .orElseThrow(() -> new PayFailureException("支付超时")); - return JSONUtil.toBean(jsonStr, AggregatePayInfo.class); - } - - /** - * 聚合付款码支付处理 - */ - public int getPayChannel(String authCode) { - if (StrUtil.isBlank(authCode)) { - throw new PayFailureException("付款码不可为空"); - } - String[] wx = { "10", "11", "12", "13", "14", "15" }; - String[] ali = { "25", "26", "27", "28", "29", "30" }; - - // 微信 - if (StrUtil.startWithAny(authCode.substring(0, 2), wx)) { - return PayChannelCode.WECHAT; - } - // 支付宝 - else if (StrUtil.startWithAny(authCode.substring(0, 2), ali)) { - return PayChannelCode.ALI; - } - else { - throw new PayFailureException("不支持的支付方式"); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/cashier/service/CashierService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/cashier/service/CashierService.java deleted file mode 100644 index 06fcf45a5..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/cashier/service/CashierService.java +++ /dev/null @@ -1,197 +0,0 @@ -package cn.bootx.payment.core.cashier.service; - -import cn.bootx.baseapi.core.parameter.dao.SystemParamManager; -import cn.bootx.baseapi.core.parameter.entity.SystemParameter; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayModelExtraCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.pay.PayWayCode; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.core.aggregate.entity.AggregatePayInfo; -import cn.bootx.payment.core.aggregate.service.AggregateService; -import cn.bootx.payment.core.pay.service.PayService; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPayConfigManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.dto.pay.PayResult; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.param.cashier.CashierCombinationPayParam; -import cn.bootx.payment.param.cashier.CashierSinglePayParam; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.collection.CollUtil; -import com.ijpay.core.enums.SignType; -import com.ijpay.core.kit.WxPayKit; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; -import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.util.*; - -/** - * 结算台 - * - * @author xxm - * @date 2022/2/23 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class CashierService { - - private final PayService payService; - - private final AggregateService aggregateService; - - private final WeChatPayConfigManager weChatPayConfigManager; - - private final SystemParamManager systemParamManager; - - /** - * 发起支付(单渠道支付) - */ - public PayResult singlePay(CashierSinglePayParam param) { - - // 如果是聚合支付,存在付款码时特殊处理(聚合扫码支付不用额外处理) - if (Objects.equals(PayChannelCode.AGGREGATION, param.getPayChannel())) { - int payChannel = aggregateService.getPayChannel(param.getAuthCode()); - param.setPayChannel(payChannel); - } - // 构建支付方式参数 - PayModeParam payModeParam = new PayModeParam().setPayChannel(param.getPayChannel()) - .setPayWay(param.getPayWay()) - .setAmount(param.getAmount()); - - // 处理附加参数 - HashMap map = new HashMap<>(1); - map.put(PayModelExtraCode.AUTH_CODE, param.getAuthCode()); - map.put(PayModelExtraCode.OPEN_ID, param.getOpenId()); - map.put(PayModelExtraCode.VOUCHER_NO, param.getVoucherNo()); - String extraParamsJson = PayModelUtil.buildExtraParamsJson(param.getPayChannel(), map); - payModeParam.setExtraParamsJson(extraParamsJson); - - PayParam payParam = new PayParam().setTitle(param.getTitle()) - .setBusinessId(param.getBusinessId()) - .setUserId(SecurityUtil.getUserIdOrDefaultId()) - .setPayModeList(Collections.singletonList(payModeParam)); - PayResult payResult = payService.pay(payParam); - - if (PayStatusCode.TRADE_REFUNDED == payResult.getPayStatus()) { - throw new PayFailureException("已经退款"); - } - return payResult; - } - - /** - * 扫码发起自动支付 - */ - public String aggregatePay(String key, String ua) { - CashierSinglePayParam cashierSinglePayParam = new CashierSinglePayParam().setPayWay(PayWayCode.QRCODE); - // 判断是哪种支付方式 - if (ua.contains(PayChannelCode.UA_ALI_PAY)) { - cashierSinglePayParam.setPayChannel(PayChannelCode.ALI); - } - else if (ua.contains(PayChannelCode.UA_WECHAT_PAY)) { - // 跳转微信授权页面, 调用jsapi进行支付 - return this.wxJsapiAuth(key); - } - else { - throw new PayUnsupportedMethodException(); - } - - AggregatePayInfo aggregatePayInfo = aggregateService.getAggregateInfo(key); - cashierSinglePayParam.setTitle(aggregatePayInfo.getTitle()) - .setAmount(aggregatePayInfo.getAmount()) - .setBusinessId(aggregatePayInfo.getBusinessId()); - PayResult payResult = this.singlePay(cashierSinglePayParam); - return payResult.getAsyncPayInfo().getPayBody(); - } - - /** - * 微信jsapi支付 - 跳转到授权页面 - */ - private String wxJsapiAuth(String key) { - WeChatPayConfig config = weChatPayConfigManager.findActivity() - .orElseThrow(() -> new PayFailureException("未找到启用的微信支付配置")); - WxMpService wxMpService = getWxMpService(config.getAppId(), config.getAppSecret()); - // 回调地址为 结算台微信jsapi支付的回调地址 - SystemParameter systemParameter = systemParamManager.findByParamKey(WeChatPayCode.JSAPI_REDIRECT_URL) - .orElseThrow(() -> new PayFailureException("微信支付回调地址参数不存在")); - String url = systemParameter.getValue() + "cashier/wxJsapiPay"; - return wxMpService.getOAuth2Service().buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_BASE, key); - } - - /** - * 微信jsapi支付 - 回调发起预支付, 同时调起微信页面jsapi支付 - * @param code 微信授权码, 用来获取id - * @param state 聚合支付参数记录的key - * @return 页面中调起jsapi支付的参数 - */ - @SneakyThrows - public Map wxJsapiPay(String code, String state) { - WeChatPayConfig config = weChatPayConfigManager.findActivity() - .orElseThrow(() -> new PayFailureException("未找到启用的微信支付配置")); - WxMpService wxMpService = this.getWxMpService(config.getAppId(), config.getAppSecret()); - WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(code); - String openId = accessToken.getOpenId(); - AggregatePayInfo aggregatePayInfo = aggregateService.getAggregateInfo(state); - // 构造微信API支付参数 - CashierSinglePayParam cashierSinglePayParam = new CashierSinglePayParam().setPayChannel(PayChannelCode.WECHAT) - .setPayWay(PayWayCode.JSAPI) - .setTitle(aggregatePayInfo.getTitle()) - .setAmount(aggregatePayInfo.getAmount()) - .setOpenId(openId) - .setBusinessId(aggregatePayInfo.getBusinessId()); - PayResult payResult = this.singlePay(cashierSinglePayParam); - - return WxPayKit.prepayIdCreateSign(payResult.getAsyncPayInfo().getPayBody(), config.getAppId(), - config.getApiKeyV2(), SignType.HMACSHA256); - } - - /** - * 获取微信公众号API的Service - */ - private WxMpService getWxMpService(String appId, String secret) { - WxMpService wxMpService = new WxMpServiceImpl(); - WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl(); - config.setAppId(appId); // 设置微信公众号的appid - config.setSecret(secret); // 设置微信公众号的app corpSecret - wxMpService.setWxMpConfigStorage(config); - return wxMpService; - } - - /** - * 组合支付 - */ - public PayResult combinationPay(CashierCombinationPayParam param) { - // 处理支付参数 - List payModeList = param.getPayModeList(); - // 删除小于等于零的 - payModeList.removeIf(payModeParam -> BigDecimalUtil.compareTo(payModeParam.getAmount(), BigDecimal.ZERO) < 1); - if (CollUtil.isEmpty(payModeList)) { - throw new PayFailureException("支付参数有误"); - } - // 发起支付 - PayParam payParam = new PayParam().setTitle(param.getTitle()) - .setBusinessId(param.getBusinessId()) - .setUserId(SecurityUtil.getUserIdOrDefaultId()) - .setPayModeList(param.getPayModeList()); - PayResult payResult = payService.pay(payParam); - - if (PayStatusCode.TRADE_REFUNDED == payResult.getPayStatus()) { - throw new PayFailureException("已经退款"); - } - return payResult; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/convert/PayNotifyConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/convert/PayNotifyConvert.java deleted file mode 100644 index 454043916..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/convert/PayNotifyConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.payment.core.notify.convert; - -import cn.bootx.payment.core.notify.entity.PayNotifyRecord; -import cn.bootx.payment.dto.notify.PayNotifyRecordDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 转换 - * - * @author xxm - * @date 2021/6/22 - */ -@Mapper -public interface PayNotifyConvert { - - PayNotifyConvert CONVERT = Mappers.getMapper(PayNotifyConvert.class); - - PayNotifyRecordDto convert(PayNotifyRecord in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordManager.java deleted file mode 100644 index ca0319ae1..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordManager.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.payment.core.notify.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.notify.entity.PayNotifyRecord; -import cn.bootx.payment.dto.notify.PayNotifyRecordDto; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Objects; - -/** - * 支付消息通知回调 - * - * @author xxm - * @date 2021/6/22 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class PayNotifyRecordManager extends BaseManager { - - public Page page(PageParam pageParam, PayNotifyRecordDto param) { - Page mpPage = MpUtil.getMpPage(pageParam, PayNotifyRecord.class); - return lambdaQuery().orderByDesc(MpIdEntity::getId) - .like(Objects.nonNull(param.getPaymentId()), PayNotifyRecord::getPaymentId, param.getPaymentId()) - .eq(Objects.nonNull(param.getPayChannel()), PayNotifyRecord::getPayChannel, param.getPayChannel()) - .eq(Objects.nonNull(param.getStatus()), PayNotifyRecord::getStatus, param.getStatus()) - .page(mpPage); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordMapper.java deleted file mode 100644 index abfc042d9..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/dao/PayNotifyRecordMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.payment.core.notify.dao; - -import cn.bootx.payment.core.notify.entity.PayNotifyRecord; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface PayNotifyRecordMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/entity/PayNotifyRecord.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/entity/PayNotifyRecord.java deleted file mode 100644 index 893536881..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/entity/PayNotifyRecord.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.bootx.payment.core.notify.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.notify.convert.PayNotifyConvert; -import cn.bootx.payment.dto.notify.PayNotifyRecordDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.time.LocalDateTime; - -/** - * 回调记录 - * - * @author xxm - * @date 2021/6/22 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_pay_notify_record") -public class PayNotifyRecord extends MpBaseEntity implements EntityBaseFunction { - - /** 支付记录id */ - private Long paymentId; - - /** - * 支付通道 - * @see PayChannelCode - */ - private int payChannel; - - /** 通知消息 */ - private String notifyInfo; - - /** - * 处理状态 - * @see PayStatusCode#NOTIFY_PROCESS_SUCCESS - */ - private int status; - - /** 提示信息 */ - private String msg; - - /** 回调时间 */ - private LocalDateTime notifyTime; - - @Override - public PayNotifyRecordDto toDto() { - return PayNotifyConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/service/PayNotifyRecordService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/service/PayNotifyRecordService.java deleted file mode 100644 index 1755ca3d8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/notify/service/PayNotifyRecordService.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.payment.core.notify.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.payment.core.notify.dao.PayNotifyRecordManager; -import cn.bootx.payment.core.notify.entity.PayNotifyRecord; -import cn.bootx.payment.dto.notify.PayNotifyRecordDto; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 回调记录 - * - * @author xxm - * @date 2021/7/5 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayNotifyRecordService { - - private final PayNotifyRecordManager payNotifyRecordManager; - - /** - * 分页查询 - */ - public PageResult page(PageParam pageParam, PayNotifyRecordDto param) { - Page page = payNotifyRecordManager.page(pageParam, param); - return MpUtil.convert2DtoPageResult(page); - } - - /** - * 根据id查询 - */ - public PayNotifyRecordDto findById(Long id) { - return payNotifyRecordManager.findById(id).map(PayNotifyRecord::toDto).orElseThrow(DataNotExistException::new); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PayEventBuilder.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PayEventBuilder.java deleted file mode 100644 index 5efd0814d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PayEventBuilder.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.bootx.payment.core.pay.builder; - -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.event.PayCancelEvent; -import cn.bootx.payment.event.PayCompleteEvent; -import cn.bootx.payment.event.PayRefundEvent; -import lombok.experimental.UtilityClass; - -/** - * 支付事件生成器 - * - * @author xxm - * @date 2022/7/11 - */ -@UtilityClass -public class PayEventBuilder { - - /** - * 支付完成 - */ - public PayCompleteEvent buildPayComplete(Payment payment) { - PayCompleteEvent event = new PayCompleteEvent().setPaymentId(payment.getId()) - .setBusinessId(payment.getBusinessId()); - return event; - } - - /** - * 支付撤销/关闭 - */ - public PayCancelEvent buildPayCancel(Payment payment) { - PayCancelEvent event = new PayCancelEvent().setPaymentId(payment.getId()) - .setBusinessId(payment.getBusinessId()); - return event; - } - - /** - * 支付退款 - */ - public PayRefundEvent buildPayRefund(Payment payment) { - PayRefundEvent event = new PayRefundEvent().setPaymentId(payment.getId()) - .setBusinessId(payment.getBusinessId()); - return event; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PaymentBuilder.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PaymentBuilder.java deleted file mode 100644 index 0bc8c29e3..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/builder/PaymentBuilder.java +++ /dev/null @@ -1,135 +0,0 @@ -package cn.bootx.payment.core.pay.builder; - -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.local.AsyncPayInfoLocal; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.dto.pay.PayResult; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.extra.servlet.ServletUtil; -import lombok.experimental.UtilityClass; - -import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 支付对象构建器 - * - * @author xxm - * @date 2021/2/25 - */ -@UtilityClass -public class PaymentBuilder { - - /** - * 构建payment记录 - */ - public Payment buildPayment(PayParam payParam) { - Payment payment = new Payment(); - - HttpServletRequest request = WebServletUtil.getRequest(); - String ip = ServletUtil.getClientIP(request); - // 基础信息 - payment.setBusinessId(payParam.getBusinessId()) - .setUserId(payParam.getUserId()) - .setTitle(payParam.getTitle()) - .setDescription(payParam.getDescription()); - - // 支付方式和状态 - List payTypeInfos = buildPayTypeInfo(payParam.getPayModeList()); - List refundableInfos = buildRefundableInfo(payParam.getPayModeList()); - // 计算总价 - BigDecimal sumAmount = payTypeInfos.stream() - .map(PayChannelInfo::getAmount) - .filter(Objects::nonNull) - .reduce(BigDecimal::add) - .orElse(BigDecimal.ZERO); - // 支付通道信息 - payment.setPayChannelInfo(payTypeInfos) - .setRefundableInfo(refundableInfos) - .setPayStatus(PayStatusCode.TRADE_PROGRESS) - .setAmount(sumAmount) - .setClientIp(ip) - .setRefundableBalance(sumAmount); - return payment; - } - - /** - * 构建PayTypeInfo - */ - private List buildPayTypeInfo(List payModeParamList) { - return CollectionUtil.isEmpty(payModeParamList) ? Collections.emptyList() - : payModeParamList.stream().map(PayModeParam::toPayTypeInfo).collect(Collectors.toList()); - } - - /** - * 构建RefundableInfo - */ - private List buildRefundableInfo(List payModeParamList) { - return CollectionUtil.isEmpty(payModeParamList) ? Collections.emptyList() - : payModeParamList.stream().map(PayModeParam::toRefundableInfo).collect(Collectors.toList()); - } - - /** - * 根据Payment构建PayParam支付参数 - */ - public PayParam buildPayParamByPayment(Payment payment) { - PayParam payParam = new PayParam(); - // 恢复 payModeList - List payModeParams = payment.getPayChannelInfo() - .stream() - .map(payTypeInfo -> new PayModeParam().setAmount(payTypeInfo.getAmount()) - .setPayChannel(payTypeInfo.getPayChannel()) - .setExtraParamsJson(payTypeInfo.getExtraParamsJson())) - .collect(Collectors.toList()); - payParam.setPayModeList(payModeParams) - .setBusinessId(payment.getBusinessId()) - .setUserId(payment.getUserId()) - .setTitle(payment.getTitle()) - .setTitle(payment.getTitle()) - .setDescription(payment.getDescription()); - return payParam; - } - - /** - * 根据Payment构建PaymentResult - * @param payment payment - * @return paymentVO - */ - public PayResult buildResultByPayment(Payment payment) { - PayResult paymentResult; - try { - paymentResult = new PayResult(); - // 异步支付信息 - paymentResult.setAsyncPayChannel(payment.getAsyncPayChannel()) - .setAsyncPayMode(payment.isAsyncPayMode()) - .setPayStatus(payment.getPayStatus()); - - List channelInfos = payment.getPayChannelInfo(); - - // 设置异步支付参数 - List moneyPayTypeInfos = channelInfos.stream() - .filter(payTypeInfo -> PayChannelCode.ASYNC_TYPE.contains(payTypeInfo.getPayChannel())) - .collect(Collectors.toList()); - if (!CollUtil.isEmpty(moneyPayTypeInfos)) { - paymentResult.setAsyncPayInfo(AsyncPayInfoLocal.get()); - } - // 清空线程变量 - } - finally { - AsyncPayInfoLocal.clear(); - } - return paymentResult; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/convert/PayConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/convert/PayConvert.java deleted file mode 100644 index 36fda91c4..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/convert/PayConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.payment.core.pay.convert; - -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.param.pay.PayModeParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 支付对象转换 - * - * @author xxm - * @date 2022/3/2 - */ -@Mapper -public interface PayConvert { - - PayConvert CONVERT = Mappers.getMapper(PayConvert.class); - - PayChannelInfo convert(PayModeParam in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/BaseException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/BaseException.java deleted file mode 100644 index 04c4907d8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/BaseException.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.pay.exception; - -/** - * 支付异常信息 - * - * @author xxm - * @date 2020/12/9 - */ -public interface BaseException { - - /** - * 获取错误信息 - */ - ExceptionInfo getExceptionInfo(); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/ExceptionInfo.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/ExceptionInfo.java deleted file mode 100644 index 73d8a9b97..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/exception/ExceptionInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.core.pay.exception; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2021/5/24 - */ -@Data -@Accessors(chain = true) -@Schema(title = "异常信息") -public class ExceptionInfo { - - /** 错误码 */ - private int errorCode; - - /** 错误信息 */ - private String errorMsg; - - public ExceptionInfo(int errorCode, String errorMsg) { - this.errorCode = errorCode; - this.errorMsg = errorMsg; - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/factory/PayStrategyFactory.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/factory/PayStrategyFactory.java deleted file mode 100644 index d9b5e60ae..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/factory/PayStrategyFactory.java +++ /dev/null @@ -1,120 +0,0 @@ -package cn.bootx.payment.core.pay.factory; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.strategy.*; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.extra.spring.SpringUtil; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 支付策略工厂 - * - * @author xxm - * @date 2020/12/11 - */ -public class PayStrategyFactory { - - /** - * 根据传入的支付通道创建策略 - * @param payModeParam 支付类型 - * @return 支付策略 - */ - public static AbsPayStrategy create(PayModeParam payModeParam) { - - AbsPayStrategy strategy = null; - switch (payModeParam.getPayChannel()) { - case PayChannelCode.ALI: - strategy = SpringUtil.getBean(AliPayStrategy.class); - break; - case PayChannelCode.WECHAT: - strategy = SpringUtil.getBean(WeChatPayStrategy.class); - break; - case PayChannelCode.UNION_PAY: - strategy = SpringUtil.getBean(UnionPayStrategy.class); - break; - case PayChannelCode.CASH: - strategy = SpringUtil.getBean(CashPayStrategy.class); - break; - case PayChannelCode.WALLET: - strategy = SpringUtil.getBean(WalletPayStrategy.class); - break; - case PayChannelCode.VOUCHER: - strategy = SpringUtil.getBean(VoucherStrategy.class); - break; - case PayChannelCode.CREDIT_CARD: - break; - case PayChannelCode.APPLE_PAY: - break; - case PayChannelCode.CHANNEL_PAY: - break; - default: - throw new PayUnsupportedMethodException(); - } - // noinspection ConstantConditions - strategy.setPayMode(payModeParam); - return strategy; - } - - /** - * 根据传入的支付类型批量创建策略, 异步支付在后面 - */ - public static List createDesc(List payModeParamList) { - return create(payModeParamList, true); - } - - /** - * 根据传入的支付类型批量创建策略, 默认异步支付在前面 - */ - public static List create(List payModeParamList) { - return create(payModeParamList, false); - } - - /** - * 根据传入的支付类型批量创建策略 - * @param payModeParamList 支付类型 - * @return 支付策略 - */ - private static List create(List payModeParamList, boolean description) { - if (CollectionUtil.isEmpty(payModeParamList)) { - return Collections.emptyList(); - } - List list = new ArrayList<>(payModeParamList.size()); - - // 同步支付 - List syncPayModeParamList = payModeParamList.stream() - .filter(Objects::nonNull) - .filter(payModeParam -> !PayChannelCode.ASYNC_TYPE.contains(payModeParam.getPayChannel())) - .collect(Collectors.toList()); - - // 异步支付 - List asyncPayModeParamList = payModeParamList.stream() - .filter(Objects::nonNull) - .filter(payModeParam -> PayChannelCode.ASYNC_TYPE.contains(payModeParam.getPayChannel())) - .collect(Collectors.toList()); - - List sortList = new ArrayList<>(payModeParamList.size()); - - // 异步在后面 - if (description) { - sortList.addAll(syncPayModeParamList); - sortList.addAll(asyncPayModeParamList); - } - else { - sortList.addAll(asyncPayModeParamList); - sortList.addAll(syncPayModeParamList); - } - - // 此处有一个根据Type的反转排序, - sortList.stream().filter(Objects::nonNull).forEach(payMode -> list.add(create(payMode))); - return list; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayCallbackStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayCallbackStrategy.java deleted file mode 100644 index 5b375ef61..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayCallbackStrategy.java +++ /dev/null @@ -1,111 +0,0 @@ -package cn.bootx.payment.core.pay.func; - -import cn.bootx.common.redis.RedisClient; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.notify.dao.PayNotifyRecordManager; -import cn.bootx.payment.core.pay.result.PayCallbackResult; -import cn.bootx.payment.core.pay.service.PayCallbackService; -import cn.bootx.payment.core.notify.entity.PayNotifyRecord; -import cn.hutool.json.JSONUtil; -import com.alibaba.ttl.TransmittableThreadLocal; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.util.Map; - -/** - * 支付回调处理抽象接口 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@RequiredArgsConstructor -public abstract class AbsPayCallbackStrategy { - - protected static final ThreadLocal> PARAMS = new TransmittableThreadLocal<>(); - - private final RedisClient redisClient; - - private final PayNotifyRecordManager payNotifyRecordManager; - - private final PayCallbackService payCallbackService; - - /** - * 支付回调 - */ - public String payCallback(Map params) { - PARAMS.set(params); - try { - log.info("支付回调处理: {}", params); - // 验证消息 - if (!this.verifyNotify()) { - return null; - } - // 去重处理 - if (!this.duplicateChecker()) { - return this.getReturnMsg(); - } - // 调用统一回调处理 - PayCallbackResult result = payCallbackService.callback(this.getPaymentId(), this.getTradeStatus(), params); - // 记录回调记录 - this.saveNotifyRecord(result); - } - finally { - PARAMS.remove(); - } - return this.getReturnMsg(); - } - - /** - * 支付类型 - * @see PayChannelCode - */ - public abstract int getPayChannel(); - - /** - * 去重处理 - */ - public boolean duplicateChecker() { - // 判断10秒内是否已经回调处理 - String key = "payment:callback:duplicate:" + this.getPaymentId(); - return redisClient.setIfAbsent(key, "", 10 * 1000); - } - - /** - * 验证信息格式 - */ - public abstract boolean verifyNotify(); - - /** - * 获取paymentId - */ - public abstract Long getPaymentId(); - - /** - * 获取支付状态 - * @see PayStatusCode - */ - public abstract int getTradeStatus(); - - /** - * 返回响应结果 - */ - public abstract String getReturnMsg(); - - /** - * 保存回调记录 - */ - public void saveNotifyRecord(PayCallbackResult result) { - PayNotifyRecord payNotifyRecord = new PayNotifyRecord().setNotifyInfo(JSONUtil.toJsonStr(PARAMS.get())) - .setNotifyTime(LocalDateTime.now()) - .setPaymentId(this.getPaymentId()) - .setPayChannel(this.getPayChannel()) - .setStatus(result.getCode()) - .setMsg(result.getMsg()); - payNotifyRecordManager.save(payNotifyRecord); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayStrategy.java deleted file mode 100644 index 5998c3a51..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/AbsPayStrategy.java +++ /dev/null @@ -1,109 +0,0 @@ -package cn.bootx.payment.core.pay.func; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PaySyncStatus; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.pay.exception.ExceptionInfo; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import lombok.Getter; -import lombok.Setter; - -import java.util.Map; - -/** - * 抽象支付策略基类 同步支付 异步支付 错误处理 关闭支付 撤销支付 支付网关同步 退款 - * - * @author xxm - * @date 2020/12/11 - */ -@Getter -@Setter -public abstract class AbsPayStrategy { - - /** 支付对象 */ - private Payment payment = null; - - /** 支付参数 */ - private PayParam payParam = null; - - /** 支付方式参数 支付参数中的与这个不一致, 以这个为准 */ - private PayModeParam payMode = null; - - /** - * 策略标示 - * @see PayChannelCode - */ - public abstract int getType(); - - /** - * 初始化支付的参数 - */ - public void initPayParam(Payment payment, PayParam payParam) { - this.payment = payment; - this.payParam = payParam; - } - - /** - * 支付前对处理 包含必要的校验以及对Payment对象的创建和保存操作 - */ - public void doBeforePayHandler() { - } - - /** - * 支付操作 - */ - public abstract void doPayHandler(); - - /** - * 支付成功的处理方式 - */ - public void doSuccessHandler() { - } - - /** - * 支付失败的处理方式 - */ - public void doErrorHandler(ExceptionInfo exceptionInfo) { - } - - /** - * 异步支付成功的处理方式 - */ - public void doAsyncSuccessHandler(Map map) { - } - - /** - * 异步支付失败的处理方式, 默认使用支付失败的处理方式 同步支付方式调用时同 this#doErrorHandler - */ - public void doAsyncErrorHandler(ExceptionInfo exceptionInfo) { - this.doErrorHandler(exceptionInfo); - } - - /** - * 撤销支付操作,支付交易返回失败或支付系统超时,调用该接口撤销交易 默认为关闭本地支付记录 - */ - public void doCancelHandler() { - this.doCloseHandler(); - } - - /** - * 关闭本地支付记录 - */ - public abstract void doCloseHandler(); - - /** - * 退款 - */ - public abstract void doRefundHandler(); - - /** - * 异步支付单与支付网关进行状态比对 - * @see PaySyncStatus - */ - public PaySyncResult doSyncPayStatusHandler() { - return new PaySyncResult(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/PayStrategyConsumer.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/PayStrategyConsumer.java deleted file mode 100644 index 722668f54..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/func/PayStrategyConsumer.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.core.pay.func; - -import cn.bootx.payment.core.payment.entity.Payment; - -import java.util.List; - -/** - * 支付策略接口 - * - * @author xxm - * @date 2020/12/9 - */ -@FunctionalInterface -public interface PayStrategyConsumer, S extends Payment> { - - void accept(T t, S s); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncPayInfoLocal.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncPayInfoLocal.java deleted file mode 100644 index 920bb227b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncPayInfoLocal.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.payment.core.pay.local; - -import cn.bootx.payment.dto.pay.AsyncPayInfo; -import com.alibaba.ttl.TransmittableThreadLocal; - -/** - * 异步支付线程变量 - * - * @author xxm - * @date 2021/4/21 - */ -public final class AsyncPayInfoLocal { - - private static final ThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>(); - - /** - * 设置 - */ - public static void set(AsyncPayInfo asyncPayInfo) { - THREAD_LOCAL.set(asyncPayInfo); - } - - /** - * 获取 - */ - public static AsyncPayInfo get() { - return THREAD_LOCAL.get(); - } - - /** - * 清除 - */ - public static void clear() { - THREAD_LOCAL.remove(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncRefundLocal.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncRefundLocal.java deleted file mode 100644 index 0b4e2403e..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/local/AsyncRefundLocal.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.bootx.payment.core.pay.local; - -import com.alibaba.ttl.TransmittableThreadLocal; - -/** - * 异步退款线程变量 - * - * @author xxm - * @date 2022/3/9 - */ -public final class AsyncRefundLocal { - - private static final ThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>(); - - private static final ThreadLocal ERROR_MSG = new TransmittableThreadLocal<>(); - - private static final ThreadLocal ERROR_CODE = new TransmittableThreadLocal<>(); - - /** - * 设置 退款号 - */ - public static void set(String refundId) { - THREAD_LOCAL.set(refundId); - } - - /** - * 获取 退款号 - */ - public static String get() { - return THREAD_LOCAL.get(); - } - - /** - * 设置 错误内容 - */ - public static void setErrorMsg(String errorMsg) { - ERROR_MSG.set(errorMsg); - } - - /** - * 获取 错误内容 - */ - public static String getErrorMsg() { - return ERROR_MSG.get(); - } - - /** - * 设置 错误码 - */ - public static void setErrorCode(String errorCode) { - ERROR_CODE.set(errorCode); - } - - /** - * 获取 错误码 - */ - public static String getErrorCode() { - return ERROR_CODE.get(); - } - - /** - * 清除 - */ - public static void clear() { - THREAD_LOCAL.remove(); - ERROR_MSG.remove(); - ERROR_CODE.remove(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PayCallbackResult.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PayCallbackResult.java deleted file mode 100644 index 700057a45..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PayCallbackResult.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.core.pay.result; - -import cn.bootx.payment.code.pay.PayStatusCode; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付回调处理结果 - * - * @author xxm - * @date 2021/6/22 - */ -@Data -@Accessors(chain = true) -public class PayCallbackResult { - - /** - * 处理状态 - * @see PayStatusCode#NOTIFY_PROCESS_SUCCESS - */ - private int code; - - /** 提示信息 */ - private String msg; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PaySyncResult.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PaySyncResult.java deleted file mode 100644 index 9d32cf39d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/result/PaySyncResult.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.payment.core.pay.result; - -import cn.bootx.payment.code.pay.PaySyncStatus; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Map; - -/** - * 支付网关通知状态对象 - * - * @author xxm - * @date 2021/4/21 - */ -@Data -@Accessors(chain = true) -public class PaySyncResult { - - /** - * 支付网关同步状态 - * @see PaySyncStatus - */ - private int paySyncStatus = -1; - - /** 网关返回参数 */ - private Map map; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCallbackService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCallbackService.java deleted file mode 100644 index 8f0a85b64..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCallbackService.java +++ /dev/null @@ -1,224 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.common.core.exception.ErrorCodeRuntimeException; -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.builder.PayEventBuilder; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.exception.BaseException; -import cn.bootx.payment.core.pay.exception.ExceptionInfo; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.func.PayStrategyConsumer; -import cn.bootx.payment.core.pay.result.PayCallbackResult; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.mq.PaymentEventSender; -import cn.bootx.payment.param.pay.PayParam; -import cn.hutool.core.collection.CollectionUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 支付回调处理 - * - * @author xxm - * @date 2021/2/27 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayCallbackService { - - private final PaymentService paymentService; - - private final PaymentEventSender eventSender; - - /** - * 统一回调处理 - * @see PayStatusCode - * @param tradeStatus 支付状态 - */ - public PayCallbackResult callback(Long paymentId, int tradeStatus, Map map) { - - // 获取payment和paymentParam数据 - Payment payment = paymentService.findById(paymentId).orElse(null); - - // 支付单不存在,记录回调记录 - if (Objects.isNull(payment)) { - return new PayCallbackResult().setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("支付单不存在,记录回调记录"); - } - - // 回调时间超出了支付单超时时间, 记录一下, 不做处理 - if (Objects.nonNull(payment.getExpiredTime()) - && LocalDateTimeUtil.ge(LocalDateTime.now(), payment.getExpiredTime())) { - return new PayCallbackResult().setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("回调时间超出了支付单支付有效时间"); - } - - // 成功状态 - if (PayStatusCode.NOTIFY_TRADE_SUCCESS == tradeStatus) { - return this.success(payment, map); - } - else { - // 失败状态 - return this.fail(payment, map); - } - } - - /** - * 成功处理 - */ - private PayCallbackResult success(Payment payment, Map map) { - PayCallbackResult result = new PayCallbackResult().setCode(PayStatusCode.NOTIFY_PROCESS_SUCCESS); - - // payment已经被支付,不需要重复处理 - if (Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_SUCCESS)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_IGNORE).setMsg("支付单已经是支付成功状态,不进行处理"); - } - - // payment已被取消,记录回调记录 - if (!Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_PROGRESS)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("支付单不是待支付状态,记录回调记录"); - } - - // 2.通过工厂生成对应的策略组 - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollectionUtil.isEmpty(paymentStrategyList)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("支付单数据非法,未找到对应的支付方式"); - } - - // 3.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - // 4.处理方法, 支付时只有一种payModel(异步支付), 失败时payment的所有payModel都会生效 - boolean handlerFlag = this.doHandler(payment, paymentStrategyList, (strategyList, paymentObj) -> { - // 执行异步支付方式的成功回调(不会有同步payModel) - strategyList.forEach(absPaymentStrategy -> absPaymentStrategy.doAsyncSuccessHandler(map)); - - // 修改payment支付状态为成功 - paymentObj.setPayStatus(PayStatusCode.TRADE_SUCCESS); - paymentObj.setPayTime(LocalDateTime.now()); - paymentService.updateById(paymentObj); - }); - - if (handlerFlag) { - // 5. 发送成功事件 - eventSender.sendPayComplete(PayEventBuilder.buildPayComplete(payment)); - } - else { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("回调处理过程报错"); - } - return result; - } - - /** - * 失败处理, 关闭并退款 按说这块不会发生 - */ - private PayCallbackResult fail(Payment payment, Map map) { - PayCallbackResult result = new PayCallbackResult().setCode(PayStatusCode.NOTIFY_PROCESS_SUCCESS); - - // payment已被取消,记录回调记录,后期处理 - if (!Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_PROGRESS)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_IGNORE).setMsg("支付单已经取消,记录回调记录"); - } - - // payment支付成功, 状态非法 - if (!Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_SUCCESS)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("支付单状态非法,支付网关状态为失败,但支付单状态为已完成"); - } - - // 2.通过工厂生成对应的策略组 - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollectionUtil.isEmpty(paymentStrategyList)) { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("支付单数据非法,未找到对应的支付方式"); - } - // 3.初始化支付关闭的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - // 4.处理方法, 支付时只有一种payModel(异步支付), 失败时payment的所有payModel都会生效 - boolean handlerFlag = this.doHandler(payment, paymentStrategyList, (strategyList, paymentObj) -> { - // 执行异步支付方式的成功回调(不会有同步payModel) - strategyList.forEach(AbsPayStrategy::doCancelHandler); - - // 修改payment支付状态为成功 - paymentObj.setPayStatus(PayStatusCode.TRADE_CANCEL); - paymentService.updateById(paymentObj); - }); - - if (handlerFlag) { - // 5. 发送退款事件 - eventSender.sendPayRefund(PayEventBuilder.buildPayRefund(payment)); - } - else { - return result.setCode(PayStatusCode.NOTIFY_PROCESS_FAIL).setMsg("回调处理过程报错"); - } - - return result; - } - - /** - * 处理方法 - * @param payment 支付记录 - * @param strategyList 支付策略 - * @param successCallback 成功操作 - */ - private boolean doHandler(Payment payment, List strategyList, - PayStrategyConsumer, Payment> successCallback) { - - try { - // 1.获取异步支付方式,通过工厂生成对应的策略组 - List syncPaymentStrategyList = strategyList.stream() - .filter(paymentStrategy -> PayChannelCode.ASYNC_TYPE.contains(paymentStrategy.getType())) - .collect(Collectors.toList()); - // 执行成功方法 - successCallback.accept(syncPaymentStrategyList, payment); - } - catch (Exception e) { - // error事件的处理 - this.asyncErrorHandler(payment, strategyList, e); - return false; - } - return true; - } - - /** - * 对Error的处理 - */ - private void asyncErrorHandler(Payment payment, List strategyList, Exception e) { - - // 默认的错误信息 - ExceptionInfo exceptionInfo = new ExceptionInfo(PayStatusCode.TRADE_FAIL, e.getMessage()); - if (e instanceof BaseException) { - exceptionInfo = ((BaseException) e).getExceptionInfo(); - } - else if (e instanceof ErrorCodeRuntimeException) { - ErrorCodeRuntimeException ex = (ErrorCodeRuntimeException) e; - exceptionInfo = new ExceptionInfo(ex.getCode(), ex.getMessage()); - } - - // 更新Payment的状态 - payment.setErrorCode(String.valueOf(exceptionInfo.getErrorCode())); - payment.setErrorMsg(String.valueOf(exceptionInfo.getErrorMsg())); - payment.setPayStatus(PayStatusCode.TRADE_FAIL); - paymentService.updateById(payment); - - // 调用失败处理 - for (AbsPayStrategy paymentStrategy : strategyList) { - paymentStrategy.doAsyncErrorHandler(exceptionInfo); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCancelService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCancelService.java deleted file mode 100644 index f979ecbb2..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayCancelService.java +++ /dev/null @@ -1,122 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.builder.PayEventBuilder; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.func.PayStrategyConsumer; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayNotExistedException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.mq.PaymentEventSender; -import cn.bootx.payment.param.pay.PayParam; -import cn.hutool.core.collection.CollectionUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Arrays; -import java.util.List; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; -import static cn.bootx.payment.code.pay.PayStatusCode.TRADE_REFUNDED; - -/** - * 取消订单处理 - * - * @author xxm - * @date 2021/3/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayCancelService { - - private final PaymentService paymentService; - - private final PaymentEventSender paymentEventSender; - - /** - * 根据业务id取消支付记录 - */ - @Transactional(rollbackFor = Exception.class) - public void cancelByBusinessId(String businessId) { - Payment payment = paymentService.findByBusinessId(businessId) - .orElseThrow(() -> new PayFailureException("未找到支付单")); - this.cancelPayment(payment); - } - - /** - * 根据paymentId取消支付记录 - */ - @Transactional(rollbackFor = Exception.class) - public void cancelByPaymentId(Long paymentId) { - Payment payment = paymentService.findById(paymentId).orElseThrow(() -> new PayFailureException("未找到支付单")); - this.cancelPayment(payment); - } - - /** - * 取消支付记录 - */ - private void cancelPayment(Payment payment) { - // 状态检查, 成功/退款/退款中 不处理 - List trades = Arrays.asList(TRADE_SUCCESS, TRADE_REFUNDING, TRADE_REFUNDED); - if (trades.contains(payment.getPayStatus())) { - throw new PayFailureException("支付已完成, 无法撤销"); - } - - // 获取 paymentParam - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - - // 1.获取支付方式,通过工厂生成对应的策略组 - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollectionUtil.isEmpty(paymentStrategyList)) { - throw new PayUnsupportedMethodException(); - } - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - - // 3.执行取消订单 - this.doHandler(payment, paymentStrategyList, (strategyList, paymentObj) -> { - // 发起取消进行的执行方法 - strategyList.forEach(AbsPayStrategy::doCancelHandler); - // 取消订单 - paymentObj.setPayStatus(PayStatusCode.TRADE_CANCEL); - paymentService.updateById(paymentObj); - }); - - // 4. 获取支付记录信息 - payment = paymentService.findById(payment.getId()).orElseThrow(PayNotExistedException::new); - - // 5. 发布撤销事件 - paymentEventSender.sendPayCancel(PayEventBuilder.buildPayCancel(payment)); - } - - /** - * 处理方法 - * @param payment 支付记录 - * @param strategyList 支付策略 - * @param successCallback 成功操作 - */ - private void doHandler(Payment payment, List strategyList, - PayStrategyConsumer, Payment> successCallback) { - - try { - // 执行 - successCallback.accept(strategyList, payment); - } - catch (Exception e) { - // error事件的处理 - log.warn("取消订单失败"); - throw e; - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayExpiredTimeService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayExpiredTimeService.java deleted file mode 100644 index 0dd6260e7..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayExpiredTimeService.java +++ /dev/null @@ -1,183 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.payment.code.pay.PaySyncStatus; -import cn.bootx.payment.core.pay.builder.PayEventBuilder; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.mq.PaymentEventSender; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; - -/** - * 支付超时处理 - * - * @author xxm - * @date 2022/7/13 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayExpiredTimeService { - - private final PaymentService paymentService; - - private final PaymentEventSender eventSender; - - /** - * 支付单超时支付单处理 - */ - @Async("bigExecutor") - @Transactional(rollbackFor = Exception.class) - public void expiredTime(Long paymentId) { - - Payment payment = paymentService.findById(paymentId).orElseThrow(() -> new PayFailureException("支付单未找到")); - // 只处理支付中 - if (!Objects.equals(payment.getPayStatus(), TRADE_PROGRESS)) { - return; - } - // 获取支付网关状态 - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - // 1.获取支付方式,通过工厂生成对应的策略组 - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollUtil.isEmpty(paymentStrategyList)) { - throw new PayUnsupportedMethodException(); - } - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - - // 3 拿到异步支付方法, 与支付网关进行同步 - PayModeParam asyncPayMode = PayModelUtil.getAsyncPayModeParam(payParam); - AbsPayStrategy syncPayStrategy = PayStrategyFactory.create(asyncPayMode); - syncPayStrategy.initPayParam(payment, payParam); - PaySyncResult paySyncResult = syncPayStrategy.doSyncPayStatusHandler(); - - // 4 对返回的支付网关各种状态进行处理 - int paySyncStatus = paySyncResult.getPaySyncStatus(); - switch (paySyncStatus) { - // 成功状态 - case PaySyncStatus.TRADE_SUCCESS: { - this.paySuccess(payment, syncPayStrategy, paySyncResult); - break; - } - // 待付款/ 支付中 - case PaySyncStatus.WAIT_BUYER_PAY: { - this.payCancel(payment, paymentStrategyList); - break; - } - // 超时关闭 和 网关没找到记录 - case PaySyncStatus.TRADE_CLOSED: - case PaySyncStatus.NOT_FOUND: { - this.payClose(payment, paymentStrategyList); - break; - } - // 交易退款 - case PaySyncStatus.TRADE_REFUND: { - log.info("交易退款不需要关闭: {}", payment.getId()); - break; - } - // 调用出错 进行重试 - case PaySyncStatus.FAIL: { - log.warn("支付状态同步接口调用出错"); - } - case PaySyncStatus.NOT_SYNC: - default: { - log.error("支付超时代码有问题"); - } - } - } - - /** - * 如果支付网关是支付中状态, 关闭网关支付, 然后再关闭本地支付单, 排除退款 - */ - private void payCancel(Payment payment, List payStrategies) { - try { - // 异常情况, 不继续进行处理 - if (!this.check(payment)) { - return; - } - // 撤销和关闭支付单 - payStrategies.forEach(AbsPayStrategy::doCancelHandler); - payment.setPayStatus(TRADE_CANCEL); - paymentService.updateById(payment); - // 发送事件 - eventSender.sendPayCancel(PayEventBuilder.buildPayCancel(payment)); - } - catch (Exception e) { - log.warn("支付状态同步后关闭支付单报错了", e); - } - } - - /** - * 如果支付网关是关闭或未找到, 关闭本地支付单 - */ - private void payClose(Payment payment, List absPayStrategies) { - try { - // 已关闭的不再进行关闭 - if (Objects.equals(payment.getPayStatus(), TRADE_CANCEL)) { - return; - } - // 退款状态则不进行更新 - if (Objects.equals(payment.getPayStatus(), TRADE_REFUNDED) - || Objects.equals(payment.getPayStatus(), TRADE_REFUNDING)) { - return; - } - // 异常情况, 不继续进行处理 - if (!this.check(payment)) { - return; - } - // 关闭支付单 - absPayStrategies.forEach(AbsPayStrategy::doCloseHandler); - payment.setPayStatus(TRADE_CANCEL); - paymentService.updateById(payment); - // 发送事件 - eventSender.sendPayCancel(PayEventBuilder.buildPayCancel(payment)); - } - catch (Exception e) { - log.warn("支付状态同步后关闭支付单报错了", e); - } - } - - /** - * 如果是支付网关是支付完成状态, 记录为异常支付单 - */ - private void paySuccess(Payment payment, AbsPayStrategy syncPayStrategy, PaySyncResult paySyncResult) { - // 修改payment支付状态为成功 - log.error("支付网关支付单已被支付, 需要线下处理: {}", payment.getId()); - } - - /** - * 校验状态, 处理在发起撤销与正式处理之间订单被完成的情况. 理论上不会发生 - */ - private boolean check(Payment payment) { - // 支付失败/撤销/退款不需要处理 - List trades = Arrays.asList(TRADE_FAIL, TRADE_CANCEL, TRADE_REFUNDING, TRADE_REFUNDED); - if (trades.contains(payment.getPayStatus())) { - log.info("订单在超时撤销期间发生了操作, 需要人工介入处理"); - return false; - } - return true; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayRefundService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayRefundService.java deleted file mode 100644 index 53cb5f7b6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayRefundService.java +++ /dev/null @@ -1,248 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.common.spring.util.WebServletUtil; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.func.PayStrategyConsumer; -import cn.bootx.payment.core.pay.local.AsyncRefundLocal; -import cn.bootx.payment.core.payment.dao.PaymentManager; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.refund.dao.RefundRecordManager; -import cn.bootx.payment.core.refund.entity.RefundRecord; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.exception.payment.PayAmountAbnormalException; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.param.refund.RefundModeParam; -import cn.bootx.payment.param.refund.RefundParam; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.extra.servlet.ServletUtil; -import cn.hutool.extra.spring.SpringUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; - -/** - * 支付退款 - * - * @author xxm - * @date 2022/2/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayRefundService { - - private final PaymentService paymentService; - - private final PaymentManager paymentManager; - - private final RefundRecordManager refundRecordManager; - - /** - * 退款 - */ - @Transactional(rollbackFor = Exception.class) - public void refund(RefundParam refundParam) { - Payment payment = paymentService.findByBusinessId(refundParam.getBusinessId()) - .orElseThrow(() -> new PayFailureException("未找到支付单")); - - this.refundPayment(payment, refundParam.getRefundModeParams()); - } - - /** - * 根据业务id取消支付记录 - */ - @Transactional(rollbackFor = Exception.class) - public void refundByBusinessId(String businessId) { - Payment payment = paymentService.findByBusinessId(businessId) - .orElseThrow(() -> new PayFailureException("未找到支付单")); - List refundModeParams = payment.getRefundableInfo() - .stream() - .map(o -> new RefundModeParam().setPayChannel(o.getPayChannel()).setAmount(o.getAmount())) - .collect(Collectors.toList()); - this.refundPayment(payment, refundModeParams); - - } - - /** - * 退款 - */ - private void refundPayment(Payment payment, List refundModeParams) { - // 状态判断, 支付中/失败/撤销不处理 - List trades = Arrays.asList(TRADE_PROGRESS, TRADE_CANCEL, TRADE_FAIL); - if (trades.contains(payment.getPayStatus())) { - throw new PayFailureException("状态非法, 无法退款"); - } - - // 过滤退款金额为0的支付通道参数 - refundModeParams - .removeIf(refundModeParam -> BigDecimalUtil.compareTo(refundModeParam.getAmount(), BigDecimal.ZERO) == 0); - // 获取 paymentParam - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - // 退款参数检查 - this.payModeCheck(refundModeParams, payment.getRefundableInfo()); - - // 1.获取退款参数方式,通过工厂生成对应的策略组 - List payModeParams = refundModeParams.stream() - .map(RefundModeParam::toPayModeParam) - .collect(Collectors.toList()); - List paymentStrategyList = PayStrategyFactory.create(payModeParams); - if (CollectionUtil.isEmpty(paymentStrategyList)) { - throw new PayUnsupportedMethodException(); - } - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - - // 3.执行退款 - this.doHandler(payment, paymentStrategyList, (strategyList, paymentObj) -> { - // 发起支付成功进行的执行方法 - try { - strategyList.forEach(AbsPayStrategy::doRefundHandler); - } - catch (Exception e) { - // 记录退款失败的记录 - BigDecimal amount = refundModeParams.stream() - .map(RefundModeParam::getAmount) - .reduce(BigDecimal.ZERO, BigDecimal::add); - SpringUtil.getBean(this.getClass()).saveRefund(payment, amount, refundModeParams); - throw e; - } - // 处理支付单 - this.paymentHandler(paymentObj, refundModeParams); - }); - } - - /** - * 支付单处理 - */ - private void paymentHandler(Payment payment, List refundModeParams) { - BigDecimal amount = refundModeParams.stream() - .map(RefundModeParam::getAmount) - .reduce(BigDecimal.ZERO, BigDecimal::add); - // 剩余可退款余额 - BigDecimal refundableBalance = payment.getRefundableBalance().subtract(amount); - - // 退款完成 - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) < 1) { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - - payment.setRefundableBalance(refundableBalance); - paymentManager.updateById(payment); - // 记录退款成功的记录 - SpringUtil.getBean(this.getClass()).saveRefund(payment, amount, refundModeParams); - } - - /** - * 处理方法 - * @param payment 支付记录 - * @param strategyList 支付策略 - * @param successCallback 成功操作 - */ - private void doHandler(Payment payment, List strategyList, - PayStrategyConsumer, Payment> successCallback) { - - try { - // 执行 - successCallback.accept(strategyList, payment); - } - catch (Exception e) { - log.warn("退款失败"); - throw e; - } - finally { - // 清除 - AsyncRefundLocal.clear(); - } - } - - /** - * 支付方式检查 - * @param refundModeParams 退款参数 - * @param refundableInfos 可退款信息 - */ - private void payModeCheck(List refundModeParams, List refundableInfos) { - if (CollUtil.isEmpty(refundModeParams)) { - throw new PayFailureException("传入的退款参数不合法"); - } - Map payModeMap = refundableInfos.stream() - .collect(Collectors.toMap(RefundableInfo::getPayChannel, Function.identity())); - for (RefundModeParam refundPayMode : refundModeParams) { - this.payModeCheck(refundPayMode, payModeMap.get(refundPayMode.getPayChannel())); - } - } - - /** - * 支付方式检查 - * @param refundModeParam 退款参数 - * @param refundableInfo 可退款对象 - */ - public void payModeCheck(RefundModeParam refundModeParam, RefundableInfo refundableInfo) { - if (Objects.isNull(refundableInfo)) { - throw new PayFailureException("退款参数非法"); - } - // 退款金额为负数的 - if (BigDecimalUtil.compareTo(refundModeParam.getAmount(), BigDecimal.ZERO) < 1) { - throw new PayAmountAbnormalException(); - } - // 退款金额大于可退款金额 - if (BigDecimalUtil.compareTo(refundModeParam.getAmount(), refundableInfo.getAmount()) == 1) { - throw new PayAmountAbnormalException("退款金额大于可退款金额"); - } - - } - - /** - * 保存退款记录 成不成功都记录 - */ - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void saveRefund(Payment payment, BigDecimal amount, List refundModeParams) { - List refundableInfos = refundModeParams.stream() - .map(RefundModeParam::toRefundableInfo) - .collect(Collectors.toList()); - HttpServletRequest request = WebServletUtil.getRequest(); - String ip = ServletUtil.getClientIP(request); - RefundRecord refundRecord = new RefundRecord().setRefundRequestNo(AsyncRefundLocal.get()) - .setRefundableInfo(refundableInfos) - .setAmount(amount) - .setRefundableBalance(payment.getRefundableBalance()) - .setClientIp(ip) - .setPaymentId(payment.getId()) - .setBusinessId(payment.getBusinessId()) - .setUserId(SecurityUtil.getUserIdOrDefaultId()) - .setRefundTime(LocalDateTime.now()) - .setTitle(payment.getTitle()) - .setErrorMsg(AsyncRefundLocal.getErrorMsg()) - .setErrorCode(AsyncRefundLocal.getErrorCode()) - .setRefundStatus(Objects.isNull(AsyncRefundLocal.getErrorCode()) ? PayStatusCode.REFUND_PROCESS_SUCCESS - : PayStatusCode.REFUND_PROCESS_FAIL); - refundRecordManager.save(refundRecord); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayService.java deleted file mode 100644 index db90d5700..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PayService.java +++ /dev/null @@ -1,251 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.common.core.util.ValidationUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.core.pay.builder.PayEventBuilder; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.func.PayStrategyConsumer; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.dto.pay.PayResult; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayNotExistedException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.mq.PaymentEventSender; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.hutool.core.collection.CollectionUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; -import java.util.*; -import java.util.function.Consumer; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; - -/** - * 支付流程 - * - * @author xxm - * @date 2020/12/9 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayService { - - private final PaymentService paymentService; - - private final PaymentEventSender eventSender; - - /** - * 支付方法(同步/异步/组合支付) 同步支付:都只会在第一次执行中就完成支付,例如钱包、积分都是调用完就进行了扣减,完成了支付记录 - * 异步支付:例如支付宝、微信,发起支付后还需要跳转第三方平台进行支付,支付后通常需要进行回调,之后才完成支付记录 - * 组合支付:主要是混合了同步支付和异步支付,同时异步支付只能有一个,在支付时先对同步支付进行扣减,然后异步支付回调结束后完成整个支付单 - * 组合支付在非第一次支付的时候,只对新传入的异步支付PayMode进行处理,PayMode的价格使用第一次发起的价格,旧的同步支付如果传入后也不做处理, - * Payment中PayModeList将会为 旧有的同步支付+新传入的异步支付方式(在具体支付实现中处理) - */ - @Transactional(rollbackFor = Exception.class) - public PayResult pay(PayParam payParam) { - ValidationUtil.validateParam(payParam); - // 异步支付方法检查 - PayModelUtil.validationAsyncPayMode(payParam); - - // 获取并校验支付状态 - Payment payment = this.getAndCheckPaymentByBusinessId(payParam.getBusinessId()); - - // 异步支付且非第一次支付 - if (Objects.nonNull(payment) && payment.isAsyncPayMode()) { - return this.paySyncNotFirst(payParam, payment); - } - else { - // 首次支付或同步支付 - return this.payFirst(payParam, payment); - } - } - - /** - * 发起的第一次支付请求(同步/异步) - */ - private PayResult payFirst(PayParam payParam, Payment payment) { - // 0. 支付成功直接返回 - if (Objects.nonNull(payment)) { - return PaymentBuilder.buildResultByPayment(payment); - } - - // 1. 价格检测 - PayModelUtil.validationAmount(payParam.getPayModeList()); - - // 2. 创建支付记录 - payment = this.createPayment(payParam); - - // 3. 调用支付方法进行发起支付 - this.payFirstMethod(payParam, payment); - - // 4. 获取支付记录信息 - payment = paymentService.findById(payment.getId()).orElseThrow(PayNotExistedException::new); - - // 5. 返回支付结果 - PayResult payResult = PaymentBuilder.buildResultByPayment(payment); - - // 如果是支付成功, 发送事件 - if (Objects.equals(payResult.getPayStatus(), TRADE_SUCCESS)) { - eventSender.sendPayComplete(PayEventBuilder.buildPayComplete(payment)); - } - return payResult; - } - - /** - * 执行支付方法 (第一次支付) - */ - private void payFirstMethod(PayParam payParam, Payment payment) { - - // 1.获取支付方式,通过工厂生成对应的策略组 - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollectionUtil.isEmpty(paymentStrategyList)) { - throw new PayUnsupportedMethodException(); - } - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - - // 3.支付前准备 - this.doHandler(payment, paymentStrategyList, AbsPayStrategy::doBeforePayHandler, null); - - // 4.支付 - this.doHandler(payment, paymentStrategyList, AbsPayStrategy::doPayHandler, (strategyList, paymentObj) -> { - // 发起支付成功进行的执行方法 - strategyList.forEach(AbsPayStrategy::doSuccessHandler); - // 所有支付方式都是同步时进行Payment处理 - if (PayModelUtil.isNotSync(payParam.getPayModeList())) { - // 修改payment支付状态为成功 - paymentObj.setPayStatus(TRADE_SUCCESS); - paymentObj.setPayTime(LocalDateTime.now()); - } - paymentService.updateById(paymentObj); - }); - } - - /** - * 异步支付执行(非第一次请求), 只执行异步支付策略, 报错不影响继续发起支付 - */ - private PayResult paySyncNotFirst(PayParam payParam, Payment payment) { - - // 0. 处理支付完成情况(完成/退款) - List trades = Arrays.asList(TRADE_SUCCESS, TRADE_CANCEL, TRADE_REFUNDING, TRADE_REFUNDED); - if (trades.contains(payment.getPayStatus())) { - return PaymentBuilder.buildResultByPayment(payment); - } - - // 1.获取 异步支付 通道,通过工厂生成对应的策略组 - PayParam oldPayParam = PaymentBuilder.buildPayParamByPayment(payment); - PayModeParam payModeParam = this.getAsyncPayModeParam(payParam, oldPayParam); - List paymentStrategyList = PayStrategyFactory.create(Collections.singletonList(payModeParam)); - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - // 3.支付前准备 - this.doHandler(payment, paymentStrategyList, AbsPayStrategy::doBeforePayHandler, null); - - // 4. 发起支付 - this.doHandler(payment, paymentStrategyList, AbsPayStrategy::doPayHandler, (strategyList, paymentObj) -> { - // 发起支付成功进行的执行方法 - strategyList.forEach(AbsPayStrategy::doSuccessHandler); - paymentService.updateById(paymentObj); - }); - - // 5. 获取支付记录信息 - payment = paymentService.findById(payment.getId()).orElseThrow(PayNotExistedException::new); - - // 6. 组装返回参数 - return PaymentBuilder.buildResultByPayment(payment); - } - - /** - * 执行策略中不同的handler - * @param payment 主支付对象 - * @param strategyList 策略列表 - * @param payMethod 执行支付/支付前的函数 - * @param successMethod 执行成功的函数 - */ - private void doHandler(Payment payment, List strategyList, Consumer payMethod, - PayStrategyConsumer, Payment> successMethod) { - // 执行策略操作,如支付前/支付时 - // 等同strategyList.forEach(payMethod.accept(PaymentStrategy)) - strategyList.forEach(payMethod); - - // 执行操作成功的处理 - Optional.ofNullable(successMethod).ifPresent(fun -> fun.accept(strategyList, payment)); - } - - /** - * 获取异步支付参数 - */ - private PayModeParam getAsyncPayModeParam(PayParam payParam, PayParam oldPaymentParam) { - - List oldPayModes = oldPaymentParam.getPayModeList(); - // 旧的异步支付方式 - PayModeParam oldModeParam = oldPayModes.stream() - .filter(payMode -> PayChannelCode.ASYNC_TYPE.contains(payMode.getPayChannel())) - .findFirst() - .orElseThrow(() -> new PayFailureException("支付方式数据异常")); - - // 新的异步支付方式 - PayModeParam payModeParam = payParam.getPayModeList() - .stream() - .filter(payMode -> PayChannelCode.ASYNC_TYPE.contains(payMode.getPayChannel())) - .findFirst() - .orElseThrow(() -> new PayFailureException("支付方式数据异常")); - payModeParam.setAmount(oldModeParam.getAmount()); - - return payModeParam; - } - - /** - * 创建支付记录 - */ - private Payment createPayment(PayParam payParam) { - // 构建payment记录 并保存 - Payment payment = PaymentBuilder.buildPayment(payParam); - return paymentService.save(payment); - } - - /** - * 校验支付状态,支付成功则返回,支付失败则抛出对应的异常 - */ - private Payment getAndCheckPaymentByBusinessId(String businessId) { - // 根据订单查询支付记录 - Payment payment = paymentService.findByBusinessId(businessId).orElse(null); - if (Objects.nonNull(payment)) { - // 支付失败 - List trades = Arrays.asList(TRADE_FAIL, TRADE_CANCEL); - if (trades.contains(payment.getPayStatus())) { - throw new PayFailureException("支付失败或已经被撤销"); - } - // 退款状态 - trades = Arrays.asList(TRADE_REFUNDING, TRADE_REFUNDED); - if (trades.contains(payment.getPayStatus())) { - throw new PayFailureException("支付失败或已经被撤销"); - } - // 支付超时 - if (Objects.nonNull(payment.getExpiredTime()) - && LocalDateTimeUtil.ge(LocalDateTime.now(), payment.getExpiredTime())) { - throw new PayFailureException("支付已超时"); - } - return payment; - } - return null; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PaySyncService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PaySyncService.java deleted file mode 100644 index 085053353..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/service/PaySyncService.java +++ /dev/null @@ -1,183 +0,0 @@ -package cn.bootx.payment.core.pay.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.pay.PaySyncStatus; -import cn.bootx.payment.core.pay.builder.PayEventBuilder; -import cn.bootx.payment.core.pay.builder.PaymentBuilder; -import cn.bootx.payment.core.pay.factory.PayStrategyFactory; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.exception.payment.PayUnsupportedMethodException; -import cn.bootx.payment.mq.PaymentEventSender; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; - -/** - * 未完成的异步支付单与支付网关进行对比 - * - * @author xxm - * @date 2021/4/21 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PaySyncService { - - private final PaymentService paymentService; - - private final PaymentEventSender eventSender; - - /** - * 同步订单的支付状态 - */ - public void syncByPaymentId(Long id) { - Payment payment = paymentService.findById(id).orElse(null); - if (Objects.isNull(payment)) { - return; - } - this.syncPayment(payment); - } - - /** - * 同步订单的支付状态 - */ - public void syncByBusinessId(String businessId) { - Payment payment = paymentService.findByBusinessId(businessId).orElse(null); - if (Objects.isNull(payment)) { - return; - } - this.syncPayment(payment); - } - - /** - * 同步支付状态 传入 payment 对象 - */ - public void syncPayment(Payment payment) { - PayParam payParam = PaymentBuilder.buildPayParamByPayment(payment); - // 1.获取支付方式,通过工厂生成对应的策略组 - List paymentStrategyList = PayStrategyFactory.create(payParam.getPayModeList()); - if (CollUtil.isEmpty(paymentStrategyList)) { - throw new PayUnsupportedMethodException(); - } - - // 2.初始化支付的参数 - for (AbsPayStrategy paymentStrategy : paymentStrategyList) { - paymentStrategy.initPayParam(payment, payParam); - } - - // 3 拿到异步支付方法, 与支付网关进行同步 - PayModeParam asyncPayMode = PayModelUtil.getAsyncPayModeParam(payParam); - AbsPayStrategy syncPayStrategy = PayStrategyFactory.create(asyncPayMode); - syncPayStrategy.initPayParam(payment, payParam); - PaySyncResult paySyncResult = syncPayStrategy.doSyncPayStatusHandler(); - int paySyncStatus = paySyncResult.getPaySyncStatus(); - - switch (paySyncStatus) { - // 支付成功 支付宝退款时也是支付成功状态, 除非支付完成 - case PaySyncStatus.TRADE_SUCCESS: { - this.paymentSuccess(payment, syncPayStrategy, paySyncResult); - break; - } - // 待付款/ 支付中 - case PaySyncStatus.WAIT_BUYER_PAY: { - log.info("依然是付款状态"); - break; - } - // 订单已经关闭超时关闭 和 网关没找到记录, 支付宝退款完成也是这个状态 - case PaySyncStatus.TRADE_CLOSED: - case PaySyncStatus.NOT_FOUND: { - // 判断下是否超时, 同时payment 变更为取消支付 - this.paymentCancel(payment, paymentStrategyList); - break; - } - // 交易退款 支付宝没这个状态 - case PaySyncStatus.TRADE_REFUND: { - this.paymentRefund(payment, syncPayStrategy, paySyncResult); - break; - } - // 调用出错 - case PaySyncStatus.FAIL: { - // 不进行处理 - log.warn("支付状态同步接口调用出错"); - break; - } - case PaySyncStatus.NOT_SYNC: - default: { - throw new BizException("代码有问题"); - } - } - } - - /** - * payment 变更为已支付 - */ - private void paymentSuccess(Payment payment, AbsPayStrategy syncPayStrategy, PaySyncResult paySyncResult) { - - // 已支付不在重复处理 - if (Objects.equals(payment.getPayStatus(), TRADE_SUCCESS)) { - return; - } - // 退款的不处理 - if (Objects.equals(payment.getPayStatus(), TRADE_REFUNDED) - || Objects.equals(payment.getPayStatus(), TRADE_REFUNDING)) { - return; - } - // 修改payment支付状态为成功 - syncPayStrategy.doAsyncSuccessHandler(paySyncResult.getMap()); - payment.setPayStatus(TRADE_SUCCESS); - payment.setPayTime(LocalDateTime.now()); - paymentService.updateById(payment); - - // 发送成功事件 - eventSender.sendPayComplete(PayEventBuilder.buildPayComplete(payment)); - } - - /** - * payment 变更为取消支付 - */ - private void paymentCancel(Payment payment, List absPayStrategies) { - try { - // 已关闭的不再进行关闭 - if (Objects.equals(payment.getPayStatus(), TRADE_CANCEL)) { - return; - } - // 修改payment支付状态为取消, 退款状态则不进行更新 - if (Objects.equals(payment.getPayStatus(), TRADE_REFUNDED) - || Objects.equals(payment.getPayStatus(), TRADE_REFUNDING)) { - return; - } - payment.setPayStatus(TRADE_CANCEL); - // 执行策略的关闭方法 - absPayStrategies.forEach(AbsPayStrategy::doCloseHandler); - paymentService.updateById(payment); - // 发送事件 - eventSender.sendPayCancel(PayEventBuilder.buildPayCancel(payment)); - } - catch (Exception e) { - log.warn("支付状态同步后关闭支付单报错了", e); - throw new PayFailureException("支付状态同步后关闭支付单报错了"); - } - } - - /** - * payment 退款处理 TODO 需要考虑退款详情的合并处理 - */ - private void paymentRefund(Payment payment, AbsPayStrategy syncPayStrategy, PaySyncResult paySyncResult) { - - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/AliPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/AliPayStrategy.java deleted file mode 100644 index de7c92c95..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/AliPayStrategy.java +++ /dev/null @@ -1,230 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.code.paymodel.AliPayCode; -import cn.bootx.payment.core.pay.exception.ExceptionInfo; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.alipay.dao.AlipayConfigManager; -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.bootx.payment.core.paymodel.alipay.service.*; -import cn.bootx.payment.exception.payment.PayAmountAbnormalException; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.paymodel.alipay.AliPayParam; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONException; -import cn.hutool.json.JSONUtil; -import com.ijpay.alipay.AliPayApiConfig; -import com.ijpay.alipay.AliPayApiConfigKit; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Map; -import java.util.Objects; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 支付宝支付 - * - * @author xxm - * @date 2021/2/27 - */ -@Scope(SCOPE_PROTOTYPE) -@Component -@RequiredArgsConstructor -public class AliPayStrategy extends AbsPayStrategy { - - private final AliPaymentService aliPaymentService; - - private final AlipaySyncService alipaySyncService; - - private final AliPayService aliPayService; - - private final AliPayCancelService aliPayCancelService; - - private final AlipayConfigManager alipayConfigManager; - - private final PaymentService paymentService; - - private AlipayConfig alipayConfig; - - private AliPayParam aliPayParam; - - @Override - public int getType() { - return PayChannelCode.ALI; - } - - /** - * 支付前操作 - */ - @Override - public void doBeforePayHandler() { - try { - // 支付宝参数验证 - String extraParamsJson = this.getPayMode().getExtraParamsJson(); - if (StrUtil.isNotBlank(extraParamsJson)) { - this.aliPayParam = JSONUtil.toBean(extraParamsJson, AliPayParam.class); - } - else { - this.aliPayParam = new AliPayParam(); - } - } - catch (JSONException e) { - throw new PayFailureException("支付参数错误"); - } - // 检查金额 - PayModeParam payMode = this.getPayMode(); - if (BigDecimalUtil.compareTo(payMode.getAmount(), BigDecimal.ZERO) < 1) { - throw new PayAmountAbnormalException(); - } - // 检查并获取支付宝支付配置 - this.initAlipayConfig(); - aliPayService.validation(this.getPayMode(), alipayConfig); - // 如果没有显式传入同步回调地址, 使用默认配置 - if (StrUtil.isBlank(aliPayParam.getReturnUrl())) { - aliPayParam.setReturnUrl(alipayConfig.getReturnUrl()); - } - this.initAlipayConfig(); - } - - /** - * 发起支付操作 - */ - @Override - public void doPayHandler() { - aliPayService.pay(this.getPayMode().getAmount(), this.getPayment(), this.aliPayParam, this.getPayMode(), - this.alipayConfig); - } - - /** - * 支付调起成功 - */ - @Override - public void doSuccessHandler() { - aliPaymentService.updatePaySuccess(this.getPayment(), this.getPayMode()); - } - - /** - * 发起支付失败 - */ - @Override - public void doErrorHandler(ExceptionInfo exceptionInfo) { - this.doCloseHandler(); - } - - /** - * 异步支付成功 - */ - @Override - public void doAsyncSuccessHandler(Map map) { - String tradeNo = map.get(AliPayCode.TRADE_NO); - aliPaymentService.updateAsyncSuccess(this.getPayment().getId(), this.getPayMode(), tradeNo); - } - - /** - * 异步支付失败 - */ - @Override - public void doAsyncErrorHandler(ExceptionInfo exceptionInfo) { - // 调用撤销支付 - this.doCancelHandler(); - } - - /** - * 撤销支付 - */ - @Override - public void doCancelHandler() { - this.initAlipayConfig(); - // 撤销支付 - aliPayCancelService.cancelRemote(this.getPayment()); - // 调用关闭本地支付记录 - this.doCloseHandler(); - } - - /** - * 关闭本地支付记录 - */ - @Override - public void doCloseHandler() { - aliPaymentService.updateClose(this.getPayment().getId()); - } - - /** - * 退款 - */ - @Override - public void doRefundHandler() { - this.initAlipayConfig(); - aliPayCancelService.refund(this.getPayment(), this.getPayMode().getAmount()); - aliPaymentService.updatePayRefund(this.getPayment().getId(), this.getPayMode().getAmount()); - paymentService.updateRefundSuccess(this.getPayment(), this.getPayMode().getAmount(), PayChannelEnum.ALI); - } - - /** - * 异步支付单与支付网关进行状态比对 - */ - @Override - public PaySyncResult doSyncPayStatusHandler() { - this.initAlipayConfig(); - return alipaySyncService.syncPayStatus(this.getPayment()); - } - - /** - * 初始化支付宝配置信息 - */ - private void initAlipayConfig() { - // 检查并获取支付宝支付配置 - this.alipayConfig = alipayConfigManager.findActivity().orElseThrow(() -> new PayFailureException("支付配置不存在")); - this.initApiConfig(this.alipayConfig); - } - - /** - * 初始化IJPay 服务 - */ - @SneakyThrows - private void initApiConfig(AlipayConfig alipayConfig) { - - AliPayApiConfig aliPayApiConfig; - // 公钥 - if (Objects.equals(alipayConfig.getAuthType(), AliPayCode.AUTH_TYPE_KEY)) { - aliPayApiConfig = AliPayApiConfig.builder() - .setAppId(alipayConfig.getAppId()) - .setPrivateKey(alipayConfig.getPrivateKey()) - .setAliPayPublicKey(alipayConfig.getAlipayPublicKey()) - .setCharset(CharsetUtil.UTF_8) - .setServiceUrl(alipayConfig.getServerUrl()) - .setSignType(alipayConfig.getSignType()) - .build(); - } - // 证书 - else if (Objects.equals(alipayConfig.getAuthType(), AliPayCode.AUTH_TYPE_CART)) { - aliPayApiConfig = AliPayApiConfig.builder() - .setAppId(alipayConfig.getAppId()) - .setPrivateKey(alipayConfig.getPrivateKey()) - .setAppCertContent(alipayConfig.getAppCert()) - .setAliPayCertContent(alipayConfig.getAlipayCert()) - .setAliPayRootCertContent(alipayConfig.getAlipayRootCert()) - .setCharset(CharsetUtil.UTF_8) - .setServiceUrl(alipayConfig.getServerUrl()) - .setSignType(alipayConfig.getSignType()) - .buildByCertContent(); - } - else { - throw new BizException("支付宝认证方式不可为空"); - } - AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/CashPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/CashPayStrategy.java deleted file mode 100644 index e19e9014a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/CashPayStrategy.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.cash.service.CashService; -import cn.bootx.payment.exception.payment.PayAmountAbnormalException; -import cn.bootx.payment.param.pay.PayModeParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 现金支付 - * - * @author xxm - * @date 2021/6/23 - */ -@Slf4j -@Scope(SCOPE_PROTOTYPE) -@Service -@RequiredArgsConstructor -public class CashPayStrategy extends AbsPayStrategy { - - private final CashService cashService; - - private final PaymentService paymentService; - - /** - * 现金支付 - */ - @Override - public int getType() { - return PayChannelCode.CASH; - } - - /** - * 支付前检查 - */ - @Override - public void doBeforePayHandler() { - // 检查金额 - PayModeParam payMode = this.getPayMode(); - if (BigDecimalUtil.compareTo(payMode.getAmount(), BigDecimal.ZERO) < 1) { - throw new PayAmountAbnormalException(); - } - } - - /** - * 支付操作 - */ - @Override - public void doPayHandler() { - cashService.pay(this.getPayMode(), this.getPayment(), this.getPayParam()); - } - - /** - * 关闭本地支付记录 - */ - @Override - public void doCloseHandler() { - cashService.close(this.getPayment().getId()); - } - - /** - * 退款 - */ - @Override - public void doRefundHandler() { - cashService.refund(this.getPayment().getId(), this.getPayMode().getAmount()); - paymentService.updateRefundSuccess(this.getPayment(), this.getPayMode().getAmount(), PayChannelEnum.CASH); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/UnionPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/UnionPayStrategy.java deleted file mode 100644 index ca61c0f21..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/UnionPayStrategy.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.core.pay.exception.ExceptionInfo; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Service; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 云闪付 - * - * @author xxm - * @date 2022/3/8 - */ -@Slf4j -@Scope(SCOPE_PROTOTYPE) -@Service -@RequiredArgsConstructor -public class UnionPayStrategy extends AbsPayStrategy { - - @Override - public int getType() { - return PayChannelCode.UNION_PAY; - } - - @Override - public void doPayHandler() { - - } - - @Override - public void doErrorHandler(ExceptionInfo exceptionInfo) { - - } - - @Override - public void doCloseHandler() { - - } - - @Override - public void doRefundHandler() { - - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/VoucherStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/VoucherStrategy.java deleted file mode 100644 index 965f3e396..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/VoucherStrategy.java +++ /dev/null @@ -1,89 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.core.paymodel.voucher.service.VoucherPayService; -import cn.bootx.payment.core.paymodel.voucher.service.VoucherPaymentService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Service; - -import java.util.List; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 储值卡支付 - * - * @author xxm - * @date 2022/3/13 - */ -@Slf4j -@Scope(SCOPE_PROTOTYPE) -@Service -@RequiredArgsConstructor -public class VoucherStrategy extends AbsPayStrategy { - - private final VoucherPayService voucherPayService; - - private final VoucherPaymentService voucherPaymentService; - - private final PaymentService paymentService; - - private List vouchers; - - @Override - public int getType() { - return PayChannelCode.VOUCHER; - } - - /** - * 支付前处理 - */ - @Override - public void doBeforePayHandler() { - // 获取并校验余额 - this.vouchers = voucherPayService.getAndCheckVoucher(this.getPayMode()); - } - - /** - * 支付操作 - */ - @Override - public void doPayHandler() { - voucherPayService.pay(getPayMode().getAmount(), this.getPayment(), this.vouchers); - voucherPaymentService.savePayment(getPayment(), getPayParam(), getPayMode(), vouchers); - } - - /** - * 成功 - */ - @Override - public void doSuccessHandler() { - voucherPaymentService.updateSuccess(this.getPayment().getId()); - } - - /** - * 关闭支付 - */ - @Override - public void doCloseHandler() { - voucherPayService.close(this.getPayment().getId()); - voucherPaymentService.updateClose(this.getPayment().getId()); - } - - /** - * 退款 - */ - @Override - public void doRefundHandler() { - voucherPayService.refund(this.getPayment().getId(), this.getPayMode().getAmount()); - voucherPaymentService.updateRefund(this.getPayment().getId(), this.getPayMode().getAmount()); - paymentService.updateRefundSuccess(this.getPayment(), this.getPayMode().getAmount(), PayChannelEnum.VOUCHER); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WalletPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WalletPayStrategy.java deleted file mode 100644 index 3adf8a5f6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WalletPayStrategy.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.core.paymodel.wallet.service.WalletPayService; -import cn.bootx.payment.core.paymodel.wallet.service.WalletPaymentService; -import cn.bootx.payment.core.paymodel.wallet.service.WalletService; -import cn.bootx.payment.exception.waller.WalletLackOfBalanceException; -import cn.bootx.payment.param.pay.PayParam; -import lombok.RequiredArgsConstructor; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 钱包支付策略 - * - * @author xxm - * @date 2020/12/11 - */ -@Scope(SCOPE_PROTOTYPE) -@Component -@RequiredArgsConstructor -public class WalletPayStrategy extends AbsPayStrategy { - - private final WalletPaymentService walletPaymentService; - - private final WalletPayService walletPayService; - - private final WalletService walletService; - - private final PaymentService paymentService; - - private Wallet wallet; - - @Override - public int getType() { - return PayChannelCode.WALLET; - } - - /** - * 支付前处理 - */ - @Override - public void doBeforePayHandler() { - PayParam payParam = this.getPayParam(); - // 获取并校验钱包 - this.wallet = walletService.getNormalWalletByUserId(payParam.getUserId()); - // 判断余额 - if (BigDecimalUtil.compareTo(this.wallet.getBalance(), getPayMode().getAmount()) < 0) { - throw new WalletLackOfBalanceException(); - } - } - - /** - * 支付操作 - */ - @Override - public void doPayHandler() { - walletPayService.pay(getPayMode().getAmount(), this.getPayment(), this.wallet); - walletPaymentService.savePayment(this.getPayment(), this.getPayParam(), this.getPayMode(), this.wallet); - } - - /** - * 成功 - */ - @Override - public void doSuccessHandler() { - walletPaymentService.updateSuccess(this.getPayment().getId()); - } - - /** - * 取消支付并返还金额 - */ - @Override - public void doCloseHandler() { - walletPayService.close(this.getPayment().getId()); - walletPaymentService.updateClose(this.getPayment().getId()); - } - - /** - * 退款 - */ - @Override - public void doRefundHandler() { - walletPayService.refund(this.getPayment().getId(), this.getPayMode().getAmount()); - walletPaymentService.updateRefund(this.getPayment().getId(), this.getPayMode().getAmount()); - paymentService.updateRefundSuccess(this.getPayment(), this.getPayMode().getAmount(), PayChannelEnum.WALLET); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WeChatPayStrategy.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WeChatPayStrategy.java deleted file mode 100644 index c2a82f08d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/pay/strategy/WeChatPayStrategy.java +++ /dev/null @@ -1,196 +0,0 @@ -package cn.bootx.payment.core.pay.strategy; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.core.pay.exception.ExceptionInfo; -import cn.bootx.payment.core.pay.func.AbsPayStrategy; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPayConfigManager; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPaymentManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import cn.bootx.payment.core.paymodel.wechat.service.*; -import cn.bootx.payment.exception.payment.PayAmountAbnormalException; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayParam; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONException; -import cn.hutool.json.JSONUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.Map; -import java.util.Optional; - -import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; - -/** - * 微信支付 - * - * @author xxm - * @date 2021/4/5 - */ -@Scope(SCOPE_PROTOTYPE) -@Component -@RequiredArgsConstructor -public class WeChatPayStrategy extends AbsPayStrategy { - - private final WeChatPayConfigManager weChatPayConfigManager; - - private final WeChatPayService weChatPayService; - - private final WeChatPaymentService weChatPaymentService; - - private final WeChatPaymentManager weChatPaymentManager; - - private final WeChatPayCancelService weChatPayCancelService; - - private final WeChatPaySyncService weChatPaySyncService; - - private final PaymentService paymentService; - - private WeChatPayConfig weChatPayConfig; - - private WeChatPayParam weChatPayParam; - - /** - * 类型 - */ - @Override - public int getType() { - return PayChannelCode.WECHAT; - } - - /** - * 支付前操作 - */ - @Override - public void doBeforePayHandler() { - try { - // 微信参数验证 - String extraParamsJson = this.getPayMode().getExtraParamsJson(); - if (StrUtil.isNotBlank(extraParamsJson)) { - this.weChatPayParam = JSONUtil.toBean(extraParamsJson, WeChatPayParam.class); - } - else { - this.weChatPayParam = new WeChatPayParam(); - } - } - catch (JSONException e) { - throw new PayFailureException("支付参数错误"); - } - - // 检查金额 - PayModeParam payMode = this.getPayMode(); - if (BigDecimalUtil.compareTo(payMode.getAmount(), BigDecimal.ZERO) < 1) { - throw new PayAmountAbnormalException(); - } - - // 检查并获取微信支付配置 - this.initWeChatPayConfig(); - weChatPayService.validation(this.getPayMode(), weChatPayConfig); - } - - /** - * 发起支付 - */ - @Override - public void doPayHandler() { - weChatPayService.pay(this.getPayMode().getAmount(), this.getPayment(), this.weChatPayParam, this.getPayMode(), - this.weChatPayConfig); - } - - /** - * 支付调起成功 - */ - @Override - public void doSuccessHandler() { - weChatPaymentService.updatePaySuccess(this.getPayment(), this.getPayMode()); - } - - /** - * 错误处理 - */ - @Override - public void doErrorHandler(ExceptionInfo exceptionInfo) { - this.doCloseHandler(); - } - - /** - * 异步支付成功 - */ - @Override - public void doAsyncSuccessHandler(Map map) { - String tradeNo = map.get(WeChatPayCode.TRANSACTION_ID); - weChatPaymentService.updateAsyncSuccess(this.getPayment().getId(), this.getPayMode(), tradeNo); - } - - /** - * 异步支付失败 - */ - @Override - public void doAsyncErrorHandler(ExceptionInfo exceptionInfo) { - // 调用撤销支付 - this.doCancelHandler(); - } - - /** - * 撤销支付 - */ - @Override - public void doCancelHandler() { - // 检查并获取微信支付配置 - this.initWeChatPayConfig(); - weChatPayCancelService.cancelRemote(this.getPayment(), weChatPayConfig); - // 调用关闭本地支付记录 - this.doCloseHandler(); - } - - /** - * 关闭本地支付记录 - */ - @Override - public void doCloseHandler() { - weChatPaymentService.updateClose(this.getPayment().getId()); - } - - /** - * 退款 - */ - @Override - public void doRefundHandler() { - this.initWeChatPayConfig(); - WeChatPayment weChatPayment = weChatPaymentManager.findByPaymentId(this.getPayment().getId()) - .orElseThrow(() -> new PayFailureException("微信支付记录不存在")); - weChatPayCancelService.refund(this.getPayment(), weChatPayment, this.getPayMode().getAmount(), - this.weChatPayConfig); - weChatPaymentService.updatePayRefund(weChatPayment, this.getPayMode().getAmount()); - paymentService.updateRefundSuccess(this.getPayment(), this.getPayMode().getAmount(), PayChannelEnum.WECHAT); - } - - /** - * 异步支付单与支付网关进行状态比对 - */ - @Override - public PaySyncResult doSyncPayStatusHandler() { - // 检查并获取微信支付配置 - this.initWeChatPayConfig(); - return weChatPaySyncService.syncPayStatus(this.getPayment().getId(), this.weChatPayConfig); - } - - /** - * 初始化微信支付 - */ - private void initWeChatPayConfig() { - // 检查并获取微信支付配置 - this.weChatPayConfig = Optional.ofNullable(this.weChatPayConfig) - .orElse(weChatPayConfigManager.findActivity().orElseThrow(() -> new PayFailureException("支付配置不存在"))); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/convert/PaymentConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/convert/PaymentConvert.java deleted file mode 100644 index 0c1f22af7..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/convert/PaymentConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.payment.core.payment.convert; - -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.dto.payment.PaymentDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 支付记录转换 - * - * @author xxm - * @date 2021/8/20 - */ -@Mapper -public interface PaymentConvert { - - PaymentConvert CONVERT = Mappers.getMapper(PaymentConvert.class); - - PaymentDto convert(Payment payment); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentExpiredTimeRepository.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentExpiredTimeRepository.java deleted file mode 100644 index ddd96ad3f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentExpiredTimeRepository.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.bootx.payment.core.payment.dao; - -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.common.redis.RedisClient; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.time.LocalDateTime; -import java.util.Set; - -/** - * 支付单过去处理 - * - * @author xxm - * @date 2022/7/12 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class PaymentExpiredTimeRepository { - - private static final String KEY = "pay:payment:expiredtime"; - - private final RedisClient redisClient; - - /** - * 根据 token 存储对应的 ExpiredTokenKey - */ - public void store(Long paymentId, LocalDateTime expiredTime) { - long time = LocalDateTimeUtil.timestamp(expiredTime); - redisClient.zadd(KEY, String.valueOf(paymentId), time); - } - - /** - * 获取所有已过期的ExpiredTokenKey - */ - public Set retrieveExpiredKeys(LocalDateTime expiredTime) { - long time = LocalDateTimeUtil.timestamp(expiredTime); - return redisClient.zrangeByScore(KEY, 0L, time); - } - - /** - * 删除指定的ExpiredTokenKey - */ - public void removeKeys(String... keys) { - if (keys != null && keys.length > 0) { - redisClient.zremByMembers(KEY, keys); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentManager.java deleted file mode 100644 index 4abd55b44..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentManager.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.bootx.payment.core.payment.dao; - -import cn.bootx.common.core.rest.param.OrderParam; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.common.query.generator.QueryGenerator; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.param.payment.PaymentQuery; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.cache.annotation.Caching; -import org.springframework.stereotype.Repository; - -import java.io.Serializable; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static cn.bootx.payment.code.CachingCode.PAYMENT_BUSINESS_ID; -import static cn.bootx.payment.code.CachingCode.PAYMENT_ID; - -@Repository -@RequiredArgsConstructor -public class PaymentManager extends BaseManager { - - @Override - @Caching(evict = { @CacheEvict(value = PAYMENT_ID, key = "#payment.id"), - @CacheEvict(value = PAYMENT_BUSINESS_ID, key = "#payment.businessId") }) - public Payment updateById(Payment payment) { - return super.updateById(payment); - } - - @Override - @Cacheable(value = { PAYMENT_ID }, key = "#id") - public Optional findById(Serializable id) { - return super.findById(id); - } - - /** - * 根据BusinessId查询 - */ - @Cacheable(value = { PAYMENT_BUSINESS_ID }, key = "#businessId") - public Optional findByBusinessId(String businessId) { - return findByField(Payment::getBusinessId, businessId); - } - - /** - * 根据用户查询 - */ - public List findByUserId(Long userId) { - return this.findAllByField(Payment::getUserId, userId); - } - - /** - * 分页查询 - */ - public Page page(PageParam pageParam, PaymentQuery param, OrderParam orderParam) { - Page mpPage = MpUtil.getMpPage(pageParam, Payment.class); - return query().select(Payment.class, MpUtil::excludeBigField) - .orderBy(Objects.nonNull(orderParam.getSortField()), orderParam.isAsc(), - StrUtil.toUnderlineCase(orderParam.getSortField())) - .like(Objects.nonNull(param.getPaymentId()), MpUtil.getColumnName(Payment::getId), param.getPaymentId()) - .like(Objects.nonNull(param.getBusinessId()), MpUtil.getColumnName(Payment::getBusinessId), - param.getBusinessId()) - .like(Objects.nonNull(param.getTitle()), MpUtil.getColumnName(Payment::getTitle), param.getTitle()) - .page(mpPage); - } - - /** - * 分页查询 - */ - public Page superPage(PageParam pageParam, QueryParams queryParams) { - QueryWrapper wrapper = QueryGenerator.generator(queryParams); - Page mpPage = MpUtil.getMpPage(pageParam, Payment.class); - return this.page(mpPage, wrapper); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentMapper.java deleted file mode 100644 index ed7e2800f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/dao/PaymentMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.payment.dao; - -import cn.bootx.payment.core.payment.entity.Payment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 支付记录 - * - * @author xxm - * @date 2021/7/27 - */ -@Mapper -public interface PaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/entity/Payment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/entity/Payment.java deleted file mode 100644 index 9b227b5cd..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/entity/Payment.java +++ /dev/null @@ -1,102 +0,0 @@ -package cn.bootx.payment.core.payment.entity; - -import cn.bootx.common.core.annotation.BigField; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.common.mybatisplus.handler.JacksonRawTypeHandler; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.payment.convert.PaymentConvert; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.PaymentDto; -import cn.bootx.payment.dto.payment.RefundableInfo; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; -import lombok.experimental.FieldNameConstants; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; - -/** - * 支付记录 - * - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@FieldNameConstants -@Accessors(chain = true) -@TableName(value = "pay_payment", autoResultMap = true) -public class Payment extends MpBaseEntity implements EntityBaseFunction { - - /** 关联的业务id */ - private String businessId; - - /** 用户ID */ - private Long userId; - - /** 标题 */ - private String title; - - /** 描述 */ - private String description; - - /** 是否是异步支付 */ - private boolean asyncPayMode; - - /** 异步支付通道 */ - private Integer asyncPayChannel; - - /** 金额 */ - private BigDecimal amount; - - /** 可退款余额 */ - private BigDecimal refundableBalance; - - /** 错误码 */ - private String errorCode; - - /** 错误信息 */ - private String errorMsg; - - /** - * 支付通道信息列表 - * @see PayChannelInfo - */ - @TableField(typeHandler = JacksonRawTypeHandler.class) - @BigField - private List payChannelInfo; - - /** - * 退款信息列表 - * @see cn.bootx.payment.dto.payment.RefundableInfo - */ - @TableField(typeHandler = JacksonRawTypeHandler.class) - @BigField - private List refundableInfo; - - /** - * 支付状态 - * @see PayStatusCode#TRADE_PROGRESS - */ - private Integer payStatus; - - /** 支付时间 */ - private LocalDateTime payTime; - - /** 支付终端ip */ - private String clientIp; - - /** 过期时间 */ - private LocalDateTime expiredTime; - - @Override - public PaymentDto toDto() { - return PaymentConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentQueryService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentQueryService.java deleted file mode 100644 index 987d31f82..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentQueryService.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.bootx.payment.core.payment.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.OrderParam; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.common.query.entity.QueryParams; -import cn.bootx.payment.core.payment.dao.PaymentManager; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.PaymentDto; -import cn.bootx.payment.param.payment.PaymentQuery; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 支付单查询 - * - * @author xxm - * @date 2021/6/28 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PaymentQueryService { - - private final PaymentManager paymentManager; - - /** - * 根据支付Id查询支付单 - */ - public PaymentDto findById(Long id) { - return paymentManager.findById(id).map(Payment::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 根据业务ID获取支付状态 - */ - public Integer findStatusByBusinessId(String businessId) { - return paymentManager.findByBusinessId(businessId).map(Payment::getPayStatus).orElse(-1); - } - - /** - * 根据businessId获取订单支付方式 - */ - public List findPayTypeInfoByBusinessId(String businessId) { - return paymentManager.findByBusinessId(businessId).map(Payment::getPayChannelInfo).orElse(new ArrayList<>(1)); - } - - /** - * 根据id获取订单支付方式 - */ - public List findPayTypeInfoById(Long id) { - return paymentManager.findById(id).map(Payment::getPayChannelInfo).orElse(new ArrayList<>(1)); - } - - /** - * 根据用户id查询 - */ - public List findByUser(Long userId) { - return paymentManager.findByUserId(userId).stream().map(Payment::toDto).collect(Collectors.toList()); - } - - /** - * 分页 - */ - public PageResult page(PageParam pageParam, PaymentQuery param, OrderParam orderParam) { - return MpUtil.convert2DtoPageResult(paymentManager.page(pageParam, param, orderParam)); - } - - /** - * 超级查询 - */ - public PageResult superPage(PageParam pageParam, QueryParams queryParams) { - return MpUtil.convert2DtoPageResult(paymentManager.superPage(pageParam, queryParams)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentService.java deleted file mode 100644 index 7dd018602..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/payment/service/PaymentService.java +++ /dev/null @@ -1,110 +0,0 @@ -package cn.bootx.payment.core.payment.service; - -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.common.spring.exception.RetryableException; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.core.payment.dao.PaymentExpiredTimeRepository; -import cn.bootx.payment.core.payment.dao.PaymentManager; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.exception.payment.PayFailureException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Retryable; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static cn.bootx.payment.code.pay.PayStatusCode.*; - -/** - * 支付记录 - * - * @author xxm - * @date 2021/3/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PaymentService { - - private final PaymentManager paymentManager; - - private final PaymentExpiredTimeRepository expiredTimeRepository; - - /** - * 保存 - */ - public Payment save(Payment payment) { - return paymentManager.save(payment); - } - - /** - * 更新支付记录 - */ - public Payment updateById(Payment payment) { - // 超时注册 - this.registerExpiredTime(payment); - return paymentManager.updateById(payment); - } - - /** - * 根据id查询 - */ - public Optional findById(Serializable id) { - return paymentManager.findById(id); - } - - /** - * 根据BusinessId查询 - */ - public Optional findByBusinessId(String businessId) { - return paymentManager.findByBusinessId(businessId); - } - - /** - * 退款成功处理, 更新可退款信息 不进行持久化 - */ - public void updateRefundSuccess(Payment payment, BigDecimal amount, PayChannelEnum payChannelEnum) { - // 删除旧有的退款记录, 替换退款完的新的 - List refundableInfos = payment.getRefundableInfo(); - RefundableInfo refundableInfo = refundableInfos.stream() - .filter(o -> o.getPayChannel() == payChannelEnum.getNo()) - .findFirst() - .orElseThrow(() -> new PayFailureException("数据不存在")); - refundableInfos.remove(refundableInfo); - refundableInfo.setAmount(refundableInfo.getAmount().subtract(amount)); - refundableInfos.add(refundableInfo); - payment.setRefundableInfo(refundableInfos); - } - - /** - * 支付单超时关闭事件注册, 失败重试3次, 间隔一秒 - */ - @Async("bigExecutor") - @Retryable(value = RetryableException.class) - public void registerExpiredTime(Payment payment) { - LocalDateTime expiredTime = payment.getExpiredTime(); - // 支付中且有超时时间才会注册超时关闭时间 - if (Objects.equals(payment.getPayStatus(), TRADE_PROGRESS) && Objects.nonNull(expiredTime)) { - try { - // 将过期时间添加到redis中, 往后延时一分钟 - expiredTime = LocalDateTimeUtil.offset(expiredTime, 1, ChronoUnit.MINUTES); - expiredTimeRepository.store(payment.getId(), expiredTime); - } - catch (Exception e) { - log.error("注册支付单超时关闭失败"); - throw new RetryableException(); - } - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/convert/AlipayConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/convert/AlipayConvert.java deleted file mode 100644 index 634cdbfe9..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/convert/AlipayConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.convert; - -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.bootx.payment.dto.paymodel.alipay.AlipayConfigDto; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigParam; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 支付宝转换 - * - * @author xxm - * @date 2021/7/5 - */ -@Mapper -public interface AlipayConvert { - - AlipayConvert CONVERT = Mappers.getMapper(AlipayConvert.class); - - AlipayConfig convert(AlipayConfigDto in); - - AlipayConfig convert(AlipayConfigParam in); - - AlipayConfigDto convert(AlipayConfig in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentManager.java deleted file mode 100644 index b95f5def7..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.alipay.entity.AliPayment; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 支付宝 - * - * @author xxm - * @date 2021/2/26 - */ -@Repository -@RequiredArgsConstructor -public class AliPaymentManager extends BaseManager { - - public Optional findByPaymentId(Long paymentId) { - return this.findByField(BasePayment::getPaymentId, paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentMapper.java deleted file mode 100644 index d2c22b3c4..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AliPaymentMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.dao; - -import cn.bootx.payment.core.paymodel.alipay.entity.AliPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 支付宝支付 - * - * @author xxm - * @date 2021/2/26 - */ -@Mapper -public interface AliPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigManager.java deleted file mode 100644 index 71d4b986c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigManager.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigQuery; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Objects; -import java.util.Optional; - -/** - * 支付宝配置 - * - * @author xxm - * @date 2021/2/26 - */ -@Repository -@RequiredArgsConstructor -public class AlipayConfigManager extends BaseManager { - - private Optional alipayConfig; - - @Override - public AlipayConfig saveOrUpdate(AlipayConfig entity) { - this.clearCache(); - return super.saveOrUpdate(entity); - } - - @Override - public AlipayConfig updateById(AlipayConfig alipayConfig) { - this.clearCache(); - return super.updateById(alipayConfig); - } - - /** - * 获取启用的支付宝配置 - */ - public Optional findActivity() { - if (Objects.isNull(alipayConfig)) { - alipayConfig = findByField(AlipayConfig::getActivity, Boolean.TRUE); - } - return alipayConfig; - } - - /** - * 分页 - */ - public Page page(PageParam pageParam, AlipayConfigQuery param) { - Page mpPage = MpUtil.getMpPage(pageParam, AlipayConfig.class); - return lambdaQuery().select(AlipayConfig.class, MpUtil::excludeBigField) - .like(StrUtil.isNotBlank(param.getName()), AlipayConfig::getName, param.getName()) - .like(StrUtil.isNotBlank(param.getAppId()), AlipayConfig::getAppId, param.getAppId()) - .page(mpPage); - } - - /** - * 清除所有启用的支付配置 - */ - public void removeAllActivity() { - this.clearCache(); - lambdaUpdate().eq(AlipayConfig::getActivity, Boolean.TRUE) - .set(AlipayConfig::getActivity, Boolean.FALSE) - .update(); - } - - /** - * 清除缓存 - */ - public void clearCache() { - alipayConfig = null; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigMapper.java deleted file mode 100644 index 46fe417c0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/dao/AlipayConfigMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.dao; - -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface AlipayConfigMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AliPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AliPayment.java deleted file mode 100644 index 097046bdf..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AliPayment.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import cn.bootx.payment.dto.paymodel.alipay.AliPaymentDto; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 支付宝支付记录 - * - * @author xxm - * @date 2021/2/26 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_ali_payment") -public class AliPayment extends BasePayment implements EntityBaseFunction { - - /** 支付宝交易号 */ - private String tradeNo; - - @Override - public AliPaymentDto toDto() { - AliPaymentDto dto = new AliPaymentDto(); - BeanUtil.copyProperties(this, dto); - return dto; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AlipayConfig.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AlipayConfig.java deleted file mode 100644 index e37c593ed..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/entity/AlipayConfig.java +++ /dev/null @@ -1,114 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.entity; - -import cn.bootx.common.core.annotation.BigField; -import cn.bootx.common.core.annotation.EncryptionField; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.alipay.convert.AlipayConvert; -import cn.bootx.payment.dto.paymodel.alipay.AlipayConfigDto; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigParam; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.annotation.FieldStrategy; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 支付宝支付配置 - * - * @author xxm - * @date 2020/12/15 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_alipay_config") -public class AlipayConfig extends MpBaseEntity implements EntityBaseFunction { - - /** 名称 */ - private String name; - - /** 支付宝商户appId */ - private String appId; - - /** 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 */ - private String notifyUrl; - - /** - * 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址 - */ - private String returnUrl; - - /** 请求网关地址 */ - private String serverUrl; - - /** 认证类型 证书/公钥 */ - private Integer authType; - - /** 签名类型 */ - public String signType; - - /** 支付宝公钥 */ - @BigField - public String alipayPublicKey; - - /** 私钥 */ - @BigField - @EncryptionField - private String privateKey; - - /** 应用公钥证书 */ - @BigField - @EncryptionField - private String appCert; - - /** 支付宝公钥证书 */ - @BigField - @EncryptionField - private String alipayCert; - - /** 支付宝CA根证书 */ - @BigField - @EncryptionField - private String alipayRootCert; - - /** 是否沙箱环境 */ - private boolean sandbox; - - /** 超时配置 */ - private Integer expireTime; - - /** 可用支付方式 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - private String payWays; - - /** 是否启用 */ - private Boolean activity; - - /** 状态 暂时没什么用 */ - private Integer state; - - /** 备注 */ - private String remark; - - @Override - public AlipayConfigDto toDto() { - AlipayConfigDto convert = AlipayConvert.CONVERT.convert(this); - if (StrUtil.isNotBlank(this.getPayWays())) { - convert.setPayWayList(StrUtil.split(this.getPayWays(), ',')); - } - return convert; - } - - public static AlipayConfig init(AlipayConfigParam in) { - AlipayConfig convert = AlipayConvert.CONVERT.convert(in); - if (CollUtil.isNotEmpty(in.getPayWayList())) { - convert.setPayWays(String.join(",", in.getPayWayList())); - } - return convert; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCallbackService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCallbackService.java deleted file mode 100644 index 7929c25f8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCallbackService.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.util.CertUtil; -import cn.bootx.common.redis.RedisClient; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.paymodel.AliPayCode; -import cn.bootx.payment.core.notify.dao.PayNotifyRecordManager; -import cn.bootx.payment.core.pay.func.AbsPayCallbackStrategy; -import cn.bootx.payment.core.pay.service.PayCallbackService; -import cn.bootx.payment.core.paymodel.alipay.dao.AlipayConfigManager; -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayConstants; -import com.alipay.api.internal.util.AlipaySignature; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Map; -import java.util.Objects; - -/** - * 支付宝回调处理 - * - * @author xxm - * @date 2021/2/28 - */ -@Slf4j -@Service -public class AliPayCallbackService extends AbsPayCallbackStrategy { - - private final AlipayConfigManager alipayConfigManager; - - public AliPayCallbackService(RedisClient redisClient, PayNotifyRecordManager payNotifyRecordManager, - PayCallbackService payCallbackService, AlipayConfigManager alipayConfigManager) { - super(redisClient, payNotifyRecordManager, payCallbackService); - this.alipayConfigManager = alipayConfigManager; - } - - @Override - public int getPayChannel() { - return PayChannelCode.ALI; - } - - @Override - public int getTradeStatus() { - Map params = PARAMS.get(); - String tradeStatus = params.get(AliPayCode.TRADE_STATUS); - if (Objects.equals(tradeStatus, AliPayCode.NOTIFY_TRADE_SUCCESS)) { - return PayStatusCode.NOTIFY_TRADE_SUCCESS; - } - return PayStatusCode.NOTIFY_TRADE_FAIL; - } - - @SneakyThrows - @Override - public boolean verifyNotify() { - Map params = PARAMS.get(); - String callReq = JSONUtil.toJsonStr(params); - String appId = params.get(AliPayCode.APP_ID); - if (StrUtil.isBlank(appId)) { - log.error("支付宝回调报文 appId 为空 {}", callReq); - return false; - } - AlipayConfig alipayConfig = alipayConfigManager.findActivity().orElseThrow(DataNotExistException::new); - if (alipayConfig == null) { - log.error("支付宝支付配置不存在: {}", callReq); - return false; - } - - try { - if (Objects.equals(alipayConfig.getAuthType(), AliPayCode.AUTH_TYPE_KEY)) { - return AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), CharsetUtil.UTF_8, - AlipayConstants.SIGN_TYPE_RSA2); - } - else { - return AlipaySignature.verifyV1(params, CertUtil.getCertByContent(alipayConfig.getAlipayCert()), - CharsetUtil.UTF_8, AlipayConstants.SIGN_TYPE_RSA2); - } - } - catch (AlipayApiException e) { - log.error("支付宝验签失败", e); - return false; - } - } - - @Override - public Long getPaymentId() { - Map params = PARAMS.get(); - return Long.valueOf(params.get(AliPayCode.OUT_TRADE_NO)); - } - - @Override - public String getReturnMsg() { - return "success"; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCancelService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCancelService.java deleted file mode 100644 index 06a4d813f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayCancelService.java +++ /dev/null @@ -1,84 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.common.spring.exception.RetryableException; -import cn.bootx.payment.code.paymodel.AliPayCode; -import cn.bootx.payment.core.pay.local.AsyncRefundLocal; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.hutool.core.util.IdUtil; -import com.alipay.api.AlipayApiException; -import com.alipay.api.domain.AlipayTradeCancelModel; -import com.alipay.api.domain.AlipayTradeRefundModel; -import com.alipay.api.response.AlipayTradeCancelResponse; -import com.alipay.api.response.AlipayTradeRefundResponse; -import com.ijpay.alipay.AliPayApi; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Retryable; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.util.Objects; - -/** - * 支付宝支付取消和退款 - * - * @author xxm - * @date 2021/4/20 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AliPayCancelService { - - /** - * 关闭支付 - */ - @Retryable(value = RetryableException.class) - public void cancelRemote(Payment payment) { - // 只有部分需要调用支付宝网关进行关闭 - AlipayTradeCancelModel model = new AlipayTradeCancelModel(); - model.setOutTradeNo(String.valueOf(payment.getId())); - - try { - AlipayTradeCancelResponse response = AliPayApi.tradeCancelToResponse(model); - if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { - log.error("网关返回撤销失败: {}", response.getSubMsg()); - throw new PayFailureException(response.getSubMsg()); - } - } - catch (AlipayApiException e) { - log.error("关闭订单失败:", e); - throw new PayFailureException("关闭订单失败"); - } - } - - /** - * 退款 - */ - public void refund(Payment payment, BigDecimal amount) { - AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel(); - refundModel.setOutTradeNo(String.valueOf(payment.getId())); - refundModel.setRefundAmount(amount.toPlainString()); - - // 设置退款号 - AsyncRefundLocal.set(IdUtil.getSnowflakeNextIdStr()); - refundModel.setOutRequestNo(AsyncRefundLocal.get()); - try { - AlipayTradeRefundResponse response = AliPayApi.tradeRefundToResponse(refundModel); - if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { - AsyncRefundLocal.setErrorMsg(response.getSubMsg()); - AsyncRefundLocal.setErrorCode(response.getCode()); - log.error("网关返回退款失败: {}", response.getSubMsg()); - throw new PayFailureException(response.getSubMsg()); - } - } - catch (AlipayApiException e) { - log.error("订单退款失败:", e); - AsyncRefundLocal.setErrorMsg(e.getErrMsg()); - AsyncRefundLocal.setErrorCode(e.getErrCode()); - throw new PayFailureException("订单退款失败"); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayService.java deleted file mode 100644 index e644e8c56..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPayService.java +++ /dev/null @@ -1,261 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.pay.PayWayCode; -import cn.bootx.payment.code.pay.PayWayEnum; -import cn.bootx.payment.code.paymodel.AliPayCode; -import cn.bootx.payment.code.paymodel.AliPayWay; -import cn.bootx.payment.core.pay.local.AsyncPayInfoLocal; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.bootx.payment.dto.pay.AsyncPayInfo; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.paymodel.alipay.AliPayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.Method; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayResponse; -import com.alipay.api.domain.*; -import com.alipay.api.request.AlipayTradePagePayRequest; -import com.alipay.api.request.AlipayTradeWapPayRequest; -import com.alipay.api.response.*; -import com.ijpay.alipay.AliPayApi; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static cn.bootx.payment.code.paymodel.AliPayCode.BAR_CODE; -import static cn.bootx.payment.code.paymodel.AliPayCode.QUICK_MSECURITY_PAY; - -/** - * 支付宝支付service - * - * @author xxm - * @date 2021/2/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AliPayService { - - /** - * 支付前检查支付方式是否可用 - */ - public void validation(PayModeParam payModeParam, AlipayConfig alipayConfig) { - List payWays = Optional.ofNullable(alipayConfig.getPayWays()) - .filter(StrUtil::isNotBlank) - .map(s -> StrUtil.split(s, ',')) - .orElse(new ArrayList<>(1)); - // 发起的支付类型是否在支持的范围内 - PayWayEnum payWayEnum = Optional.ofNullable(AliPayWay.findByNo(payModeParam.getPayWay())) - .orElseThrow(() -> new PayFailureException("非法的支付宝支付类型")); - if (!payWays.contains(payWayEnum.getCode())) { - throw new PayFailureException("该支付宝支付方式不可用"); - } - } - - /** - * 调起支付 - */ - public void pay(BigDecimal amount, Payment payment, AliPayParam aliPayParam, PayModeParam payModeParam, - AlipayConfig alipayConfig) { - String payBody = null; - // 线程存储 - AsyncPayInfo asyncPayInfo = Optional.ofNullable(AsyncPayInfoLocal.get()).orElse(new AsyncPayInfo()); - // wap支付 - if (payModeParam.getPayWay() == PayWayCode.WAP) { - payBody = this.wapPay(amount, payment, alipayConfig, aliPayParam); - } - // 程序支付 - else if (payModeParam.getPayWay() == PayWayCode.APP) { - payBody = this.appPay(amount, payment, alipayConfig); - } - // pc支付 - else if (payModeParam.getPayWay() == PayWayCode.WEB) { - payBody = this.webPay(amount, payment, alipayConfig, aliPayParam); - } - // 二维码支付 - else if (payModeParam.getPayWay() == PayWayCode.QRCODE) { - payBody = this.qrCodePay(amount, payment, alipayConfig); - } - // 付款码支付 - else if (payModeParam.getPayWay() == PayWayCode.BARCODE) { - String tradeNo = this.barCode(amount, payment, aliPayParam, alipayConfig); - asyncPayInfo.setExpiredTime(false).setTradeNo(tradeNo); - } - // 通常是发起支付的参数 - asyncPayInfo.setPayBody(payBody); - AsyncPayInfoLocal.set(asyncPayInfo); - } - - /** - * wap支付 - */ - public String wapPay(BigDecimal amount, Payment payment, AlipayConfig alipayConfig, AliPayParam aliPayParam) { - - AlipayTradeWapPayModel model = new AlipayTradeWapPayModel(); - model.setSubject(payment.getTitle()); - model.setOutTradeNo(String.valueOf(payment.getId())); - model.setTotalAmount(amount.toPlainString()); - // 过期时间 - model.setTimeoutExpress(PayModelUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); - model.setProductCode(AliPayCode.QUICK_WAP_PAY); - model.setQuitUrl(aliPayParam.getReturnUrl()); - - AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); - request.setBizModel(model); - request.setNotifyUrl(alipayConfig.getNotifyUrl()); - request.setReturnUrl(aliPayParam.getReturnUrl()); - - try { - // 通过GET方式的请求, 返回URL的响应, 默认是POST方式的请求, 返回的是表单响应 - AlipayTradeWapPayResponse response = AliPayApi.pageExecute(request, Method.GET.name()); - return response.getBody(); - } - catch (AlipayApiException e) { - log.error("支付宝手机支付失败", e); - throw new PayFailureException("支付宝手机支付失败"); - } - } - - /** - * app支付 - */ - public String appPay(BigDecimal amount, Payment payment, AlipayConfig alipayConfig) { - AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); - - model.setSubject(payment.getTitle()); - model.setProductCode(QUICK_MSECURITY_PAY); - model.setOutTradeNo(String.valueOf(payment.getId())); - // 过期时间 - model.setTimeoutExpress(PayModelUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); - model.setTotalAmount(amount.toPlainString()); - - try { - AlipayTradeAppPayResponse response = AliPayApi.appPayToResponse(model, alipayConfig.getNotifyUrl()); - return response.getBody(); - } - catch (AlipayApiException e) { - log.error("支付宝APP支付失败", e); - throw new PayFailureException("支付宝APP支付失败"); - } - } - - /** - * PC支付 - */ - public String webPay(BigDecimal amount, Payment payment, AlipayConfig alipayConfig, AliPayParam aliPayParam) { - - AlipayTradePagePayModel model = new AlipayTradePagePayModel(); - - model.setSubject(payment.getTitle()); - model.setOutTradeNo(String.valueOf(payment.getId())); - // 过期时间 - model.setTimeoutExpress(PayModelUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); - model.setTotalAmount(amount.toPlainString()); - // 目前仅支持FAST_INSTANT_TRADE_PAY - model.setProductCode(AliPayCode.FAST_INSTANT_TRADE_PAY); - - AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); - request.setBizModel(model); - request.setNotifyUrl(alipayConfig.getNotifyUrl()); - request.setReturnUrl(aliPayParam.getReturnUrl()); - try { - // 通过GET方式的请求, 返回URL的响应, 默认是POST方式的请求, 返回的是表单响应 - AlipayTradePagePayResponse response = AliPayApi.pageExecute(request, Method.GET.name()); - return response.getBody(); - } - catch (AlipayApiException e) { - log.error("支付宝PC支付失败", e); - throw new PayFailureException("支付宝PC支付失败"); - } - } - - /** - * 二维码支付(扫码支付) - */ - public String qrCodePay(BigDecimal amount, Payment payment, AlipayConfig alipayConfig) { - AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); - model.setSubject(payment.getTitle()); - model.setOutTradeNo(String.valueOf(payment.getId())); - model.setTotalAmount(amount.toPlainString()); - - // 过期时间 - model.setTimeoutExpress(PayModelUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); - - try { - AlipayTradePrecreateResponse response = AliPayApi.tradePrecreatePayToResponse(model, - alipayConfig.getNotifyUrl()); - this.verifyErrorMsg(response); - return response.getQrCode(); - } - catch (AlipayApiException e) { - log.error("支付宝手机支付失败", e); - throw new PayFailureException("支付宝手机支付失败"); - } - } - - /** - * 付款码支付 - */ - public String barCode(BigDecimal amount, Payment payment, AliPayParam aliPayParam, AlipayConfig alipayConfig) { - AlipayTradePayModel model = new AlipayTradePayModel(); - - model.setSubject(payment.getTitle()); - model.setOutTradeNo(String.valueOf(payment.getId())); - model.setScene(BAR_CODE); - model.setAuthCode(aliPayParam.getAuthCode()); - - // 过期时间 - model.setTimeoutExpress(PayModelUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); - model.setTotalAmount(amount.toPlainString()); - - try { - AlipayTradePayResponse response = AliPayApi.tradePayToResponse(model, alipayConfig.getNotifyUrl()); - - // 支付成功处理 金额2000以下免密支付 - if (Objects.equals(response.getCode(), AliPayCode.SUCCESS)) { - payment.setPayStatus(PayStatusCode.TRADE_SUCCESS).setPayTime(LocalDateTime.now()); - return response.getTradeNo(); - } - // 非支付中响应码, 进行错误处理 - if (!Objects.equals(response.getCode(), AliPayCode.INPROCESS)) { - this.verifyErrorMsg(response); - } - } - catch (AlipayApiException e) { - log.error("主动扫码支付失败", e); - throw new PayFailureException("主动扫码支付失败"); - } - return null; - } - - /** - * 验证错误信息 - */ - private void verifyErrorMsg(AlipayResponse alipayResponse) { - if (!Objects.equals(alipayResponse.getCode(), AliPayCode.SUCCESS)) { - String errorMsg = alipayResponse.getSubMsg(); - if (StrUtil.isBlank(errorMsg)) { - errorMsg = alipayResponse.getMsg(); - } - log.error("支付失败 {}", errorMsg); - throw new PayFailureException(errorMsg); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPaymentService.java deleted file mode 100644 index 4a7dd6589..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AliPaymentService.java +++ /dev/null @@ -1,122 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.local.AsyncPayInfoLocal; -import cn.bootx.payment.core.payment.dao.PaymentManager; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.alipay.dao.AliPaymentManager; -import cn.bootx.payment.core.paymodel.alipay.entity.AliPayment; -import cn.bootx.payment.dto.pay.AsyncPayInfo; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -/** - * 支付宝支付记录 - * - * @author xxm - * @date 2021/2/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AliPaymentService { - - private final AliPaymentManager aliPaymentManager; - - private final PaymentManager paymentManager; - - /** - * 支付调起成功 更新 payment 中 异步支付类型信息 - */ - public void updatePaySuccess(Payment payment, PayModeParam payModeParam) { - AsyncPayInfo asyncPayInfo = AsyncPayInfoLocal.get(); - payment.setAsyncPayMode(true).setAsyncPayChannel(PayChannelCode.ALI); - List payTypeInfos = payment.getPayChannelInfo(); - List refundableInfos = payment.getRefundableInfo(); - // 清除已有的异步支付类型信息 - payTypeInfos.removeIf(payTypeInfo -> PayChannelCode.ASYNC_TYPE.contains(payTypeInfo.getPayChannel())); - refundableInfos.removeIf(payTypeInfo -> PayChannelCode.ASYNC_TYPE.contains(payTypeInfo.getPayChannel())); - // 更新支付宝支付类型信息 - payTypeInfos.add(new PayChannelInfo().setPayChannel(PayChannelCode.ALI) - .setPayWay(payModeParam.getPayWay()) - .setAmount(payModeParam.getAmount()) - .setExtraParamsJson(payModeParam.getExtraParamsJson())); - payment.setPayChannelInfo(payTypeInfos); - // 更新支付宝可退款类型信息 - refundableInfos.add(new RefundableInfo().setPayChannel(PayChannelCode.ALI).setAmount(payModeParam.getAmount())); - payment.setRefundableInfo(refundableInfos); - // 如果支付完成(付款码情况) 调用 updateSyncSuccess 创建支付宝支付记录 - if (Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_SUCCESS)) { - this.createAliPayment(payment, payModeParam, asyncPayInfo.getTradeNo()); - } - } - - /** - * 更新异步支付记录成功状态, 并创建支付宝支付记录 - */ - public void updateAsyncSuccess(Long id, PayModeParam payModeParam, String tradeNo) { - // 更新支付记录 - Payment payment = paymentManager.findById(id).orElseThrow(() -> new PayFailureException("支付记录不存在")); - - } - - /** - * 创建支付宝支付记录 - */ - private void createAliPayment(Payment payment, PayModeParam payModeParam, String tradeNo) { - // 创建支付宝支付记录 - AliPayment aliPayment = new AliPayment(); - aliPayment.setTradeNo(tradeNo) - .setPaymentId(payment.getId()) - .setAmount(payModeParam.getAmount()) - .setRefundableBalance(payModeParam.getAmount()) - .setBusinessId(payment.getBusinessId()) - .setUserId(payment.getUserId()) - .setPayStatus(PayStatusCode.TRADE_SUCCESS) - .setPayTime(LocalDateTime.now()); - aliPaymentManager.save(aliPayment); - } - - /** - * 取消状态 - */ - public void updateClose(Long paymentId) { - Optional aliPaymentOptional = aliPaymentManager.findByPaymentId(paymentId); - aliPaymentOptional.ifPresent(aliPayment -> { - aliPayment.setPayStatus(PayStatusCode.TRADE_CANCEL); - aliPaymentManager.updateById(aliPayment); - }); - } - - /** - * 更新退款 - */ - public void updatePayRefund(Long paymentId, BigDecimal amount) { - Optional aliPaymentOptional = aliPaymentManager.findByPaymentId(paymentId); - aliPaymentOptional.ifPresent(payment -> { - BigDecimal refundableBalance = payment.getRefundableBalance().subtract(amount); - payment.setRefundableBalance(refundableBalance); - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) == 0) { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - aliPaymentManager.updateById(payment); - }); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipayConfigService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipayConfigService.java deleted file mode 100644 index 78c6d8340..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipayConfigService.java +++ /dev/null @@ -1,119 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.code.paymodel.AliPayWay; -import cn.bootx.payment.core.paymodel.alipay.dao.AlipayConfigManager; -import cn.bootx.payment.core.paymodel.alipay.entity.AlipayConfig; -import cn.bootx.payment.dto.paymodel.alipay.AlipayConfigDto; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigParam; -import cn.bootx.payment.param.paymodel.alipay.AlipayConfigQuery; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 支付宝支付 - * - * @author xxm - * @date 2020/12/15 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AlipayConfigService { - - private final AlipayConfigManager alipayConfigManager; - - /** - * 添加支付宝配置 - */ - @Transactional(rollbackFor = Exception.class) - public void add(AlipayConfigParam param) { - AlipayConfig alipayConfig = AlipayConfig.init(param); - alipayConfig.setActivity(false).setState(1); - alipayConfigManager.save(alipayConfig); - } - - /** - * 设置启用的支付宝配置 - */ - @Transactional(rollbackFor = Exception.class) - public void setUpActivity(Long id) { - AlipayConfig alipayConfig = alipayConfigManager.findById(id).orElseThrow(DataNotExistException::new); - if (Objects.equals(alipayConfig.getActivity(), Boolean.TRUE)) { - return; - } - alipayConfigManager.removeAllActivity(); - alipayConfig.setActivity(true); - alipayConfigManager.updateById(alipayConfig); - } - - /** - * 清除启用状态 - */ - @Transactional(rollbackFor = Exception.class) - public void clearActivity(Long id) { - AlipayConfig alipayConfig = alipayConfigManager.findById(id) - .orElseThrow(() -> new PayFailureException("支付宝配置不存在")); - if (Objects.equals(alipayConfig.getActivity(), Boolean.FALSE)) { - return; - } - alipayConfig.setActivity(false); - alipayConfigManager.updateById(alipayConfig); - } - - /** - * 修改 - */ - @Transactional(rollbackFor = Exception.class) - public void update(AlipayConfigParam param) { - AlipayConfig alipayConfig = alipayConfigManager.findById(param.getId()).orElseThrow(DataNotExistException::new); - BeanUtil.copyProperties(param, alipayConfig, CopyOptions.create().ignoreNullValue()); - // 支付方式 - if (CollUtil.isNotEmpty(param.getPayWayList())) { - alipayConfig.setPayWays(String.join(",", param.getPayWayList())); - } - else { - alipayConfig.setPayWays(null); - } - alipayConfigManager.updateById(alipayConfig); - } - - /** - * 获取 - */ - public AlipayConfigDto findById(Long id) { - return alipayConfigManager.findById(id).map(AlipayConfig::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 分页 - */ - public PageResult page(PageParam pageParam, AlipayConfigQuery param) { - return MpUtil.convert2DtoPageResult(alipayConfigManager.page(pageParam, param)); - } - - /** - * 支付宝支持支付方式 - */ - public List findPayWayList() { - return AliPayWay.getPayWays() - .stream() - .map(e -> new KeyValue(e.getCode(), e.getName())) - .collect(Collectors.toList()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipaySyncService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipaySyncService.java deleted file mode 100644 index f4ccccfac..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/alipay/service/AlipaySyncService.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.payment.core.paymodel.alipay.service; - -import cn.bootx.payment.code.pay.PaySyncStatus; -import cn.bootx.payment.code.paymodel.AliPayCode; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.payment.entity.Payment; -import com.alipay.api.AlipayApiException; -import com.alipay.api.domain.AlipayTradeQueryModel; -import com.alipay.api.response.AlipayTradeQueryResponse; -import com.ijpay.alipay.AliPayApi; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Objects; - -/** - * 支付宝同步 - * - * @author xxm - * @date 2021/5/17 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class AlipaySyncService { - - /** - * 与支付宝网关同步状态 1 远程支付成功 2 交易创建,等待买家付款 3 超时关闭 4 查询不到 5 查询失败 - */ - public PaySyncResult syncPayStatus(Payment payment) { - PaySyncResult paySyncResult = new PaySyncResult().setPaySyncStatus(PaySyncStatus.FAIL); - - // 查询 - try { - AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel(); - queryModel.setOutTradeNo(String.valueOf(payment.getId())); - // 查询退款参数 - AlipayTradeQueryResponse response = AliPayApi.tradeQueryToResponse(queryModel); - String tradeStatus = response.getTradeStatus(); - - // 支付完成 - if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_SUCCESS) - || Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_FINISHED)) { - - HashMap map = new HashMap<>(1); - map.put(AliPayCode.TRADE_NO, response.getTradeNo()); - return paySyncResult.setPaySyncStatus(PaySyncStatus.TRADE_SUCCESS).setMap(map); - } - // 待支付 - if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_WAIT_BUYER_PAY)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.WAIT_BUYER_PAY); - } - // 已关闭 - if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_CLOSED)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.TRADE_CLOSED); - } - // 未找到 - if (Objects.equals(response.getSubCode(), AliPayCode.ACQ_TRADE_NOT_EXIST)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.NOT_FOUND); - } - // 退款 支付宝查不到 - - } - catch (AlipayApiException e) { - log.error("查询订单失败:", e); - } - return paySyncResult; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/base/entity/BasePayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/base/entity/BasePayment.java deleted file mode 100644 index ccfb15eac..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/base/entity/BasePayment.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.payment.core.paymodel.base.entity; - -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.code.pay.PayStatusCode; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * 基础支付记录类 - * - * @author xxm - * @date 2021/2/25 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -public class BasePayment extends MpBaseEntity { - - /** 交易记录ID */ - private Long paymentId; - - /** 用户ID */ - private Long userId; - - /** 交易金额 */ - private BigDecimal amount; - - /** 可退款金额 */ - private BigDecimal refundableBalance; - - /** 关联的业务id */ - private String businessId; - - /** - * 支付状态 - * @see PayStatusCode - */ - private Integer payStatus; - - /** 支付时间 */ - private LocalDateTime payTime; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentManager.java deleted file mode 100644 index 59903005c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.core.paymodel.cash.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.cash.entity.CashPayment; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 现金支付 - * - * @author xxm - * @date 2021/6/23 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class CashPaymentManager extends BaseManager { - - public Optional findByPaymentId(Long paymentId) { - return findByField(CashPayment::getPaymentId, paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentMapper.java deleted file mode 100644 index 2a56fece8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/dao/CashPaymentMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.cash.dao; - -import cn.bootx.payment.core.paymodel.cash.entity.CashPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 现金支付 - * - * @author xxm - * @date 2021/6/23 - */ -@Mapper -public interface CashPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/entity/CashPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/entity/CashPayment.java deleted file mode 100644 index c21542ec3..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/entity/CashPayment.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.payment.core.paymodel.cash.entity; - -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 现金支付记录 - * - * @author xxm - * @date 2021/6/23 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("pay_cash_payment") -@Accessors(chain = true) -public class CashPayment extends BasePayment { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/service/CashService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/service/CashService.java deleted file mode 100644 index 95861b1b0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/cash/service/CashService.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.payment.core.paymodel.cash.service; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.cash.dao.CashPaymentManager; -import cn.bootx.payment.core.paymodel.cash.entity.CashPayment; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.util.Optional; - -/** - * 现金支付 - * - * @author xxm - * @date 2021/6/23 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class CashService { - - private final CashPaymentManager cashPaymentManager; - - /** - * 支付 - */ - public void pay(PayModeParam payMode, Payment payment, PayParam payParam) { - CashPayment walletPayment = new CashPayment(); - walletPayment.setPaymentId(payment.getId()) - .setUserId(payment.getUserId()) - .setBusinessId(payParam.getBusinessId()) - .setAmount(payMode.getAmount()) - .setRefundableBalance(payMode.getAmount()) - .setPayStatus(payment.getPayStatus()); - cashPaymentManager.save(walletPayment); - } - - /** - * 关闭 - */ - public void close(Long paymentId) { - Optional cashPaymentOpt = cashPaymentManager.findByPaymentId(paymentId); - cashPaymentOpt.ifPresent(cashPayment -> { - cashPayment.setPayStatus(PayStatusCode.TRADE_CANCEL); - cashPaymentManager.updateById(cashPayment); - }); - } - - /** - * 退款 - */ - public void refund(Long paymentId, BigDecimal amount) { - Optional cashPayment = cashPaymentManager.findByPaymentId(paymentId); - cashPayment.ifPresent(payment -> { - BigDecimal refundableBalance = payment.getRefundableBalance().subtract(amount); - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) == 0) { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - cashPaymentManager.updateById(payment); - }); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/convert/UnionPayConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/convert/UnionPayConvert.java deleted file mode 100644 index 408bf3ee2..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/convert/UnionPayConvert.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.convert; - -import cn.bootx.payment.core.paymodel.union.entity.UnionPayConfig; -import cn.bootx.payment.dto.paymodel.union.UnionPayConfigDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Mapper -public interface UnionPayConvert { - - UnionPayConvert CONVERT = Mappers.getMapper(UnionPayConvert.class); - - UnionPayConfigDto convert(UnionPayConfig in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigManager.java deleted file mode 100644 index 52111a028..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.union.entity.UnionPayConfig; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class UnionPayConfigManager extends BaseManager { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigMapper.java deleted file mode 100644 index 62a298437..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPayConfigMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.dao; - -import cn.bootx.payment.core.paymodel.union.entity.UnionPayConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Mapper -public interface UnionPayConfigMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentManager.java deleted file mode 100644 index c7a908d17..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.union.entity.UnionPayment; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class UnionPaymentManager extends BaseManager { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentMapper.java deleted file mode 100644 index fe67698d3..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/dao/UnionPaymentMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.dao; - -import cn.bootx.payment.core.paymodel.union.entity.UnionPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Mapper -public interface UnionPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayConfig.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayConfig.java deleted file mode 100644 index cde9e44c8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.union.convert.UnionPayConvert; -import cn.bootx.payment.dto.paymodel.union.UnionPayConfigDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 云闪付 - * - * @author xxm - * @date 2022/3/11 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_union_pay_config") -public class UnionPayConfig extends MpBaseEntity implements EntityBaseFunction { - - @Override - public UnionPayConfigDto toDto() { - return UnionPayConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayment.java deleted file mode 100644 index f1cad8919..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/entity/UnionPayment.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.entity; - -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2022/3/11 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_union_payment") -public class UnionPayment extends BasePayment { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayConfigService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayConfigService.java deleted file mode 100644 index 8843cd6fb..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayConfigService.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.service; - -import cn.bootx.payment.core.paymodel.union.dao.UnionPayConfigManager; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UnionPayConfigService { - - private final UnionPayConfigManager unionPayConfigManager; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayService.java deleted file mode 100644 index 214f4a607..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPayService.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.service; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UnionPayService { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPaymentService.java deleted file mode 100644 index 45e6c03ac..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/union/service/UnionPaymentService.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.union.service; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UnionPaymentService { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/convert/VoucherConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/convert/VoucherConvert.java deleted file mode 100644 index b0bce32e7..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/convert/VoucherConvert.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.convert; - -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherPayment; -import cn.bootx.payment.dto.paymodel.voucher.VoucherDto; -import cn.bootx.payment.dto.paymodel.voucher.VoucherPaymentDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Mapper -public interface VoucherConvert { - - VoucherConvert CONVERT = Mappers.getMapper(VoucherConvert.class); - - VoucherDto convert(Voucher in); - - VoucherPaymentDto convert(VoucherPayment in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogManager.java deleted file mode 100644 index e3ac4a915..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogManager.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherLog; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * @author xxm - * @date 2022/3/19 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class VoucherLogManager extends BaseManager { - - /** - * 根据支付id和类型进行查询 - */ - public List findByPaymentIdAndType(Long paymentId, int type) { - return lambdaQuery().eq(VoucherLog::getPaymentId, paymentId).eq(VoucherLog::getType, type).list(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogMapper.java deleted file mode 100644 index 6efebe1eb..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherLogMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherLog; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/19 - */ -@Mapper -public interface VoucherLogMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherManager.java deleted file mode 100644 index 637749913..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherManager.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.param.paymodel.voucher.VoucherParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class VoucherManager extends BaseManager { - - /** - * 分页 - */ - public Page page(PageParam pageParam, VoucherParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, Voucher.class); - return this.lambdaQuery() - .ge(Objects.nonNull(param.getStartTime()), Voucher::getStartTime, param.getStartTime()) - .le(Objects.nonNull(param.getEndTime()), Voucher::getEndTime, param.getEndTime()) - .eq(Objects.nonNull(param.getEnduring()), Voucher::getEnduring, param.getEnduring()) - .like(StrUtil.isNotBlank(param.getCardNo()), Voucher::getCardNo, param.getCardNo()) - .like(Objects.nonNull(param.getBatchNo()), Voucher::getBatchNo, param.getBatchNo()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - - /** - * 根据卡号查询 - */ - public Optional findByCardNo(String cardNo) { - return this.findByField(Voucher::getCardNo, cardNo); - } - - /** - * 根据卡号查询 - */ - public List findByCardNoList(List cardNos) { - return this.findAllByFields(Voucher::getCardNo, cardNos); - } - - /** - * 更改状态 - */ - public void changeStatus(Long id, int status) { - this.lambdaUpdate().eq(MpIdEntity::getId, id).set(Voucher::getStatus, status).update(); - - } - - /** - * 批量更改状态 - */ - public void changeStatusBatch(List ids, int status) { - this.lambdaUpdate().in(MpIdEntity::getId, ids).set(Voucher::getStatus, status).update(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherMapper.java deleted file mode 100644 index b35c767fc..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Mapper -public interface VoucherMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentManager.java deleted file mode 100644 index a5d0060f8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentManager.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherPayment; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class VoucherPaymentManager extends BaseManager { - - /** - * 根据支付id - */ - public Optional findByPaymentId(Long paymentId) { - return this.findByField(VoucherPayment::getPaymentId, paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentMapper.java deleted file mode 100644 index 4d57f6890..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/dao/VoucherPaymentMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.dao; - -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Mapper -public interface VoucherPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/Voucher.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/Voucher.java deleted file mode 100644 index 2ba844e98..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/Voucher.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.voucher.convert.VoucherConvert; -import cn.bootx.payment.dto.paymodel.voucher.VoucherDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * 储值卡 - * - * @author xxm - * @date 2022/3/14 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_voucher") -public class Voucher extends MpBaseEntity implements EntityBaseFunction { - - /** 卡号 */ - private String cardNo; - - /** 生成批次号 */ - private Long batchNo; - - /** 面值 */ - private BigDecimal faceValue; - - /** 余额 */ - private BigDecimal balance; - - /** 是否长期有效 */ - private Boolean enduring; - - /** 开始时间 */ - private LocalDateTime startTime; - - /** 结束时间 */ - private LocalDateTime endTime; - - /** - * 状态 - * @see cn.bootx.payment.code.paymodel.VoucherCode - */ - private Integer status; - - @Override - public VoucherDto toDto() { - return VoucherConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherLog.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherLog.java deleted file mode 100644 index 13d627d2f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherLog.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.entity; - -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 储值卡日志 - * - * @author xxm - * @date 2022/3/17 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_voucher_log") -public class VoucherLog extends MpBaseEntity { - - /** 储值卡id */ - private Long voucherId; - - /** 储值卡号 */ - private String voucherNo; - - /** 金额 */ - private BigDecimal amount; - - /** - * 类型 - * @see cn.bootx.payment.code.paymodel.VoucherCode - */ - private Integer type; - - /** 交易记录ID */ - private Long paymentId; - - /** 业务ID */ - private String businessId; - - /** 备注 */ - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherPayment.java deleted file mode 100644 index c68fa5051..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/entity/VoucherPayment.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import cn.bootx.payment.core.paymodel.voucher.convert.VoucherConvert; -import cn.bootx.payment.dto.paymodel.voucher.VoucherPaymentDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 储值卡支付记录 - * - * @author xxm - * @date 2022/3/14 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_voucher_payment") -public class VoucherPayment extends BasePayment implements EntityBaseFunction { - - /** 储值卡id列表 */ - private String voucherIds; - - @Override - public VoucherPaymentDto toDto() { - return VoucherConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherLogService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherLogService.java deleted file mode 100644 index aac6d66bb..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherLogService.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.service; - -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherLogManager; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 储值卡日志 - * - * @author xxm - * @date 2022/3/19 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class VoucherLogService { - - private final VoucherLogManager voucherLogManager; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPayService.java deleted file mode 100644 index 507bc9eac..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPayService.java +++ /dev/null @@ -1,185 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.payment.code.paymodel.VoucherCode; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherLogManager; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherManager; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherPaymentManager; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherLog; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherPayment; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.paymodel.voucher.VoucherPayParam; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONException; -import cn.hutool.json.JSONUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * 储值卡支付 - * - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class VoucherPayService { - - private final VoucherManager voucherManager; - - private final VoucherPaymentManager voucherPaymentManager; - - private final VoucherLogManager voucherLogManager; - - /** - * 获取并检查储值卡 - */ - public List getAndCheckVoucher(PayModeParam payModeParam) { - VoucherPayParam voucherPayParam; - try { - // 储值卡参数验证 - String extraParamsJson = payModeParam.getExtraParamsJson(); - if (StrUtil.isNotBlank(extraParamsJson)) { - voucherPayParam = JSONUtil.toBean(extraParamsJson, VoucherPayParam.class); - } - else { - throw new PayFailureException("储值卡支付参数错误"); - } - } - catch (JSONException e) { - throw new PayFailureException("储值卡支付参数错误"); - } - - List cardNoList = voucherPayParam.getCardNoList(); - List vouchers = voucherManager.findByCardNoList(cardNoList); - // 判断是否有重复or无效的储值卡 - if (vouchers.size() != cardNoList.size()) { - throw new PayFailureException("储值卡支付参数错误"); - } - boolean timeCheck = this.check(vouchers); - if (!timeCheck) { - throw new PayFailureException("储值卡不再有效期内"); - } - // 金额是否满足 - BigDecimal amount = vouchers.stream().map(Voucher::getBalance).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - if (BigDecimalUtil.compareTo(amount, payModeParam.getAmount()) < 0) { - throw new PayFailureException("储值卡余额不足"); - } - - return vouchers; - } - - /** - * 支付 TODO 有期限的在前面, 同样有期限到期时间短的在前面, 同样到期日金额小的在前面 - */ - public void pay(BigDecimal amount, Payment payment, List vouchers) { - vouchers.sort((o1, o2) -> BigDecimalUtil.compareTo(o1.getBalance(), o2.getBalance())); - List voucherLogs = new ArrayList<>(); - - for (Voucher voucher : vouchers) { - // 待支付余额为零, 不在处理后面的储值卡 - if (BigDecimalUtil.compareTo(amount, BigDecimal.ZERO) < 1) { - break; - } - - BigDecimal balance = voucher.getBalance(); - // 日志 - VoucherLog voucherLog = new VoucherLog().setPaymentId(payment.getId()) - .setBusinessId(payment.getBusinessId()) - .setType(VoucherCode.LOG_PAY) - .setVoucherId(voucher.getId()) - .setVoucherNo(voucher.getCardNo()); - - // 待支付额大于储值卡余额. 全扣光 - if (BigDecimalUtil.compareTo(amount, balance) == 1) { - amount = amount.subtract(balance); - voucher.setBalance(BigDecimal.ZERO); - voucherLog.setAmount(balance); - } - else { - voucher.setBalance(balance.subtract(amount)); - voucherLog.setAmount(amount); - } - voucherLogs.add(voucherLog); - } - voucherManager.updateAllById(vouchers); - voucherLogManager.saveAll(voucherLogs); - } - - /** - * 取消支付 - */ - public void close(Long paymentId) { - // 查找支付记录日志 - List voucherLogs = voucherLogManager.findByPaymentIdAndType(paymentId, VoucherCode.LOG_PAY); - // 查出关联的储值卡 - Map voucherLogMap = voucherLogs.stream() - .collect(Collectors.toMap(VoucherLog::getVoucherId, Function.identity())); - List vouchers = voucherManager.findAllByIds(voucherLogMap.keySet()); - // 执行退款并记录日志 - List logs = new ArrayList<>(); - for (Voucher voucher : vouchers) { - VoucherLog voucherLog = voucherLogMap.get(voucher.getId()); - voucher.setBalance(voucher.getBalance().add(voucherLog.getAmount())); - VoucherLog log = new VoucherLog().setAmount(voucherLog.getAmount()) - .setPaymentId(paymentId) - .setBusinessId(voucherLog.getBusinessId()) - .setVoucherId(voucher.getId()) - .setVoucherNo(voucher.getCardNo()) - .setType(VoucherCode.LOG_CLOSE); - logs.add(log); - } - voucherManager.updateAllById(vouchers); - voucherLogManager.saveAll(logs); - } - - /** - * 退款 TODO 延长卡的有效期, - */ - public void refund(Long paymentId, BigDecimal amount) { - VoucherPayment voucherPayment = voucherPaymentManager.findByPaymentId(paymentId) - .orElseThrow(() -> new PayFailureException("储值卡支付记录不存在")); - - Long voucherId = Long.valueOf(voucherPayment.getVoucherIds().split(",")[0]); - Voucher voucher = voucherManager.findById(voucherId).orElseThrow(DataNotExistException::new); - - voucher.setBalance(voucher.getBalance().add(amount)); - - VoucherLog log = new VoucherLog().setAmount(amount) - .setPaymentId(paymentId) - .setBusinessId(voucherPayment.getBusinessId()) - .setVoucherId(voucher.getId()) - .setVoucherNo(voucher.getCardNo()) - .setType(VoucherCode.LOG_REFUND); - voucherManager.updateById(voucher); - voucherLogManager.save(log); - } - - /** - * 卡信息检查 - */ - private boolean check(List vouchers) { - // 判断有效期 - return vouchers.stream() - .filter(voucher -> !Objects.equals(voucher.getEnduring(), true)) - .allMatch(voucher -> LocalDateTimeUtil.between(LocalDateTime.now(), voucher.getStartTime(), - voucher.getEndTime())); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPaymentService.java deleted file mode 100644 index b12920c11..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherPaymentService.java +++ /dev/null @@ -1,95 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherPaymentManager; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherPayment; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * 储值卡支付记录 - * - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class VoucherPaymentService { - - private final VoucherPaymentManager voucherPaymentManager; - - /** - * 添加支付记录 - */ - public void savePayment(Payment payment, PayParam payParam, PayModeParam payMode, List vouchers) { - String voucherIds = vouchers.stream() - .map(MpIdEntity::getId) - .map(String::valueOf) - .collect(Collectors.joining(",")); - - VoucherPayment walletPayment = new VoucherPayment().setVoucherIds(voucherIds); - walletPayment.setPaymentId(payment.getId()) - .setUserId(payment.getUserId()) - .setBusinessId(payParam.getBusinessId()) - .setAmount(payMode.getAmount()) - .setRefundableBalance(payMode.getAmount()) - .setPayStatus(payment.getPayStatus()); - voucherPaymentManager.save(walletPayment); - } - - /** - * 更新成功状态 - */ - public void updateSuccess(Long paymentId) { - Optional payment = voucherPaymentManager.findByPaymentId(paymentId); - if (payment.isPresent()) { - VoucherPayment voucherPayment = payment.get(); - voucherPayment.setPayStatus(PayStatusCode.TRADE_SUCCESS).setPayTime(LocalDateTime.now()); - voucherPaymentManager.updateById(voucherPayment); - } - } - - /** - * 关闭操作 - */ - public void updateClose(Long paymentId) { - VoucherPayment payment = voucherPaymentManager.findByPaymentId(paymentId) - .orElseThrow(() -> new BizException("未查询到查询交易记录")); - payment.setPayStatus(PayStatusCode.TRADE_CANCEL); - voucherPaymentManager.updateById(payment); - } - - /** - * 更新退款 - */ - public void updateRefund(Long paymentId, BigDecimal amount) { - Optional voucherPayment = voucherPaymentManager.findByPaymentId(paymentId); - voucherPayment.ifPresent(payment -> { - BigDecimal refundableBalance = payment.getRefundableBalance().subtract(amount); - payment.setRefundableBalance(refundableBalance); - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) == 0) { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - voucherPaymentManager.updateById(payment); - }); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherQueryService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherQueryService.java deleted file mode 100644 index 173273c5a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherQueryService.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherManager; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.dto.paymodel.voucher.VoucherDto; -import cn.bootx.payment.param.paymodel.voucher.VoucherParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 储值卡查询 - * - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class VoucherQueryService { - - private final VoucherManager voucherManager; - - /** - * 分页 - */ - public PageResult page(PageParam pageParam, VoucherParam param) { - return MpUtil.convert2DtoPageResult(voucherManager.page(pageParam, param)); - } - - /** - * 根据id查询 - */ - public VoucherDto findById(Long id) { - return voucherManager.findById(id).map(Voucher::toDto).orElseThrow(() -> new DataNotExistException("储值卡不存在")); - } - - /** - * 根据卡号查询 - */ - public VoucherDto findByCardNo(String cardNo) { - return voucherManager.findByCardNo(cardNo) - .map(Voucher::toDto) - .orElseThrow(() -> new DataNotExistException("储值卡不存在")); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherService.java deleted file mode 100644 index 3b12ddb3f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/voucher/service/VoucherService.java +++ /dev/null @@ -1,111 +0,0 @@ -package cn.bootx.payment.core.paymodel.voucher.service; - -import cn.bootx.payment.code.paymodel.VoucherCode; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherLogManager; -import cn.bootx.payment.core.paymodel.voucher.dao.VoucherManager; -import cn.bootx.payment.core.paymodel.voucher.entity.Voucher; -import cn.bootx.payment.core.paymodel.voucher.entity.VoucherLog; -import cn.bootx.payment.param.paymodel.voucher.VoucherGenerationParam; -import cn.bootx.payment.param.paymodel.voucher.VoucherImportParam; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.RandomUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 储值卡 - * - * @author xxm - * @date 2022/3/14 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class VoucherService { - - private final VoucherManager voucherManager; - - private final VoucherLogManager voucherLogManager; - - /** - * 批量生成 - */ - @Transactional(rollbackFor = Exception.class) - public void generationBatch(VoucherGenerationParam param) { - Integer count = param.getCount(); - List vouchers = new ArrayList<>(count); - long batchNo = IdUtil.getSnowflakeNextId(); - for (int i = 0; i < count; i++) { - Voucher voucher = new Voucher() - .setCardNo('V' + IdUtil.getSnowflakeNextIdStr() + RandomUtil.randomNumbers(2)) - .setBatchNo(batchNo) - .setBalance(param.getFaceValue()) - .setFaceValue(param.getFaceValue()) - .setEnduring(param.getEnduring()) - .setStatus(param.getStatus()); - if (Objects.equals(param.getEnduring(), Boolean.FALSE)) { - voucher.setStartTime(param.getStartTime()).setEndTime(param.getEndTime()); - } - vouchers.add(voucher); - } - voucherManager.saveAll(vouchers); - // 日志 - List voucherLogs = vouchers.stream() - .map(voucher -> new VoucherLog().setType(VoucherCode.LOG_ACTIVE) - .setAmount(voucher.getBalance()) - .setVoucherId(voucher.getId()) - .setVoucherNo(voucher.getCardNo())) - .collect(Collectors.toList()); - voucherLogManager.saveAll(voucherLogs); - } - - /** - * 批量导入 - */ - public void importBatch(VoucherImportParam param) { - - } - - /** - * 启用 - */ - public void unlock(Long id) { - voucherManager.changeStatus(id, VoucherCode.STATUS_NORMAL); - } - - /** - * 冻结 - */ - public void lock(Long id) { - voucherManager.changeStatus(id, VoucherCode.STATUS_FORBIDDEN); - } - - /** - * 批量启用 - */ - public void unlockBatch(List ids) { - voucherManager.changeStatusBatch(ids, VoucherCode.STATUS_NORMAL); - } - - /** - * 批量冻结 - */ - public void lockBatch(List ids) { - voucherManager.changeStatusBatch(ids, VoucherCode.STATUS_FORBIDDEN); - } - - /** - * 更改有效期 - */ - public void changeEnduring() { - - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/convert/WalletConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/convert/WalletConvert.java deleted file mode 100644 index cd3b31c15..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/convert/WalletConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.convert; - -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletLog; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletPayment; -import cn.bootx.payment.dto.paymodel.wallet.WalletDto; -import cn.bootx.payment.dto.paymodel.wallet.WalletLogDto; -import cn.bootx.payment.dto.paymodel.wallet.WalletPaymentDto; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 转换 - * - * @author xxm - * @date 2021/8/20 - */ -@Mapper -public interface WalletConvert { - - WalletConvert CONVERT = Mappers.getMapper(WalletConvert.class); - - WalletDto convert(Wallet in); - - WalletPaymentDto convert(WalletPayment in); - - WalletLogDto convert(WalletLog walletLog); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogManager.java deleted file mode 100644 index 1d6bbce44..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogManager.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletLog; -import cn.bootx.payment.param.paymodel.wallet.WalletLogQueryParam; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Objects; -import java.util.Optional; - -/** - * 钱包日志 - * - * @author xxm - * @date 2020/12/8 - */ -@Repository -@RequiredArgsConstructor -public class WalletLogManager extends BaseManager { - - /** - * 按付款查找优先 - */ - public Optional findFirstByPayment(Long paymentId) { - return MpUtil.findOne(lambdaQuery().eq(WalletLog::getPaymentId, paymentId).orderByDesc(MpIdEntity::getId)); - } - - /** - * 分页查询指定用户的钱包日志 - */ - public Page pageByUserId(PageParam pageParam, WalletLogQueryParam param, Long userId) { - Page mpPage = MpUtil.getMpPage(pageParam, WalletLog.class); - - return this.lambdaQuery().orderByDesc(MpIdEntity::getId).eq(WalletLog::getUserId, userId).page(mpPage); - } - - /** - * 分页查询 - */ - public Page page(PageParam pageParam, WalletLogQueryParam query) { - Page mpPage = MpUtil.getMpPage(pageParam, WalletLog.class); - return this.lambdaQuery() - .orderByDesc(MpIdEntity::getId) - .like(Objects.nonNull(query.getUserId()), WalletLog::getUserId, query.getUserId()) - .like(Objects.nonNull(query.getWalletId()), WalletLog::getWalletId, query.getWalletId()) - .page(mpPage); - } - - /** - * 分页查询 根据钱包id - */ - public Page pageByWalletId(PageParam pageParam, WalletLogQueryParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, WalletLog.class); - return this.lambdaQuery() - .orderByDesc(MpIdEntity::getId) - .eq(WalletLog::getWalletId, param.getWalletId()) - .page(mpPage); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogMapper.java deleted file mode 100644 index d43e252c0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletLogMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.payment.core.paymodel.wallet.entity.WalletLog; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 钱包日志 - * - * @author xxm - * @date 2020/12/8 - */ -@Mapper -public interface WalletLogMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletManager.java deleted file mode 100644 index bd2920fe8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletManager.java +++ /dev/null @@ -1,126 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.param.paymodel.wallet.WalletPayParam; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * 钱包管理 - * - * @author xxm - * @date 2020/12/8 - */ -@Repository -@RequiredArgsConstructor -public class WalletManager extends BaseManager { - - private final WalletMapper walletMapper; - - /** - * 增加余额 - * @param walletId 钱包 - * @param amount 金额 - * @return 更新数量 - */ - public int increaseBalance(Long walletId, BigDecimal amount) { - Long userId = SecurityUtil.getUserIdOrDefaultId(); - return walletMapper.increaseBalance(walletId, amount, userId, LocalDateTime.now()); - } - - /** - * 扣减余额 - * @param walletId 钱包ID - * @param amount 扣减金额 - * @return 操作条数 - */ - public int reduceBalance(Long walletId, BigDecimal amount) { - Long userId = SecurityUtil.getUserIdOrDefaultId(); - return walletMapper.reduceBalance(walletId, amount, userId, LocalDateTime.now()); - } - - /** - * 扣减余额-允许扣成负数 - * @param walletId 钱包ID - * @param amount 扣减金额 - * @return 剩余条数 - */ - public int reduceBalanceUnlimited(Long walletId, BigDecimal amount) { - Long userId = SecurityUtil.getUserIdOrDefaultId(); - return walletMapper.reduceBalanceUnlimited(walletId, amount, userId, LocalDateTime.now()); - } - - /** - * 更新钱包状态 - */ - public void setUpStatus(Long walletId, int status) { - lambdaUpdate().eq(Wallet::getId, walletId).set(Wallet::getStatus, status).update(); - } - - /** - * 用户钱包是否存在 - */ - public boolean existsByUser(Long userId) { - return existedByField(Wallet::getUserId, userId); - } - - /** - * 查询用户的钱包 - */ - public Optional findByUser(Long userId) { - return findByField(Wallet::getUserId, userId); - } - - /** - * 分页查询 - */ - public Page page(PageParam pageParam, WalletPayParam param) { - - Page mpPage = MpUtil.getMpPage(pageParam, Wallet.class); - return this.lambdaQuery().orderByDesc(MpIdEntity::getId).page(mpPage); - } - - /** - * 待开通钱包的用户列表 - */ - public Page pageByNotWallet(PageParam pageParam, UserInfoParam userInfoParam) { - Page mpPage = MpUtil.getMpPage(pageParam, UserInfo.class); - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.isNull("w.id") - .orderByDesc("w.id") - .like(StrUtil.isNotBlank(userInfoParam.getUsername()), "w.username", userInfoParam.getUsername()) - .like(StrUtil.isNotBlank(userInfoParam.getName()), "w.name", userInfoParam.getName()); - return walletMapper.pageByNotWallet(mpPage, wrapper); - } - - /** - * 查询已经存在钱包的用户id - */ - public List findExistUserIds(List userIds) { - return this.lambdaQuery() - .select(Wallet::getUserId) - .in(Wallet::getUserId, userIds) - .list() - .stream() - .map(Wallet::getUserId) - .collect(Collectors.toList()); - - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletMapper.java deleted file mode 100644 index b6e097243..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.iam.core.user.entity.UserInfo; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * 钱包 - * - * @author xxm - * @date 2021/2/24 - */ -@Mapper -public interface WalletMapper extends BaseMapper { - - /** - * 增加余额 - * @param walletId 钱包ID - * @param amount 增加的额度 - * @param operator 操作人 - * @param date 时间 - * @return 更新数量 - */ - int increaseBalance(@Param("walletId") Long walletId, @Param("amount") BigDecimal amount, - @Param("operator") Long operator, @Param("date") LocalDateTime date); - - /** - * 减少余额 - * @param walletId 钱包ID - * @param amount 减少的额度 - * @param operator 操作人 - * @param date 操作时间 - * @return 操作条数 - */ - int reduceBalance(@Param("walletId") Long walletId, @Param("amount") BigDecimal amount, - @Param("operator") Long operator, @Param("date") LocalDateTime date); - - /** - * 减少余额,允许扣成负数 - * @param walletId 钱包ID - * @param amount 减少的额度 - * @param operator 操作人 - * @param date 操作时间 - * @return 操作条数 - */ - int reduceBalanceUnlimited(@Param("walletId") Long walletId, @Param("amount") BigDecimal amount, - @Param("operator") Long operator, @Param("date") LocalDateTime date); - - /** - * 待开通钱包的用户列表 - */ - Page pageByNotWallet(Page mpPage, @Param(Constants.WRAPPER) Wrapper wrapper); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentManager.java deleted file mode 100644 index 615f35b17..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentManager.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletPayment; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -@RequiredArgsConstructor -public class WalletPaymentManager extends BaseManager { - - public Optional findByPaymentId(Long paymentId) { - return findByField(BasePayment::getPaymentId, paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentMapper.java deleted file mode 100644 index bda2a89a0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/dao/WalletPaymentMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.dao; - -import cn.bootx.payment.core.paymodel.wallet.entity.WalletPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface WalletPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/Wallet.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/Wallet.java deleted file mode 100644 index 06bf544fa..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/Wallet.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.wallet.convert.WalletConvert; -import cn.bootx.payment.dto.paymodel.wallet.WalletDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 钱包 - * - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_wallet") -public class Wallet extends MpBaseEntity implements EntityBaseFunction { - - /** 关联用户id */ - private Long userId; - - /** 余额 */ - private BigDecimal balance; - - /** 状态 */ - private Integer status; - - @Override - public WalletDto toDto() { - return WalletConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletLog.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletLog.java deleted file mode 100644 index ba7849ac1..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletLog.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.wallet.convert.WalletConvert; -import cn.bootx.payment.dto.paymodel.wallet.WalletLogDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 钱包日志表 - * - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_wallet_log") -public class WalletLog extends MpBaseEntity implements EntityBaseFunction { - - /** 钱包id */ - private Long walletId; - - /** 用户id */ - private Long userId; - - /** 类型 */ - private Integer type; - - /** 交易记录ID */ - private Long paymentId; - - /** 备注 */ - private String remark; - - /** 业务ID */ - private String businessId; - - /** 操作类型 */ - private int operationSource; - - /** 金额 */ - private BigDecimal amount; - - @Override - public WalletLogDto toDto() { - return WalletConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletPayment.java deleted file mode 100644 index fb16efe49..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/entity/WalletPayment.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import cn.bootx.payment.core.paymodel.wallet.convert.WalletConvert; -import cn.bootx.payment.dto.paymodel.wallet.WalletPaymentDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 钱包交易记录表 - * - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_wallet_payment") -public class WalletPayment extends BasePayment implements EntityBaseFunction { - - /** 钱包ID */ - private Long walletId; - - @Override - public WalletPaymentDto toDto() { - return WalletConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletLogService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletLogService.java deleted file mode 100644 index 9a7fe0905..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletLogService.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.service; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletLogManager; -import cn.bootx.payment.dto.paymodel.wallet.WalletLogDto; -import cn.bootx.payment.param.paymodel.wallet.WalletLogQueryParam; -import cn.bootx.starter.auth.util.SecurityUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 钱包日志 - * - * @author xxm - * @date 2020/12/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WalletLogService { - - private final WalletLogManager walletLogManager; - - /** - * 个人钱包日志分页 - */ - public PageResult pageByPersonal(PageParam pageParam, WalletLogQueryParam param) { - Long userId = SecurityUtil.getUserId(); - return MpUtil.convert2DtoPageResult(walletLogManager.pageByUserId(pageParam, param, userId)); - } - - /** - * 钱包日志分页 - */ - public PageResult page(PageParam pageParam, WalletLogQueryParam param) { - return MpUtil.convert2DtoPageResult(walletLogManager.page(pageParam, param)); - } - - /** - * 根据钱包id查询钱包日志(分页) - */ - public PageResult pageByWalletId(PageParam pageParam, WalletLogQueryParam param) { - return MpUtil.convert2DtoPageResult(walletLogManager.pageByWalletId(pageParam, param)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPayService.java deleted file mode 100644 index ce8cf0876..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPayService.java +++ /dev/null @@ -1,122 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.paymodel.WalletCode; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletLogManager; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletManager; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletPaymentManager; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletLog; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletPayment; -import cn.bootx.payment.exception.waller.WalletLackOfBalanceException; -import cn.bootx.payment.exception.waller.WalletNotExistsException; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigDecimal; -import java.util.Optional; - -/** - * 钱包支付操作 - * - * @author xxm - * @date 2021/2/27 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WalletPayService { - - private final WalletManager walletManager; - - private final WalletPaymentManager walletPaymentManager; - - private final WalletLogManager walletLogManager; - - /** - * 支付操作 - * @param amount 付款金额 - * @param payment 支付记录 - * @param wallet 钱包 - */ - public void pay(BigDecimal amount, Payment payment, Wallet wallet) { - // 扣减余额 - int i = walletManager.reduceBalance(wallet.getId(), amount); - - // 判断操作结果 - if (i < 1) { - throw new WalletLackOfBalanceException(); - } - // 日志 - WalletLog walletLog = new WalletLog().setWalletId(wallet.getId()) - .setUserId(wallet.getUserId()) - .setPaymentId(payment.getId()) - .setAmount(amount) - .setType(WalletCode.LOG_PAY) - .setRemark(String.format("钱包支付金额 %.2f ", amount)) - .setOperationSource(WalletCode.OPERATION_SOURCE_USER) - .setBusinessId(payment.getBusinessId()); - walletLogManager.save(walletLog); - } - - /** - * 取消支付并返还金额 - */ - public void close(Long paymentId) { - // 钱包支付记录 - walletPaymentManager.findByPaymentId(paymentId).ifPresent(walletPayment -> { - Optional walletOpt = walletManager.findById(walletPayment.getWalletId()); - if (!walletOpt.isPresent()) { - log.error("钱包出现恶性问题,需要人工排查"); - return; - } - Wallet wallet = walletOpt.get(); - walletPayment.setPayStatus(PayStatusCode.TRADE_CANCEL); - walletPaymentManager.save(walletPayment); - - // 金额返还 - walletManager.increaseBalance(wallet.getId(), walletPayment.getAmount()); - - // 记录日志 - WalletLog walletLog = new WalletLog().setAmount(walletPayment.getAmount()) - .setPaymentId(walletPayment.getPaymentId()) - .setWalletId(wallet.getId()) - .setUserId(wallet.getUserId()) - .setType(WalletCode.LOG_PAY_CLOSE) - .setRemark(String.format("取消支付返回金额 %.2f ", walletPayment.getAmount())) - .setOperationSource(WalletCode.OPERATION_SOURCE_SYSTEM) - .setBusinessId(walletPayment.getBusinessId()); - // save log - walletLogManager.save(walletLog); - }); - } - - /** - * 退款 - */ - @Transactional(rollbackFor = Exception.class) - public void refund(Long paymentId, BigDecimal amount) { - // 钱包支付记录 - WalletPayment walletPayment = walletPaymentManager.findByPaymentId(paymentId) - .orElseThrow(() -> new BizException("钱包支付记录不存在")); - // 获取钱包 - Wallet wallet = walletManager.findById(walletPayment.getWalletId()).orElseThrow(WalletNotExistsException::new); - walletManager.increaseBalance(wallet.getId(), amount); - - WalletLog walletLog = new WalletLog().setAmount(amount) - .setPaymentId(walletPayment.getPaymentId()) - .setWalletId(wallet.getId()) - .setUserId(wallet.getUserId()) - .setType(WalletCode.LOG_REFUND) - .setRemark(String.format("钱包退款金额 %.2f ", amount)) - .setOperationSource(WalletCode.OPERATION_SOURCE_ADMIN) - .setBusinessId(walletPayment.getBusinessId()); - // save log - walletLogManager.save(walletLog); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPaymentService.java deleted file mode 100644 index e04c23a0d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletPaymentService.java +++ /dev/null @@ -1,87 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletPaymentManager; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletPayment; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.Optional; - -/** - * 钱包交易记录的相关操作 - * - * @author xxm - * @date 2020/12/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WalletPaymentService { - - private final WalletPaymentManager walletPaymentManager; - - /** - * 保存钱包支付记录 - */ - public void savePayment(Payment payment, PayParam payParam, PayModeParam payMode, Wallet wallet) { - WalletPayment walletPayment = new WalletPayment().setWalletId(wallet.getId()); - walletPayment.setPaymentId(payment.getId()) - .setUserId(payment.getUserId()) - .setBusinessId(payParam.getBusinessId()) - .setAmount(payMode.getAmount()) - .setRefundableBalance(payMode.getAmount()) - .setPayStatus(payment.getPayStatus()); - walletPaymentManager.save(walletPayment); - } - - /** - * 更新成功状态 - */ - public void updateSuccess(Long paymentId) { - Optional payment = walletPaymentManager.findByPaymentId(paymentId); - if (payment.isPresent()) { - WalletPayment walletPayment = payment.get(); - walletPayment.setPayStatus(PayStatusCode.TRADE_SUCCESS).setPayTime(LocalDateTime.now()); - walletPaymentManager.updateById(walletPayment); - } - } - - /** - * 关闭操作 - */ - public void updateClose(Long paymentId) { - WalletPayment walletPayment = walletPaymentManager.findByPaymentId(paymentId) - .orElseThrow(() -> new BizException("未查询到查询交易记录")); - walletPayment.setPayStatus(PayStatusCode.TRADE_CANCEL); - walletPaymentManager.updateById(walletPayment); - } - - /** - * 更新退款 - */ - public void updateRefund(Long paymentId, BigDecimal amount) { - Optional walletPayment = walletPaymentManager.findByPaymentId(paymentId); - walletPayment.ifPresent(payment -> { - BigDecimal refundableBalance = payment.getRefundableBalance().subtract(amount); - payment.setRefundableBalance(refundableBalance); - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) == 0) { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - payment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - walletPaymentManager.updateById(payment); - }); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletQueryService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletQueryService.java deleted file mode 100644 index f363adde5..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletQueryService.java +++ /dev/null @@ -1,77 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.iam.core.user.service.UserQueryService; -import cn.bootx.iam.dto.user.UserInfoDto; -import cn.bootx.iam.param.user.UserInfoParam; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletManager; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.dto.paymodel.wallet.WalletDto; -import cn.bootx.payment.dto.paymodel.wallet.WalletInfoDto; -import cn.bootx.payment.param.paymodel.wallet.WalletPayParam; -import cn.bootx.starter.auth.util.SecurityUtil; -import cn.hutool.core.bean.BeanUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 钱包 - * - * @author xxm - * @date 2022/3/11 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WalletQueryService { - - private final WalletManager walletManager; - - private final UserQueryService userQueryService; - - /** - * 根据ID查询Wallet - */ - public WalletDto findById(Long walletId) { - return walletManager.findById(walletId).map(Wallet::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 根据用户ID查询钱包 - */ - public WalletDto findByUser() { - Long userId = SecurityUtil.getUserId(); - return walletManager.findByUser(userId).map(Wallet::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 获取钱包综合信息 - */ - public WalletInfoDto getWalletInfo(Long walletId) { - Wallet wallet = walletManager.findById(walletId).orElseThrow(DataNotExistException::new); - UserInfoDto userInfoDto = userQueryService.findById(wallet.getUserId()); - WalletInfoDto walletInfoDto = new WalletInfoDto(); - BeanUtil.copyProperties(wallet, walletInfoDto); - walletInfoDto.setUserName(userInfoDto.getName()); - return walletInfoDto; - } - - /** - * 查询用户 分页 - */ - public PageResult page(PageParam pageParam, WalletPayParam param) { - return MpUtil.convert2DtoPageResult(walletManager.page(pageParam, param)); - } - - /** - * 待开通钱包的用户列表 - */ - public PageResult pageByNotWallet(PageParam pageParam, UserInfoParam userInfoParam) { - return MpUtil.convert2DtoPageResult(walletManager.pageByNotWallet(pageParam, userInfoParam)); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletService.java deleted file mode 100644 index 5687c4773..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wallet/service/WalletService.java +++ /dev/null @@ -1,192 +0,0 @@ -package cn.bootx.payment.core.paymodel.wallet.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.paymodel.WalletCode; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletLogManager; -import cn.bootx.payment.core.paymodel.wallet.dao.WalletManager; -import cn.bootx.payment.core.paymodel.wallet.entity.Wallet; -import cn.bootx.payment.core.paymodel.wallet.entity.WalletLog; -import cn.bootx.payment.exception.waller.WalletBannedException; -import cn.bootx.payment.exception.waller.WalletLogError; -import cn.bootx.payment.exception.waller.WalletNotExistsException; -import cn.bootx.payment.param.paymodel.wallet.WalletRechargeParam; -import com.google.common.collect.Lists; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigDecimal; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 钱包的相关操作 - * - * @author xxm - * @date 2020/12/8 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WalletService { - - private final WalletManager walletManager; - - private final WalletLogManager walletLogManager; - - /** - * 开通操作 创建 - */ - @Transactional(rollbackFor = Exception.class) - public void createWallet(Long userId) { - // 判断钱包是否已开通 - if (walletManager.existsByUser(userId)) { - throw new BizException("钱包已经开通"); - } - Wallet wallet = new Wallet().setUserId(userId).setBalance(BigDecimal.ZERO).setStatus(WalletCode.STATUS_NORMAL); - walletManager.save(wallet); - // 激活 log - WalletLog activeLog = new WalletLog().setWalletId(wallet.getId()) - .setUserId(wallet.getUserId()) - .setType(WalletCode.LOG_ACTIVE) - .setRemark("激活钱包") - .setOperationSource(WalletCode.OPERATION_SOURCE_USER); - walletLogManager.save(activeLog); - } - - /** - * 批量开通 - */ - public void createWalletBatch(List userIds) { - // 查询出 - List existUserIds = walletManager.findExistUserIds(userIds); - userIds.removeAll(existUserIds); - List wallets = userIds.stream() - .map(userId -> new Wallet().setUserId(userId) - .setStatus(WalletCode.STATUS_NORMAL) - .setBalance(BigDecimal.ZERO)) - .collect(Collectors.toList()); - walletManager.saveAll(wallets); - List walletLogs = wallets.stream() - .map(wallet -> new WalletLog().setWalletId(wallet.getId()) - .setUserId(wallet.getUserId()) - .setAmount(BigDecimal.ZERO) - .setType(WalletCode.LOG_ACTIVE) - .setRemark("激活钱包") - .setOperationSource(WalletCode.OPERATION_SOURCE_USER)) - .collect(Collectors.toList()); - walletLogManager.saveAll(walletLogs); - } - - /** - * 锁定钱包 - */ - public void lock(Long walletId) { - walletManager.setUpStatus(walletId, WalletCode.STATUS_FORBIDDEN); - } - - /** - * 解锁钱包 - */ - public void unlock(Long walletId) { - walletManager.setUpStatus(walletId, WalletCode.STATUS_NORMAL); - } - - /** - * 充值操作 也可以扣款 - */ - @Transactional(rollbackFor = Exception.class) - public void changerBalance(WalletRechargeParam param) { - if (BigDecimalUtil.compareTo(param.getAmount(), BigDecimal.ZERO) == 1) { - walletManager.increaseBalance(param.getWalletId(), param.getAmount()); - } - else if (BigDecimalUtil.compareTo(param.getAmount(), BigDecimal.ZERO) == -1) { - walletManager.reduceBalanceUnlimited(param.getWalletId(), param.getAmount()); - } - else { - return; - } - Wallet wallet = walletManager.findById(param.getWalletId()).orElseThrow(DataNotExistException::new); - WalletLog walletLog = new WalletLog().setAmount(param.getAmount()) - .setWalletId(wallet.getId()) - .setType(WalletCode.LOG_ADMIN_CHANGER) - .setUserId(wallet.getUserId()) - .setRemark(String.format("系统变动余额 %.2f ", param.getAmount())) - .setOperationSource(WalletCode.OPERATION_SOURCE_ADMIN); - walletLogManager.save(walletLog); - } - - /** - * 根据支付单对钱包充值的余额进行扣减 - */ - @Transactional(rollbackFor = Exception.class) - public void deductedBalanceByPaymentId(Long paymentId, Long orderId, String remark, Boolean isThrowError) { - - // 根据支付记录ID查询交易的金额和交易的钱包ID - WalletLog walletLog = walletLogManager.findFirstByPayment(paymentId).orElseThrow(DataNotExistException::new); - if (walletLog == null) { - return; - } - - // 充值类型 - List chargeLogType = Lists.newArrayList(WalletCode.LOG_RECHARGE, WalletCode.LOG_AUTO_RECHARGE, - WalletCode.LOG_ADMIN_CHANGER); - - // 保证是充值类型 且充值金额大于0 - if (!chargeLogType.contains(walletLog.getType()) - || BigDecimalUtil.compareTo(walletLog.getAmount(), BigDecimal.ZERO) < 0) { - log.warn("退款 发现非充值交易,日志ID:{},交易类型:{}", walletLog.getId(), walletLog.getType()); - if (isThrowError) { - throw new WalletLogError(); - } - return; - } - - // 获取钱包ID 并扣减对应金额(允许扣成负数) - walletManager.reduceBalanceUnlimited(walletLog.getWalletId(), walletLog.getAmount()); - - // 记录日志 - WalletLog log = new WalletLog().setWalletId(walletLog.getWalletId()) - .setUserId(walletLog.getUserId()) - .setPaymentId(paymentId) - .setAmount(walletLog.getAmount()) - .setType(WalletCode.LOG_SYSTEM_REDUCE_BALANCE) - .setRemark(String.format("系统减少余额 %.2f (" + remark + ")", walletLog.getAmount())) - .setOperationSource(WalletCode.OPERATION_SOURCE_SYSTEM) - .setPaymentId(paymentId) - .setBusinessId(String.valueOf(orderId)); - walletLogManager.save(log); - - } - - /** - * 查询钱包,如果钱包不存在或者钱包被禁用将抛出异常 - */ - public Wallet getNormalWalletById(Long walletId) { - // 查询Wallet - Wallet wallet = walletManager.findById(walletId).orElseThrow(WalletNotExistsException::new); - // 是否被禁用 - if (Objects.equals(WalletCode.STATUS_FORBIDDEN, wallet.getStatus())) { - throw new WalletBannedException(); - } - return wallet; - } - - /** - * 查询钱包,如果钱包不存在或者钱包被禁用将抛出异常 - */ - public Wallet getNormalWalletByUserId(Long userId) { - // 查询Wallet - Wallet wallet = walletManager.findByUser(userId).orElseThrow(WalletNotExistsException::new); - // 是否被禁用 - if (Objects.equals(WalletCode.STATUS_FORBIDDEN, wallet.getStatus())) { - throw new WalletBannedException(); - } - return wallet; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/convert/WeChatConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/convert/WeChatConvert.java deleted file mode 100644 index d60a32523..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/convert/WeChatConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.convert; - -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPayConfigDto; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPaymentDto; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayConfigParam; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 微信转换类 - * - * @author xxm - * @date 2021/6/21 - */ -@Mapper -public interface WeChatConvert { - - WeChatConvert CONVERT = Mappers.getMapper(WeChatConvert.class); - - WeChatPayConfig convert(WeChatPayConfigParam in); - - WeChatPayConfigDto convert(WeChatPayConfig in); - - WeChatPaymentDto convert(WeChatPayment in); - - WeChatPayment convert(WeChatPaymentDto in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigManager.java deleted file mode 100644 index 0ff511741..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigManager.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayConfigParam; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Objects; -import java.util.Optional; - -/** - * 微信支付配置 - * - * @author xxm - * @date 2021/3/19 - */ -@Repository -@RequiredArgsConstructor -public class WeChatPayConfigManager extends BaseManager { - - private Optional weChatPayConfig; - - @Override - public WeChatPayConfig saveOrUpdate(WeChatPayConfig entity) { - this.clearCache(); - return super.saveOrUpdate(entity); - } - - @Override - public WeChatPayConfig updateById(WeChatPayConfig weChatPayConfig) { - this.clearCache(); - return super.updateById(weChatPayConfig); - } - - /** - * 获取启用的微信配置 - */ - public Optional findActivity() { - if (Objects.isNull(weChatPayConfig)) { - weChatPayConfig = findByField(WeChatPayConfig::getActivity, Boolean.TRUE); - } - return weChatPayConfig; - } - - /** - * 分页 - */ - public Page page(PageParam pageParam, WeChatPayConfigParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, WeChatPayConfig.class); - return lambdaQuery().select(WeChatPayConfig.class, MpUtil::excludeBigField) - .like(StrUtil.isNotBlank(param.getName()), WeChatPayConfig::getName, param.getName()) - .like(StrUtil.isNotBlank(param.getAppId()), WeChatPayConfig::getAppId, param.getAppId()) - .like(StrUtil.isNotBlank(param.getAppId()), WeChatPayConfig::getMchId, param.getMchId()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - - /** - * 清除所有的被启用的 - */ - public void removeAllActivity() { - this.clearCache(); - lambdaUpdate().eq(WeChatPayConfig::getActivity, Boolean.TRUE).set(WeChatPayConfig::getActivity, Boolean.FALSE); - } - - /** - * 清除缓存 - */ - public void clearCache() { - weChatPayConfig = null; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigMapper.java deleted file mode 100644 index e6ed35e0c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPayConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.dao; - -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 微信支付配置 - * - * @author xxm - * @date 2021/3/19 - */ -@Mapper -public interface WeChatPayConfigMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentManager.java deleted file mode 100644 index cc90437b6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 微信支付记录 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class WeChatPaymentManager extends BaseManager { - - public Optional findByPaymentId(Long paymentId) { - return findByField(WeChatPayment::getPaymentId, paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentMapper.java deleted file mode 100644 index 1e329955f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/dao/WeChatPaymentMapper.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.dao; - -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface WeChatPaymentMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayConfig.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayConfig.java deleted file mode 100644 index 6c4aa5ebc..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayConfig.java +++ /dev/null @@ -1,122 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.entity; - -import cn.bootx.common.core.annotation.BigField; -import cn.bootx.common.core.annotation.EncryptionField; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.payment.core.paymodel.wechat.convert.WeChatConvert; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPayConfigDto; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayConfigParam; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.annotation.FieldStrategy; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 微信支付 - * - * @author xxm - * @date 2021/3/1 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_wechat_pay_config") -public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction { - - /** 名称 */ - private String name; - - /** 微信商户号 */ - private String mchId; - - /** 微信应用appId */ - private String appId; - - /** - * api版本 - * @see cn.bootx.payment.code.paymodel.WeChatPayCode#API_V2 - */ - private String apiVersion; - - /** 商户平台「API安全」中的 APIv2 密钥 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @EncryptionField - private String apiKeyV2; - - /** 商户平台「API安全」中的 APIv3 密钥 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @EncryptionField - private String apiKeyV3; - - /** APPID对应的接口密码,用于获取微信公众号jsapi支付时使用 */ - @EncryptionField - private String appSecret; - - /** API 证书中的 p12 文件存储的 id */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @EncryptionField - private Long p12; - - /** API 证书中的 cert.pem 证书 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @BigField - @EncryptionField - private String certPem; - - /** API 证书中的 key.pem 私钥 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - @BigField - @EncryptionField - private String keyPem; - - /** 应用域名,回调中会使用此参数 */ - private String domain; - - /** 服务器异步通知页面路径 通知url必须为直接可访问的url,不能携带参数。公网域名必须为https */ - private String notifyUrl; - - /** 页面跳转同步通知页面路径 */ - private String returnUrl; - - /** 是否沙箱环境 */ - private boolean sandbox; - - /** 超时时间(分钟) */ - private Integer expireTime; - - /** 可用支付方式 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) - private String payWays; - - /** 是否启用 */ - private Boolean activity; - - /** 状态 */ - private Integer state; - - /** 备注 */ - private String remark; - - @Override - public WeChatPayConfigDto toDto() { - WeChatPayConfigDto convert = WeChatConvert.CONVERT.convert(this); - if (StrUtil.isNotBlank(this.getPayWays())) { - convert.setPayWayList(StrUtil.split(this.getPayWays(), ',')); - } - return convert; - } - - public static WeChatPayConfig init(WeChatPayConfigParam in) { - WeChatPayConfig convert = WeChatConvert.CONVERT.convert(in); - if (CollUtil.isNotEmpty(in.getPayWayList())) { - convert.setPayWays(String.join(",", in.getPayWayList())); - } - return convert; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayment.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayment.java deleted file mode 100644 index ef55b4663..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/entity/WeChatPayment.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.payment.core.paymodel.base.entity.BasePayment; -import cn.bootx.payment.core.paymodel.wechat.convert.WeChatConvert; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPaymentDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2021/6/21 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("pay_wechat_payment") -public class WeChatPayment extends BasePayment implements EntityBaseFunction { - - /** - * 微信交易号 - */ - private String tradeNo; - - @Override - public WeChatPaymentDto toDto() { - return WeChatConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCallbackService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCallbackService.java deleted file mode 100644 index 126224f08..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCallbackService.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.redis.RedisClient; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.core.notify.dao.PayNotifyRecordManager; -import cn.bootx.payment.core.pay.func.AbsPayCallbackStrategy; -import cn.bootx.payment.core.pay.service.PayCallbackService; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPayConfigManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import com.ijpay.core.enums.SignType; -import com.ijpay.core.kit.WxPayKit; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; - -import static cn.bootx.payment.code.paymodel.WeChatPayCode.APPID; - -/** - * 微信支付回调 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@Service -public class WeChatPayCallbackService extends AbsPayCallbackStrategy { - - private final WeChatPayConfigManager weChatPayConfigManager; - - public WeChatPayCallbackService(RedisClient redisClient, PayNotifyRecordManager payNotifyRecordManager, - PayCallbackService payCallbackService, WeChatPayConfigManager weChatPayConfigManager) { - super(redisClient, payNotifyRecordManager, payCallbackService); - this.weChatPayConfigManager = weChatPayConfigManager; - } - - @Override - public int getPayChannel() { - return PayChannelCode.WECHAT; - } - - /** - * 获取支付单id - */ - @Override - public Long getPaymentId() { - Map params = PARAMS.get(); - String paymentId = params.get(WeChatPayCode.OUT_TRADE_NO); - return Long.valueOf(paymentId); - } - - /** - * 获取支付状态 - */ - @Override - public int getTradeStatus() { - Map params = PARAMS.get(); - if (WxPayKit.codeIsOk(params.get(WeChatPayCode.RESULT_CODE))) { - return PayStatusCode.NOTIFY_TRADE_SUCCESS; - } - else { - return PayStatusCode.NOTIFY_TRADE_FAIL; - } - } - - /** - * 验证回调消息 - */ - @Override - public boolean verifyNotify() { - Map params = PARAMS.get(); - String callReq = JSONUtil.toJsonStr(params); - log.info("微信发起回调 报文: {}", callReq); - String appId = params.get(APPID); - - if (StrUtil.isBlank(appId)) { - log.warn("微信回调报文 appId 为空 {}", callReq); - return false; - } - // - WeChatPayConfig weChatPayConfig = weChatPayConfigManager.findActivity().orElseThrow(DataNotExistException::new); - if (weChatPayConfig == null) { - log.warn("微信支付配置不存在: {}", callReq); - return false; - } - return WxPayKit.verifyNotify(params, weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256, null); - } - - @Override - public String getReturnMsg() { - Map xml = new HashMap<>(4); - xml.put(WeChatPayCode.RETURN_CODE, "SUCCESS"); - xml.put(WeChatPayCode.RETURN_MSG, "OK"); - return WxPayKit.toXml(xml); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCancelService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCancelService.java deleted file mode 100644 index 39a343c57..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayCancelService.java +++ /dev/null @@ -1,105 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.common.spring.exception.RetryableException; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.core.pay.local.AsyncRefundLocal; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.starter.file.service.FileUploadService; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import com.ijpay.core.enums.SignType; -import com.ijpay.core.kit.WxPayKit; -import com.ijpay.wxpay.WxPayApi; -import com.ijpay.wxpay.model.CloseOrderModel; -import com.ijpay.wxpay.model.RefundModel; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Retryable; -import org.springframework.stereotype.Service; - -import java.io.ByteArrayInputStream; -import java.math.BigDecimal; -import java.util.Map; -import java.util.Optional; - -/** - * 微信支付关闭和退款 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatPayCancelService { - - private final FileUploadService uploadService; - - /** - * 关闭支付 - */ - @Retryable(value = RetryableException.class) - public void cancelRemote(Payment payment, WeChatPayConfig weChatPayConfig) { - // 只有部分需要调用微信网关进行关闭 - Map params = CloseOrderModel.builder() - .appid(weChatPayConfig.getAppId()) - .mch_id(weChatPayConfig.getMchId()) - .out_trade_no(String.valueOf(payment.getId())) - .nonce_str(WxPayKit.generateStr()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - String xmlResult = WxPayApi.closeOrder(params); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - } - - /** - * 退款 - */ - public void refund(Payment payment, WeChatPayment weChatPayment, BigDecimal amount, - WeChatPayConfig weChatPayConfig) { - String totalFee = weChatPayment.getAmount().multiply(BigDecimal.valueOf(100)).toBigInteger().toString(); - String refundFee = amount.multiply(BigDecimal.valueOf(100)).toBigInteger().toString(); - // 设置退款号 - AsyncRefundLocal.set(IdUtil.getSnowflakeNextIdStr()); - Map params = RefundModel.builder() - .appid(weChatPayConfig.getAppId()) - .mch_id(weChatPayConfig.getMchId()) - .out_trade_no(String.valueOf(payment.getId())) - .out_refund_no(AsyncRefundLocal.get()) - .total_fee(totalFee) - .refund_fee(refundFee) - .nonce_str(WxPayKit.generateStr()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - // 获取证书文件流 - byte[] fileBytes = uploadService.getFileBytes(weChatPayConfig.getP12()); - ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes); - // 证书密码为 微信商户号 - String xmlResult = WxPayApi.orderRefund(false, params, inputStream, weChatPayConfig.getMchId()); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - } - - /** - * 验证错误信息 - */ - private void verifyErrorMsg(Map result) { - String returnCode = result.get(WeChatPayCode.RETURN_CODE); - String resultCode = result.get(WeChatPayCode.RESULT_CODE); - if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) { - String errorMsg = result.get(WeChatPayCode.ERR_CODE_DES); - if (StrUtil.isBlank(errorMsg)) { - errorMsg = result.get(WeChatPayCode.RETURN_MSG); - } - log.error("订单退款/关闭失败 {}", errorMsg); - AsyncRefundLocal.setErrorMsg(errorMsg); - AsyncRefundLocal.setErrorCode(Optional.ofNullable(resultCode).orElse(returnCode)); - throw new PayFailureException(errorMsg); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayConfigService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayConfigService.java deleted file mode 100644 index 7342e4a13..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayConfigService.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.dto.KeyValue; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.code.paymodel.WeChatPayWay; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPayConfigManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.dto.paymodel.wechat.WeChatPayConfigDto; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayConfigParam; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 微信支付配置 - * - * @author xxm - * @date 2021/3/5 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatPayConfigService { - - private final WeChatPayConfigManager weChatPayConfigManager; - - /** - * 添加微信支付配置 - */ - @Transactional(rollbackFor = Exception.class) - public void add(WeChatPayConfigParam param) { - WeChatPayConfig weChatPayConfig = WeChatPayConfig.init(param); - weChatPayConfig.setActivity(false); - weChatPayConfigManager.save(weChatPayConfig); - } - - /** - * 修改 - */ - @Transactional(rollbackFor = Exception.class) - public void update(WeChatPayConfigParam param) { - WeChatPayConfig weChatPayConfig = weChatPayConfigManager.findById(param.getId()) - .orElseThrow(() -> new PayFailureException("微信支付配置不存在")); - param.setActivity(null); - BeanUtil.copyProperties(param, weChatPayConfig, CopyOptions.create().ignoreNullValue()); - // 支付方式 - if (CollUtil.isNotEmpty(param.getPayWayList())) { - weChatPayConfig.setPayWays(String.join(",", param.getPayWayList())); - } - else { - weChatPayConfig.setPayWays(null); - } - weChatPayConfigManager.updateById(weChatPayConfig); - } - - /** - * 分页 - */ - public PageResult page(PageParam pageParam, WeChatPayConfigParam param) { - return MpUtil.convert2DtoPageResult(weChatPayConfigManager.page(pageParam, param)); - } - - /** - * 设置启用的支付宝配置 - */ - @Transactional(rollbackFor = Exception.class) - public void setUpActivity(Long id) { - WeChatPayConfig weChatPayConfig = weChatPayConfigManager.findById(id) - .orElseThrow(() -> new PayFailureException("微信支付配置不存在")); - if (Objects.equals(weChatPayConfig.getActivity(), Boolean.TRUE)) { - return; - } - weChatPayConfigManager.removeAllActivity(); - weChatPayConfig.setActivity(true); - weChatPayConfigManager.updateById(weChatPayConfig); - } - - /** - * 清除启用状态 - */ - @Transactional(rollbackFor = Exception.class) - public void clearActivity(Long id) { - WeChatPayConfig weChatPayConfig = weChatPayConfigManager.findById(id) - .orElseThrow(() -> new PayFailureException("微信支付配置不存在")); - if (Objects.equals(weChatPayConfig.getActivity(), Boolean.TRUE)) { - return; - } - weChatPayConfig.setActivity(false); - weChatPayConfigManager.updateById(weChatPayConfig); - } - - /** - * 获取 - */ - public WeChatPayConfigDto findById(Long id) { - return weChatPayConfigManager.findById(id).map(WeChatPayConfig::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 微信支持支付方式 - */ - public List findPayWayList() { - return WeChatPayWay.getPayWays() - .stream() - .map(e -> new KeyValue(e.getCode(), e.getName())) - .collect(Collectors.toList()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayService.java deleted file mode 100644 index 41d22f6e6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPayService.java +++ /dev/null @@ -1,275 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.common.spring.exception.RetryableException; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.code.pay.PayWayCode; -import cn.bootx.payment.code.pay.PayWayEnum; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.code.paymodel.WeChatPayWay; -import cn.bootx.payment.core.pay.local.AsyncPayInfoLocal; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.pay.service.PaySyncService; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import cn.bootx.payment.dto.pay.AsyncPayInfo; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayParam; -import cn.bootx.payment.util.PayModelUtil; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.net.NetUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.spring.SpringUtil; -import com.ijpay.core.enums.SignType; -import com.ijpay.core.enums.TradeType; -import com.ijpay.core.kit.WxPayKit; -import com.ijpay.wxpay.WxPayApi; -import com.ijpay.wxpay.model.MicroPayModel; -import com.ijpay.wxpay.model.UnifiedOrderModel; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Backoff; -import org.springframework.retry.annotation.Retryable; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.*; - -import static cn.bootx.payment.code.pay.PaySyncStatus.WAIT_BUYER_PAY; - -/** - * 微信支付 - * - * @author xxm - * @date 2021/3/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatPayService { - - private final PaySyncService paySyncService; - - private final WeChatPaySyncService weChatPaySyncService; - - /** - * 校验 - */ - public void validation(PayModeParam payModeParam, WeChatPayConfig weChatPayConfig) { - List payWays = Optional.ofNullable(weChatPayConfig.getPayWays()) - .filter(StrUtil::isNotBlank) - .map(s -> StrUtil.split(s, ',')) - .orElse(new ArrayList<>(1)); - - PayWayEnum payWayEnum = Optional.ofNullable(WeChatPayWay.findByNo(payModeParam.getPayWay())) - .orElseThrow(() -> new PayFailureException("非法的微信支付类型")); - if (!payWays.contains(payWayEnum.getCode())) { - throw new PayFailureException("该微信支付方式不可用"); - } - } - - /** - * 支付 - */ - public void pay(BigDecimal amount, Payment payment, WeChatPayParam weChatPayParam, PayModeParam payModeParam, - WeChatPayConfig weChatPayConfig) { - // 微信传入的是分, 将元转换为分 - String totalFee = String.valueOf(amount.multiply(new BigDecimal(100)).longValue()); - AsyncPayInfo asyncPayInfo = Optional.ofNullable(AsyncPayInfoLocal.get()).orElse(new AsyncPayInfo()); - String payBody = null; - - // wap支付 - if (payModeParam.getPayWay() == PayWayCode.WAP) { - payBody = this.wapPay(totalFee, payment, weChatPayConfig); - } - // APP支付 - else if (payModeParam.getPayWay() == PayWayCode.APP) { - payBody = this.appPay(totalFee, payment, weChatPayConfig); - } - // 微信公众号支付或者小程序支付 - else if (payModeParam.getPayWay() == PayWayCode.JSAPI) { - payBody = this.jsPay(totalFee, payment, weChatPayParam.getOpenId(), weChatPayConfig); - } - // 二维码支付 - else if (payModeParam.getPayWay() == PayWayCode.QRCODE) { - payBody = this.qrCodePay(totalFee, payment, weChatPayConfig); - } - // 付款码支付 - else if (payModeParam.getPayWay() == PayWayCode.BARCODE) { - String tradeNo = this.barCode(totalFee, payment, weChatPayParam.getAuthCode(), weChatPayConfig); - asyncPayInfo.setTradeNo(tradeNo).setExpiredTime(false); - } - asyncPayInfo.setPayBody(payBody); - AsyncPayInfoLocal.set(asyncPayInfo); - } - - /** - * wap支付 - */ - private String wapPay(String amount, Payment payment, WeChatPayConfig weChatPayConfig) { - Map params = this.buildParams(amount, payment, weChatPayConfig, TradeType.MWEB.getTradeType()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - - String xmlResult = WxPayApi.pushOrder(false, params); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - return result.get(WeChatPayCode.MWEB_URL); - } - - /** - * 程序支付 - */ - private String appPay(String amount, Payment payment, WeChatPayConfig weChatPayConfig) { - Map params = this.buildParams(amount, payment, weChatPayConfig, TradeType.APP.getTradeType()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - - String xmlResult = WxPayApi.pushOrder(false, params); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - return result.get(WeChatPayCode.PREPAY_ID); - } - - /** - * 微信公众号支付或者小程序支付 - */ - private String jsPay(String amount, Payment payment, String openId, WeChatPayConfig weChatPayConfig) { - Map params = this.buildParams(amount, payment, weChatPayConfig, TradeType.JSAPI.getTradeType()) - .openid(openId) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - - String xmlResult = WxPayApi.pushOrder(false, params); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - return result.get(WeChatPayCode.PREPAY_ID); - } - - /** - * 二维码支付 - */ - private String qrCodePay(String amount, Payment payment, WeChatPayConfig weChatPayConfig) { - - Map params = this.buildParams(amount, payment, weChatPayConfig, TradeType.NATIVE.getTradeType()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - - String xmlResult = WxPayApi.pushOrder(false, params); - Map result = WxPayKit.xmlToMap(xmlResult); - this.verifyErrorMsg(result); - return result.get(WeChatPayCode.CODE_URL); - } - - /** - * 付款码支付 - */ - private String barCode(String amount, Payment payment, String authCode, WeChatPayConfig weChatPayConfig) { - Map params = MicroPayModel.builder() - .appid(weChatPayConfig.getAppId()) - .mch_id(weChatPayConfig.getMchId()) - .nonce_str(WxPayKit.generateStr()) - .body(payment.getTitle()) - .auth_code(authCode) - .out_trade_no(String.valueOf(payment.getId())) - .total_fee(amount) - .spbill_create_ip(NetUtil.getLocalhostStr()) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - - String xmlResult = WxPayApi.microPay(false, params); - Map result = WxPayKit.xmlToMap(xmlResult); - - String returnCode = result.get(WeChatPayCode.RETURN_CODE); - // 支付失败 - if (!WxPayKit.codeIsOk(returnCode)) { - String errorMsg = result.get(WeChatPayCode.ERR_CODE_DES); - throw new PayFailureException(errorMsg); - } - - String resultCode = result.get(WeChatPayCode.RESULT_CODE); - String errCode = result.get(WeChatPayCode.ERR_CODE); - // 支付成功处理 - if (Objects.equals(resultCode, WeChatPayCode.TRADE_SUCCESS)) { - payment.setPayStatus(PayStatusCode.TRADE_SUCCESS).setPayTime(LocalDateTime.now()); - return result.get(WeChatPayCode.TRANSACTION_ID); - } - // 支付中, 发起轮训同步 - if (Objects.equals(resultCode, WeChatPayCode.TRADE_FAIL) - && Objects.equals(errCode, WeChatPayCode.TRADE_USERPAYING)) { - SpringUtil.getBean(this.getClass()).rotationSync(payment, weChatPayConfig); - return result.get(WeChatPayCode.TRANSACTION_ID); - } - - // 支付撤销 - if (Objects.equals(resultCode, WeChatPayCode.TRADE_REVOKED)) { - throw new PayFailureException("用户已撤销支付"); - } - - // 支付失败 - if (Objects.equals(resultCode, WeChatPayCode.TRADE_PAYERROR) - || Objects.equals(resultCode, WeChatPayCode.TRADE_FAIL)) { - String errorMsg = result.get(WeChatPayCode.ERR_CODE_DES); - throw new PayFailureException(errorMsg); - } - return null; - } - - /** - * 构建参数 - */ - private UnifiedOrderModel.UnifiedOrderModelBuilder buildParams(String amount, Payment payment, - WeChatPayConfig weChatPayConfig, String tradeType) { - // 过期时间 - payment.setExpiredTime(PayModelUtil.getPaymentExpiredTime(weChatPayConfig.getExpireTime())); - return UnifiedOrderModel.builder() - .appid(weChatPayConfig.getAppId()) - .mch_id(weChatPayConfig.getMchId()) - .nonce_str(WxPayKit.generateStr()) - .time_start(LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN)) - // 反正v2版本的超时时间无效 - .time_expire(PayModelUtil.getWxExpiredTime(weChatPayConfig.getExpireTime())) - .body(payment.getTitle()) - .out_trade_no(String.valueOf(payment.getId())) - .total_fee(amount) - .spbill_create_ip(NetUtil.getLocalhostStr()) - .notify_url(weChatPayConfig.getNotifyUrl()) - .trade_type(tradeType); - } - - /** - * 验证错误信息 - */ - private void verifyErrorMsg(Map result) { - String returnCode = result.get(WeChatPayCode.RETURN_CODE); - String resultCode = result.get(WeChatPayCode.RESULT_CODE); - if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) { - String errorMsg = result.get(WeChatPayCode.ERR_CODE_DES); - if (StrUtil.isBlank(errorMsg)) { - errorMsg = result.get(WeChatPayCode.RETURN_MSG); - } - log.error("支付失败 {}", errorMsg); - throw new PayFailureException(errorMsg); - } - } - - /** - * 重试同步支付状态, 最多10次, 30秒不操作微信会自动关闭 - */ - @Async("bigExecutor") - @Retryable(value = RetryableException.class, maxAttempts = 10, backoff = @Backoff(value = 5000L)) - public void rotationSync(Payment payment, WeChatPayConfig weChatPayConfig) { - PaySyncResult paySyncResult = weChatPaySyncService.syncPayStatus(payment.getId(), weChatPayConfig); - // 不为支付中状态后, 调用系统同步更新状态, 支付状态则继续重试 - if (Objects.equals(WAIT_BUYER_PAY, paySyncResult.getPaySyncStatus())) { - throw new RetryableException(); - } - else { - paySyncService.syncPayment(payment); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaySyncService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaySyncService.java deleted file mode 100644 index 6fec45fcf..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaySyncService.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.payment.code.pay.PaySyncStatus; -import cn.bootx.payment.code.paymodel.WeChatPayCode; -import cn.bootx.payment.core.pay.result.PaySyncResult; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayConfig; -import com.ijpay.core.enums.SignType; -import com.ijpay.core.kit.WxPayKit; -import com.ijpay.wxpay.WxPayApi; -import com.ijpay.wxpay.model.UnifiedOrderModel; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.Map; -import java.util.Objects; - -/** - * 微信支付同步服务 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatPaySyncService { - - /** - * 同步查询 - */ - public PaySyncResult syncPayStatus(Long paymentId, WeChatPayConfig weChatPayConfig) { - PaySyncResult paySyncResult = new PaySyncResult().setPaySyncStatus(PaySyncStatus.FAIL); - Map params = UnifiedOrderModel.builder() - .appid(weChatPayConfig.getAppId()) - .mch_id(weChatPayConfig.getMchId()) - .nonce_str(WxPayKit.generateStr()) - .out_trade_no(String.valueOf(paymentId)) - .build() - .createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256); - try { - String xmlResult = WxPayApi.orderQuery(params); - Map result = WxPayKit.xmlToMap(xmlResult); - // 查询失败 - if (!WxPayKit.codeIsOk(result.get(WeChatPayCode.RETURN_CODE))) { - log.warn("查询微信订单失败:{}", result); - return paySyncResult; - } - - // 未查到订单 - if (!WxPayKit.codeIsOk(result.get(WeChatPayCode.RESULT_CODE))) { - log.warn("疑似未查询到订单:{}", result); - return paySyncResult.setPaySyncStatus(PaySyncStatus.NOT_FOUND); - } - String tradeStatus = result.get(WeChatPayCode.TRADE_STATE); - // 支付完成 - if (Objects.equals(tradeStatus, WeChatPayCode.TRADE_SUCCESS) - || Objects.equals(tradeStatus, WeChatPayCode.TRADE_ACCEPT)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.TRADE_SUCCESS).setMap(result); - } - // 待支付 - if (Objects.equals(tradeStatus, WeChatPayCode.TRADE_NOTPAY) - || Objects.equals(tradeStatus, WeChatPayCode.TRADE_USERPAYING)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.WAIT_BUYER_PAY); - } - - // 已退款/退款中 - if (Objects.equals(tradeStatus, WeChatPayCode.TRADE_REFUND)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.TRADE_REFUND); - } - // 已关闭 - if (Objects.equals(tradeStatus, WeChatPayCode.TRADE_CLOSED) - || Objects.equals(tradeStatus, WeChatPayCode.TRADE_REVOKED) - || Objects.equals(tradeStatus, WeChatPayCode.TRADE_PAYERROR)) { - return paySyncResult.setPaySyncStatus(PaySyncStatus.TRADE_CLOSED); - } - - } - catch (RuntimeException e) { - log.error("查询订单失败:", e); - } - return paySyncResult; - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaymentService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaymentService.java deleted file mode 100644 index 38bceb90b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/paymodel/wechat/service/WeChatPaymentService.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.bootx.payment.core.paymodel.wechat.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayStatusCode; -import cn.bootx.payment.core.pay.local.AsyncPayInfoLocal; -import cn.bootx.payment.core.payment.entity.Payment; -import cn.bootx.payment.core.payment.service.PaymentService; -import cn.bootx.payment.core.paymodel.wechat.dao.WeChatPaymentManager; -import cn.bootx.payment.core.paymodel.wechat.entity.WeChatPayment; -import cn.bootx.payment.dto.pay.AsyncPayInfo; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.param.pay.PayModeParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -/** - * 微信支付记录单 - * - * @author xxm - * @date 2021/6/21 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatPaymentService { - - private final PaymentService paymentService; - - private final WeChatPaymentManager weChatPaymentManager; - - /** - * 支付调起成功 更新 payment 中 异步支付类型信息 - */ - public void updatePaySuccess(Payment payment, PayModeParam payModeParam) { - AsyncPayInfo asyncPayInfo = AsyncPayInfoLocal.get(); - payment.setAsyncPayMode(true).setAsyncPayChannel(PayChannelCode.WECHAT); - - List payTypeInfos = payment.getPayChannelInfo(); - List refundableInfos = payment.getRefundableInfo(); - // 清除已有的异步支付类型信息 - payTypeInfos.removeIf(payTypeInfo -> PayChannelCode.ASYNC_TYPE.contains(payTypeInfo.getPayChannel())); - refundableInfos.removeIf(payTypeInfo -> PayChannelCode.ASYNC_TYPE.contains(payTypeInfo.getPayChannel())); - // 添加微信支付类型信息 - payTypeInfos.add(new PayChannelInfo().setPayChannel(PayChannelCode.WECHAT) - .setPayWay(payModeParam.getPayWay()) - .setAmount(payModeParam.getAmount()) - .setExtraParamsJson(payModeParam.getExtraParamsJson())); - payment.setPayChannelInfo(payTypeInfos); - // 更新微信可退款类型信息 - refundableInfos - .add(new RefundableInfo().setPayChannel(PayChannelCode.WECHAT).setAmount(payModeParam.getAmount())); - payment.setRefundableInfo(refundableInfos); - // 如果支付完成(付款码情况) 调用 updateSyncSuccess 创建微信支付记录 - if (Objects.equals(payment.getPayStatus(), PayStatusCode.TRADE_SUCCESS)) { - this.createWeChatPayment(payment, payModeParam, asyncPayInfo.getTradeNo()); - } - } - - /** - * 异步支付成功, 更新支付记录成功状态, 并创建微信支付记录 - */ - public void updateAsyncSuccess(Long id, PayModeParam payModeParam, String tradeNo) { - Payment payment = paymentService.findById(id).orElseThrow(() -> new BizException("支付记录不存在")); - this.createWeChatPayment(payment, payModeParam, tradeNo); - } - - /** - * 更新支付记录成功状态, 并创建微信支付记录 - */ - private void createWeChatPayment(Payment payment, PayModeParam payModeParam, String tradeNo) { - - // 创建微信支付记录 - WeChatPayment wechatPayment = new WeChatPayment(); - wechatPayment.setTradeNo(tradeNo) - .setPaymentId(payment.getId()) - .setAmount(payModeParam.getAmount()) - .setRefundableBalance(payModeParam.getAmount()) - .setBusinessId(payment.getBusinessId()) - .setUserId(payment.getUserId()) - .setPayStatus(PayStatusCode.TRADE_SUCCESS) - .setPayTime(LocalDateTime.now()); - weChatPaymentManager.save(wechatPayment); - } - - /** - * 取消状态 - */ - public void updateClose(Long paymentId) { - Optional weChatPaymentOptional = weChatPaymentManager.findByPaymentId(paymentId); - weChatPaymentOptional.ifPresent(weChatPayment -> { - weChatPayment.setPayStatus(PayStatusCode.TRADE_CANCEL); - weChatPaymentManager.updateById(weChatPayment); - }); - } - - /** - * 更新退款 - */ - public void updatePayRefund(WeChatPayment weChatPayment, BigDecimal amount) { - BigDecimal refundableBalance = weChatPayment.getRefundableBalance().subtract(amount); - weChatPayment.setRefundableBalance(refundableBalance); - if (BigDecimalUtil.compareTo(refundableBalance, BigDecimal.ZERO) == 0) { - weChatPayment.setPayStatus(PayStatusCode.TRADE_REFUNDED); - } - else { - weChatPayment.setPayStatus(PayStatusCode.TRADE_REFUNDING); - } - weChatPaymentManager.updateById(weChatPayment); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/convert/RefundConvert.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/convert/RefundConvert.java deleted file mode 100644 index bfba7702f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/convert/RefundConvert.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.core.refund.convert; - -import cn.bootx.payment.core.refund.entity.RefundRecord; -import cn.bootx.payment.dto.refund.RefundRecordDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * @author xxm - * @date 2022/3/2 - */ -@Mapper -public interface RefundConvert { - - RefundConvert CONVERT = Mappers.getMapper(RefundConvert.class); - - RefundRecordDto convert(RefundRecord in); - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordManager.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordManager.java deleted file mode 100644 index 7b6dbeac8..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.payment.core.refund.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.refund.entity.RefundRecord; -import cn.bootx.payment.dto.refund.RefundRecordDto; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Objects; - -/** - * @author xxm - * @date 2022/3/2 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class RefundRecordManager extends BaseManager { - - public Page page(PageParam pageParam, RefundRecordDto param) { - Page mpPage = MpUtil.getMpPage(pageParam, RefundRecord.class); - return lambdaQuery().orderByDesc(MpIdEntity::getId) - .like(Objects.nonNull(param.getPaymentId()), RefundRecord::getPaymentId, param.getPaymentId()) - .like(Objects.nonNull(param.getBusinessId()), RefundRecord::getBusinessId, param.getBusinessId()) - .like(Objects.nonNull(param.getTitle()), RefundRecord::getTitle, param.getTitle()) - .page(mpPage); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordMapper.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordMapper.java deleted file mode 100644 index 716b46724..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/dao/RefundRecordMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.payment.core.refund.dao; - -import cn.bootx.payment.core.refund.entity.RefundRecord; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2022/3/2 - */ -@Mapper -public interface RefundRecordMapper extends BaseMapper { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/entity/RefundRecord.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/entity/RefundRecord.java deleted file mode 100644 index ac37e19f6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/entity/RefundRecord.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.bootx.payment.core.refund.entity; - -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.common.mybatisplus.handler.JacksonRawTypeHandler; -import cn.bootx.payment.core.refund.convert.RefundConvert; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.dto.refund.RefundRecordDto; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; - -/** - * 退款记录 - * - * @author xxm - * @date 2022/3/2 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName(value = "pay_refund_record", autoResultMap = true) -public class RefundRecord extends MpBaseEntity implements EntityBaseFunction { - - /** 支付单号 */ - private Long paymentId; - - /** 关联的业务id */ - private String businessId; - - /** 异步方式关联退款请求号(部分退款情况) */ - private String refundRequestNo; - - /** 用户ID */ - private Long userId; - - /** 标题 */ - private String title; - - /** 退款金额 */ - private BigDecimal amount; - - /** 剩余可退 */ - private BigDecimal refundableBalance; - - /** 退款终端ip */ - private String clientIp; - - /** 退款时间 */ - private LocalDateTime refundTime; - - /** - * 退款信息列表 - */ - @TableField(typeHandler = JacksonRawTypeHandler.class) - private List refundableInfo; - - /** - * 退款状态 - * @see cn.bootx.payment.code.pay.PayStatusCode#REFUND_PROCESS_FAIL - */ - private int refundStatus; - - /** 错误码 */ - private String errorCode; - - /** 错误信息 */ - private String errorMsg; - - @Override - public RefundRecordDto toDto() { - return RefundConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/service/RefundRecordService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/service/RefundRecordService.java deleted file mode 100644 index 5fc8d3980..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/core/refund/service/RefundRecordService.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.payment.core.refund.service; - -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.payment.core.refund.dao.RefundRecordManager; -import cn.bootx.payment.core.refund.entity.RefundRecord; -import cn.bootx.payment.dto.refund.RefundRecordDto; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * 退款 - * - * @author xxm - * @date 2022/3/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class RefundRecordService { - - private final RefundRecordManager refundRecordManager; - - /** - * 分页查询 - */ - public PageResult page(PageParam pageParam, RefundRecordDto param) { - Page page = refundRecordManager.page(pageParam, param); - return MpUtil.convert2DtoPageResult(page); - } - - /** - * 根据id查询 - */ - public RefundRecordDto findById(Long id) { - return refundRecordManager.findById(id).map(RefundRecord::toDto).orElseThrow(DataNotExistException::new); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/notify/PayNotifyRecordDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/notify/PayNotifyRecordDto.java deleted file mode 100644 index e753c82fe..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/notify/PayNotifyRecordDto.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.payment.dto.notify; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2021/6/22 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "支付回调记录") -public class PayNotifyRecordDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -1241346974397068912L; - - @Schema(description = "支付号") - private Long paymentId; - - @Schema(description = "通知消息") - private String notifyInfo; - - @Schema(description = "支付通道") - private Integer payChannel; - - @Schema(description = "处理状态") - private Integer status; - - @Schema(description = "提示信息") - private String msg; - - @Schema(description = "回调时间") - private LocalDateTime notifyTime; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/AsyncPayInfo.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/AsyncPayInfo.java deleted file mode 100644 index ea9de401a..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/AsyncPayInfo.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.payment.dto.pay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/2/28 - */ -@Data -@Accessors(chain = true) -@Schema(title = "异步支付线程信息") -public class AsyncPayInfo implements Serializable { - - private static final long serialVersionUID = 8239742916705144905L; - - /** 支付参数体(通常用于发起支付的参数) */ - private String payBody; - - /** 第三方支付平台订单号(付款码支付直接成功时会出现) */ - private String tradeNo; - - /** 是否记录超时时间,默认记录 */ - private boolean expiredTime = true; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/PayResult.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/PayResult.java deleted file mode 100644 index 1bb79a5dc..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/pay/PayResult.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.payment.dto.pay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2020/12/9 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付返回信息") -public class PayResult implements Serializable { - - private static final long serialVersionUID = 7729669194741851195L; - - @Schema(description = "是否是异步支付") - private boolean asyncPayMode; - - @Schema(description = "异步支付通道") - private Integer asyncPayChannel; - - /** - * @see cn.bootx.payment.code.pay.PayStatusCode#TRADE_PROGRESS - */ - @Schema(description = "支付状态") - private int payStatus; - - @Schema(description = "异步支付参数") - private AsyncPayInfo asyncPayInfo; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelDto.java deleted file mode 100644 index e7d0e20b3..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelDto.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.payment.dto.payconfig; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.payment.code.pay.PayChannelEnum; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 支付通道 - * - * @author xxm - * @date 2021/6/30 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -public class PayChannelDto extends BaseDto implements Serializable { - - /** - * 通道代码(唯一) - * @see PayChannelEnum - */ - private String code; - - /** 名称 */ - private String name; - - /** 页面展示:卡片-图标 */ - private String icon; - - /** 页面展示:卡片-背景色 */ - private String bgColor; - - /** 状态 */ - private Integer state; - - /** 备注 */ - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelWayDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelWayDto.java deleted file mode 100644 index e7b98881b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payconfig/PayChannelWayDto.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.payment.dto.payconfig; - -import cn.bootx.common.core.rest.dto.BaseDto; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 支付通道支持的支付方式 - * - * @author xxm - * @date 2021/6/30 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -public class PayChannelWayDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = 4579797594767439540L; - - /** 支付方式代码 */ - private String code; - - /** 支付方式名称 */ - private String name; - - /** 通道id */ - private Long channelId; - - /** 通道code */ - private String channelCode; - - /** 备注 */ - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/BasePaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/BasePaymentDto.java deleted file mode 100644 index b9b269ff6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/BasePaymentDto.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.payment.dto.payment; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.payment.code.pay.PayStatusCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2021/2/25 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "具体支付日志基类") -public class BasePaymentDto extends BaseDto { - - @Schema(description = "支付id") - private Long paymentId; - - @Schema(description = "用户id") - private Long userId; - - @Schema(description = "关联的业务id") - private String businessId; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "可退款金额") - private BigDecimal refundableBalance; - - /** - * @see PayStatusCode - */ - @Schema(description = "支付状态") - private int payStatus; - - @Schema(description = "支付时间") - private LocalDateTime payTime; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PayChannelInfo.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PayChannelInfo.java deleted file mode 100644 index c751e4131..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PayChannelInfo.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.bootx.payment.dto.payment; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * @author xxm - * @date 2020/12/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付通道信息") -public class PayChannelInfo implements Serializable { - - private static final long serialVersionUID = -7757908686367215682L; - - @Schema(description = "支付通道") - private int payChannel; - - @Schema(description = "支付方式") - private int payWay; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "扩展参数的json字符串", hidden = true) - private String extraParamsJson; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PaymentDto.java deleted file mode 100644 index ed21fad5d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/PaymentDto.java +++ /dev/null @@ -1,86 +0,0 @@ -package cn.bootx.payment.dto.payment; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; - -/** - * @author xxm - * @date 2020/12/9 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "支付记录") -public class PaymentDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = 3269223993950227228L; - - @Schema(description = "用户ID") - private Long userId; - - @Schema(description = "关联的业务id") - private String businessId; - - @Schema(description = "标题") - private String title; - - @Schema(description = "描述") - private String description; - - @Schema(description = "是否是异步支付") - private boolean asyncPayMode; - - /** - * @see cn.bootx.payment.code.pay.PayChannelCode - */ - @Schema(description = "异步支付通道") - private Integer asyncPayChannel; - - /** - * @see cn.bootx.payment.code.pay.PayStatusCode - */ - @Schema(description = "支付状态") - private int payStatus; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "可退款余额") - private BigDecimal refundableBalance; - - @Schema(description = "错误码") - private String errorCode; - - @Schema(description = "错误信息") - private String errorMsg; - - /** - * @see PayChannelInfo - */ - @Schema(description = "支付通道信息") - private List payChannelInfo; - - /** - * @see RefundableInfo - */ - @Schema(description = "可退款信息列表") - private List refundableInfo; - - @Schema(description = "支付时间") - private LocalDateTime payTime; - - @Schema(description = "支付终端ip") - private String clientIp; - - @Schema(description = "过期时间") - private LocalDateTime expiredTime; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/RefundableInfo.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/RefundableInfo.java deleted file mode 100644 index c22bced7d..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/payment/RefundableInfo.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.dto.payment; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 可退款信息 - * - * @author xxm - * @date 2022/3/2 - */ -@Data -@Accessors(chain = true) -@Schema(title = "可退款信息") -public class RefundableInfo { - - @Schema(description = "支付通道") - private int payChannel; - - @Schema(description = "金额") - private BigDecimal amount; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AliPaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AliPaymentDto.java deleted file mode 100644 index 9f38858e0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AliPaymentDto.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.dto.paymodel.alipay; - -import cn.bootx.payment.dto.payment.BasePaymentDto; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/2/27 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "支付宝支付记录") -public class AliPaymentDto extends BasePaymentDto implements Serializable { - - private static final long serialVersionUID = 6883103229754466130L; - - @Schema(description = "支付宝交易号") - private String tradeNo; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AlipayConfigDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AlipayConfigDto.java deleted file mode 100644 index f67e8b8bd..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/alipay/AlipayConfigDto.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.bootx.payment.dto.paymodel.alipay; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * @author xxm - * @date 2021/2/26 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "支付宝配置") -public class AlipayConfigDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = 6641158663606363171L; - - @Schema(description = "名称") - private String name; - - @Schema(description = "支付宝商户appId") - @SensitiveInfo - private String appId; - - @Schema(description = "服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问") - private String notifyUrl; - - @Schema(description = "页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址") - private String returnUrl; - - @Schema(description = "请求网关地址") - private String serverUrl; - - @Schema(description = "认证类型 证书/公钥") - private Integer authType; - - @Schema(description = "签名类型") - private String signType; - - @Schema(description = "支付宝公钥") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String alipayPublicKey; - - @Schema(description = "私钥") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String privateKey; - - @Schema(description = "应用公钥证书") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String appCert; - - @Schema(description = "支付宝公钥证书文件") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String alipayCert; - - @Schema(description = "支付宝CA根证书文件") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String alipayRootCert; - - @Schema(description = "超时配置") - private Integer expireTime; - - @Schema(description = "可用支付方式") - private List payWayList; - - @Schema(description = "是否沙箱环境") - private boolean sandbox; - - @Schema(description = "是否启用") - private Boolean activity; - - @Schema(description = "状态") - private Integer state; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/union/UnionPayConfigDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/union/UnionPayConfigDto.java deleted file mode 100644 index bf4986178..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/union/UnionPayConfigDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.dto.paymodel.union; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2022/3/11 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "云闪付配置") -public class UnionPayConfigDto extends BaseDto { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherDto.java deleted file mode 100644 index 6a85a1e34..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherDto.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.bootx.payment.dto.paymodel.voucher; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2022/3/14 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "储值卡") -public class VoucherDto extends BaseDto { - - @Schema(description = "卡号") - private String cardNo; - - @Schema(description = "生成批次号") - private Long batchNo; - - @Schema(description = "面值") - private BigDecimal faceValue; - - @Schema(description = "余额") - private BigDecimal balance; - - @Schema(description = "是否长期有效") - private Boolean enduring; - - @Schema(description = "开始时间") - private LocalDateTime startTime; - - @Schema(description = "结束时间") - private LocalDateTime endTime; - - /** - * @see cn.bootx.payment.code.paymodel.VoucherCode - */ - @Schema(description = "状态") - private Integer status; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherPaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherPaymentDto.java deleted file mode 100644 index 615ff2d6f..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/voucher/VoucherPaymentDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.payment.dto.paymodel.voucher; - -import cn.bootx.payment.dto.payment.BasePaymentDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2022/3/14 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "储值卡支付记录") -public class VoucherPaymentDto extends BasePaymentDto { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletDto.java deleted file mode 100644 index 799c9f584..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletDto.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wallet; - -import cn.bootx.common.core.rest.dto.BaseDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钱包") -public class WalletDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -1563719305334334625L; - - @Schema(description = "ID,钱包的唯一标识") - private Long id; - - @Schema(description = "钱包关联的账号ID") - private Long userId; - - @Schema(description = "钱包余额") - private BigDecimal balance; - - @Schema(description = "状态 1启用 2禁用") - private Integer status; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletInfoDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletInfoDto.java deleted file mode 100644 index 0d9304b02..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletInfoDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wallet; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 钱包综合信息 - * - * @author xxm - * @date 2022/3/13 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钱包综合信息") -public class WalletInfoDto extends WalletDto { - - @Schema(description = "钱包关联的账号名称") - private String userName; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletLogDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletLogDto.java deleted file mode 100644 index 29fd44a51..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletLogDto.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wallet; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.payment.code.paymodel.WalletCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钱包日志") -public class WalletLogDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -2553004953931903738L; - - @Schema(description = "钱包ID") - private Long walletId; - - @Schema(description = "用户ID") - private Long userId; - - /** - * @see WalletCode - */ - @Schema(description = "类型") - private Integer type; - - @Schema(description = "交易记录ID") - private Long paymentId; - - @Schema(description = "备注") - private String remark; - - @Schema(description = "业务ID") - private String businessId; - - /** - * @see WalletCode - */ - @Schema(description = " 1 系统操作 2管理员操作 3用户操作") - private Integer operationSource; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "创建时间") - private LocalDateTime createTime; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletPaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletPaymentDto.java deleted file mode 100644 index d6ed735bc..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wallet/WalletPaymentDto.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wallet; - -import cn.bootx.payment.dto.payment.BasePaymentDto; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2020/12/8 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钱包支付记录") -public class WalletPaymentDto extends BasePaymentDto implements Serializable { - - private static final long serialVersionUID = 8238920331255597223L; - - @Schema(description = "钱包ID") - private Long walletId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPayConfigDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPayConfigDto.java deleted file mode 100644 index 6d9e6d7f6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPayConfigDto.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wechat; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.starter.data.perm.sensitive.SensitiveInfo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * @author xxm - * @date 2021/3/19 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "微信支付配置") -public class WeChatPayConfigDto extends BaseDto implements Serializable { - - @Schema(description = "名称") - private String name; - - @Schema(description = "微信商户号") - @SensitiveInfo - private String mchId; - - @Schema(description = "微信应用appId") - @SensitiveInfo - private String appId; - - /** - * @see cn.bootx.payment.code.paymodel.WeChatPayCode#API_V2 - */ - @Schema(description = "api版本") - private String apiVersion; - - @Schema(description = "商户平台「API安全」中的 APIv2 密钥") - @SensitiveInfo - private String apiKeyV2; - - @Schema(description = "商户平台「API安全」中的 APIv3 密钥") - @SensitiveInfo - private String apiKeyV3; - - @Schema(description = "APPID对应的接口密码,用于获取接口调用凭证access_token时使用") - @SensitiveInfo - private String appSecret; - - @Schema(description = "API 证书中的 p12 文件id") - private Long p12; - - @Schema(description = "API 证书中的 cert.pem 证书") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String certPem; - - @Schema(description = "API 证书中的 key.pem 私钥") - @SensitiveInfo(value = SensitiveInfo.SensitiveType.OTHER, front = 15) - private String keyPem; - - @Schema(description = "应用域名,回调中会使用此参数") - private String domain; - - @Schema(description = "服务器异步通知页面路径 通知url必须为直接可访问的url,不能携带参数。公网域名必须为https ") - private String notifyUrl; - - @Schema(description = "页面跳转同步通知页面路径") - private String returnUrl; - - @Schema(description = "是否沙箱环境") - private boolean sandbox; - - @Schema(description = "超时时间(分钟)") - private Integer expireTime; - - @Schema(description = "可用支付方式") - private List payWayList; - - @Schema(description = "是否启用") - private Boolean activity; - - @Schema(description = "状态") - private Integer state; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPaymentDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPaymentDto.java deleted file mode 100644 index 9a7733a17..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/paymodel/wechat/WeChatPaymentDto.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.dto.paymodel.wechat; - -import cn.bootx.payment.dto.payment.BasePaymentDto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/6/21 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "微信支付记录") -public class WeChatPaymentDto extends BasePaymentDto implements Serializable { - - private static final long serialVersionUID = -2400358210732595795L; - - @Schema(description = "微信交易号") - private String tradeNo; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/refund/RefundRecordDto.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/refund/RefundRecordDto.java deleted file mode 100644 index b8aca88e0..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/dto/refund/RefundRecordDto.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.bootx.payment.dto.refund; - -import cn.bootx.common.core.rest.dto.BaseDto; -import cn.bootx.payment.dto.payment.RefundableInfo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.List; - -/** - * 退款记录 - * - * @author xxm - * @date 2022/3/2 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "退款记录") -public class RefundRecordDto extends BaseDto { - - @Schema(description = "关联的业务id") - private String businessId; - - @Schema(description = "付款付单号") - private Long paymentId; - - @Schema(description = "异步方式关联退款请求号(部分退款情况)") - private String refundRequestNo; - - @Schema(description = "用户ID") - private Long userId; - - @Schema(description = "标题") - private String title; - - @Schema(description = "退款金额") - private BigDecimal amount; - - @Schema(description = "剩余可退") - private BigDecimal refundableBalance; - - @Schema(description = "退款终端ip") - private String clientIp; - - @Schema(description = "退款时间") - private LocalDateTime refundTime; - - @Schema(description = "退款信息列表") - private List refundableInfo; - - /** - * @see cn.bootx.payment.code.pay.PayStatusCode#REFUND_PROCESS_FAIL - */ - @Schema(description = "退款状态") - private int refundStatus; - - @Schema(description = "错误码") - private String errorCode; - - @Schema(description = "错误信息") - private String errorMsg; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCancelEvent.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCancelEvent.java deleted file mode 100644 index cc5059092..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCancelEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.payment.event; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付撤销事件 - * - * @author xxm - * @date 2022/7/11 - */ -@Data -@Accessors(chain = true) -public class PayCancelEvent { - - /** 支付单ID */ - private Long paymentId; - - /** 业务单号 */ - private String businessId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCompleteEvent.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCompleteEvent.java deleted file mode 100644 index 825c104d6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayCompleteEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.payment.event; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付完成事件 - * - * @author xxm - * @date 2022/7/11 - */ -@Data -@Accessors(chain = true) -public class PayCompleteEvent { - - /** 支付单ID */ - private Long paymentId; - - /** 业务单号 */ - private String businessId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayRefundEvent.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayRefundEvent.java deleted file mode 100644 index 635f5a1ea..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/event/PayRefundEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.payment.event; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付退款事件 - * - * @author xxm - * @date 2022/7/11 - */ -@Data -@Accessors(chain = true) -public class PayRefundEvent { - - /** 支付单ID */ - private Long paymentId; - - /** 业务单号 */ - private String businessId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayAmountAbnormalException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayAmountAbnormalException.java deleted file mode 100644 index 1205d5e5c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayAmountAbnormalException.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.FatalException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 异常金额 - * - * @author xxm - * @date 2020/12/8 - */ -public class PayAmountAbnormalException extends FatalException { - - public PayAmountAbnormalException(String msg) { - super(PaymentCenterErrorCode.PAYMENT_AMOUNT_ABNORMAL, msg); - } - - public PayAmountAbnormalException() { - super(PaymentCenterErrorCode.PAYMENT_AMOUNT_ABNORMAL, "异常金额"); - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayFailureException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayFailureException.java deleted file mode 100644 index 5b4548c90..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayFailureException.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 付款错误 - * - * @author xxm - * @date 2020/12/8 - */ -public class PayFailureException extends BizException { - - public PayFailureException(String message) { - super(PaymentCenterErrorCode.PAY_FAILURE, message); - } - - public PayFailureException() { - super(PaymentCenterErrorCode.PAY_FAILURE, "支付失败"); - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayHasExistedException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayHasExistedException.java deleted file mode 100644 index a6bc461d6..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayHasExistedException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 付款已存在 - * - * @author xxm - * @date 2020/12/8 - */ -public class PayHasExistedException extends BizException { - - public PayHasExistedException() { - super(PaymentCenterErrorCode.PAYMENT_HAS_EXISTED, "付款已存在"); - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayIsProcessingException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayIsProcessingException.java deleted file mode 100644 index 3c95d1b12..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayIsProcessingException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 付款正在处理中 - * - * @author xxm - * @date 2020/12/8 - */ -public class PayIsProcessingException extends BizException { - - public PayIsProcessingException() { - super(PaymentCenterErrorCode.PAYMENT_IS_PROCESSING, "付款正在处理中"); - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayNotExistedException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayNotExistedException.java deleted file mode 100644 index f3fc6f587..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayNotExistedException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 付款记录不存在 - * - * @author xxm - * @date 2020/12/8 - */ -public class PayNotExistedException extends BizException { - - public PayNotExistedException() { - super(PaymentCenterErrorCode.PAYMENT_RECORD_NOT_EXISTED, "付款记录不存在"); - } - -} \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayUnsupportedMethodException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayUnsupportedMethodException.java deleted file mode 100644 index 0b2ed4817..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/payment/PayUnsupportedMethodException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.payment; - -import cn.bootx.common.core.exception.FatalException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 付款方式不支持异常 - * - * @author xxm - * @date 2020/12/9 - */ -public class PayUnsupportedMethodException extends FatalException { - - public PayUnsupportedMethodException() { - super(PaymentCenterErrorCode.PAYMENT_METHOD_UNSUPPORT, "不支持的支付方式"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletBannedException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletBannedException.java deleted file mode 100644 index 6a2cf7e1e..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletBannedException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.waller; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 钱包被禁用 - * - * @author xxm - * @date 2020/12/8 - */ -public class WalletBannedException extends BizException { - - public WalletBannedException() { - super(PaymentCenterErrorCode.WALLET_BANNED, "钱包被禁用"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletInfoNotExistException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletInfoNotExistException.java deleted file mode 100644 index 29d66d375..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletInfoNotExistException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.waller; - -import cn.bootx.common.core.exception.FatalException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 钱包信息不存在 - * - * @author xxm - * @date 2020/12/8 - */ -public class WalletInfoNotExistException extends FatalException { - - public WalletInfoNotExistException() { - super(PaymentCenterErrorCode.WALLET_INFO_NOT_EXISTS, "钱包信息不存在"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLackOfBalanceException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLackOfBalanceException.java deleted file mode 100644 index e3c5ae0fd..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLackOfBalanceException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.waller; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 余额不足异常 - * - * @author xxm - * @date 2020/12/8 - */ -public class WalletLackOfBalanceException extends BizException { - - public WalletLackOfBalanceException() { - super(PaymentCenterErrorCode.WALLET_BALANCE_NOT_ENOUGH, "余额不足异常"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLogError.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLogError.java deleted file mode 100644 index b4b8d5f37..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletLogError.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.waller; - -import cn.bootx.common.core.exception.FatalException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 钱包日志错误 - * - * @author xxm - * @date 2020/12/8 - */ -public class WalletLogError extends FatalException { - - public WalletLogError() { - super(PaymentCenterErrorCode.WALLET_LOG_ERROR, "钱包日志错误"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletNotExistsException.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletNotExistsException.java deleted file mode 100644 index cd3b301e5..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/exception/waller/WalletNotExistsException.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.bootx.payment.exception.waller; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.payment.code.PaymentCenterErrorCode; - -/** - * 钱包不存在 - * - * @author xxm - * @date 2020/12/8 - */ -public class WalletNotExistsException extends BizException { - - public WalletNotExistsException() { - super(PaymentCenterErrorCode.WALLET_NOT_EXISTS, "钱包不存在"); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentEventSender.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentEventSender.java deleted file mode 100644 index 0223f7b76..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentEventSender.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.bootx.payment.mq; - -import cn.bootx.payment.code.PaymentEventCode; -import cn.bootx.payment.event.PayCancelEvent; -import cn.bootx.payment.event.PayCompleteEvent; -import cn.bootx.payment.event.PayRefundEvent; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.retry.annotation.Retryable; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * 支付中心消息发送器 - * - * @author xxm - * @date 2021/4/22 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class PaymentEventSender { - - private final RabbitTemplate rabbitTemplate; - - /** - * 支付完成 事件发布 - */ - @Async("bigExecutor") - @Retryable(value = Exception.class) - public void sendPayComplete(PayCompleteEvent event) { - rabbitTemplate.convertAndSend(PaymentEventCode.EXCHANGE_PAYMENT, PaymentEventCode.PAY_COMPLETE, event); - } - - /** - * 支付撤销/关闭 事件发布 - */ - @Async("bigExecutor") - @Retryable(value = Exception.class) - public void sendPayCancel(PayCancelEvent event) { - rabbitTemplate.convertAndSend(PaymentEventCode.EXCHANGE_PAYMENT, PaymentEventCode.PAY_CANCEL, event); - } - - /** - * 支付退款 事件发布 - */ - @Async("bigExecutor") - @Retryable(value = Exception.class) - public void sendPayRefund(PayRefundEvent event) { - rabbitTemplate.convertAndSend(PaymentEventCode.EXCHANGE_PAYMENT, PaymentEventCode.PAY_REFUND, event); - } - - /** - * 支付单超时 事件发布 - */ - @Async("bigExecutor") - @Retryable(value = Exception.class) - public void sendPaymentExpiredTime(Long paymentId) { - rabbitTemplate.convertAndSend(PaymentEventCode.EXCHANGE_PAYMENT, PaymentEventCode.PAYMENT_EXPIRED_TIME, - paymentId); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentMessageListener.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentMessageListener.java deleted file mode 100644 index 650fdff72..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/mq/PaymentMessageListener.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.bootx.payment.mq; - -import cn.bootx.common.rabbit.conditional.ConditionalOnRabbit; -import cn.bootx.payment.code.PaymentEventCode; -import cn.bootx.payment.core.pay.service.PayExpiredTimeService; -import cn.bootx.payment.event.PayCancelEvent; -import cn.bootx.payment.event.PayCompleteEvent; -import cn.bootx.payment.event.PayRefundEvent; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Component; - -/** - * 消息接收 - * - * @author xxm - * @date 2021/4/22 - */ -@Slf4j -@Component -@ConditionalOnRabbit -@RequiredArgsConstructor -public class PaymentMessageListener { - - private final PayExpiredTimeService payExpiredTimeService; - - /** - * 支付超时事件处理 - */ - @RabbitListener(queues = PaymentEventCode.PAYMENT_EXPIRED_TIME) - public void PaymentExpiredTime(Long paymentId) { - payExpiredTimeService.expiredTime(paymentId); - } - - /** - * 支付成功 - */ - @RabbitListener(queues = PaymentEventCode.PAY_COMPLETE) - public void payCancel(PayCompleteEvent event) { - log.info("支付完成事件:{}", event); - } - - /** - * 支付撤销/关闭 - */ - @RabbitListener(queues = PaymentEventCode.PAY_CANCEL) - public void payCancel(PayCancelEvent event) { - log.info("支付撤销/关闭事件:{}", event); - } - - /** - * 支付退款 - */ - @RabbitListener(queues = PaymentEventCode.PAY_REFUND) - public void payCancel(PayRefundEvent event) { - log.info("支付退款事件:{}", event); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierCombinationPayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierCombinationPayParam.java deleted file mode 100644 index ab52eb099..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierCombinationPayParam.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.payment.param.cashier; - -import cn.bootx.payment.param.pay.PayModeParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.util.List; - -/** - * 结算台发起支付参数 - * - * @author xxm - * @date 2022/2/23 - */ -@Data -@Accessors(chain = true) -@Schema(title = "结算台组合支付参数") -public class CashierCombinationPayParam { - - @Schema(description = "标题") - private String title; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "业务id") - private String businessId; - - @Schema(description = "支付信息", required = true) - private List payModeList; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierSinglePayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierSinglePayParam.java deleted file mode 100644 index 5b5db8602..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/cashier/CashierSinglePayParam.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.bootx.payment.param.cashier; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 结算台发起支付参数 - * - * @author xxm - * @date 2022/2/23 - */ -@Data -@Accessors(chain = true) -@Schema(title = "结算台单支付参数") -public class CashierSinglePayParam { - - @Schema(description = "标题") - private String title; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "openId") - private String openId; - - @Schema(description = "支付通道") - private Integer payChannel; - - @Schema(description = "支付方式") - private Integer payWay; - - @Schema(description = "业务id") - private String businessId; - - @Schema(description = "付款码") - private String authCode; - - @Schema(description = "储值卡") - private String voucherNo; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayModeParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayModeParam.java deleted file mode 100644 index 128e7f2ba..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayModeParam.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.bootx.payment.param.pay; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayWayCode; -import cn.bootx.payment.core.pay.convert.PayConvert; -import cn.bootx.payment.dto.payment.PayChannelInfo; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.param.paymodel.alipay.AliPayParam; -import cn.bootx.payment.param.paymodel.voucher.VoucherPayParam; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 不只是支付, 退款发起时也是用着参数 - * - * @author xxm - * @date 2020/12/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付方式参数") -public class PayModeParam implements Serializable { - - private static final long serialVersionUID = -46959864485463681L; - - /** - * @see PayChannelCode - */ - @Schema(description = "支付通道", required = true) - private int payChannel; - - /** - * @see PayWayCode - */ - @Schema(description = "支付通道下属支付方式", required = true) - private int payWay; - - @Schema(description = "支付金额", required = true) - private BigDecimal amount; - - /** - * @see AliPayParam - * @see WeChatPayParam - * @see VoucherPayParam - */ - @Schema(description = "扩展参数的json字符串") - private String extraParamsJson; - - public PayChannelInfo toPayTypeInfo() { - return PayConvert.CONVERT.convert(this); - } - - /** - * 转换为可退款信息 - */ - public RefundableInfo toRefundableInfo() { - return new RefundableInfo().setPayChannel(getPayChannel()).setAmount(getAmount()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayParam.java deleted file mode 100644 index 5fdc2c6de..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/pay/PayParam.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.payment.param.pay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import java.io.Serializable; -import java.util.List; - -/** - * @author xxm - * @date 2020/12/9 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付参数") -public class PayParam implements Serializable { - - private static final long serialVersionUID = 3895679513150533566L; - - @Schema(description = "用户ID") - private Long userId; - - @Schema(description = "业务ID") - @NotEmpty(message = "业务ID不可为空") - private String businessId; - - @Schema(description = "支付标题") - @NotEmpty(message = "支付标题不可为空") - private String title; - - @Schema(description = "支付描述") - private String description; - - @Schema(description = "支付信息参数", required = true) - @NotEmpty(message = "支付信息参数不可为空") - @Valid - private List payModeList; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelParam.java deleted file mode 100644 index 69a05fd32..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelParam.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.bootx.payment.param.payconfig; - -import cn.bootx.payment.code.pay.PayChannelEnum; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付通道 - * - * @author xxm - * @date 2021/6/30 - */ -@Data -@Accessors(chain = true) -public class PayChannelParam { - - /** 主键 */ - private Long id; - - /** - * 通道代码(唯一) - * @see PayChannelEnum - */ - private String code; - - /** 名称 */ - private String name; - - /** 页面展示:卡片-图标 */ - private String icon; - - /** 页面展示:卡片-背景色 */ - private String bgColor; - - /** 状态 */ - private Integer state; - - /** 备注 */ - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelWayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelWayParam.java deleted file mode 100644 index b47f45695..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payconfig/PayChannelWayParam.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.payment.param.payconfig; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 支付通道支持的支付方式 - * - * @author xxm - * @date 2021/6/30 - */ -@Data -@Accessors(chain = true) -public class PayChannelWayParam { - - /** 通道id */ - private Long channelId; - - /** 支付方式代码 */ - private String code; - - /** 支付方式名称 */ - private String name; - - /** 备注 */ - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payment/PaymentQuery.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payment/PaymentQuery.java deleted file mode 100644 index 958212869..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/payment/PaymentQuery.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.payment.param.payment; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/7/21 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付记录查询参数") -public class PaymentQuery implements Serializable { - - private static final long serialVersionUID = 7071042101962400106L; - - @Schema(description = "支付单id") - private String paymentId; - - @Schema(description = "关联的业务id") - private String businessId; - - @Schema(description = "关联的业务id") - private String title; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AliPayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AliPayParam.java deleted file mode 100644 index 0aa4afe91..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AliPayParam.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.param.paymodel.alipay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/2/27 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付宝支付参数") -public class AliPayParam implements Serializable { - - private static final long serialVersionUID = 7467373358780663978L; - - @Schema(description = "授权码(主动扫描用户的付款码)") - private String authCode; - - @Schema(description = "页面跳转同步通知页面路径") - private String returnUrl; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigParam.java deleted file mode 100644 index cae8b515c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigParam.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.bootx.payment.param.paymodel.alipay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * @author xxm - * @date 2021/2/26 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付宝配置参数") -public class AlipayConfigParam implements Serializable { - - @Schema(description = "主键") - private Long id; - - @Schema(description = "名称") - private String name; - - @Schema(description = "支付宝商户appId") - private String appId; - - @Schema(description = "服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问") - private String notifyUrl; - - @Schema(description = "页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址") - private String returnUrl; - - @Schema(description = "请求网关地址") - private String serverUrl; - - @Schema(description = "认证类型 证书/公钥") - private Integer authType; - - @Schema(description = "签名类型") - public String signType; - - @Schema(description = "支付宝公钥") - public String alipayPublicKey; - - @Schema(description = "私钥") - private String privateKey; - - @Schema(description = "应用公钥证书") - private String appCert; - - @Schema(description = "支付宝公钥证书文件") - private String alipayCert; - - @Schema(description = "支付宝CA根证书文件") - private String alipayRootCert; - - @Schema(description = "超时配置") - private Integer expireTime; - - @Schema(description = "可用支付方式") - private List payWayList; - - @Schema(description = "是否沙箱环境") - private boolean sandbox; - - @Schema(description = "状态") - private Integer state; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigQuery.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigQuery.java deleted file mode 100644 index 40df48424..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/alipay/AlipayConfigQuery.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.payment.param.paymodel.alipay; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @date 2021/7/22 - */ -@Data -@Accessors(chain = true) -@Schema(title = "支付宝配置搜索参数") -public class AlipayConfigQuery implements Serializable { - - private static final long serialVersionUID = -173325268481050362L; - - /** 名称 */ - private String name; - - /** 状态 */ - private Integer state; - - /** 支付宝商户appId */ - private String appId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherGenerationParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherGenerationParam.java deleted file mode 100644 index cb9451028..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherGenerationParam.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.bootx.payment.param.paymodel.voucher; - -import cn.hutool.core.date.DatePattern; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Data -@Accessors(chain = true) -@Schema(title = "储值卡生成参数") -public class VoucherGenerationParam { - - @Schema(description = "数量") - private Integer count; - - @Schema(description = "面值") - private BigDecimal faceValue; - - @Schema(description = "是否长期有效") - private Boolean enduring; - - @Schema(description = "开始时间") - @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime startTime; - - @Schema(description = "结束时间") - @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime endTime; - - /** - * @see cn.bootx.payment.code.paymodel.VoucherCode - */ - @Schema(description = "默认状态") - private Integer status; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherImportParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherImportParam.java deleted file mode 100644 index 0da86edf7..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherImportParam.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.payment.param.paymodel.voucher; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Data -@Accessors(chain = true) -@Schema(title = "储值卡导入参数") -public class VoucherImportParam { - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherParam.java deleted file mode 100644 index 2c6b7b24c..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherParam.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.bootx.payment.param.paymodel.voucher; - -import cn.hutool.core.date.DatePattern; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author xxm - * @date 2022/3/14 - */ -@Data -@Accessors(chain = true) -@Schema(title = "储值卡查询参数") -public class VoucherParam { - - @Schema(description = "主键") - private Long id; - - @Schema(description = "卡号") - private String cardNo; - - @Schema(description = "生成批次号") - private Long batchNo; - - @Schema(description = "面值") - private BigDecimal faceValue; - - @Schema(description = "余额") - private BigDecimal balance; - - @Schema(description = "是否长期有效") - private Boolean enduring; - - @Schema(description = "开始时间") - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime startTime; - - @Schema(description = "结束时间") - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime endTime; - - /** - * @see cn.bootx.payment.code.paymodel.VoucherCode - */ - @Schema(description = "状态") - private Integer status; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherPayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherPayParam.java deleted file mode 100644 index e13bc240b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/voucher/VoucherPayParam.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.payment.param.paymodel.voucher; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * 储值卡支付参数 - * - * @author xxm - * @date 2022/3/14 - */ -@Data -@Accessors(chain = true) -@Schema(title = "储值卡支付参数") -public class VoucherPayParam { - - @Schema(description = "储值卡号") - private List cardNoList; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletLogQueryParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletLogQueryParam.java deleted file mode 100644 index 434d6625e..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletLogQueryParam.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.bootx.payment.param.paymodel.wallet; - -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.List; - -/** - * @author xxm - * @date 2020/12/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钱包日志查询参数") -public class WalletLogQueryParam implements Serializable { - - private static final long serialVersionUID = -4046664021959786637L; - - @Schema(description = "钱包ID (与userId至少存在一个)") - private Long walletId; - - @Schema(description = "用户ID (钱包至少存在一个)") - private Long userId; - - @Schema(description = "开始日期") - private LocalDateTime startDate; - - @Schema(description = "结束日期") - private LocalDateTime endDate; - - @Schema(description = "日志类型,不传则查询全部") - private List type; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletPayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletPayParam.java deleted file mode 100644 index dea696d79..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletPayParam.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.payment.param.paymodel.wallet; - -import cn.bootx.payment.code.paymodel.WalletCode; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钱包支付参数 - * - * @author xxm - * @date 2020/12/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钱包支付参数") -public class WalletPayParam implements Serializable { - - private static final long serialVersionUID = 3255160458016870367L; - - @Schema(description = "用户ID") - private Long userId; - - @Schema(description = "操作人") - private Long operatorId; - - /** - * @see WalletCode - */ - @Schema(description = "操作源 1系统 2管理员 3用户") - private Integer operationSource; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletRechargeParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletRechargeParam.java deleted file mode 100644 index 827cd8f7e..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wallet/WalletRechargeParam.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.payment.param.paymodel.wallet; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * @author xxm - * @date 2020/12/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钱包充值参数") -public class WalletRechargeParam implements Serializable { - - private static final long serialVersionUID = 73058709379178254L; - - @Schema(description = "钱包ID") - private Long walletId; - - @Schema(description = "支付记录ID") - private Long paymentId; - - @Schema(description = "充值金额") - private BigDecimal amount; - - @Schema(description = "类型 2 主动充值 3 自动充值 4 admin充值") - private Integer type; - - @Schema(description = "业务ID,对应的充值订单ID等") - private String businessId; - - @Schema(description = "操作源") - private Integer operationSource; - - @Schema(description = "订单id") - private Long orderId; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayConfigParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayConfigParam.java deleted file mode 100644 index ca5f4c083..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayConfigParam.java +++ /dev/null @@ -1,83 +0,0 @@ -package cn.bootx.payment.param.paymodel.wechat; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * 微信支付配置参数 - * - * @author xxm - * @date 2022/7/7 - */ -@Data -@Accessors(chain = true) -@Schema(title = "微信支付配置参数") -public class WeChatPayConfigParam { - - @Schema(description = "主键") - private Long id; - - @Schema(description = "名称") - private String name; - - @Schema(description = "微信商户号") - private String mchId; - - @Schema(description = "微信应用appId") - private String appId; - - /** - * @see cn.bootx.payment.code.paymodel.WeChatPayCode#API_V2 - */ - @Schema(description = "api版本") - private String apiVersion; - - @Schema(description = "商户平台「API安全」中的 APIv2 密钥") - private String apiKeyV2; - - @Schema(description = "商户平台「API安全」中的 APIv3 密钥") - private String apiKeyV3; - - @Schema(description = "APPID对应的接口密码,用于获取接口调用凭证access_token时使用") - private String appSecret; - - @Schema(description = "API 证书中的 p12 文件id") - private Long p12; - - @Schema(description = "API 证书中的 cert.pem 证书") - private String certPem; - - @Schema(description = "API 证书中的 key.pem 私钥") - private String keyPem; - - @Schema(description = "应用域名,回调中会使用此参数") - private String domain; - - @Schema(description = "服务器异步通知页面路径 通知url必须为直接可访问的url,不能携带参数。公网域名必须为https ") - private String notifyUrl; - - @Schema(description = "页面跳转同步通知页面路径") - private String returnUrl; - - @Schema(description = "是否沙箱环境") - private boolean sandbox; - - @Schema(description = "超时时间(分钟)") - private Integer expireTime; - - @Schema(description = "可用支付方式") - private List payWayList; - - @Schema(description = "是否启用") - private Boolean activity; - - @Schema(description = "状态") - private Integer state; - - @Schema(description = "备注") - private String remark; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayParam.java deleted file mode 100644 index 1713ca542..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/paymodel/wechat/WeChatPayParam.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.payment.param.paymodel.wechat; - -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @date 2021/6/21 - */ -@Data -@Accessors(chain = true) -@Schema(title = "微信支付参数") -public class WeChatPayParam { - - @Schema(description = "微信openId") - private String openId; - - @Schema(description = "授权码(主动扫描用户的付款码)") - private String authCode; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundModeParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundModeParam.java deleted file mode 100644 index ee5265a89..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundModeParam.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.bootx.payment.param.refund; - -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.dto.payment.RefundableInfo; -import cn.bootx.payment.param.pay.PayModeParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 退款方式参数 - * - * @author xxm - * @date 2022/3/2 - */ -@Data -@Accessors(chain = true) -@Schema(title = "退款方式参数") -public class RefundModeParam { - - /** - * @see PayChannelCode - */ - @Schema(description = "支付通道", required = true) - private int payChannel; - - @Schema(description = "支付金额", required = true) - private BigDecimal amount; - - /** - * 转换成支付方式参数 - */ - public PayModeParam toPayModeParam() { - return new PayModeParam().setPayChannel(getPayChannel()).setAmount(getAmount()); - } - - /** - * 转换成退款方式记录对象 - */ - public RefundableInfo toRefundableInfo() { - return new RefundableInfo().setPayChannel(getPayChannel()).setAmount(getAmount()); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundParam.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundParam.java deleted file mode 100644 index 1f34c7438..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/param/refund/RefundParam.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.bootx.payment.param.refund; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * 退款参数 - * - * @author xxm - * @date 2020/12/10 - */ -@Data -@Accessors(chain = true) -@Schema(title = "退款参数") -public class RefundParam { - - @Schema(description = "业务id") - private String businessId; - - @Schema(description = "各通道退款参数") - private List refundModeParams; - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTask.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTask.java deleted file mode 100644 index 32ced338b..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTask.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.payment.task; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.quartz.*; -import org.springframework.stereotype.Component; - -/** - * 超时支付单任务撤销(2-5秒轮训一次) - * - * @author xxm - * @date 2022/7/12 - */ -@Slf4j -@Component -@DisallowConcurrentExecution -@PersistJobDataAfterExecution -@RequiredArgsConstructor -public class PayExpiredTimeTask implements Job { - - private final PayExpiredTimeTaskService payExpiredTimeTaskService; - - @Override - public void execute(JobExecutionContext context) { - payExpiredTimeTaskService.sync(); - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTaskService.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTaskService.java deleted file mode 100644 index 59511a147..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/task/PayExpiredTimeTaskService.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.payment.task; - -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.payment.core.payment.dao.PaymentExpiredTimeRepository; -import cn.bootx.payment.mq.PaymentEventSender; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 支付超时任务撤销消息注册 - * - * @author xxm - * @date 2022/7/12 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class PayExpiredTimeTaskService { - - private final PaymentExpiredTimeRepository expiredTimeRepository; - - private final PaymentEventSender paymentEventSender; - - /** - * 定时查询, 如果有过时的发送到消息队列 - */ - public void sync() { - List paymentIds = expiredTimeRepository.retrieveExpiredKeys(LocalDateTime.now()) - .stream() - .map(Long::valueOf) - .collect(Collectors.toList()); - if (CollUtil.isNotEmpty(paymentIds)) { - expiredTimeRepository.removeKeys(paymentIds.stream().map(String::valueOf).toArray(String[]::new)); - paymentIds.forEach(paymentEventSender::sendPaymentExpiredTime); - } - } - -} diff --git a/bootx-services/service-payment/src/main/java/cn/bootx/payment/util/PayModelUtil.java b/bootx-services/service-payment/src/main/java/cn/bootx/payment/util/PayModelUtil.java deleted file mode 100644 index 26564c5b1..000000000 --- a/bootx-services/service-payment/src/main/java/cn/bootx/payment/util/PayModelUtil.java +++ /dev/null @@ -1,134 +0,0 @@ -package cn.bootx.payment.util; - -import cn.bootx.common.core.util.BigDecimalUtil; -import cn.bootx.common.core.util.LocalDateTimeUtil; -import cn.bootx.payment.code.pay.PayChannelCode; -import cn.bootx.payment.code.pay.PayChannelEnum; -import cn.bootx.payment.code.pay.PayModelExtraCode; -import cn.bootx.payment.exception.payment.PayAmountAbnormalException; -import cn.bootx.payment.exception.payment.PayFailureException; -import cn.bootx.payment.param.pay.PayModeParam; -import cn.bootx.payment.param.pay.PayParam; -import cn.bootx.payment.param.paymodel.alipay.AliPayParam; -import cn.bootx.payment.param.paymodel.voucher.VoucherPayParam; -import cn.bootx.payment.param.paymodel.wechat.WeChatPayParam; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import lombok.experimental.UtilityClass; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * 支付方式工具类 - * - * @author xxm - * @date 2022/7/12 - */ -@UtilityClass -public class PayModelUtil { - - /** - * 获取支付宝的过期时间 - */ - public String getAliExpiredTime(Integer minute) { - return minute + "m"; - } - - /** - * 获取微信的过期时间 - */ - public String getWxExpiredTime(Integer minute) { - LocalDateTime time = LocalDateTimeUtil.offset(LocalDateTime.now(), minute, ChronoUnit.MINUTES); - return LocalDateTimeUtil.format(time, DatePattern.PURE_DATETIME_PATTERN); - } - - /** - * 获取支付单的超时时间 - */ - public LocalDateTime getPaymentExpiredTime(Integer minute) { - return LocalDateTimeUtil.offset(LocalDateTime.now(), minute, ChronoUnit.MINUTES); - } - - /** - * 判断是否有异步支付 - */ - public boolean isNotSync(List payModeParams) { - return payModeParams.stream().map(PayModeParam::getPayChannel).noneMatch(PayChannelCode.ASYNC_TYPE::contains); - } - - /** - * 获取异步支付参数 - */ - public PayModeParam getAsyncPayModeParam(PayParam payParam) { - return payParam.getPayModeList() - .stream() - .filter(payMode -> PayChannelCode.ASYNC_TYPE.contains(payMode.getPayChannel())) - .findFirst() - .orElseThrow(() -> new PayFailureException("支付方式数据异常")); - } - - /** - * 构建扩展参数构建 - * @param payChannel 支付通道 - * @param map 支付方式扩展字段信息 key 为 PayModelExtraCode中定义的 - */ - public String buildExtraParamsJson(Integer payChannel, Map map) { - PayChannelEnum payChannelEnum = PayChannelEnum.findByNo(payChannel); - switch (payChannelEnum) { - case ALI: { - return JSONUtil.toJsonStr(new AliPayParam().setAuthCode(map.get(PayModelExtraCode.AUTH_CODE)) - .setReturnUrl(map.get(PayModelExtraCode.RETURN_URL))); - } - case WECHAT: { - return JSONUtil.toJsonStr(new WeChatPayParam().setOpenId(map.get(PayModelExtraCode.OPEN_ID)) - .setAuthCode(map.get(PayModelExtraCode.AUTH_CODE))); - } - case VOUCHER: { - String voucherNo = map.get(PayModelExtraCode.VOUCHER_NO); - List list = new ArrayList<>(); - if (StrUtil.isNotBlank(voucherNo)) { - list.add(voucherNo); - } - return JSONUtil.toJsonStr(new VoucherPayParam().setCardNoList(list)); - } - default: { - return null; - } - } - } - - /** - * 检查支付金额 - */ - public void validationAmount(List payModeList) { - for (PayModeParam payModeParam : payModeList) { - // 同时满足支付金额小于等于零 - if (BigDecimalUtil.compareTo(payModeParam.getAmount(), BigDecimal.ZERO) < 1) { - throw new PayAmountAbnormalException(); - } - } - } - - /** - * 检查异步支付方式 - */ - public void validationAsyncPayMode(PayParam payParam) { - // 组合支付时只允许有一个异步支付方式 - List payModeList = payParam.getPayModeList(); - - long asyncPayModeCount = payModeList.stream() - .map(PayModeParam::getPayChannel) - .filter(PayChannelCode.ASYNC_TYPE::contains) - .count(); - if (asyncPayModeCount > 1) { - throw new PayFailureException("组合支付时只允许有一个异步支付方式"); - } - } - -} diff --git a/bootx-services/service-payment/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-payment/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index b5d709d4c..000000000 --- a/bootx-services/service-payment/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.bootx.payment.PaymentApplication \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/resources/mapper/wallet/WalletMapper.xml b/bootx-services/service-payment/src/main/resources/mapper/wallet/WalletMapper.xml deleted file mode 100644 index efa1bada7..000000000 --- a/bootx-services/service-payment/src/main/resources/mapper/wallet/WalletMapper.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - update pay_wallet - set balance = (balance + #{amount}), - last_modifier = #{operator}, - last_modified_time = #{date}, - version = (version+1) - where id = #{walletId} - - - - update pay_wallet - set balance = (balance - #{amount}), - last_modifier = #{operator}, - last_modified_time = #{date}, - version = (version+1) - where id = #{walletId} and (balance- #{amount}) >= 0 - - - - update pay_wallet - set balance = (balance - #{amount}), - last_modifier = #{operator}, - last_modified_time = #{date}, - version = (version+1) - where id = #{walletId} - - - - - \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/resources/templates/errorCashier.html b/bootx-services/service-payment/src/main/resources/templates/errorCashier.html deleted file mode 100644 index 3e4433e5a..000000000 --- a/bootx-services/service-payment/src/main/resources/templates/errorCashier.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - 请使用微信或支付宝扫码打开 - - -

请使用微信或支付宝扫码打开!

- - \ No newline at end of file diff --git a/bootx-services/service-payment/src/main/resources/templates/wechatJsapiPay.html b/bootx-services/service-payment/src/main/resources/templates/wechatJsapiPay.html deleted file mode 100644 index 6020e4145..000000000 --- a/bootx-services/service-payment/src/main/resources/templates/wechatJsapiPay.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - 微信支付 - - -

-
-

- - - \ No newline at end of file diff --git a/bootx-services/service-visualization/pom.xml b/bootx-services/service-visualization/pom.xml index cc829a662..dba9cd21c 100644 --- a/bootx-services/service-visualization/pom.xml +++ b/bootx-services/service-visualization/pom.xml @@ -5,13 +5,18 @@ cn.bootx.platform bootx-services - 1.2.3 + 1.3.6.2 4.0.0 service-visualization jar + + + true + + diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/VisualizationApplication.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/VisualizationApplication.java similarity index 87% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/VisualizationApplication.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/VisualizationApplication.java index 91b1cca0e..50908aede 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/VisualizationApplication.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/VisualizationApplication.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization; +package cn.bootx.platform.visualization; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; @@ -9,7 +9,7 @@ * 可视化模块 * * @author xxm - * @date 2023/2/16 + * @since 2023/2/16 */ @ComponentScan @ConfigurationPropertiesScan diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/code/GoVIewCode.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/code/GoVIewCode.java new file mode 100644 index 000000000..e8f99aa92 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/code/GoVIewCode.java @@ -0,0 +1,17 @@ +package cn.bootx.platform.visualization.code; + +/** + * GoVIew大屏相关常量 + * + * @author xxm + * @since 2023/2/21 + */ +public interface GoVIewCode { + + /** 发布 */ + int STATE_PUBLISH = 1; + + /** 未发布 */ + int STATE_UN_PUBLISH = -1; + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/configuration/VisualizationProperties.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/configuration/VisualizationProperties.java similarity index 84% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/configuration/VisualizationProperties.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/configuration/VisualizationProperties.java index c6d47c41d..2669b8493 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/configuration/VisualizationProperties.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/configuration/VisualizationProperties.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.configuration; +package cn.bootx.platform.visualization.configuration; import lombok.Data; import lombok.experimental.Accessors; @@ -6,7 +6,7 @@ /** * @author xxm - * @date 2023/3/2 + * @since 2023/3/2 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewAdminController.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewAdminController.java similarity index 81% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewAdminController.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewAdminController.java index d1c15e493..5ead437bf 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewAdminController.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewAdminController.java @@ -1,15 +1,15 @@ -package cn.bootx.visualization.controller; - -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.visualization.core.service.ProjectInfoService; -import cn.bootx.visualization.dto.ProjectInfoDto; -import cn.bootx.visualization.dto.ProjectInfoResult; -import cn.bootx.visualization.param.CreateParam; -import cn.bootx.visualization.param.ProjectInfoParam; -import cn.bootx.visualization.param.ProjectInfoSave; +package cn.bootx.platform.visualization.controller; + +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.visualization.core.service.ProjectInfoService; +import cn.bootx.platform.visualization.dto.ProjectInfoDto; +import cn.bootx.platform.visualization.dto.ProjectInfoResult; +import cn.bootx.platform.visualization.param.CreateParam; +import cn.bootx.platform.visualization.param.ProjectInfoParam; +import cn.bootx.platform.visualization.param.ProjectInfoSave; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -22,7 +22,7 @@ * GoView可视化大屏管理接口 * * @author xxm - * @date 2023/2/24 + * @since 2023/2/24 */ @Validated @Tag(name = "GoView可视化大屏管理接口") diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewController.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewController.java new file mode 100644 index 000000000..046d2b9a2 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/controller/GoViewController.java @@ -0,0 +1,66 @@ +package cn.bootx.platform.visualization.controller; + +import cn.bootx.platform.common.core.annotation.IgnoreAuth; +import cn.bootx.platform.common.core.rest.Res; +import cn.bootx.platform.common.core.rest.ResResult; +import cn.bootx.platform.visualization.core.service.ProjectInfoService; +import cn.bootx.platform.visualization.dto.GoVIewPageResult; +import cn.bootx.platform.visualization.dto.ProjectInfoResult; +import cn.bootx.platform.visualization.param.ProjectInfoSave; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * GoView可视化大屏对接接口 + * + * @author xxm + * @since 2023/2/21 + */ +@Validated +@Tag(name = "GoView可视化大屏对接接口") +@RestController +@RequestMapping("/goview") +@RequiredArgsConstructor +public class GoViewController { + + private final ProjectInfoService projectInfoService; +// +// @IgnoreAuth +// @Operation(summary = "获取文件oss存储信息") +// @GetMapping("/getOssInfo") +// public ResResult getOssInfo() { +// return Res.ok(projectInfoService.getOssInfo()); +// } + + @Operation(summary = "获取项目列表分页 ") + @GetMapping("/page") + public GoVIewPageResult> page(Integer page, Integer limit) { + return projectInfoService.pageByGoVIew(page, limit); + } + + @IgnoreAuth + @Operation(summary = "获取发布的数据(报表内容为空返回null)") + @GetMapping("/getPublishData") + public ResResult getPublishData(Long projectId) { + return Res.ok(projectInfoService.getPublishData(projectId)); + } + + @Operation(summary = "获取编辑时的数据(报表内容为空返回null)") + @GetMapping("/getEditData") + public ResResult getEditData(Long projectId) { + return Res.ok(projectInfoService.getEditData(projectId)); + } + + @Operation(summary = "更新数据") + @PostMapping("/update") + public ResResult update(@RequestBody ProjectInfoSave param) { + projectInfoService.update(param); + return Res.ok(); + } + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/convert/GoViewConvert.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/convert/GoViewConvert.java new file mode 100644 index 000000000..10439a2b4 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/convert/GoViewConvert.java @@ -0,0 +1,21 @@ +package cn.bootx.platform.visualization.core.convert; + +import cn.bootx.platform.visualization.core.entity.ProjectInfo; +import cn.bootx.platform.visualization.dto.ProjectInfoDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 转换 + * + * @author xxm + * @since 2023/3/2 + */ +@Mapper +public interface GoViewConvert { + + GoViewConvert CONVERT = Mappers.getMapper(GoViewConvert.class); + + ProjectInfoDto convert(ProjectInfo in); + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoManager.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoManager.java new file mode 100644 index 000000000..f213fc15f --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoManager.java @@ -0,0 +1,36 @@ +package cn.bootx.platform.visualization.core.dao; + +import cn.bootx.platform.visualization.param.ProjectInfoSave; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.visualization.core.entity.ProjectInfo; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.stereotype.Repository; + +import java.util.Objects; + +/** + * @author xxm + * @since 2023/2/21 + */ +@Repository +public class ProjectInfoManager extends BaseManager { + + /** + * 分页 + */ + public Page page(PageParam pageParam, ProjectInfoSave query) { + Page mpPage = MpUtil.getMpPage(pageParam, ProjectInfo.class); + return this.lambdaQuery() + .select(this.getEntityClass(), MpUtil::excludeBigField) + .orderByDesc(MpIdEntity::getId) + .like(Objects.nonNull(query.getProjectId()), MpIdEntity::getId, query.getProjectId()) + .like(StrUtil.isNotBlank(query.getName()), ProjectInfo::getName, query.getName()) + .eq(Objects.nonNull(query.getState()), ProjectInfo::getState, query.getState()) + .page(mpPage); + } + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoMapper.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoMapper.java new file mode 100644 index 000000000..b9d96cff5 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.visualization.core.dao; + +import cn.bootx.platform.visualization.core.entity.ProjectInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2023/2/21 + */ +@Mapper +public interface ProjectInfoMapper extends BaseMapper { + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishManager.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishManager.java new file mode 100644 index 000000000..66d2a911a --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishManager.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.visualization.core.dao; + +import cn.bootx.platform.visualization.core.entity.ProjectInfoPublish; +import cn.bootx.platform.common.mybatisplus.impl.BaseManager; +import org.springframework.stereotype.Repository; + +/** + * @author xxm + * @since 2023/2/24 + */ +@Repository +public class ProjectInfoPublishManager extends BaseManager { + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishMapper.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishMapper.java new file mode 100644 index 000000000..8c8188c36 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/dao/ProjectInfoPublishMapper.java @@ -0,0 +1,14 @@ +package cn.bootx.platform.visualization.core.dao; + +import cn.bootx.platform.visualization.core.entity.ProjectInfoPublish; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author xxm + * @since 2023/2/24 + */ +@Mapper +public interface ProjectInfoPublishMapper extends BaseMapper { + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfo.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfo.java new file mode 100644 index 000000000..1ead77183 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfo.java @@ -0,0 +1,70 @@ +package cn.bootx.platform.visualization.core.entity; + +import cn.bootx.platform.common.core.annotation.BigField; +import cn.bootx.platform.common.core.function.EntityBaseFunction; +import cn.bootx.platform.common.core.util.CollUtil; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.visualization.core.convert.GoViewConvert; +import cn.bootx.platform.visualization.dto.ProjectInfoDto; +import cn.bootx.platform.visualization.param.ProjectInfoSave; +import cn.bootx.platform.common.jackson.util.JacksonUtil; +import cn.bootx.platform.visualization.code.GoVIewCode; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 自定义大屏信息 + * + * @author xxm + * @since 2023/2/21 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@TableName("report_project_info") +public class ProjectInfo extends MpBaseEntity implements EntityBaseFunction { + + /** 项目名称 */ + private String name; + + /** + * 发布状态 + * @see GoVIewCode + */ + private Integer state; + + /** 是否在编辑中 */ + private Boolean edit; + + /** 报表内容 */ + @BigField + private String content; + + /** 预览图片id */ + private Long indexImage; + + /** 备注 */ + private String remark; + + public static ProjectInfo init(ProjectInfoSave param) { + ProjectInfo entity = new ProjectInfo().setName(param.getName()) + .setIndexImage(param.getIndexImage()) + .setRemark(param.getRemark()); + entity.setId(param.getProjectId()); + if (CollUtil.isNotEmpty(param.getContent())) { + entity.setContent(JacksonUtil.toJson(param.getContent())); + } + return entity; + } + + /** + * 转换 + */ + @Override + public ProjectInfoDto toDto() { + return GoViewConvert.CONVERT.convert(this); + } + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfoPublish.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfoPublish.java similarity index 76% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfoPublish.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfoPublish.java index c6fdbe414..616c9c12b 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfoPublish.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/entity/ProjectInfoPublish.java @@ -1,6 +1,6 @@ -package cn.bootx.visualization.core.entity; +package cn.bootx.platform.visualization.core.entity; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +10,7 @@ * 自定义大屏编辑时缓存信息 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @EqualsAndHashCode(callSuper = true) @Data diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/service/ProjectInfoService.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/service/ProjectInfoService.java new file mode 100644 index 000000000..7130bedf9 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/core/service/ProjectInfoService.java @@ -0,0 +1,279 @@ +package cn.bootx.platform.visualization.core.service; + +import cn.bootx.platform.common.core.exception.BizException; +import cn.bootx.platform.common.core.exception.DataNotExistException; +import cn.bootx.platform.common.core.function.ParamService; +import cn.bootx.platform.common.core.rest.PageResult; +import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.common.mybatisplus.util.MpUtil; +import cn.bootx.platform.starter.file.service.FileUploadService; +import cn.bootx.platform.visualization.code.GoVIewCode; +import cn.bootx.platform.visualization.configuration.VisualizationProperties; +import cn.bootx.platform.visualization.core.dao.ProjectInfoManager; +import cn.bootx.platform.visualization.core.dao.ProjectInfoPublishManager; +import cn.bootx.platform.visualization.core.entity.ProjectInfo; +import cn.bootx.platform.visualization.core.entity.ProjectInfoPublish; +import cn.bootx.platform.visualization.dto.GoVIewPageResult; +import cn.bootx.platform.visualization.dto.ProjectInfoDto; +import cn.bootx.platform.visualization.dto.ProjectInfoResult; +import cn.bootx.platform.visualization.param.CreateParam; +import cn.bootx.platform.visualization.param.ProjectInfoParam; +import cn.bootx.platform.visualization.param.ProjectInfoSave; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 自定义大屏数据接口 + * + * @author xxm + * @since 2023/2/21 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ProjectInfoService { + + private final FileUploadService fileUploadService; + + private final VisualizationProperties visualizationProperties; + + private final ProjectInfoManager projectInfoManager; + + private final ProjectInfoPublishManager publishManager; + + private final ParamService paramService; + +// /** +// * 获取文件上传oss信息 +// */ +// public OssInfo getOssInfo() { +// String filePreviewUrlPrefix = fileUploadService.getFilePreviewUrlPrefix(); +// return new OssInfo().setBucketURL(filePreviewUrlPrefix); +// } + + /** + * 创建项目 + */ + @Transactional(rollbackFor = Exception.class) + public ProjectInfoResult create(CreateParam param) { + ProjectInfo info = new ProjectInfo() + .setState(GoVIewCode.STATE_UN_PUBLISH) + .setEdit(false) + .setName(param.getName()) + .setRemark(param.getRemark()); + projectInfoManager.save(info); + ProjectInfoPublish projectInfoPublish = new ProjectInfoPublish(); + projectInfoPublish.setId(info.getId()); + publishManager.save(projectInfoPublish); + return this.toResult(info); + } + + /** + * 获取项目列表分页 (大屏) + */ + public GoVIewPageResult> pageByGoVIew(Integer page, Integer limit) { + Page infoPage = projectInfoManager.page(new PageParam(page, limit), new ProjectInfoSave()); + GoVIewPageResult> pageResult = new GoVIewPageResult<>(); + pageResult.setCount(Math.toIntExact(infoPage.getTotal())); + List projectInfoResults = infoPage.getRecords() + .stream() + .map(this::toResult) + .collect(Collectors.toList()); + pageResult.setData(projectInfoResults); + return pageResult; + } + + /** + * 获取项目列表分页 (后台) + */ + public PageResult pageByAdmin(PageParam pageParam, ProjectInfoSave query) { + Page infoPage = projectInfoManager.page(pageParam, query); + return MpUtil.convert2DtoPageResult(infoPage); + } + + /** + * 查询详情(后台) + */ + public ProjectInfoDto findById(Long id) { + return projectInfoManager.findById(id).map(ProjectInfo::toDto).orElseThrow(DataNotExistException::new); + } + + /** + * 获取预览(已发布)数据 + */ + public ProjectInfoResult getPublishData(Long projectId) { + ProjectInfoResult projectInfoResult = projectInfoManager.findById(projectId) + .map(this::toResult) + .orElseThrow(DataNotExistException::new); + ProjectInfoPublish projectInfoPublish = publishManager.findById(projectId) + .orElseThrow(DataNotExistException::new); + if (StrUtil.isBlank(projectInfoPublish.getContent())) { + return null; + } + if (Objects.equals(projectInfoResult.getState(), GoVIewCode.STATE_UN_PUBLISH)) { + return null; + } + return projectInfoResult.setContent(projectInfoPublish.getContent()); + } + + /** + * 获取编辑数据 + */ + public ProjectInfoResult getEditData(Long projectId) { + ProjectInfo projectInfo = projectInfoManager.findById(projectId).orElseThrow(DataNotExistException::new); + if (StrUtil.isBlank(projectInfo.getContent())) { + return null; + } + return this.toResult(projectInfo); + } + + /** + * 更新项目数据 + */ + @SuppressWarnings("unchecked") + @Transactional(rollbackFor = Exception.class) + public void update(ProjectInfoSave param) { + ProjectInfo init = ProjectInfo.init(param); + ProjectInfo projectInfo = projectInfoManager.findById(param.getProjectId()) + .orElseThrow(DataNotExistException::new); + CopyOptions copyOptions = CopyOptions.create().ignoreNullValue().setIgnoreProperties(ProjectInfo::getVersion); + BeanUtil.copyProperties(init, projectInfo, copyOptions); + projectInfo.setEdit(true); + projectInfoManager.updateById(projectInfo); + } + + /** + * 更新项目数据 (后台) + */ + @Transactional(rollbackFor = Exception.class) + public void updateByAdmin(ProjectInfoParam param) { + ProjectInfo projectInfo = projectInfoManager.findById(param.getId()).orElseThrow(DataNotExistException::new); + projectInfo.setName(param.getName()).setRemark(param.getRemark()); + projectInfoManager.updateById(projectInfo); + } + + /** + * 发布 + */ + @Transactional(rollbackFor = Exception.class) + public void publish(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + projectInfo.setState(GoVIewCode.STATE_PUBLISH).setEdit(false); + projectInfoManager.updateById(projectInfo); + } + + /** + * 取消发布 + */ + @Transactional(rollbackFor = Exception.class) + public void unPublish(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + projectInfo.setState(GoVIewCode.STATE_UN_PUBLISH); + projectInfoManager.updateById(projectInfo); + } + + /** + * 重置编辑数据为已发布的内容 + */ + public void reset() { + + } + + /** + * 复制 + */ + @Transactional(rollbackFor = Exception.class) + public void copy(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + ProjectInfoPublish projectInfoPublish = publishManager.findById(id).orElseThrow(DataNotExistException::new); + ProjectInfo newProjectInfo = new ProjectInfo().setName(projectInfo.getName() + "复制") + .setContent(projectInfo.getContent()) + .setRemark(projectInfo.getRemark()) + .setState(projectInfo.getState()) + .setEdit(false) + .setIndexImage(projectInfo.getIndexImage()); + projectInfoManager.save(newProjectInfo); + ProjectInfoPublish newProjectInfoPublish = new ProjectInfoPublish().setContent(projectInfoPublish.getContent()); + newProjectInfoPublish.setId(newProjectInfo.getId()); + publishManager.save(newProjectInfoPublish); + } + + /** + * 应用编辑中的信息 + */ + @Transactional(rollbackFor = Exception.class) + public void enableEditContent(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + projectInfo.setEdit(false); + ProjectInfoPublish publish = publishManager.findById(id).orElseThrow(DataNotExistException::new); + publish.setContent(projectInfo.getContent()); + projectInfoManager.updateById(projectInfo); + publishManager.updateById(publish); + } + + /** + * 重置编辑中的信息 + */ + @Transactional(rollbackFor = Exception.class) + public void resetEditContent(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + projectInfo.setEdit(false); + ProjectInfoPublish publish = publishManager.findById(id).orElseThrow(DataNotExistException::new); + projectInfo.setContent(publish.getContent()); + projectInfoManager.updateById(projectInfo); + } + + /** + * 删除 + */ + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); + if (Objects.equals(projectInfo.getState(), GoVIewCode.STATE_PUBLISH)) { + throw new BizException("已发布的无法删除"); + } + projectInfoManager.deleteById(id); + publishManager.deleteById(id); + } + + /** + * 转换成Result + */ + private ProjectInfoResult toResult(ProjectInfo projectInfo) { + ProjectInfoResult projectInfoResult = new ProjectInfoResult().setId(projectInfo.getId()) + .setProjectName(projectInfo.getName()) + .setState(projectInfo.getState()) + .setContent(projectInfo.getContent()) + .setRemarks(projectInfo.getRemark()); + // 转换访问地址 +// String filePreviewUrlPrefix = fileUploadService.getFilePreviewUrlPrefix(); + String filePreviewUrlPrefix = "fileUploadService.getFilePreviewUrlPrefix()"; + if (Objects.nonNull(projectInfo.getIndexImage())) { + projectInfoResult.setIndexImage(filePreviewUrlPrefix + projectInfo.getIndexImage()); + } + return projectInfoResult; + } + + /** + * GoView服务地址 + */ + public String getGoViewUrl() { + String serverUrl = paramService.getValue("FileServerUrl"); + if (StrUtil.isBlank(serverUrl)) { + serverUrl = visualizationProperties.getGoViewUrl(); + } + return serverUrl; + + } + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/GoVIewPageResult.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/GoVIewPageResult.java new file mode 100644 index 000000000..76149afc6 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/GoVIewPageResult.java @@ -0,0 +1,22 @@ +package cn.bootx.platform.visualization.dto; + +import cn.bootx.platform.common.core.rest.ResResult; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * GoView分页 + * + * @author xxm + * @since 2023/2/21 + */ +@Getter +@Setter +@ToString +public class GoVIewPageResult extends ResResult { + + /** 数据条数 */ + private int count; + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/OssInfo.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/OssInfo.java similarity index 84% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/OssInfo.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/OssInfo.java index 7672517b6..02bfcc026 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/OssInfo.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/OssInfo.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.dto; +package cn.bootx.platform.visualization.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 文件上传oss信息 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoDto.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoDto.java similarity index 75% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoDto.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoDto.java index b4863515f..cf9225489 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoDto.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoDto.java @@ -1,6 +1,7 @@ -package cn.bootx.visualization.dto; +package cn.bootx.platform.visualization.dto; -import cn.bootx.common.core.rest.dto.BaseDto; +import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.visualization.code.GoVIewCode; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -10,7 +11,7 @@ * 项目大屏信息 * * @author xxm - * @date 2023/2/24 + * @since 2023/2/24 */ @EqualsAndHashCode(callSuper = true) @Data @@ -23,7 +24,7 @@ public class ProjectInfoDto extends BaseDto { /** * 发布状态 - * @see cn.bootx.visualization.code.GoVIewCode + * @see GoVIewCode */ private Integer state; diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoResult.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoResult.java similarity index 91% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoResult.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoResult.java index ca671291a..2e5a825b6 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/ProjectInfoResult.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/dto/ProjectInfoResult.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.dto; +package cn.bootx.platform.visualization.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 项目大屏信息 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/login/GoViewLoginAuthentication.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/login/GoViewLoginAuthentication.java new file mode 100644 index 000000000..90533aea4 --- /dev/null +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/login/GoViewLoginAuthentication.java @@ -0,0 +1,34 @@ +package cn.bootx.platform.visualization.login; + +import cn.bootx.platform.iam.core.auth.login.PasswordLoginHandler; +import cn.bootx.platform.starter.auth.code.AuthLoginTypeCode; +import cn.bootx.platform.starter.auth.entity.LoginAuthContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author xxm + * @since 2023/2/16 + */ +@Slf4j +@Component +public class GoViewLoginAuthentication extends PasswordLoginHandler { + + public GoViewLoginAuthentication() { + super(); + } + + /** + * 获取终端编码 + */ + @Override + public String getLoginType() { + return AuthLoginTypeCode.PASSWORD_GO_VIEW; + } + + @Override + public void authenticationBefore(LoginAuthContext context) { + // 去除验证码的校验 + } + +} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/CreateParam.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/CreateParam.java similarity index 77% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/CreateParam.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/CreateParam.java index 5548cd834..c8b986dd4 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/CreateParam.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/CreateParam.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.param; +package cn.bootx.platform.visualization.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -7,14 +7,14 @@ * GoView项目创建参数 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @Data @Schema(description = "GoView项目创建参数") public class CreateParam { @Schema(description = "项目名称") - private String projectName; + private String name; @Schema(description = "备注") private String remark; diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoParam.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoParam.java similarity index 87% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoParam.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoParam.java index e93d3edfd..229d2a621 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoParam.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoParam.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.param; +package cn.bootx.platform.visualization.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -6,7 +6,7 @@ /** * @author xxm - * @date 2023/3/3 + * @since 2023/3/3 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoSave.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoSave.java similarity index 91% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoSave.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoSave.java index 2cacd236f..2fc46f8aa 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/ProjectInfoSave.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/ProjectInfoSave.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.param; +package cn.bootx.platform.visualization.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -10,7 +10,7 @@ * 大屏更新参数 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/PublishParam.java b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/PublishParam.java similarity index 85% rename from bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/PublishParam.java rename to bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/PublishParam.java index 38eab95e8..8378e5074 100644 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/param/PublishParam.java +++ b/bootx-services/service-visualization/src/main/java/cn/bootx/platform/visualization/param/PublishParam.java @@ -1,4 +1,4 @@ -package cn.bootx.visualization.param; +package cn.bootx.platform.visualization.param; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,7 +8,7 @@ * 发布/取消发布参数 * * @author xxm - * @date 2023/2/21 + * @since 2023/2/21 */ @Data @Accessors(chain = true) diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/code/GoVIewCode.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/code/GoVIewCode.java deleted file mode 100644 index 5da22b621..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/code/GoVIewCode.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.bootx.visualization.code; - -/** - * GoVIew大屏相关常量 - * - * @author xxm - * @date 2023/2/21 - */ -public interface GoVIewCode { - - /** 发布 */ - int STATE_PUBLISH = 1; - - /** 未发布 */ - int STATE_UN_PUBLISH = -1; - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewController.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewController.java deleted file mode 100644 index d5960ef07..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/controller/GoViewController.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.bootx.visualization.controller; - -import cn.bootx.common.core.annotation.IgnoreAuth; -import cn.bootx.common.core.rest.Res; -import cn.bootx.common.core.rest.ResResult; -import cn.bootx.visualization.core.service.ProjectInfoService; -import cn.bootx.visualization.dto.OssInfo; -import cn.bootx.visualization.dto.GoVIewPageResult; -import cn.bootx.visualization.dto.ProjectInfoResult; -import cn.bootx.visualization.param.ProjectInfoSave; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * GoView可视化大屏对接接口 - * - * @author xxm - * @date 2023/2/21 - */ -@Validated -@Tag(name = "GoView可视化大屏对接接口") -@RestController -@RequestMapping("/goview") -@RequiredArgsConstructor -public class GoViewController { - - private final ProjectInfoService projectInfoService; - - @IgnoreAuth - @Operation(summary = "获取文件oss存储信息") - @GetMapping("/getOssInfo") - public ResResult getOssInfo() { - return Res.ok(projectInfoService.getOssInfo()); - } - - @Operation(summary = "获取项目列表分页 ") - @GetMapping("/page") - public GoVIewPageResult> page(Integer page, Integer limit) { - return projectInfoService.pageByGoVIew(page, limit); - } - - @IgnoreAuth - @Operation(summary = "获取发布的数据(报表内容为空返回null)") - @GetMapping("/getPublishData") - public ResResult getPublishData(Long projectId) { - return Res.ok(projectInfoService.getPublishData(projectId)); - } - - @Operation(summary = "获取编辑时的数据(报表内容为空返回null)") - @GetMapping("/getEditData") - public ResResult getEditData(Long projectId) { - return Res.ok(projectInfoService.getEditData(projectId)); - } - - @Operation(summary = "更新数据") - @PostMapping("/update") - public ResResult update(@RequestBody ProjectInfoSave param) { - projectInfoService.update(param); - return Res.ok(); - } - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/convert/GoViewConvert.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/convert/GoViewConvert.java deleted file mode 100644 index fa9782fab..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/convert/GoViewConvert.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.visualization.core.convert; - -import cn.bootx.visualization.core.entity.ProjectInfo; -import cn.bootx.visualization.dto.ProjectInfoDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 转换 - * - * @author xxm - * @date 2023/3/2 - */ -@Mapper -public interface GoViewConvert { - - GoViewConvert CONVERT = Mappers.getMapper(GoViewConvert.class); - - ProjectInfoDto convert(ProjectInfo in); - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoManager.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoManager.java deleted file mode 100644 index 214bd68d3..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoManager.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.visualization.core.dao; - -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.base.MpIdEntity; -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.visualization.core.entity.ProjectInfo; -import cn.bootx.visualization.param.ProjectInfoSave; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.springframework.stereotype.Repository; - -import java.util.Objects; - -/** - * @author xxm - * @date 2023/2/21 - */ -@Repository -public class ProjectInfoManager extends BaseManager { - - /** - * 分页 - */ - public Page page(PageParam pageParam, ProjectInfoSave query) { - Page mpPage = MpUtil.getMpPage(pageParam, ProjectInfo.class); - return this.lambdaQuery() - .select(this.getEntityClass(), MpUtil::excludeBigField) - .orderByDesc(MpIdEntity::getId) - .like(Objects.nonNull(query.getProjectId()), MpIdEntity::getId, query.getProjectId()) - .like(StrUtil.isNotBlank(query.getName()), ProjectInfo::getName, query.getName()) - .eq(Objects.nonNull(query.getState()), ProjectInfo::getState, query.getState()) - .page(mpPage); - } - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoMapper.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoMapper.java deleted file mode 100644 index e2ad3da7d..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.visualization.core.dao; - -import cn.bootx.visualization.core.entity.ProjectInfo; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2023/2/21 - */ -@Mapper -public interface ProjectInfoMapper extends BaseMapper { - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishManager.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishManager.java deleted file mode 100644 index 3ebf56e9e..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishManager.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.visualization.core.dao; - -import cn.bootx.common.mybatisplus.impl.BaseManager; -import cn.bootx.visualization.core.entity.ProjectInfoPublish; -import org.springframework.stereotype.Repository; - -/** - * @author xxm - * @date 2023/2/24 - */ -@Repository -public class ProjectInfoPublishManager extends BaseManager { - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishMapper.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishMapper.java deleted file mode 100644 index 5189968e2..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/dao/ProjectInfoPublishMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.visualization.core.dao; - -import cn.bootx.visualization.core.entity.ProjectInfoPublish; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @date 2023/2/24 - */ -@Mapper -public interface ProjectInfoPublishMapper extends BaseMapper { - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfo.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfo.java deleted file mode 100644 index 73079ee4d..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/entity/ProjectInfo.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.bootx.visualization.core.entity; - -import cn.bootx.common.core.annotation.BigField; -import cn.bootx.common.core.annotation.actable.Column; -import cn.bootx.common.core.annotation.actable.Table; -import cn.bootx.common.core.code.actable.MySqlFieldType; -import cn.bootx.common.core.function.EntityBaseFunction; -import cn.bootx.common.core.util.CollUtil; -import cn.bootx.common.jackson.util.JacksonUtil; -import cn.bootx.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.visualization.core.convert.GoViewConvert; -import cn.bootx.visualization.dto.ProjectInfoDto; -import cn.bootx.visualization.param.ProjectInfoSave; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 自定义大屏信息 - * - * @author xxm - * @date 2023/2/21 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("report_project_info") -public class ProjectInfo extends MpBaseEntity implements EntityBaseFunction { - - /** 项目名称 */ - private String name; - - /** - * 发布状态 - * @see cn.bootx.visualization.code.GoVIewCode - */ - private Integer state; - - /** 是否在编辑中 */ - private Boolean edit; - - /** 报表内容 */ - @BigField - private String content; - - /** 预览图片id */ - private Long indexImage; - - /** 备注 */ - private String remark; - - public static ProjectInfo init(ProjectInfoSave param) { - ProjectInfo entity = new ProjectInfo().setName(param.getName()) - .setIndexImage(param.getIndexImage()) - .setRemark(param.getRemark()); - entity.setId(param.getProjectId()); - if (CollUtil.isNotEmpty(param.getContent())) { - entity.setContent(JacksonUtil.toJson(param.getContent())); - } - return entity; - } - - /** - * 转换 - */ - @Override - public ProjectInfoDto toDto() { - return GoViewConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/service/ProjectInfoService.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/service/ProjectInfoService.java deleted file mode 100644 index 9205a7c64..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/core/service/ProjectInfoService.java +++ /dev/null @@ -1,270 +0,0 @@ -package cn.bootx.visualization.core.service; - -import cn.bootx.common.core.exception.BizException; -import cn.bootx.common.core.exception.DataNotExistException; -import cn.bootx.common.core.rest.PageResult; -import cn.bootx.common.core.rest.param.PageParam; -import cn.bootx.common.mybatisplus.util.MpUtil; -import cn.bootx.starter.file.service.FileUploadService; -import cn.bootx.visualization.code.GoVIewCode; -import cn.bootx.visualization.configuration.VisualizationProperties; -import cn.bootx.visualization.core.dao.ProjectInfoManager; -import cn.bootx.visualization.core.dao.ProjectInfoPublishManager; -import cn.bootx.visualization.core.entity.ProjectInfo; -import cn.bootx.visualization.core.entity.ProjectInfoPublish; -import cn.bootx.visualization.dto.GoVIewPageResult; -import cn.bootx.visualization.dto.OssInfo; -import cn.bootx.visualization.dto.ProjectInfoDto; -import cn.bootx.visualization.dto.ProjectInfoResult; -import cn.bootx.visualization.param.CreateParam; -import cn.bootx.visualization.param.ProjectInfoParam; -import cn.bootx.visualization.param.ProjectInfoSave; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 自定义大屏数据接口 - * - * @author xxm - * @date 2023/2/21 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class ProjectInfoService { - - private final FileUploadService fileUploadService; - - private final VisualizationProperties visualizationProperties; - - private final ProjectInfoManager projectInfoManager; - - private final ProjectInfoPublishManager publishManager; - - /** - * 获取文件上传oss信息 - */ - public OssInfo getOssInfo() { - String filePreviewUrlPrefix = fileUploadService.getFilePreviewUrlPrefix(); - return new OssInfo().setBucketURL(filePreviewUrlPrefix); - } - - /** - * 创建项目 - */ - @Transactional(rollbackFor = Exception.class) - public ProjectInfoResult create(CreateParam param) { - ProjectInfo info = new ProjectInfo().setState(GoVIewCode.STATE_UN_PUBLISH) - .setEdit(false) - .setName(param.getProjectName()) - .setRemark(param.getRemark()); - projectInfoManager.save(info); - ProjectInfoPublish projectInfoPublish = new ProjectInfoPublish(); - projectInfoPublish.setId(info.getId()); - publishManager.save(projectInfoPublish); - return this.toResult(info); - } - - /** - * 获取项目列表分页 (大屏) - */ - public GoVIewPageResult> pageByGoVIew(Integer page, Integer limit) { - Page infoPage = projectInfoManager.page(new PageParam(page, limit), new ProjectInfoSave()); - GoVIewPageResult> pageResult = new GoVIewPageResult<>(); - pageResult.setCount(Math.toIntExact(infoPage.getTotal())); - List projectInfoResults = infoPage.getRecords() - .stream() - .map(this::toResult) - .collect(Collectors.toList()); - pageResult.setData(projectInfoResults); - return pageResult; - } - - /** - * 获取项目列表分页 (后台) - */ - public PageResult pageByAdmin(PageParam pageParam, ProjectInfoSave query) { - Page infoPage = projectInfoManager.page(pageParam, query); - return MpUtil.convert2DtoPageResult(infoPage); - } - - /** - * 查询详情(后台) - */ - public ProjectInfoDto findById(Long id) { - return projectInfoManager.findById(id).map(ProjectInfo::toDto).orElseThrow(DataNotExistException::new); - } - - /** - * 获取预览(已发布)数据 - */ - public ProjectInfoResult getPublishData(Long projectId) { - ProjectInfoResult projectInfoResult = projectInfoManager.findById(projectId) - .map(this::toResult) - .orElseThrow(DataNotExistException::new); - ProjectInfoPublish projectInfoPublish = publishManager.findById(projectId) - .orElseThrow(DataNotExistException::new); - if (StrUtil.isBlank(projectInfoPublish.getContent())) { - return null; - } - if (Objects.equals(projectInfoResult.getState(), GoVIewCode.STATE_UN_PUBLISH)) { - return null; - } - return projectInfoResult.setContent(projectInfoPublish.getContent()); - } - - /** - * 获取编辑数据 - */ - public ProjectInfoResult getEditData(Long projectId) { - ProjectInfo projectInfo = projectInfoManager.findById(projectId).orElseThrow(DataNotExistException::new); - if (StrUtil.isBlank(projectInfo.getContent())) { - return null; - } - return this.toResult(projectInfo); - } - - /** - * 更新项目数据 - */ - @SuppressWarnings("unchecked") - @Transactional(rollbackFor = Exception.class) - public void update(ProjectInfoSave param) { - ProjectInfo init = ProjectInfo.init(param); - ProjectInfo projectInfo = projectInfoManager.findById(param.getProjectId()) - .orElseThrow(DataNotExistException::new); - CopyOptions copyOptions = CopyOptions.create().ignoreNullValue().setIgnoreProperties(ProjectInfo::getVersion); - BeanUtil.copyProperties(init, projectInfo, copyOptions); - projectInfo.setEdit(true); - projectInfoManager.updateById(projectInfo); - } - - /** - * 更新项目数据 (后台) - */ - @Transactional(rollbackFor = Exception.class) - public void updateByAdmin(ProjectInfoParam param) { - ProjectInfo projectInfo = projectInfoManager.findById(param.getId()).orElseThrow(DataNotExistException::new); - projectInfo.setName(param.getName()).setRemark(param.getRemark()); - projectInfoManager.updateById(projectInfo); - } - - /** - * 发布 - */ - @Transactional(rollbackFor = Exception.class) - public void publish(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - projectInfo.setState(GoVIewCode.STATE_PUBLISH).setEdit(false); - projectInfoManager.updateById(projectInfo); - } - - /** - * 取消发布 - */ - @Transactional(rollbackFor = Exception.class) - public void unPublish(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - projectInfo.setState(GoVIewCode.STATE_UN_PUBLISH); - projectInfoManager.updateById(projectInfo); - } - - /** - * 重置编辑数据为已发布的内容 - */ - public void reset() { - - } - - /** - * 复制 - */ - @Transactional(rollbackFor = Exception.class) - public void copy(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - ProjectInfoPublish projectInfoPublish = publishManager.findById(id).orElseThrow(DataNotExistException::new); - ProjectInfo newProjectInfo = new ProjectInfo().setName(projectInfo.getName() + "复制") - .setContent(projectInfo.getContent()) - .setRemark(projectInfo.getRemark()) - .setState(projectInfo.getState()) - .setEdit(false) - .setIndexImage(projectInfo.getIndexImage()); - projectInfoManager.save(newProjectInfo); - ProjectInfoPublish newProjectInfoPublish = new ProjectInfoPublish().setContent(projectInfoPublish.getContent()); - newProjectInfoPublish.setId(newProjectInfo.getId()); - publishManager.save(newProjectInfoPublish); - } - - /** - * 应用编辑中的信息 - */ - @Transactional(rollbackFor = Exception.class) - public void enableEditContent(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - projectInfo.setEdit(false); - ProjectInfoPublish publish = publishManager.findById(id).orElseThrow(DataNotExistException::new); - publish.setContent(projectInfo.getContent()); - projectInfoManager.updateById(projectInfo); - publishManager.updateById(publish); - } - - /** - * 重置编辑中的信息 - */ - @Transactional(rollbackFor = Exception.class) - public void resetEditContent(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - projectInfo.setEdit(false); - ProjectInfoPublish publish = publishManager.findById(id).orElseThrow(DataNotExistException::new); - projectInfo.setContent(publish.getContent()); - projectInfoManager.updateById(projectInfo); - } - - /** - * 删除 - */ - @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - ProjectInfo projectInfo = projectInfoManager.findById(id).orElseThrow(DataNotExistException::new); - if (Objects.equals(projectInfo.getState(), GoVIewCode.STATE_PUBLISH)) { - throw new BizException("已发布的无法删除"); - } - projectInfoManager.deleteById(id); - publishManager.deleteById(id); - } - - /** - * 转换成Result - */ - private ProjectInfoResult toResult(ProjectInfo projectInfo) { - ProjectInfoResult projectInfoResult = new ProjectInfoResult().setId(projectInfo.getId()) - .setProjectName(projectInfo.getName()) - .setState(projectInfo.getState()) - .setContent(projectInfo.getContent()) - .setRemarks(projectInfo.getRemark()); - // 转换访问地址 - String filePreviewUrlPrefix = fileUploadService.getFilePreviewUrlPrefix(); - if (Objects.nonNull(projectInfo.getIndexImage())) { - projectInfoResult.setIndexImage(filePreviewUrlPrefix + projectInfo.getIndexImage()); - } - return projectInfoResult; - } - - /** - * GoView服务地址 - */ - public String getGoViewUrl() { - return visualizationProperties.getGoViewUrl(); - } - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/GoVIewPageResult.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/GoVIewPageResult.java deleted file mode 100644 index 94a1157e4..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/dto/GoVIewPageResult.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.bootx.visualization.dto; - -import cn.bootx.common.core.rest.ResResult; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; - -/** - * GoView分页 - * - * @author xxm - * @date 2023/2/21 - */ -@Getter -@Setter -@ToString -public class GoVIewPageResult extends ResResult { - - /** 数据条数 */ - private int count; - -} diff --git a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/login/GoViewLoginAuthentication.java b/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/login/GoViewLoginAuthentication.java deleted file mode 100644 index d56dfb1be..000000000 --- a/bootx-services/service-visualization/src/main/java/cn/bootx/visualization/login/GoViewLoginAuthentication.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.visualization.login; - -import cn.bootx.baseapi.core.captcha.service.CaptchaService; -import cn.bootx.iam.core.auth.login.PasswordLoginHandler; -import cn.bootx.iam.core.user.service.UserAdminService; -import cn.bootx.iam.core.user.service.UserQueryService; -import cn.bootx.starter.auth.code.AuthLoginTypeCode; -import cn.bootx.starter.auth.entity.LoginAuthContext; -import cn.bootx.starter.auth.util.PasswordEncoder; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @author xxm - * @date 2023/2/16 - */ -@Slf4j -@Component -public class GoViewLoginAuthentication extends PasswordLoginHandler { - - public GoViewLoginAuthentication(PasswordEncoder passwordEncoder, UserAdminService userAdminService, - UserQueryService userQueryService, CaptchaService captchaService) { - super(passwordEncoder, userAdminService, userQueryService, captchaService); - } - - /** - * 获取终端编码 - */ - @Override - public String getLoginType() { - return AuthLoginTypeCode.PASSWORD_GO_VIEW; - } - - @Override - public void authenticationBefore(LoginAuthContext context) { - // 去除验证码的校验 - } - -} diff --git a/bootx-services/service-visualization/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-services/service-visualization/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6260cde58..827a55159 100644 --- a/bootx-services/service-visualization/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/bootx-services/service-visualization/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -cn.bootx.visualization.VisualizationApplication +cn.bootx.platform.visualization.VisualizationApplication diff --git a/bootx-start/pom.xml b/bootx-start/pom.xml index c466332fd..b0a8ecacb 100644 --- a/bootx-start/pom.xml +++ b/bootx-start/pom.xml @@ -4,14 +4,25 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> cn.bootx.platform - bootx-platform - 1.2.3 + bootx-platform-parent + 1.3.6.2 4.0.0 bootx-start jar + + + true + + + + + org.projectlombok + lombok + provided + org.springframework.boot @@ -30,12 +41,12 @@ spring-boot-starter-undertow - - - - - - + + + org.flywaydb + flyway-core + ${flyway.version} + @@ -44,6 +55,13 @@ ${bootx-platform.version} + + + cn.bootx.platform + service-miniapp + ${bootx-platform.version} + + @@ -57,6 +75,13 @@ common-starter-monitor + + + io.minio + minio + ${minio.version} + + @@ -64,6 +89,12 @@ xml-apis ${xml-apis.version} + + + com.plumelog + plumelog-logback + ${plumelog.version} + diff --git a/bootx-start/src/main/java/cn/bootx/start/BootxApplication.java b/bootx-start/src/main/java/cn/bootx/platform/start/BootxApplication.java similarity index 83% rename from bootx-start/src/main/java/cn/bootx/start/BootxApplication.java rename to bootx-start/src/main/java/cn/bootx/platform/start/BootxApplication.java index 53605bddf..fba1f97fb 100644 --- a/bootx-start/src/main/java/cn/bootx/start/BootxApplication.java +++ b/bootx-start/src/main/java/cn/bootx/platform/start/BootxApplication.java @@ -1,4 +1,4 @@ -package cn.bootx.start; +package cn.bootx.platform.start; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; @@ -14,7 +14,7 @@ * 启动类 * * @author xxm - * @date 2021/7/27 + * @since 2021/7/27 */ @Slf4j @SpringBootApplication @@ -34,12 +34,9 @@ public static void main(String[] args) throws UnknownHostException { String appInfo = StrUtil.format("应用 '{}' 运行成功! \n\t", appName); // swagger栏 String swagger = StrUtil.format("Swagger文档: \t\thttp://{}:{}{}{}/doc.html\n\t", host, port, contextPath, path); - // plumelog栏 - String plumelog = StrUtil.format("PlumeLog日志管理: \t\thttp://{}:{}{}{}/plumelog/#/", host, port, contextPath, - path); - log.info("\n----------------------------------------------------------\n\t" + "{}{}{} \n" - + "----------------------------------------------------------", appInfo, swagger, plumelog); + log.info("\n----------------------------------------------------------\n\t" + "{}{} \n" + + "----------------------------------------------------------", appInfo, swagger); } } diff --git a/bootx-start/src/main/resources/application-demo.yml b/bootx-start/src/main/resources/application-demo.yml deleted file mode 100644 index 548438bd6..000000000 --- a/bootx-start/src/main/resources/application-demo.yml +++ /dev/null @@ -1,104 +0,0 @@ -server: - port: 9999 -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${MYSQL_URL} - username: ${MYSQL_USERNAME} - password: ${MYSQL_PASSWORD} - redis: - host: ${REDIS_HOST} - port: ${REDIS_PORT} - password : ${REDIS_PASSWORD} - database: ${REDIS_DATABASE} - rabbitmq: - host: ${RABBITMQ_HOST} - port: ${RABBITMQ_PORT} - username: ${RABBITMQ_USERNAME} - password: ${RABBITMQ_PASSWORD} - listener: - simple: - # 重试机制 - retry: - enabled: true - max-attempts: 5 - data: - mongodb: - host: ${MONGODB_HOST} - database: ${MONGODB_DATABASE} - port: ${MONGODB_PORT} - username: ${MONGODB_USERNAME} - password: ${MONGODB_PASSWORD} - #静态资源加载配置 - mvc: - static-path-pattern: /** - web: - resources: - static-locations: classpath:/static/,classpath:/public/ - # 数据库版本管理 - flyway: - # 如果 flyway_schema_history 不存在自动创建 - baseline-on-migrate: true - # 开发模式开启 - enabled: true - # 定时任务 - quartz: - # 持久化方式 - job-store-type: jdbc - #定时任务启动开关,true-开 false-关 - auto-startup: true - #启动时更新己存在的Job - overwrite-existing-jobs: true - properties: - org: - quartz: - scheduler: - instanceName: quartzScheduler - instanceId: AUTO - threadPool: - threadCount: 10 - threadPriority: 5 - threadsInheritContextClassLoaderOfInitializingThread: true -# 项目配置 -bootx: - common: - # 接口文档 - swagger: - enabled: false - # 缓存 - cache: - keys-ttl: - "[iam:user:path]" : 5200 - "[iam:ignore:path]" : 5200 - # 序列生成器 - sequence: - type: jdbc - mqtt: - url: tcp://127.0.0.1:1883 - client-id: bootx - # 自动追加终端id后缀 client@xxx - auto-client-id-suffix: true - starter: - auth: - default-password: 123456 - ignore-urls: - - '/actuator/**' - - '/v3/api-docs/**' - - '/doc.html' - - '/swagger-resources/**' - - '/token/**' - - '/webjars/**' - - '/css/**' - - '/favicon.ico' - - '/error' - # 审计日志存储 - audit-log: - store: mongo - # 文件上传 - file-upload: - upload-type: mongo - mongo: - bucket: fs - # 数据权限 - data-perm: - fieldDecryptKey: "UCrtxSCwYZNCIlav" \ No newline at end of file diff --git a/bootx-start/src/main/resources/application-dev.yml b/bootx-start/src/main/resources/application-dev.yml index 6b598fae3..15689c305 100644 --- a/bootx-start/src/main/resources/application-dev.yml +++ b/bootx-start/src/main/resources/application-dev.yml @@ -23,7 +23,7 @@ spring: # 如果不使用MQ的话, 可以将项目中 @EnableRabbit 给注释掉, 就不会一直报错了 rabbitmq: # 虚拟主机 -# virtual-host: bootx-platform + virtual-host: bootx-platform host: 127.0.0.1 port: 5672 username: guest @@ -79,6 +79,29 @@ logging: level: cn.bootx.**: debug org.springframework.data.mongodb.core: debug + org.springframework.jdbc.core: debug +# 自动建表配置 +table-modify: + update-type: update + scan-package: cn.bootx.platform + database-type: mysql +dromara: + #文件存储配置, + x-file-storage: + #默认使用的存储平台 + default-platform: local + #缩略图后缀,例如【.min.jpg】【.png】 + thumbnail-suffix: ".min.jpg" + local-plus: + # 不启用自带的访问映射, 使用自定义的访问实现 + # 存储平台标识 + - platform: local + enableStorage: true + # 文件存储路径 + storage-path: D:/data/files/ +# Swagger 增强版 +knife4j: + enable: true # 项目配置 bootx: common: @@ -86,7 +109,7 @@ bootx: swagger: enabled: true author: bootx - version: 1.2.3 + version: 1.3.6 title: bootx开发平台单体版 description: bootx-platform开发平台单体版 # basic认证 @@ -94,27 +117,25 @@ bootx: enable: true # 多模块扫码 base-packages: - "[基础API]": cn.bootx.baseapi - "[身份识别和管理]": cn.bootx.iam - "[消息服务]": cn.bootx.notice - "[办公服务]": - - cn.bootx.office - - cn.bootx.starter.flowable - "[支付服务]": cn.bootx.payment - "[演示模块]": cn.bootx.demo - "[可视化大屏]": cn.bootx.visualization + "[基础API]": cn.bootx.platform.baseapi + "[身份识别和管理]": cn.bootx.platform.iam + "[消息服务]": cn.bootx.platform.notice + "[演示模块]": cn.bootx.platform.demo + "[可视化大屏]": cn.bootx.platform.visualization + "[微信小程序]": cn.bootx.platform.miniapp "[第三方对接]": - - cn.bootx.starter.dingtalk - - cn.bootx.starter.wecom - - cn.bootx.starter.wechat + - cn.bootx.platform.starter.dingtalk + - cn.bootx.platform.starter.wecom + - cn.bootx.platform.starter.wechat "[认证与权限]": - - cn.bootx.starter.auth - - cn.bootx.starter.data.perm - "[其他starter组件]": - - cn.bootx.starter.audit.log - - cn.bootx.starter.file - - cn.bootx.starter.quartz - - cn.bootx.starter.monitor + - cn.bootx.platform.starter.auth + - cn.bootx.platform.starter.data.perm + "[其他组件]": + - cn.bootx.platform.starter.audit.log + - cn.bootx.platform.starter.file + - cn.bootx.platform.starter.quartz + - cn.bootx.platform.starter.monitor + - cn.bootx.platform.common.websocket # 缓存 cache: # 默认超时时间 30分钟 @@ -127,6 +148,9 @@ bootx: # 序列生成器 sequence: type: jdbc + range-start: 1 + range-step: 1 + step: 1 # 异常 exception: # 显示详细异常 @@ -134,18 +158,6 @@ bootx: # 是否启用Rabbit, 并不是停用了Rabbit, 需配合 ConditionalOnRabbit 注解使用 rabbit: enable: false - # 表结构自动维护 - actable: - # 数据库类型 - database-type: mysql - # 更新类型 none为不进行任何操作 - update-type: update - # 扫描包路径, 可以用 ,和 ; 分隔 - scan-package: cn.bootx.**.entity - # 指定生成索引前缀 - prefix-index: idx_ - # 指定生成唯一约束前缀 - prefix-unique: uni_ starter: # 三方平台 third: @@ -153,6 +165,7 @@ bootx: ding-talk: app-key: ?? app-secret: ?? + agent-id: 1001 #微信(公众平台) wechat: app-id: ?? @@ -166,6 +179,10 @@ bootx: corp-secret: ?? token: ?? encoding-aes-key: ?? + # 微信小程序 + wechat-applet: + app-id: ?? + app-secret: ?? # 认证 auth: default-password: 123456 @@ -183,7 +200,6 @@ bootx: - '/css/**' - '/error' - '/favicon.ico' - - '/**' # 第三方登录 third-login: ding-talk: @@ -200,26 +216,19 @@ bootx: redirect-uri: http://127.0.0.1:9999/auth/third/callback/weChat client-id: ?? client-secret: ?? - # 审计日志存储 + # 审计日志 audit-log: + # 审计日志存储 store: jdbc + # ip归属地 + ip2region: + # 数据文件路径 + file-path: /data/ip2region/ip2region.xdb + # 查询方式 + search-type: cache # 文件上传 file-upload: - upload-type: local - server-url: http://127.0.0.1:8080 - local: - local-path: /data/file - mongo: - bucket: fs - minio: - # 地址 - endpoint: http://127.0.0.1:9000 - # 账号 - access-key: root - # 密码 - access-secret: password - # 存储桶 需要至少三位 - bucket: bootx + server-url: http://127.0.0.1:9999 # 数据权限 data-perm: field-decrypt-key: "UCrtxSCwYZNCIlav" diff --git a/bootx-start/src/main/resources/application-prod.yml b/bootx-start/src/main/resources/application-prod.yml new file mode 100644 index 000000000..3e55a2a77 --- /dev/null +++ b/bootx-start/src/main/resources/application-prod.yml @@ -0,0 +1,103 @@ +server: + port: 9999 +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${MYSQL_URL} + username: ${MYSQL_USERNAME} + password: ${MYSQL_PASSWORD} + redis: + host: ${REDIS_HOST} + port: ${REDIS_PORT} + password : ${REDIS_PASSWORD} + database: ${REDIS_DATABASE} + rabbitmq: + host: ${RABBITMQ_HOST} + port: ${RABBITMQ_PORT} + username: ${RABBITMQ_USERNAME} + password: ${RABBITMQ_PASSWORD} + listener: + simple: + # 重试机制 + retry: + enabled: true + max-attempts: 5 + data: + mongodb: + host: ${MONGODB_HOST} + database: ${MONGODB_DATABASE} + port: ${MONGODB_PORT} + username: ${MONGODB_USERNAME} + password: ${MONGODB_PASSWORD} + #静态资源加载配置 + mvc: + static-path-pattern: /** + web: + resources: + static-locations: classpath:/static/,classpath:/public/ + # 数据库版本管理 + flyway: + # 如果 flyway_schema_history 不存在自动创建 + baseline-on-migrate: true + # 开发模式开启 + enabled: true + # 定时任务 + quartz: + # 持久化方式 + job-store-type: jdbc + #定时任务启动开关,true-开 false-关 + auto-startup: true + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: quartzScheduler + instanceId: AUTO + threadPool: + threadCount: 10 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true +knife4j: + enable: true + production: true +# 项目配置 +bootx: + common: + # 接口文档 + swagger: + enabled: false + # 缓存 + cache: + keys-ttl: + "[iam:user:path]" : 5200 + "[iam:ignore:path]" : 5200 + # 序列生成器 + sequence: + type: jdbc + starter: + auth: + default-password: 123456 + ignore-urls: + - '/actuator/**' + - '/v3/api-docs/**' + - '/doc.html' + - '/swagger-resources/**' + - '/token/**' + - '/webjars/**' + - '/css/**' + - '/favicon.ico' + - '/error' + # 审计日志存储 + audit-log: + store: mongo + # 文件上传 + file-upload: + upload-type: mongo + mongo: + bucket: fs + # 数据权限 + data-perm: + # AES秘钥 + fieldDecryptKey: "UCrtxSCwYZNCIlav" diff --git a/bootx-start/src/main/resources/application.yml b/bootx-start/src/main/resources/application.yml index 742162786..10ca25dfd 100644 --- a/bootx-start/src/main/resources/application.yml +++ b/bootx-start/src/main/resources/application.yml @@ -15,6 +15,8 @@ spring: flyway: # 默认不启用 enabled: false + # 如果 flyway_schema_history 不存在自动创建 + baseline-on-migrate: false # 对特殊占位符不进行替换 placeholder-replacement: false # mp配置 @@ -30,8 +32,9 @@ mybatis-plus: sa-token: is-print: false token-name: AccessToken -# 工作流 -flowable: - activityFontName: "宋体" - annotation-font-name: "宋体" - label-font-name: "宋体" \ No newline at end of file +# 短信配置 +sms: + # 是否使用redis进行缓存 默认false + redis-cache: true + # 打印banner + is-print: false diff --git a/bootx-start/src/main/resources/db/migration/V1.2.2_230303__release.sql b/bootx-start/src/main/resources/db/migration/V1.2.2_230303__release.sql deleted file mode 100644 index 3ba3dba13..000000000 --- a/bootx-start/src/main/resources/db/migration/V1.2.2_230303__release.sql +++ /dev/null @@ -1,5903 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 阿里 - Source Server Type : MySQL - Source Server Version : 50735 - - Target Server Type : MySQL - Target Server Version : 50735 - File Encoding : 65001 - - Date: 03/03/2023 16:59:26 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for base_area --- ---------------------------- -DROP TABLE IF EXISTS `base_area`; -CREATE TABLE `base_area` ( - `code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '区域名称', - `city_code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '城市编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_city_code`(`city_code`) USING BTREE COMMENT '城市' -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '县区表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_area --- ---------------------------- -INSERT INTO `base_area` VALUES ('110101', '东城区', '1101'); -INSERT INTO `base_area` VALUES ('110102', '西城区', '1101'); -INSERT INTO `base_area` VALUES ('110105', '朝阳区', '1101'); -INSERT INTO `base_area` VALUES ('110106', '丰台区', '1101'); -INSERT INTO `base_area` VALUES ('110107', '石景山区', '1101'); -INSERT INTO `base_area` VALUES ('110108', '海淀区', '1101'); -INSERT INTO `base_area` VALUES ('110109', '门头沟区', '1101'); -INSERT INTO `base_area` VALUES ('110111', '房山区', '1101'); -INSERT INTO `base_area` VALUES ('110112', '通州区', '1101'); -INSERT INTO `base_area` VALUES ('110113', '顺义区', '1101'); -INSERT INTO `base_area` VALUES ('110114', '昌平区', '1101'); -INSERT INTO `base_area` VALUES ('110115', '大兴区', '1101'); -INSERT INTO `base_area` VALUES ('110116', '怀柔区', '1101'); -INSERT INTO `base_area` VALUES ('110117', '平谷区', '1101'); -INSERT INTO `base_area` VALUES ('110118', '密云区', '1101'); -INSERT INTO `base_area` VALUES ('110119', '延庆区', '1101'); -INSERT INTO `base_area` VALUES ('120101', '和平区', '1201'); -INSERT INTO `base_area` VALUES ('120102', '河东区', '1201'); -INSERT INTO `base_area` VALUES ('120103', '河西区', '1201'); -INSERT INTO `base_area` VALUES ('120104', '南开区', '1201'); -INSERT INTO `base_area` VALUES ('120105', '河北区', '1201'); -INSERT INTO `base_area` VALUES ('120106', '红桥区', '1201'); -INSERT INTO `base_area` VALUES ('120110', '东丽区', '1201'); -INSERT INTO `base_area` VALUES ('120111', '西青区', '1201'); -INSERT INTO `base_area` VALUES ('120112', '津南区', '1201'); -INSERT INTO `base_area` VALUES ('120113', '北辰区', '1201'); -INSERT INTO `base_area` VALUES ('120114', '武清区', '1201'); -INSERT INTO `base_area` VALUES ('120115', '宝坻区', '1201'); -INSERT INTO `base_area` VALUES ('120116', '滨海新区', '1201'); -INSERT INTO `base_area` VALUES ('120117', '宁河区', '1201'); -INSERT INTO `base_area` VALUES ('120118', '静海区', '1201'); -INSERT INTO `base_area` VALUES ('120119', '蓟州区', '1201'); -INSERT INTO `base_area` VALUES ('130102', '长安区', '1301'); -INSERT INTO `base_area` VALUES ('130104', '桥西区', '1301'); -INSERT INTO `base_area` VALUES ('130105', '新华区', '1301'); -INSERT INTO `base_area` VALUES ('130107', '井陉矿区', '1301'); -INSERT INTO `base_area` VALUES ('130108', '裕华区', '1301'); -INSERT INTO `base_area` VALUES ('130109', '藁城区', '1301'); -INSERT INTO `base_area` VALUES ('130110', '鹿泉区', '1301'); -INSERT INTO `base_area` VALUES ('130111', '栾城区', '1301'); -INSERT INTO `base_area` VALUES ('130121', '井陉县', '1301'); -INSERT INTO `base_area` VALUES ('130123', '正定县', '1301'); -INSERT INTO `base_area` VALUES ('130125', '行唐县', '1301'); -INSERT INTO `base_area` VALUES ('130126', '灵寿县', '1301'); -INSERT INTO `base_area` VALUES ('130127', '高邑县', '1301'); -INSERT INTO `base_area` VALUES ('130128', '深泽县', '1301'); -INSERT INTO `base_area` VALUES ('130129', '赞皇县', '1301'); -INSERT INTO `base_area` VALUES ('130130', '无极县', '1301'); -INSERT INTO `base_area` VALUES ('130131', '平山县', '1301'); -INSERT INTO `base_area` VALUES ('130132', '元氏县', '1301'); -INSERT INTO `base_area` VALUES ('130133', '赵县', '1301'); -INSERT INTO `base_area` VALUES ('130171', '石家庄高新技术产业开发区', '1301'); -INSERT INTO `base_area` VALUES ('130172', '石家庄循环化工园区', '1301'); -INSERT INTO `base_area` VALUES ('130181', '辛集市', '1301'); -INSERT INTO `base_area` VALUES ('130183', '晋州市', '1301'); -INSERT INTO `base_area` VALUES ('130184', '新乐市', '1301'); -INSERT INTO `base_area` VALUES ('130202', '路南区', '1302'); -INSERT INTO `base_area` VALUES ('130203', '路北区', '1302'); -INSERT INTO `base_area` VALUES ('130204', '古冶区', '1302'); -INSERT INTO `base_area` VALUES ('130205', '开平区', '1302'); -INSERT INTO `base_area` VALUES ('130207', '丰南区', '1302'); -INSERT INTO `base_area` VALUES ('130208', '丰润区', '1302'); -INSERT INTO `base_area` VALUES ('130209', '曹妃甸区', '1302'); -INSERT INTO `base_area` VALUES ('130224', '滦南县', '1302'); -INSERT INTO `base_area` VALUES ('130225', '乐亭县', '1302'); -INSERT INTO `base_area` VALUES ('130227', '迁西县', '1302'); -INSERT INTO `base_area` VALUES ('130229', '玉田县', '1302'); -INSERT INTO `base_area` VALUES ('130271', '河北唐山芦台经济开发区', '1302'); -INSERT INTO `base_area` VALUES ('130272', '唐山市汉沽管理区', '1302'); -INSERT INTO `base_area` VALUES ('130273', '唐山高新技术产业开发区', '1302'); -INSERT INTO `base_area` VALUES ('130274', '河北唐山海港经济开发区', '1302'); -INSERT INTO `base_area` VALUES ('130281', '遵化市', '1302'); -INSERT INTO `base_area` VALUES ('130283', '迁安市', '1302'); -INSERT INTO `base_area` VALUES ('130284', '滦州市', '1302'); -INSERT INTO `base_area` VALUES ('130302', '海港区', '1303'); -INSERT INTO `base_area` VALUES ('130303', '山海关区', '1303'); -INSERT INTO `base_area` VALUES ('130304', '北戴河区', '1303'); -INSERT INTO `base_area` VALUES ('130306', '抚宁区', '1303'); -INSERT INTO `base_area` VALUES ('130321', '青龙满族自治县', '1303'); -INSERT INTO `base_area` VALUES ('130322', '昌黎县', '1303'); -INSERT INTO `base_area` VALUES ('130324', '卢龙县', '1303'); -INSERT INTO `base_area` VALUES ('130371', '秦皇岛市经济技术开发区', '1303'); -INSERT INTO `base_area` VALUES ('130372', '北戴河新区', '1303'); -INSERT INTO `base_area` VALUES ('130402', '邯山区', '1304'); -INSERT INTO `base_area` VALUES ('130403', '丛台区', '1304'); -INSERT INTO `base_area` VALUES ('130404', '复兴区', '1304'); -INSERT INTO `base_area` VALUES ('130406', '峰峰矿区', '1304'); -INSERT INTO `base_area` VALUES ('130407', '肥乡区', '1304'); -INSERT INTO `base_area` VALUES ('130408', '永年区', '1304'); -INSERT INTO `base_area` VALUES ('130423', '临漳县', '1304'); -INSERT INTO `base_area` VALUES ('130424', '成安县', '1304'); -INSERT INTO `base_area` VALUES ('130425', '大名县', '1304'); -INSERT INTO `base_area` VALUES ('130426', '涉县', '1304'); -INSERT INTO `base_area` VALUES ('130427', '磁县', '1304'); -INSERT INTO `base_area` VALUES ('130430', '邱县', '1304'); -INSERT INTO `base_area` VALUES ('130431', '鸡泽县', '1304'); -INSERT INTO `base_area` VALUES ('130432', '广平县', '1304'); -INSERT INTO `base_area` VALUES ('130433', '馆陶县', '1304'); -INSERT INTO `base_area` VALUES ('130434', '魏县', '1304'); -INSERT INTO `base_area` VALUES ('130435', '曲周县', '1304'); -INSERT INTO `base_area` VALUES ('130471', '邯郸经济技术开发区', '1304'); -INSERT INTO `base_area` VALUES ('130473', '邯郸冀南新区', '1304'); -INSERT INTO `base_area` VALUES ('130481', '武安市', '1304'); -INSERT INTO `base_area` VALUES ('130502', '襄都区', '1305'); -INSERT INTO `base_area` VALUES ('130503', '信都区', '1305'); -INSERT INTO `base_area` VALUES ('130505', '任泽区', '1305'); -INSERT INTO `base_area` VALUES ('130506', '南和区', '1305'); -INSERT INTO `base_area` VALUES ('130522', '临城县', '1305'); -INSERT INTO `base_area` VALUES ('130523', '内丘县', '1305'); -INSERT INTO `base_area` VALUES ('130524', '柏乡县', '1305'); -INSERT INTO `base_area` VALUES ('130525', '隆尧县', '1305'); -INSERT INTO `base_area` VALUES ('130528', '宁晋县', '1305'); -INSERT INTO `base_area` VALUES ('130529', '巨鹿县', '1305'); -INSERT INTO `base_area` VALUES ('130530', '新河县', '1305'); -INSERT INTO `base_area` VALUES ('130531', '广宗县', '1305'); -INSERT INTO `base_area` VALUES ('130532', '平乡县', '1305'); -INSERT INTO `base_area` VALUES ('130533', '威县', '1305'); -INSERT INTO `base_area` VALUES ('130534', '清河县', '1305'); -INSERT INTO `base_area` VALUES ('130535', '临西县', '1305'); -INSERT INTO `base_area` VALUES ('130571', '河北邢台经济开发区', '1305'); -INSERT INTO `base_area` VALUES ('130581', '南宫市', '1305'); -INSERT INTO `base_area` VALUES ('130582', '沙河市', '1305'); -INSERT INTO `base_area` VALUES ('130602', '竞秀区', '1306'); -INSERT INTO `base_area` VALUES ('130606', '莲池区', '1306'); -INSERT INTO `base_area` VALUES ('130607', '满城区', '1306'); -INSERT INTO `base_area` VALUES ('130608', '清苑区', '1306'); -INSERT INTO `base_area` VALUES ('130609', '徐水区', '1306'); -INSERT INTO `base_area` VALUES ('130623', '涞水县', '1306'); -INSERT INTO `base_area` VALUES ('130624', '阜平县', '1306'); -INSERT INTO `base_area` VALUES ('130626', '定兴县', '1306'); -INSERT INTO `base_area` VALUES ('130627', '唐县', '1306'); -INSERT INTO `base_area` VALUES ('130628', '高阳县', '1306'); -INSERT INTO `base_area` VALUES ('130629', '容城县', '1306'); -INSERT INTO `base_area` VALUES ('130630', '涞源县', '1306'); -INSERT INTO `base_area` VALUES ('130631', '望都县', '1306'); -INSERT INTO `base_area` VALUES ('130632', '安新县', '1306'); -INSERT INTO `base_area` VALUES ('130633', '易县', '1306'); -INSERT INTO `base_area` VALUES ('130634', '曲阳县', '1306'); -INSERT INTO `base_area` VALUES ('130635', '蠡县', '1306'); -INSERT INTO `base_area` VALUES ('130636', '顺平县', '1306'); -INSERT INTO `base_area` VALUES ('130637', '博野县', '1306'); -INSERT INTO `base_area` VALUES ('130638', '雄县', '1306'); -INSERT INTO `base_area` VALUES ('130671', '保定高新技术产业开发区', '1306'); -INSERT INTO `base_area` VALUES ('130672', '保定白沟新城', '1306'); -INSERT INTO `base_area` VALUES ('130681', '涿州市', '1306'); -INSERT INTO `base_area` VALUES ('130682', '定州市', '1306'); -INSERT INTO `base_area` VALUES ('130683', '安国市', '1306'); -INSERT INTO `base_area` VALUES ('130684', '高碑店市', '1306'); -INSERT INTO `base_area` VALUES ('130702', '桥东区', '1307'); -INSERT INTO `base_area` VALUES ('130703', '桥西区', '1307'); -INSERT INTO `base_area` VALUES ('130705', '宣化区', '1307'); -INSERT INTO `base_area` VALUES ('130706', '下花园区', '1307'); -INSERT INTO `base_area` VALUES ('130708', '万全区', '1307'); -INSERT INTO `base_area` VALUES ('130709', '崇礼区', '1307'); -INSERT INTO `base_area` VALUES ('130722', '张北县', '1307'); -INSERT INTO `base_area` VALUES ('130723', '康保县', '1307'); -INSERT INTO `base_area` VALUES ('130724', '沽源县', '1307'); -INSERT INTO `base_area` VALUES ('130725', '尚义县', '1307'); -INSERT INTO `base_area` VALUES ('130726', '蔚县', '1307'); -INSERT INTO `base_area` VALUES ('130727', '阳原县', '1307'); -INSERT INTO `base_area` VALUES ('130728', '怀安县', '1307'); -INSERT INTO `base_area` VALUES ('130730', '怀来县', '1307'); -INSERT INTO `base_area` VALUES ('130731', '涿鹿县', '1307'); -INSERT INTO `base_area` VALUES ('130732', '赤城县', '1307'); -INSERT INTO `base_area` VALUES ('130771', '张家口经济开发区', '1307'); -INSERT INTO `base_area` VALUES ('130772', '张家口市察北管理区', '1307'); -INSERT INTO `base_area` VALUES ('130773', '张家口市塞北管理区', '1307'); -INSERT INTO `base_area` VALUES ('130802', '双桥区', '1308'); -INSERT INTO `base_area` VALUES ('130803', '双滦区', '1308'); -INSERT INTO `base_area` VALUES ('130804', '鹰手营子矿区', '1308'); -INSERT INTO `base_area` VALUES ('130821', '承德县', '1308'); -INSERT INTO `base_area` VALUES ('130822', '兴隆县', '1308'); -INSERT INTO `base_area` VALUES ('130824', '滦平县', '1308'); -INSERT INTO `base_area` VALUES ('130825', '隆化县', '1308'); -INSERT INTO `base_area` VALUES ('130826', '丰宁满族自治县', '1308'); -INSERT INTO `base_area` VALUES ('130827', '宽城满族自治县', '1308'); -INSERT INTO `base_area` VALUES ('130828', '围场满族蒙古族自治县', '1308'); -INSERT INTO `base_area` VALUES ('130871', '承德高新技术产业开发区', '1308'); -INSERT INTO `base_area` VALUES ('130881', '平泉市', '1308'); -INSERT INTO `base_area` VALUES ('130902', '新华区', '1309'); -INSERT INTO `base_area` VALUES ('130903', '运河区', '1309'); -INSERT INTO `base_area` VALUES ('130921', '沧县', '1309'); -INSERT INTO `base_area` VALUES ('130922', '青县', '1309'); -INSERT INTO `base_area` VALUES ('130923', '东光县', '1309'); -INSERT INTO `base_area` VALUES ('130924', '海兴县', '1309'); -INSERT INTO `base_area` VALUES ('130925', '盐山县', '1309'); -INSERT INTO `base_area` VALUES ('130926', '肃宁县', '1309'); -INSERT INTO `base_area` VALUES ('130927', '南皮县', '1309'); -INSERT INTO `base_area` VALUES ('130928', '吴桥县', '1309'); -INSERT INTO `base_area` VALUES ('130929', '献县', '1309'); -INSERT INTO `base_area` VALUES ('130930', '孟村回族自治县', '1309'); -INSERT INTO `base_area` VALUES ('130971', '河北沧州经济开发区', '1309'); -INSERT INTO `base_area` VALUES ('130972', '沧州高新技术产业开发区', '1309'); -INSERT INTO `base_area` VALUES ('130973', '沧州渤海新区', '1309'); -INSERT INTO `base_area` VALUES ('130981', '泊头市', '1309'); -INSERT INTO `base_area` VALUES ('130982', '任丘市', '1309'); -INSERT INTO `base_area` VALUES ('130983', '黄骅市', '1309'); -INSERT INTO `base_area` VALUES ('130984', '河间市', '1309'); -INSERT INTO `base_area` VALUES ('131002', '安次区', '1310'); -INSERT INTO `base_area` VALUES ('131003', '广阳区', '1310'); -INSERT INTO `base_area` VALUES ('131022', '固安县', '1310'); -INSERT INTO `base_area` VALUES ('131023', '永清县', '1310'); -INSERT INTO `base_area` VALUES ('131024', '香河县', '1310'); -INSERT INTO `base_area` VALUES ('131025', '大城县', '1310'); -INSERT INTO `base_area` VALUES ('131026', '文安县', '1310'); -INSERT INTO `base_area` VALUES ('131028', '大厂回族自治县', '1310'); -INSERT INTO `base_area` VALUES ('131071', '廊坊经济技术开发区', '1310'); -INSERT INTO `base_area` VALUES ('131081', '霸州市', '1310'); -INSERT INTO `base_area` VALUES ('131082', '三河市', '1310'); -INSERT INTO `base_area` VALUES ('131102', '桃城区', '1311'); -INSERT INTO `base_area` VALUES ('131103', '冀州区', '1311'); -INSERT INTO `base_area` VALUES ('131121', '枣强县', '1311'); -INSERT INTO `base_area` VALUES ('131122', '武邑县', '1311'); -INSERT INTO `base_area` VALUES ('131123', '武强县', '1311'); -INSERT INTO `base_area` VALUES ('131124', '饶阳县', '1311'); -INSERT INTO `base_area` VALUES ('131125', '安平县', '1311'); -INSERT INTO `base_area` VALUES ('131126', '故城县', '1311'); -INSERT INTO `base_area` VALUES ('131127', '景县', '1311'); -INSERT INTO `base_area` VALUES ('131128', '阜城县', '1311'); -INSERT INTO `base_area` VALUES ('131171', '河北衡水高新技术产业开发区', '1311'); -INSERT INTO `base_area` VALUES ('131172', '衡水滨湖新区', '1311'); -INSERT INTO `base_area` VALUES ('131182', '深州市', '1311'); -INSERT INTO `base_area` VALUES ('140105', '小店区', '1401'); -INSERT INTO `base_area` VALUES ('140106', '迎泽区', '1401'); -INSERT INTO `base_area` VALUES ('140107', '杏花岭区', '1401'); -INSERT INTO `base_area` VALUES ('140108', '尖草坪区', '1401'); -INSERT INTO `base_area` VALUES ('140109', '万柏林区', '1401'); -INSERT INTO `base_area` VALUES ('140110', '晋源区', '1401'); -INSERT INTO `base_area` VALUES ('140121', '清徐县', '1401'); -INSERT INTO `base_area` VALUES ('140122', '阳曲县', '1401'); -INSERT INTO `base_area` VALUES ('140123', '娄烦县', '1401'); -INSERT INTO `base_area` VALUES ('140171', '山西转型综合改革示范区', '1401'); -INSERT INTO `base_area` VALUES ('140181', '古交市', '1401'); -INSERT INTO `base_area` VALUES ('140212', '新荣区', '1402'); -INSERT INTO `base_area` VALUES ('140213', '平城区', '1402'); -INSERT INTO `base_area` VALUES ('140214', '云冈区', '1402'); -INSERT INTO `base_area` VALUES ('140215', '云州区', '1402'); -INSERT INTO `base_area` VALUES ('140221', '阳高县', '1402'); -INSERT INTO `base_area` VALUES ('140222', '天镇县', '1402'); -INSERT INTO `base_area` VALUES ('140223', '广灵县', '1402'); -INSERT INTO `base_area` VALUES ('140224', '灵丘县', '1402'); -INSERT INTO `base_area` VALUES ('140225', '浑源县', '1402'); -INSERT INTO `base_area` VALUES ('140226', '左云县', '1402'); -INSERT INTO `base_area` VALUES ('140271', '山西大同经济开发区', '1402'); -INSERT INTO `base_area` VALUES ('140302', '城区', '1403'); -INSERT INTO `base_area` VALUES ('140303', '矿区', '1403'); -INSERT INTO `base_area` VALUES ('140311', '郊区', '1403'); -INSERT INTO `base_area` VALUES ('140321', '平定县', '1403'); -INSERT INTO `base_area` VALUES ('140322', '盂县', '1403'); -INSERT INTO `base_area` VALUES ('140403', '潞州区', '1404'); -INSERT INTO `base_area` VALUES ('140404', '上党区', '1404'); -INSERT INTO `base_area` VALUES ('140405', '屯留区', '1404'); -INSERT INTO `base_area` VALUES ('140406', '潞城区', '1404'); -INSERT INTO `base_area` VALUES ('140423', '襄垣县', '1404'); -INSERT INTO `base_area` VALUES ('140425', '平顺县', '1404'); -INSERT INTO `base_area` VALUES ('140426', '黎城县', '1404'); -INSERT INTO `base_area` VALUES ('140427', '壶关县', '1404'); -INSERT INTO `base_area` VALUES ('140428', '长子县', '1404'); -INSERT INTO `base_area` VALUES ('140429', '武乡县', '1404'); -INSERT INTO `base_area` VALUES ('140430', '沁县', '1404'); -INSERT INTO `base_area` VALUES ('140431', '沁源县', '1404'); -INSERT INTO `base_area` VALUES ('140471', '山西长治高新技术产业园区', '1404'); -INSERT INTO `base_area` VALUES ('140502', '城区', '1405'); -INSERT INTO `base_area` VALUES ('140521', '沁水县', '1405'); -INSERT INTO `base_area` VALUES ('140522', '阳城县', '1405'); -INSERT INTO `base_area` VALUES ('140524', '陵川县', '1405'); -INSERT INTO `base_area` VALUES ('140525', '泽州县', '1405'); -INSERT INTO `base_area` VALUES ('140581', '高平市', '1405'); -INSERT INTO `base_area` VALUES ('140602', '朔城区', '1406'); -INSERT INTO `base_area` VALUES ('140603', '平鲁区', '1406'); -INSERT INTO `base_area` VALUES ('140621', '山阴县', '1406'); -INSERT INTO `base_area` VALUES ('140622', '应县', '1406'); -INSERT INTO `base_area` VALUES ('140623', '右玉县', '1406'); -INSERT INTO `base_area` VALUES ('140671', '山西朔州经济开发区', '1406'); -INSERT INTO `base_area` VALUES ('140681', '怀仁市', '1406'); -INSERT INTO `base_area` VALUES ('140702', '榆次区', '1407'); -INSERT INTO `base_area` VALUES ('140703', '太谷区', '1407'); -INSERT INTO `base_area` VALUES ('140721', '榆社县', '1407'); -INSERT INTO `base_area` VALUES ('140722', '左权县', '1407'); -INSERT INTO `base_area` VALUES ('140723', '和顺县', '1407'); -INSERT INTO `base_area` VALUES ('140724', '昔阳县', '1407'); -INSERT INTO `base_area` VALUES ('140725', '寿阳县', '1407'); -INSERT INTO `base_area` VALUES ('140727', '祁县', '1407'); -INSERT INTO `base_area` VALUES ('140728', '平遥县', '1407'); -INSERT INTO `base_area` VALUES ('140729', '灵石县', '1407'); -INSERT INTO `base_area` VALUES ('140781', '介休市', '1407'); -INSERT INTO `base_area` VALUES ('140802', '盐湖区', '1408'); -INSERT INTO `base_area` VALUES ('140821', '临猗县', '1408'); -INSERT INTO `base_area` VALUES ('140822', '万荣县', '1408'); -INSERT INTO `base_area` VALUES ('140823', '闻喜县', '1408'); -INSERT INTO `base_area` VALUES ('140824', '稷山县', '1408'); -INSERT INTO `base_area` VALUES ('140825', '新绛县', '1408'); -INSERT INTO `base_area` VALUES ('140826', '绛县', '1408'); -INSERT INTO `base_area` VALUES ('140827', '垣曲县', '1408'); -INSERT INTO `base_area` VALUES ('140828', '夏县', '1408'); -INSERT INTO `base_area` VALUES ('140829', '平陆县', '1408'); -INSERT INTO `base_area` VALUES ('140830', '芮城县', '1408'); -INSERT INTO `base_area` VALUES ('140881', '永济市', '1408'); -INSERT INTO `base_area` VALUES ('140882', '河津市', '1408'); -INSERT INTO `base_area` VALUES ('140902', '忻府区', '1409'); -INSERT INTO `base_area` VALUES ('140921', '定襄县', '1409'); -INSERT INTO `base_area` VALUES ('140922', '五台县', '1409'); -INSERT INTO `base_area` VALUES ('140923', '代县', '1409'); -INSERT INTO `base_area` VALUES ('140924', '繁峙县', '1409'); -INSERT INTO `base_area` VALUES ('140925', '宁武县', '1409'); -INSERT INTO `base_area` VALUES ('140926', '静乐县', '1409'); -INSERT INTO `base_area` VALUES ('140927', '神池县', '1409'); -INSERT INTO `base_area` VALUES ('140928', '五寨县', '1409'); -INSERT INTO `base_area` VALUES ('140929', '岢岚县', '1409'); -INSERT INTO `base_area` VALUES ('140930', '河曲县', '1409'); -INSERT INTO `base_area` VALUES ('140931', '保德县', '1409'); -INSERT INTO `base_area` VALUES ('140932', '偏关县', '1409'); -INSERT INTO `base_area` VALUES ('140971', '五台山风景名胜区', '1409'); -INSERT INTO `base_area` VALUES ('140981', '原平市', '1409'); -INSERT INTO `base_area` VALUES ('141002', '尧都区', '1410'); -INSERT INTO `base_area` VALUES ('141021', '曲沃县', '1410'); -INSERT INTO `base_area` VALUES ('141022', '翼城县', '1410'); -INSERT INTO `base_area` VALUES ('141023', '襄汾县', '1410'); -INSERT INTO `base_area` VALUES ('141024', '洪洞县', '1410'); -INSERT INTO `base_area` VALUES ('141025', '古县', '1410'); -INSERT INTO `base_area` VALUES ('141026', '安泽县', '1410'); -INSERT INTO `base_area` VALUES ('141027', '浮山县', '1410'); -INSERT INTO `base_area` VALUES ('141028', '吉县', '1410'); -INSERT INTO `base_area` VALUES ('141029', '乡宁县', '1410'); -INSERT INTO `base_area` VALUES ('141030', '大宁县', '1410'); -INSERT INTO `base_area` VALUES ('141031', '隰县', '1410'); -INSERT INTO `base_area` VALUES ('141032', '永和县', '1410'); -INSERT INTO `base_area` VALUES ('141033', '蒲县', '1410'); -INSERT INTO `base_area` VALUES ('141034', '汾西县', '1410'); -INSERT INTO `base_area` VALUES ('141081', '侯马市', '1410'); -INSERT INTO `base_area` VALUES ('141082', '霍州市', '1410'); -INSERT INTO `base_area` VALUES ('141102', '离石区', '1411'); -INSERT INTO `base_area` VALUES ('141121', '文水县', '1411'); -INSERT INTO `base_area` VALUES ('141122', '交城县', '1411'); -INSERT INTO `base_area` VALUES ('141123', '兴县', '1411'); -INSERT INTO `base_area` VALUES ('141124', '临县', '1411'); -INSERT INTO `base_area` VALUES ('141125', '柳林县', '1411'); -INSERT INTO `base_area` VALUES ('141126', '石楼县', '1411'); -INSERT INTO `base_area` VALUES ('141127', '岚县', '1411'); -INSERT INTO `base_area` VALUES ('141128', '方山县', '1411'); -INSERT INTO `base_area` VALUES ('141129', '中阳县', '1411'); -INSERT INTO `base_area` VALUES ('141130', '交口县', '1411'); -INSERT INTO `base_area` VALUES ('141181', '孝义市', '1411'); -INSERT INTO `base_area` VALUES ('141182', '汾阳市', '1411'); -INSERT INTO `base_area` VALUES ('150102', '新城区', '1501'); -INSERT INTO `base_area` VALUES ('150103', '回民区', '1501'); -INSERT INTO `base_area` VALUES ('150104', '玉泉区', '1501'); -INSERT INTO `base_area` VALUES ('150105', '赛罕区', '1501'); -INSERT INTO `base_area` VALUES ('150121', '土默特左旗', '1501'); -INSERT INTO `base_area` VALUES ('150122', '托克托县', '1501'); -INSERT INTO `base_area` VALUES ('150123', '和林格尔县', '1501'); -INSERT INTO `base_area` VALUES ('150124', '清水河县', '1501'); -INSERT INTO `base_area` VALUES ('150125', '武川县', '1501'); -INSERT INTO `base_area` VALUES ('150172', '呼和浩特经济技术开发区', '1501'); -INSERT INTO `base_area` VALUES ('150202', '东河区', '1502'); -INSERT INTO `base_area` VALUES ('150203', '昆都仑区', '1502'); -INSERT INTO `base_area` VALUES ('150204', '青山区', '1502'); -INSERT INTO `base_area` VALUES ('150205', '石拐区', '1502'); -INSERT INTO `base_area` VALUES ('150206', '白云鄂博矿区', '1502'); -INSERT INTO `base_area` VALUES ('150207', '九原区', '1502'); -INSERT INTO `base_area` VALUES ('150221', '土默特右旗', '1502'); -INSERT INTO `base_area` VALUES ('150222', '固阳县', '1502'); -INSERT INTO `base_area` VALUES ('150223', '达尔罕茂明安联合旗', '1502'); -INSERT INTO `base_area` VALUES ('150271', '包头稀土高新技术产业开发区', '1502'); -INSERT INTO `base_area` VALUES ('150302', '海勃湾区', '1503'); -INSERT INTO `base_area` VALUES ('150303', '海南区', '1503'); -INSERT INTO `base_area` VALUES ('150304', '乌达区', '1503'); -INSERT INTO `base_area` VALUES ('150402', '红山区', '1504'); -INSERT INTO `base_area` VALUES ('150403', '元宝山区', '1504'); -INSERT INTO `base_area` VALUES ('150404', '松山区', '1504'); -INSERT INTO `base_area` VALUES ('150421', '阿鲁科尔沁旗', '1504'); -INSERT INTO `base_area` VALUES ('150422', '巴林左旗', '1504'); -INSERT INTO `base_area` VALUES ('150423', '巴林右旗', '1504'); -INSERT INTO `base_area` VALUES ('150424', '林西县', '1504'); -INSERT INTO `base_area` VALUES ('150425', '克什克腾旗', '1504'); -INSERT INTO `base_area` VALUES ('150426', '翁牛特旗', '1504'); -INSERT INTO `base_area` VALUES ('150428', '喀喇沁旗', '1504'); -INSERT INTO `base_area` VALUES ('150429', '宁城县', '1504'); -INSERT INTO `base_area` VALUES ('150430', '敖汉旗', '1504'); -INSERT INTO `base_area` VALUES ('150502', '科尔沁区', '1505'); -INSERT INTO `base_area` VALUES ('150521', '科尔沁左翼中旗', '1505'); -INSERT INTO `base_area` VALUES ('150522', '科尔沁左翼后旗', '1505'); -INSERT INTO `base_area` VALUES ('150523', '开鲁县', '1505'); -INSERT INTO `base_area` VALUES ('150524', '库伦旗', '1505'); -INSERT INTO `base_area` VALUES ('150525', '奈曼旗', '1505'); -INSERT INTO `base_area` VALUES ('150526', '扎鲁特旗', '1505'); -INSERT INTO `base_area` VALUES ('150571', '通辽经济技术开发区', '1505'); -INSERT INTO `base_area` VALUES ('150581', '霍林郭勒市', '1505'); -INSERT INTO `base_area` VALUES ('150602', '东胜区', '1506'); -INSERT INTO `base_area` VALUES ('150603', '康巴什区', '1506'); -INSERT INTO `base_area` VALUES ('150621', '达拉特旗', '1506'); -INSERT INTO `base_area` VALUES ('150622', '准格尔旗', '1506'); -INSERT INTO `base_area` VALUES ('150623', '鄂托克前旗', '1506'); -INSERT INTO `base_area` VALUES ('150624', '鄂托克旗', '1506'); -INSERT INTO `base_area` VALUES ('150625', '杭锦旗', '1506'); -INSERT INTO `base_area` VALUES ('150626', '乌审旗', '1506'); -INSERT INTO `base_area` VALUES ('150627', '伊金霍洛旗', '1506'); -INSERT INTO `base_area` VALUES ('150702', '海拉尔区', '1507'); -INSERT INTO `base_area` VALUES ('150703', '扎赉诺尔区', '1507'); -INSERT INTO `base_area` VALUES ('150721', '阿荣旗', '1507'); -INSERT INTO `base_area` VALUES ('150722', '莫力达瓦达斡尔族自治旗', '1507'); -INSERT INTO `base_area` VALUES ('150723', '鄂伦春自治旗', '1507'); -INSERT INTO `base_area` VALUES ('150724', '鄂温克族自治旗', '1507'); -INSERT INTO `base_area` VALUES ('150725', '陈巴尔虎旗', '1507'); -INSERT INTO `base_area` VALUES ('150726', '新巴尔虎左旗', '1507'); -INSERT INTO `base_area` VALUES ('150727', '新巴尔虎右旗', '1507'); -INSERT INTO `base_area` VALUES ('150781', '满洲里市', '1507'); -INSERT INTO `base_area` VALUES ('150782', '牙克石市', '1507'); -INSERT INTO `base_area` VALUES ('150783', '扎兰屯市', '1507'); -INSERT INTO `base_area` VALUES ('150784', '额尔古纳市', '1507'); -INSERT INTO `base_area` VALUES ('150785', '根河市', '1507'); -INSERT INTO `base_area` VALUES ('150802', '临河区', '1508'); -INSERT INTO `base_area` VALUES ('150821', '五原县', '1508'); -INSERT INTO `base_area` VALUES ('150822', '磴口县', '1508'); -INSERT INTO `base_area` VALUES ('150823', '乌拉特前旗', '1508'); -INSERT INTO `base_area` VALUES ('150824', '乌拉特中旗', '1508'); -INSERT INTO `base_area` VALUES ('150825', '乌拉特后旗', '1508'); -INSERT INTO `base_area` VALUES ('150826', '杭锦后旗', '1508'); -INSERT INTO `base_area` VALUES ('150902', '集宁区', '1509'); -INSERT INTO `base_area` VALUES ('150921', '卓资县', '1509'); -INSERT INTO `base_area` VALUES ('150922', '化德县', '1509'); -INSERT INTO `base_area` VALUES ('150923', '商都县', '1509'); -INSERT INTO `base_area` VALUES ('150924', '兴和县', '1509'); -INSERT INTO `base_area` VALUES ('150925', '凉城县', '1509'); -INSERT INTO `base_area` VALUES ('150926', '察哈尔右翼前旗', '1509'); -INSERT INTO `base_area` VALUES ('150927', '察哈尔右翼中旗', '1509'); -INSERT INTO `base_area` VALUES ('150928', '察哈尔右翼后旗', '1509'); -INSERT INTO `base_area` VALUES ('150929', '四子王旗', '1509'); -INSERT INTO `base_area` VALUES ('150981', '丰镇市', '1509'); -INSERT INTO `base_area` VALUES ('152201', '乌兰浩特市', '1522'); -INSERT INTO `base_area` VALUES ('152202', '阿尔山市', '1522'); -INSERT INTO `base_area` VALUES ('152221', '科尔沁右翼前旗', '1522'); -INSERT INTO `base_area` VALUES ('152222', '科尔沁右翼中旗', '1522'); -INSERT INTO `base_area` VALUES ('152223', '扎赉特旗', '1522'); -INSERT INTO `base_area` VALUES ('152224', '突泉县', '1522'); -INSERT INTO `base_area` VALUES ('152501', '二连浩特市', '1525'); -INSERT INTO `base_area` VALUES ('152502', '锡林浩特市', '1525'); -INSERT INTO `base_area` VALUES ('152522', '阿巴嘎旗', '1525'); -INSERT INTO `base_area` VALUES ('152523', '苏尼特左旗', '1525'); -INSERT INTO `base_area` VALUES ('152524', '苏尼特右旗', '1525'); -INSERT INTO `base_area` VALUES ('152525', '东乌珠穆沁旗', '1525'); -INSERT INTO `base_area` VALUES ('152526', '西乌珠穆沁旗', '1525'); -INSERT INTO `base_area` VALUES ('152527', '太仆寺旗', '1525'); -INSERT INTO `base_area` VALUES ('152528', '镶黄旗', '1525'); -INSERT INTO `base_area` VALUES ('152529', '正镶白旗', '1525'); -INSERT INTO `base_area` VALUES ('152530', '正蓝旗', '1525'); -INSERT INTO `base_area` VALUES ('152531', '多伦县', '1525'); -INSERT INTO `base_area` VALUES ('152571', '乌拉盖管委会', '1525'); -INSERT INTO `base_area` VALUES ('152921', '阿拉善左旗', '1529'); -INSERT INTO `base_area` VALUES ('152922', '阿拉善右旗', '1529'); -INSERT INTO `base_area` VALUES ('152923', '额济纳旗', '1529'); -INSERT INTO `base_area` VALUES ('152971', '内蒙古阿拉善高新技术产业开发区', '1529'); -INSERT INTO `base_area` VALUES ('210102', '和平区', '2101'); -INSERT INTO `base_area` VALUES ('210103', '沈河区', '2101'); -INSERT INTO `base_area` VALUES ('210104', '大东区', '2101'); -INSERT INTO `base_area` VALUES ('210105', '皇姑区', '2101'); -INSERT INTO `base_area` VALUES ('210106', '铁西区', '2101'); -INSERT INTO `base_area` VALUES ('210111', '苏家屯区', '2101'); -INSERT INTO `base_area` VALUES ('210112', '浑南区', '2101'); -INSERT INTO `base_area` VALUES ('210113', '沈北新区', '2101'); -INSERT INTO `base_area` VALUES ('210114', '于洪区', '2101'); -INSERT INTO `base_area` VALUES ('210115', '辽中区', '2101'); -INSERT INTO `base_area` VALUES ('210123', '康平县', '2101'); -INSERT INTO `base_area` VALUES ('210124', '法库县', '2101'); -INSERT INTO `base_area` VALUES ('210181', '新民市', '2101'); -INSERT INTO `base_area` VALUES ('210202', '中山区', '2102'); -INSERT INTO `base_area` VALUES ('210203', '西岗区', '2102'); -INSERT INTO `base_area` VALUES ('210204', '沙河口区', '2102'); -INSERT INTO `base_area` VALUES ('210211', '甘井子区', '2102'); -INSERT INTO `base_area` VALUES ('210212', '旅顺口区', '2102'); -INSERT INTO `base_area` VALUES ('210213', '金州区', '2102'); -INSERT INTO `base_area` VALUES ('210214', '普兰店区', '2102'); -INSERT INTO `base_area` VALUES ('210224', '长海县', '2102'); -INSERT INTO `base_area` VALUES ('210281', '瓦房店市', '2102'); -INSERT INTO `base_area` VALUES ('210283', '庄河市', '2102'); -INSERT INTO `base_area` VALUES ('210302', '铁东区', '2103'); -INSERT INTO `base_area` VALUES ('210303', '铁西区', '2103'); -INSERT INTO `base_area` VALUES ('210304', '立山区', '2103'); -INSERT INTO `base_area` VALUES ('210311', '千山区', '2103'); -INSERT INTO `base_area` VALUES ('210321', '台安县', '2103'); -INSERT INTO `base_area` VALUES ('210323', '岫岩满族自治县', '2103'); -INSERT INTO `base_area` VALUES ('210381', '海城市', '2103'); -INSERT INTO `base_area` VALUES ('210402', '新抚区', '2104'); -INSERT INTO `base_area` VALUES ('210403', '东洲区', '2104'); -INSERT INTO `base_area` VALUES ('210404', '望花区', '2104'); -INSERT INTO `base_area` VALUES ('210411', '顺城区', '2104'); -INSERT INTO `base_area` VALUES ('210421', '抚顺县', '2104'); -INSERT INTO `base_area` VALUES ('210422', '新宾满族自治县', '2104'); -INSERT INTO `base_area` VALUES ('210423', '清原满族自治县', '2104'); -INSERT INTO `base_area` VALUES ('210502', '平山区', '2105'); -INSERT INTO `base_area` VALUES ('210503', '溪湖区', '2105'); -INSERT INTO `base_area` VALUES ('210504', '明山区', '2105'); -INSERT INTO `base_area` VALUES ('210505', '南芬区', '2105'); -INSERT INTO `base_area` VALUES ('210521', '本溪满族自治县', '2105'); -INSERT INTO `base_area` VALUES ('210522', '桓仁满族自治县', '2105'); -INSERT INTO `base_area` VALUES ('210602', '元宝区', '2106'); -INSERT INTO `base_area` VALUES ('210603', '振兴区', '2106'); -INSERT INTO `base_area` VALUES ('210604', '振安区', '2106'); -INSERT INTO `base_area` VALUES ('210624', '宽甸满族自治县', '2106'); -INSERT INTO `base_area` VALUES ('210681', '东港市', '2106'); -INSERT INTO `base_area` VALUES ('210682', '凤城市', '2106'); -INSERT INTO `base_area` VALUES ('210702', '古塔区', '2107'); -INSERT INTO `base_area` VALUES ('210703', '凌河区', '2107'); -INSERT INTO `base_area` VALUES ('210711', '太和区', '2107'); -INSERT INTO `base_area` VALUES ('210726', '黑山县', '2107'); -INSERT INTO `base_area` VALUES ('210727', '义县', '2107'); -INSERT INTO `base_area` VALUES ('210781', '凌海市', '2107'); -INSERT INTO `base_area` VALUES ('210782', '北镇市', '2107'); -INSERT INTO `base_area` VALUES ('210802', '站前区', '2108'); -INSERT INTO `base_area` VALUES ('210803', '西市区', '2108'); -INSERT INTO `base_area` VALUES ('210804', '鲅鱼圈区', '2108'); -INSERT INTO `base_area` VALUES ('210811', '老边区', '2108'); -INSERT INTO `base_area` VALUES ('210881', '盖州市', '2108'); -INSERT INTO `base_area` VALUES ('210882', '大石桥市', '2108'); -INSERT INTO `base_area` VALUES ('210902', '海州区', '2109'); -INSERT INTO `base_area` VALUES ('210903', '新邱区', '2109'); -INSERT INTO `base_area` VALUES ('210904', '太平区', '2109'); -INSERT INTO `base_area` VALUES ('210905', '清河门区', '2109'); -INSERT INTO `base_area` VALUES ('210911', '细河区', '2109'); -INSERT INTO `base_area` VALUES ('210921', '阜新蒙古族自治县', '2109'); -INSERT INTO `base_area` VALUES ('210922', '彰武县', '2109'); -INSERT INTO `base_area` VALUES ('211002', '白塔区', '2110'); -INSERT INTO `base_area` VALUES ('211003', '文圣区', '2110'); -INSERT INTO `base_area` VALUES ('211004', '宏伟区', '2110'); -INSERT INTO `base_area` VALUES ('211005', '弓长岭区', '2110'); -INSERT INTO `base_area` VALUES ('211011', '太子河区', '2110'); -INSERT INTO `base_area` VALUES ('211021', '辽阳县', '2110'); -INSERT INTO `base_area` VALUES ('211081', '灯塔市', '2110'); -INSERT INTO `base_area` VALUES ('211102', '双台子区', '2111'); -INSERT INTO `base_area` VALUES ('211103', '兴隆台区', '2111'); -INSERT INTO `base_area` VALUES ('211104', '大洼区', '2111'); -INSERT INTO `base_area` VALUES ('211122', '盘山县', '2111'); -INSERT INTO `base_area` VALUES ('211202', '银州区', '2112'); -INSERT INTO `base_area` VALUES ('211204', '清河区', '2112'); -INSERT INTO `base_area` VALUES ('211221', '铁岭县', '2112'); -INSERT INTO `base_area` VALUES ('211223', '西丰县', '2112'); -INSERT INTO `base_area` VALUES ('211224', '昌图县', '2112'); -INSERT INTO `base_area` VALUES ('211281', '调兵山市', '2112'); -INSERT INTO `base_area` VALUES ('211282', '开原市', '2112'); -INSERT INTO `base_area` VALUES ('211302', '双塔区', '2113'); -INSERT INTO `base_area` VALUES ('211303', '龙城区', '2113'); -INSERT INTO `base_area` VALUES ('211321', '朝阳县', '2113'); -INSERT INTO `base_area` VALUES ('211322', '建平县', '2113'); -INSERT INTO `base_area` VALUES ('211324', '喀喇沁左翼蒙古族自治县', '2113'); -INSERT INTO `base_area` VALUES ('211381', '北票市', '2113'); -INSERT INTO `base_area` VALUES ('211382', '凌源市', '2113'); -INSERT INTO `base_area` VALUES ('211402', '连山区', '2114'); -INSERT INTO `base_area` VALUES ('211403', '龙港区', '2114'); -INSERT INTO `base_area` VALUES ('211404', '南票区', '2114'); -INSERT INTO `base_area` VALUES ('211421', '绥中县', '2114'); -INSERT INTO `base_area` VALUES ('211422', '建昌县', '2114'); -INSERT INTO `base_area` VALUES ('211481', '兴城市', '2114'); -INSERT INTO `base_area` VALUES ('220102', '南关区', '2201'); -INSERT INTO `base_area` VALUES ('220103', '宽城区', '2201'); -INSERT INTO `base_area` VALUES ('220104', '朝阳区', '2201'); -INSERT INTO `base_area` VALUES ('220105', '二道区', '2201'); -INSERT INTO `base_area` VALUES ('220106', '绿园区', '2201'); -INSERT INTO `base_area` VALUES ('220112', '双阳区', '2201'); -INSERT INTO `base_area` VALUES ('220113', '九台区', '2201'); -INSERT INTO `base_area` VALUES ('220122', '农安县', '2201'); -INSERT INTO `base_area` VALUES ('220171', '长春经济技术开发区', '2201'); -INSERT INTO `base_area` VALUES ('220172', '长春净月高新技术产业开发区', '2201'); -INSERT INTO `base_area` VALUES ('220173', '长春高新技术产业开发区', '2201'); -INSERT INTO `base_area` VALUES ('220174', '长春汽车经济技术开发区', '2201'); -INSERT INTO `base_area` VALUES ('220182', '榆树市', '2201'); -INSERT INTO `base_area` VALUES ('220183', '德惠市', '2201'); -INSERT INTO `base_area` VALUES ('220184', '公主岭市', '2201'); -INSERT INTO `base_area` VALUES ('220202', '昌邑区', '2202'); -INSERT INTO `base_area` VALUES ('220203', '龙潭区', '2202'); -INSERT INTO `base_area` VALUES ('220204', '船营区', '2202'); -INSERT INTO `base_area` VALUES ('220211', '丰满区', '2202'); -INSERT INTO `base_area` VALUES ('220221', '永吉县', '2202'); -INSERT INTO `base_area` VALUES ('220271', '吉林经济开发区', '2202'); -INSERT INTO `base_area` VALUES ('220272', '吉林高新技术产业开发区', '2202'); -INSERT INTO `base_area` VALUES ('220273', '吉林中国新加坡食品区', '2202'); -INSERT INTO `base_area` VALUES ('220281', '蛟河市', '2202'); -INSERT INTO `base_area` VALUES ('220282', '桦甸市', '2202'); -INSERT INTO `base_area` VALUES ('220283', '舒兰市', '2202'); -INSERT INTO `base_area` VALUES ('220284', '磐石市', '2202'); -INSERT INTO `base_area` VALUES ('220302', '铁西区', '2203'); -INSERT INTO `base_area` VALUES ('220303', '铁东区', '2203'); -INSERT INTO `base_area` VALUES ('220322', '梨树县', '2203'); -INSERT INTO `base_area` VALUES ('220323', '伊通满族自治县', '2203'); -INSERT INTO `base_area` VALUES ('220382', '双辽市', '2203'); -INSERT INTO `base_area` VALUES ('220402', '龙山区', '2204'); -INSERT INTO `base_area` VALUES ('220403', '西安区', '2204'); -INSERT INTO `base_area` VALUES ('220421', '东丰县', '2204'); -INSERT INTO `base_area` VALUES ('220422', '东辽县', '2204'); -INSERT INTO `base_area` VALUES ('220502', '东昌区', '2205'); -INSERT INTO `base_area` VALUES ('220503', '二道江区', '2205'); -INSERT INTO `base_area` VALUES ('220521', '通化县', '2205'); -INSERT INTO `base_area` VALUES ('220523', '辉南县', '2205'); -INSERT INTO `base_area` VALUES ('220524', '柳河县', '2205'); -INSERT INTO `base_area` VALUES ('220581', '梅河口市', '2205'); -INSERT INTO `base_area` VALUES ('220582', '集安市', '2205'); -INSERT INTO `base_area` VALUES ('220602', '浑江区', '2206'); -INSERT INTO `base_area` VALUES ('220605', '江源区', '2206'); -INSERT INTO `base_area` VALUES ('220621', '抚松县', '2206'); -INSERT INTO `base_area` VALUES ('220622', '靖宇县', '2206'); -INSERT INTO `base_area` VALUES ('220623', '长白朝鲜族自治县', '2206'); -INSERT INTO `base_area` VALUES ('220681', '临江市', '2206'); -INSERT INTO `base_area` VALUES ('220702', '宁江区', '2207'); -INSERT INTO `base_area` VALUES ('220721', '前郭尔罗斯蒙古族自治县', '2207'); -INSERT INTO `base_area` VALUES ('220722', '长岭县', '2207'); -INSERT INTO `base_area` VALUES ('220723', '乾安县', '2207'); -INSERT INTO `base_area` VALUES ('220771', '吉林松原经济开发区', '2207'); -INSERT INTO `base_area` VALUES ('220781', '扶余市', '2207'); -INSERT INTO `base_area` VALUES ('220802', '洮北区', '2208'); -INSERT INTO `base_area` VALUES ('220821', '镇赉县', '2208'); -INSERT INTO `base_area` VALUES ('220822', '通榆县', '2208'); -INSERT INTO `base_area` VALUES ('220871', '吉林白城经济开发区', '2208'); -INSERT INTO `base_area` VALUES ('220881', '洮南市', '2208'); -INSERT INTO `base_area` VALUES ('220882', '大安市', '2208'); -INSERT INTO `base_area` VALUES ('222401', '延吉市', '2224'); -INSERT INTO `base_area` VALUES ('222402', '图们市', '2224'); -INSERT INTO `base_area` VALUES ('222403', '敦化市', '2224'); -INSERT INTO `base_area` VALUES ('222404', '珲春市', '2224'); -INSERT INTO `base_area` VALUES ('222405', '龙井市', '2224'); -INSERT INTO `base_area` VALUES ('222406', '和龙市', '2224'); -INSERT INTO `base_area` VALUES ('222424', '汪清县', '2224'); -INSERT INTO `base_area` VALUES ('222426', '安图县', '2224'); -INSERT INTO `base_area` VALUES ('230102', '道里区', '2301'); -INSERT INTO `base_area` VALUES ('230103', '南岗区', '2301'); -INSERT INTO `base_area` VALUES ('230104', '道外区', '2301'); -INSERT INTO `base_area` VALUES ('230108', '平房区', '2301'); -INSERT INTO `base_area` VALUES ('230109', '松北区', '2301'); -INSERT INTO `base_area` VALUES ('230110', '香坊区', '2301'); -INSERT INTO `base_area` VALUES ('230111', '呼兰区', '2301'); -INSERT INTO `base_area` VALUES ('230112', '阿城区', '2301'); -INSERT INTO `base_area` VALUES ('230113', '双城区', '2301'); -INSERT INTO `base_area` VALUES ('230123', '依兰县', '2301'); -INSERT INTO `base_area` VALUES ('230124', '方正县', '2301'); -INSERT INTO `base_area` VALUES ('230125', '宾县', '2301'); -INSERT INTO `base_area` VALUES ('230126', '巴彦县', '2301'); -INSERT INTO `base_area` VALUES ('230127', '木兰县', '2301'); -INSERT INTO `base_area` VALUES ('230128', '通河县', '2301'); -INSERT INTO `base_area` VALUES ('230129', '延寿县', '2301'); -INSERT INTO `base_area` VALUES ('230183', '尚志市', '2301'); -INSERT INTO `base_area` VALUES ('230184', '五常市', '2301'); -INSERT INTO `base_area` VALUES ('230202', '龙沙区', '2302'); -INSERT INTO `base_area` VALUES ('230203', '建华区', '2302'); -INSERT INTO `base_area` VALUES ('230204', '铁锋区', '2302'); -INSERT INTO `base_area` VALUES ('230205', '昂昂溪区', '2302'); -INSERT INTO `base_area` VALUES ('230206', '富拉尔基区', '2302'); -INSERT INTO `base_area` VALUES ('230207', '碾子山区', '2302'); -INSERT INTO `base_area` VALUES ('230208', '梅里斯达斡尔族区', '2302'); -INSERT INTO `base_area` VALUES ('230221', '龙江县', '2302'); -INSERT INTO `base_area` VALUES ('230223', '依安县', '2302'); -INSERT INTO `base_area` VALUES ('230224', '泰来县', '2302'); -INSERT INTO `base_area` VALUES ('230225', '甘南县', '2302'); -INSERT INTO `base_area` VALUES ('230227', '富裕县', '2302'); -INSERT INTO `base_area` VALUES ('230229', '克山县', '2302'); -INSERT INTO `base_area` VALUES ('230230', '克东县', '2302'); -INSERT INTO `base_area` VALUES ('230231', '拜泉县', '2302'); -INSERT INTO `base_area` VALUES ('230281', '讷河市', '2302'); -INSERT INTO `base_area` VALUES ('230302', '鸡冠区', '2303'); -INSERT INTO `base_area` VALUES ('230303', '恒山区', '2303'); -INSERT INTO `base_area` VALUES ('230304', '滴道区', '2303'); -INSERT INTO `base_area` VALUES ('230305', '梨树区', '2303'); -INSERT INTO `base_area` VALUES ('230306', '城子河区', '2303'); -INSERT INTO `base_area` VALUES ('230307', '麻山区', '2303'); -INSERT INTO `base_area` VALUES ('230321', '鸡东县', '2303'); -INSERT INTO `base_area` VALUES ('230381', '虎林市', '2303'); -INSERT INTO `base_area` VALUES ('230382', '密山市', '2303'); -INSERT INTO `base_area` VALUES ('230402', '向阳区', '2304'); -INSERT INTO `base_area` VALUES ('230403', '工农区', '2304'); -INSERT INTO `base_area` VALUES ('230404', '南山区', '2304'); -INSERT INTO `base_area` VALUES ('230405', '兴安区', '2304'); -INSERT INTO `base_area` VALUES ('230406', '东山区', '2304'); -INSERT INTO `base_area` VALUES ('230407', '兴山区', '2304'); -INSERT INTO `base_area` VALUES ('230421', '萝北县', '2304'); -INSERT INTO `base_area` VALUES ('230422', '绥滨县', '2304'); -INSERT INTO `base_area` VALUES ('230502', '尖山区', '2305'); -INSERT INTO `base_area` VALUES ('230503', '岭东区', '2305'); -INSERT INTO `base_area` VALUES ('230505', '四方台区', '2305'); -INSERT INTO `base_area` VALUES ('230506', '宝山区', '2305'); -INSERT INTO `base_area` VALUES ('230521', '集贤县', '2305'); -INSERT INTO `base_area` VALUES ('230522', '友谊县', '2305'); -INSERT INTO `base_area` VALUES ('230523', '宝清县', '2305'); -INSERT INTO `base_area` VALUES ('230524', '饶河县', '2305'); -INSERT INTO `base_area` VALUES ('230602', '萨尔图区', '2306'); -INSERT INTO `base_area` VALUES ('230603', '龙凤区', '2306'); -INSERT INTO `base_area` VALUES ('230604', '让胡路区', '2306'); -INSERT INTO `base_area` VALUES ('230605', '红岗区', '2306'); -INSERT INTO `base_area` VALUES ('230606', '大同区', '2306'); -INSERT INTO `base_area` VALUES ('230621', '肇州县', '2306'); -INSERT INTO `base_area` VALUES ('230622', '肇源县', '2306'); -INSERT INTO `base_area` VALUES ('230623', '林甸县', '2306'); -INSERT INTO `base_area` VALUES ('230624', '杜尔伯特蒙古族自治县', '2306'); -INSERT INTO `base_area` VALUES ('230671', '大庆高新技术产业开发区', '2306'); -INSERT INTO `base_area` VALUES ('230717', '伊美区', '2307'); -INSERT INTO `base_area` VALUES ('230718', '乌翠区', '2307'); -INSERT INTO `base_area` VALUES ('230719', '友好区', '2307'); -INSERT INTO `base_area` VALUES ('230722', '嘉荫县', '2307'); -INSERT INTO `base_area` VALUES ('230723', '汤旺县', '2307'); -INSERT INTO `base_area` VALUES ('230724', '丰林县', '2307'); -INSERT INTO `base_area` VALUES ('230725', '大箐山县', '2307'); -INSERT INTO `base_area` VALUES ('230726', '南岔县', '2307'); -INSERT INTO `base_area` VALUES ('230751', '金林区', '2307'); -INSERT INTO `base_area` VALUES ('230781', '铁力市', '2307'); -INSERT INTO `base_area` VALUES ('230803', '向阳区', '2308'); -INSERT INTO `base_area` VALUES ('230804', '前进区', '2308'); -INSERT INTO `base_area` VALUES ('230805', '东风区', '2308'); -INSERT INTO `base_area` VALUES ('230811', '郊区', '2308'); -INSERT INTO `base_area` VALUES ('230822', '桦南县', '2308'); -INSERT INTO `base_area` VALUES ('230826', '桦川县', '2308'); -INSERT INTO `base_area` VALUES ('230828', '汤原县', '2308'); -INSERT INTO `base_area` VALUES ('230881', '同江市', '2308'); -INSERT INTO `base_area` VALUES ('230882', '富锦市', '2308'); -INSERT INTO `base_area` VALUES ('230883', '抚远市', '2308'); -INSERT INTO `base_area` VALUES ('230902', '新兴区', '2309'); -INSERT INTO `base_area` VALUES ('230903', '桃山区', '2309'); -INSERT INTO `base_area` VALUES ('230904', '茄子河区', '2309'); -INSERT INTO `base_area` VALUES ('230921', '勃利县', '2309'); -INSERT INTO `base_area` VALUES ('231002', '东安区', '2310'); -INSERT INTO `base_area` VALUES ('231003', '阳明区', '2310'); -INSERT INTO `base_area` VALUES ('231004', '爱民区', '2310'); -INSERT INTO `base_area` VALUES ('231005', '西安区', '2310'); -INSERT INTO `base_area` VALUES ('231025', '林口县', '2310'); -INSERT INTO `base_area` VALUES ('231071', '牡丹江经济技术开发区', '2310'); -INSERT INTO `base_area` VALUES ('231081', '绥芬河市', '2310'); -INSERT INTO `base_area` VALUES ('231083', '海林市', '2310'); -INSERT INTO `base_area` VALUES ('231084', '宁安市', '2310'); -INSERT INTO `base_area` VALUES ('231085', '穆棱市', '2310'); -INSERT INTO `base_area` VALUES ('231086', '东宁市', '2310'); -INSERT INTO `base_area` VALUES ('231102', '爱辉区', '2311'); -INSERT INTO `base_area` VALUES ('231123', '逊克县', '2311'); -INSERT INTO `base_area` VALUES ('231124', '孙吴县', '2311'); -INSERT INTO `base_area` VALUES ('231181', '北安市', '2311'); -INSERT INTO `base_area` VALUES ('231182', '五大连池市', '2311'); -INSERT INTO `base_area` VALUES ('231183', '嫩江市', '2311'); -INSERT INTO `base_area` VALUES ('231202', '北林区', '2312'); -INSERT INTO `base_area` VALUES ('231221', '望奎县', '2312'); -INSERT INTO `base_area` VALUES ('231222', '兰西县', '2312'); -INSERT INTO `base_area` VALUES ('231223', '青冈县', '2312'); -INSERT INTO `base_area` VALUES ('231224', '庆安县', '2312'); -INSERT INTO `base_area` VALUES ('231225', '明水县', '2312'); -INSERT INTO `base_area` VALUES ('231226', '绥棱县', '2312'); -INSERT INTO `base_area` VALUES ('231281', '安达市', '2312'); -INSERT INTO `base_area` VALUES ('231282', '肇东市', '2312'); -INSERT INTO `base_area` VALUES ('231283', '海伦市', '2312'); -INSERT INTO `base_area` VALUES ('232701', '漠河市', '2327'); -INSERT INTO `base_area` VALUES ('232721', '呼玛县', '2327'); -INSERT INTO `base_area` VALUES ('232722', '塔河县', '2327'); -INSERT INTO `base_area` VALUES ('232761', '加格达奇区', '2327'); -INSERT INTO `base_area` VALUES ('232762', '松岭区', '2327'); -INSERT INTO `base_area` VALUES ('232763', '新林区', '2327'); -INSERT INTO `base_area` VALUES ('232764', '呼中区', '2327'); -INSERT INTO `base_area` VALUES ('310101', '黄浦区', '3101'); -INSERT INTO `base_area` VALUES ('310104', '徐汇区', '3101'); -INSERT INTO `base_area` VALUES ('310105', '长宁区', '3101'); -INSERT INTO `base_area` VALUES ('310106', '静安区', '3101'); -INSERT INTO `base_area` VALUES ('310107', '普陀区', '3101'); -INSERT INTO `base_area` VALUES ('310109', '虹口区', '3101'); -INSERT INTO `base_area` VALUES ('310110', '杨浦区', '3101'); -INSERT INTO `base_area` VALUES ('310112', '闵行区', '3101'); -INSERT INTO `base_area` VALUES ('310113', '宝山区', '3101'); -INSERT INTO `base_area` VALUES ('310114', '嘉定区', '3101'); -INSERT INTO `base_area` VALUES ('310115', '浦东新区', '3101'); -INSERT INTO `base_area` VALUES ('310116', '金山区', '3101'); -INSERT INTO `base_area` VALUES ('310117', '松江区', '3101'); -INSERT INTO `base_area` VALUES ('310118', '青浦区', '3101'); -INSERT INTO `base_area` VALUES ('310120', '奉贤区', '3101'); -INSERT INTO `base_area` VALUES ('310151', '崇明区', '3101'); -INSERT INTO `base_area` VALUES ('320102', '玄武区', '3201'); -INSERT INTO `base_area` VALUES ('320104', '秦淮区', '3201'); -INSERT INTO `base_area` VALUES ('320105', '建邺区', '3201'); -INSERT INTO `base_area` VALUES ('320106', '鼓楼区', '3201'); -INSERT INTO `base_area` VALUES ('320111', '浦口区', '3201'); -INSERT INTO `base_area` VALUES ('320113', '栖霞区', '3201'); -INSERT INTO `base_area` VALUES ('320114', '雨花台区', '3201'); -INSERT INTO `base_area` VALUES ('320115', '江宁区', '3201'); -INSERT INTO `base_area` VALUES ('320116', '六合区', '3201'); -INSERT INTO `base_area` VALUES ('320117', '溧水区', '3201'); -INSERT INTO `base_area` VALUES ('320118', '高淳区', '3201'); -INSERT INTO `base_area` VALUES ('320205', '锡山区', '3202'); -INSERT INTO `base_area` VALUES ('320206', '惠山区', '3202'); -INSERT INTO `base_area` VALUES ('320211', '滨湖区', '3202'); -INSERT INTO `base_area` VALUES ('320213', '梁溪区', '3202'); -INSERT INTO `base_area` VALUES ('320214', '新吴区', '3202'); -INSERT INTO `base_area` VALUES ('320281', '江阴市', '3202'); -INSERT INTO `base_area` VALUES ('320282', '宜兴市', '3202'); -INSERT INTO `base_area` VALUES ('320302', '鼓楼区', '3203'); -INSERT INTO `base_area` VALUES ('320303', '云龙区', '3203'); -INSERT INTO `base_area` VALUES ('320305', '贾汪区', '3203'); -INSERT INTO `base_area` VALUES ('320311', '泉山区', '3203'); -INSERT INTO `base_area` VALUES ('320312', '铜山区', '3203'); -INSERT INTO `base_area` VALUES ('320321', '丰县', '3203'); -INSERT INTO `base_area` VALUES ('320322', '沛县', '3203'); -INSERT INTO `base_area` VALUES ('320324', '睢宁县', '3203'); -INSERT INTO `base_area` VALUES ('320371', '徐州经济技术开发区', '3203'); -INSERT INTO `base_area` VALUES ('320381', '新沂市', '3203'); -INSERT INTO `base_area` VALUES ('320382', '邳州市', '3203'); -INSERT INTO `base_area` VALUES ('320402', '天宁区', '3204'); -INSERT INTO `base_area` VALUES ('320404', '钟楼区', '3204'); -INSERT INTO `base_area` VALUES ('320411', '新北区', '3204'); -INSERT INTO `base_area` VALUES ('320412', '武进区', '3204'); -INSERT INTO `base_area` VALUES ('320413', '金坛区', '3204'); -INSERT INTO `base_area` VALUES ('320481', '溧阳市', '3204'); -INSERT INTO `base_area` VALUES ('320505', '虎丘区', '3205'); -INSERT INTO `base_area` VALUES ('320506', '吴中区', '3205'); -INSERT INTO `base_area` VALUES ('320507', '相城区', '3205'); -INSERT INTO `base_area` VALUES ('320508', '姑苏区', '3205'); -INSERT INTO `base_area` VALUES ('320509', '吴江区', '3205'); -INSERT INTO `base_area` VALUES ('320571', '苏州工业园区', '3205'); -INSERT INTO `base_area` VALUES ('320581', '常熟市', '3205'); -INSERT INTO `base_area` VALUES ('320582', '张家港市', '3205'); -INSERT INTO `base_area` VALUES ('320583', '昆山市', '3205'); -INSERT INTO `base_area` VALUES ('320585', '太仓市', '3205'); -INSERT INTO `base_area` VALUES ('320612', '通州区', '3206'); -INSERT INTO `base_area` VALUES ('320613', '崇川区', '3206'); -INSERT INTO `base_area` VALUES ('320614', '海门区', '3206'); -INSERT INTO `base_area` VALUES ('320623', '如东县', '3206'); -INSERT INTO `base_area` VALUES ('320671', '南通经济技术开发区', '3206'); -INSERT INTO `base_area` VALUES ('320681', '启东市', '3206'); -INSERT INTO `base_area` VALUES ('320682', '如皋市', '3206'); -INSERT INTO `base_area` VALUES ('320685', '海安市', '3206'); -INSERT INTO `base_area` VALUES ('320703', '连云区', '3207'); -INSERT INTO `base_area` VALUES ('320706', '海州区', '3207'); -INSERT INTO `base_area` VALUES ('320707', '赣榆区', '3207'); -INSERT INTO `base_area` VALUES ('320722', '东海县', '3207'); -INSERT INTO `base_area` VALUES ('320723', '灌云县', '3207'); -INSERT INTO `base_area` VALUES ('320724', '灌南县', '3207'); -INSERT INTO `base_area` VALUES ('320771', '连云港经济技术开发区', '3207'); -INSERT INTO `base_area` VALUES ('320772', '连云港高新技术产业开发区', '3207'); -INSERT INTO `base_area` VALUES ('320803', '淮安区', '3208'); -INSERT INTO `base_area` VALUES ('320804', '淮阴区', '3208'); -INSERT INTO `base_area` VALUES ('320812', '清江浦区', '3208'); -INSERT INTO `base_area` VALUES ('320813', '洪泽区', '3208'); -INSERT INTO `base_area` VALUES ('320826', '涟水县', '3208'); -INSERT INTO `base_area` VALUES ('320830', '盱眙县', '3208'); -INSERT INTO `base_area` VALUES ('320831', '金湖县', '3208'); -INSERT INTO `base_area` VALUES ('320871', '淮安经济技术开发区', '3208'); -INSERT INTO `base_area` VALUES ('320902', '亭湖区', '3209'); -INSERT INTO `base_area` VALUES ('320903', '盐都区', '3209'); -INSERT INTO `base_area` VALUES ('320904', '大丰区', '3209'); -INSERT INTO `base_area` VALUES ('320921', '响水县', '3209'); -INSERT INTO `base_area` VALUES ('320922', '滨海县', '3209'); -INSERT INTO `base_area` VALUES ('320923', '阜宁县', '3209'); -INSERT INTO `base_area` VALUES ('320924', '射阳县', '3209'); -INSERT INTO `base_area` VALUES ('320925', '建湖县', '3209'); -INSERT INTO `base_area` VALUES ('320971', '盐城经济技术开发区', '3209'); -INSERT INTO `base_area` VALUES ('320981', '东台市', '3209'); -INSERT INTO `base_area` VALUES ('321002', '广陵区', '3210'); -INSERT INTO `base_area` VALUES ('321003', '邗江区', '3210'); -INSERT INTO `base_area` VALUES ('321012', '江都区', '3210'); -INSERT INTO `base_area` VALUES ('321023', '宝应县', '3210'); -INSERT INTO `base_area` VALUES ('321071', '扬州经济技术开发区', '3210'); -INSERT INTO `base_area` VALUES ('321081', '仪征市', '3210'); -INSERT INTO `base_area` VALUES ('321084', '高邮市', '3210'); -INSERT INTO `base_area` VALUES ('321102', '京口区', '3211'); -INSERT INTO `base_area` VALUES ('321111', '润州区', '3211'); -INSERT INTO `base_area` VALUES ('321112', '丹徒区', '3211'); -INSERT INTO `base_area` VALUES ('321171', '镇江新区', '3211'); -INSERT INTO `base_area` VALUES ('321181', '丹阳市', '3211'); -INSERT INTO `base_area` VALUES ('321182', '扬中市', '3211'); -INSERT INTO `base_area` VALUES ('321183', '句容市', '3211'); -INSERT INTO `base_area` VALUES ('321202', '海陵区', '3212'); -INSERT INTO `base_area` VALUES ('321203', '高港区', '3212'); -INSERT INTO `base_area` VALUES ('321204', '姜堰区', '3212'); -INSERT INTO `base_area` VALUES ('321271', '泰州医药高新技术产业开发区', '3212'); -INSERT INTO `base_area` VALUES ('321281', '兴化市', '3212'); -INSERT INTO `base_area` VALUES ('321282', '靖江市', '3212'); -INSERT INTO `base_area` VALUES ('321283', '泰兴市', '3212'); -INSERT INTO `base_area` VALUES ('321302', '宿城区', '3213'); -INSERT INTO `base_area` VALUES ('321311', '宿豫区', '3213'); -INSERT INTO `base_area` VALUES ('321322', '沭阳县', '3213'); -INSERT INTO `base_area` VALUES ('321323', '泗阳县', '3213'); -INSERT INTO `base_area` VALUES ('321324', '泗洪县', '3213'); -INSERT INTO `base_area` VALUES ('321371', '宿迁经济技术开发区', '3213'); -INSERT INTO `base_area` VALUES ('330102', '上城区', '3301'); -INSERT INTO `base_area` VALUES ('330105', '拱墅区', '3301'); -INSERT INTO `base_area` VALUES ('330106', '西湖区', '3301'); -INSERT INTO `base_area` VALUES ('330108', '滨江区', '3301'); -INSERT INTO `base_area` VALUES ('330109', '萧山区', '3301'); -INSERT INTO `base_area` VALUES ('330110', '余杭区', '3301'); -INSERT INTO `base_area` VALUES ('330111', '富阳区', '3301'); -INSERT INTO `base_area` VALUES ('330112', '临安区', '3301'); -INSERT INTO `base_area` VALUES ('330113', '临平区', '3301'); -INSERT INTO `base_area` VALUES ('330114', '钱塘区', '3301'); -INSERT INTO `base_area` VALUES ('330122', '桐庐县', '3301'); -INSERT INTO `base_area` VALUES ('330127', '淳安县', '3301'); -INSERT INTO `base_area` VALUES ('330182', '建德市', '3301'); -INSERT INTO `base_area` VALUES ('330203', '海曙区', '3302'); -INSERT INTO `base_area` VALUES ('330205', '江北区', '3302'); -INSERT INTO `base_area` VALUES ('330206', '北仑区', '3302'); -INSERT INTO `base_area` VALUES ('330211', '镇海区', '3302'); -INSERT INTO `base_area` VALUES ('330212', '鄞州区', '3302'); -INSERT INTO `base_area` VALUES ('330213', '奉化区', '3302'); -INSERT INTO `base_area` VALUES ('330225', '象山县', '3302'); -INSERT INTO `base_area` VALUES ('330226', '宁海县', '3302'); -INSERT INTO `base_area` VALUES ('330281', '余姚市', '3302'); -INSERT INTO `base_area` VALUES ('330282', '慈溪市', '3302'); -INSERT INTO `base_area` VALUES ('330302', '鹿城区', '3303'); -INSERT INTO `base_area` VALUES ('330303', '龙湾区', '3303'); -INSERT INTO `base_area` VALUES ('330304', '瓯海区', '3303'); -INSERT INTO `base_area` VALUES ('330305', '洞头区', '3303'); -INSERT INTO `base_area` VALUES ('330324', '永嘉县', '3303'); -INSERT INTO `base_area` VALUES ('330326', '平阳县', '3303'); -INSERT INTO `base_area` VALUES ('330327', '苍南县', '3303'); -INSERT INTO `base_area` VALUES ('330328', '文成县', '3303'); -INSERT INTO `base_area` VALUES ('330329', '泰顺县', '3303'); -INSERT INTO `base_area` VALUES ('330381', '瑞安市', '3303'); -INSERT INTO `base_area` VALUES ('330382', '乐清市', '3303'); -INSERT INTO `base_area` VALUES ('330383', '龙港市', '3303'); -INSERT INTO `base_area` VALUES ('330402', '南湖区', '3304'); -INSERT INTO `base_area` VALUES ('330411', '秀洲区', '3304'); -INSERT INTO `base_area` VALUES ('330421', '嘉善县', '3304'); -INSERT INTO `base_area` VALUES ('330424', '海盐县', '3304'); -INSERT INTO `base_area` VALUES ('330481', '海宁市', '3304'); -INSERT INTO `base_area` VALUES ('330482', '平湖市', '3304'); -INSERT INTO `base_area` VALUES ('330483', '桐乡市', '3304'); -INSERT INTO `base_area` VALUES ('330502', '吴兴区', '3305'); -INSERT INTO `base_area` VALUES ('330503', '南浔区', '3305'); -INSERT INTO `base_area` VALUES ('330521', '德清县', '3305'); -INSERT INTO `base_area` VALUES ('330522', '长兴县', '3305'); -INSERT INTO `base_area` VALUES ('330523', '安吉县', '3305'); -INSERT INTO `base_area` VALUES ('330602', '越城区', '3306'); -INSERT INTO `base_area` VALUES ('330603', '柯桥区', '3306'); -INSERT INTO `base_area` VALUES ('330604', '上虞区', '3306'); -INSERT INTO `base_area` VALUES ('330624', '新昌县', '3306'); -INSERT INTO `base_area` VALUES ('330681', '诸暨市', '3306'); -INSERT INTO `base_area` VALUES ('330683', '嵊州市', '3306'); -INSERT INTO `base_area` VALUES ('330702', '婺城区', '3307'); -INSERT INTO `base_area` VALUES ('330703', '金东区', '3307'); -INSERT INTO `base_area` VALUES ('330723', '武义县', '3307'); -INSERT INTO `base_area` VALUES ('330726', '浦江县', '3307'); -INSERT INTO `base_area` VALUES ('330727', '磐安县', '3307'); -INSERT INTO `base_area` VALUES ('330781', '兰溪市', '3307'); -INSERT INTO `base_area` VALUES ('330782', '义乌市', '3307'); -INSERT INTO `base_area` VALUES ('330783', '东阳市', '3307'); -INSERT INTO `base_area` VALUES ('330784', '永康市', '3307'); -INSERT INTO `base_area` VALUES ('330802', '柯城区', '3308'); -INSERT INTO `base_area` VALUES ('330803', '衢江区', '3308'); -INSERT INTO `base_area` VALUES ('330822', '常山县', '3308'); -INSERT INTO `base_area` VALUES ('330824', '开化县', '3308'); -INSERT INTO `base_area` VALUES ('330825', '龙游县', '3308'); -INSERT INTO `base_area` VALUES ('330881', '江山市', '3308'); -INSERT INTO `base_area` VALUES ('330902', '定海区', '3309'); -INSERT INTO `base_area` VALUES ('330903', '普陀区', '3309'); -INSERT INTO `base_area` VALUES ('330921', '岱山县', '3309'); -INSERT INTO `base_area` VALUES ('330922', '嵊泗县', '3309'); -INSERT INTO `base_area` VALUES ('331002', '椒江区', '3310'); -INSERT INTO `base_area` VALUES ('331003', '黄岩区', '3310'); -INSERT INTO `base_area` VALUES ('331004', '路桥区', '3310'); -INSERT INTO `base_area` VALUES ('331022', '三门县', '3310'); -INSERT INTO `base_area` VALUES ('331023', '天台县', '3310'); -INSERT INTO `base_area` VALUES ('331024', '仙居县', '3310'); -INSERT INTO `base_area` VALUES ('331081', '温岭市', '3310'); -INSERT INTO `base_area` VALUES ('331082', '临海市', '3310'); -INSERT INTO `base_area` VALUES ('331083', '玉环市', '3310'); -INSERT INTO `base_area` VALUES ('331102', '莲都区', '3311'); -INSERT INTO `base_area` VALUES ('331121', '青田县', '3311'); -INSERT INTO `base_area` VALUES ('331122', '缙云县', '3311'); -INSERT INTO `base_area` VALUES ('331123', '遂昌县', '3311'); -INSERT INTO `base_area` VALUES ('331124', '松阳县', '3311'); -INSERT INTO `base_area` VALUES ('331125', '云和县', '3311'); -INSERT INTO `base_area` VALUES ('331126', '庆元县', '3311'); -INSERT INTO `base_area` VALUES ('331127', '景宁畲族自治县', '3311'); -INSERT INTO `base_area` VALUES ('331181', '龙泉市', '3311'); -INSERT INTO `base_area` VALUES ('340102', '瑶海区', '3401'); -INSERT INTO `base_area` VALUES ('340103', '庐阳区', '3401'); -INSERT INTO `base_area` VALUES ('340104', '蜀山区', '3401'); -INSERT INTO `base_area` VALUES ('340111', '包河区', '3401'); -INSERT INTO `base_area` VALUES ('340121', '长丰县', '3401'); -INSERT INTO `base_area` VALUES ('340122', '肥东县', '3401'); -INSERT INTO `base_area` VALUES ('340123', '肥西县', '3401'); -INSERT INTO `base_area` VALUES ('340124', '庐江县', '3401'); -INSERT INTO `base_area` VALUES ('340171', '合肥高新技术产业开发区', '3401'); -INSERT INTO `base_area` VALUES ('340172', '合肥经济技术开发区', '3401'); -INSERT INTO `base_area` VALUES ('340173', '合肥新站高新技术产业开发区', '3401'); -INSERT INTO `base_area` VALUES ('340181', '巢湖市', '3401'); -INSERT INTO `base_area` VALUES ('340202', '镜湖区', '3402'); -INSERT INTO `base_area` VALUES ('340207', '鸠江区', '3402'); -INSERT INTO `base_area` VALUES ('340209', '弋江区', '3402'); -INSERT INTO `base_area` VALUES ('340210', '湾沚区', '3402'); -INSERT INTO `base_area` VALUES ('340212', '繁昌区', '3402'); -INSERT INTO `base_area` VALUES ('340223', '南陵县', '3402'); -INSERT INTO `base_area` VALUES ('340271', '芜湖经济技术开发区', '3402'); -INSERT INTO `base_area` VALUES ('340272', '安徽芜湖三山经济开发区', '3402'); -INSERT INTO `base_area` VALUES ('340281', '无为市', '3402'); -INSERT INTO `base_area` VALUES ('340302', '龙子湖区', '3403'); -INSERT INTO `base_area` VALUES ('340303', '蚌山区', '3403'); -INSERT INTO `base_area` VALUES ('340304', '禹会区', '3403'); -INSERT INTO `base_area` VALUES ('340311', '淮上区', '3403'); -INSERT INTO `base_area` VALUES ('340321', '怀远县', '3403'); -INSERT INTO `base_area` VALUES ('340322', '五河县', '3403'); -INSERT INTO `base_area` VALUES ('340323', '固镇县', '3403'); -INSERT INTO `base_area` VALUES ('340371', '蚌埠市高新技术开发区', '3403'); -INSERT INTO `base_area` VALUES ('340372', '蚌埠市经济开发区', '3403'); -INSERT INTO `base_area` VALUES ('340402', '大通区', '3404'); -INSERT INTO `base_area` VALUES ('340403', '田家庵区', '3404'); -INSERT INTO `base_area` VALUES ('340404', '谢家集区', '3404'); -INSERT INTO `base_area` VALUES ('340405', '八公山区', '3404'); -INSERT INTO `base_area` VALUES ('340406', '潘集区', '3404'); -INSERT INTO `base_area` VALUES ('340421', '凤台县', '3404'); -INSERT INTO `base_area` VALUES ('340422', '寿县', '3404'); -INSERT INTO `base_area` VALUES ('340503', '花山区', '3405'); -INSERT INTO `base_area` VALUES ('340504', '雨山区', '3405'); -INSERT INTO `base_area` VALUES ('340506', '博望区', '3405'); -INSERT INTO `base_area` VALUES ('340521', '当涂县', '3405'); -INSERT INTO `base_area` VALUES ('340522', '含山县', '3405'); -INSERT INTO `base_area` VALUES ('340523', '和县', '3405'); -INSERT INTO `base_area` VALUES ('340602', '杜集区', '3406'); -INSERT INTO `base_area` VALUES ('340603', '相山区', '3406'); -INSERT INTO `base_area` VALUES ('340604', '烈山区', '3406'); -INSERT INTO `base_area` VALUES ('340621', '濉溪县', '3406'); -INSERT INTO `base_area` VALUES ('340705', '铜官区', '3407'); -INSERT INTO `base_area` VALUES ('340706', '义安区', '3407'); -INSERT INTO `base_area` VALUES ('340711', '郊区', '3407'); -INSERT INTO `base_area` VALUES ('340722', '枞阳县', '3407'); -INSERT INTO `base_area` VALUES ('340802', '迎江区', '3408'); -INSERT INTO `base_area` VALUES ('340803', '大观区', '3408'); -INSERT INTO `base_area` VALUES ('340811', '宜秀区', '3408'); -INSERT INTO `base_area` VALUES ('340822', '怀宁县', '3408'); -INSERT INTO `base_area` VALUES ('340825', '太湖县', '3408'); -INSERT INTO `base_area` VALUES ('340826', '宿松县', '3408'); -INSERT INTO `base_area` VALUES ('340827', '望江县', '3408'); -INSERT INTO `base_area` VALUES ('340828', '岳西县', '3408'); -INSERT INTO `base_area` VALUES ('340871', '安徽安庆经济开发区', '3408'); -INSERT INTO `base_area` VALUES ('340881', '桐城市', '3408'); -INSERT INTO `base_area` VALUES ('340882', '潜山市', '3408'); -INSERT INTO `base_area` VALUES ('341002', '屯溪区', '3410'); -INSERT INTO `base_area` VALUES ('341003', '黄山区', '3410'); -INSERT INTO `base_area` VALUES ('341004', '徽州区', '3410'); -INSERT INTO `base_area` VALUES ('341021', '歙县', '3410'); -INSERT INTO `base_area` VALUES ('341022', '休宁县', '3410'); -INSERT INTO `base_area` VALUES ('341023', '黟县', '3410'); -INSERT INTO `base_area` VALUES ('341024', '祁门县', '3410'); -INSERT INTO `base_area` VALUES ('341102', '琅琊区', '3411'); -INSERT INTO `base_area` VALUES ('341103', '南谯区', '3411'); -INSERT INTO `base_area` VALUES ('341122', '来安县', '3411'); -INSERT INTO `base_area` VALUES ('341124', '全椒县', '3411'); -INSERT INTO `base_area` VALUES ('341125', '定远县', '3411'); -INSERT INTO `base_area` VALUES ('341126', '凤阳县', '3411'); -INSERT INTO `base_area` VALUES ('341171', '中新苏滁高新技术产业开发区', '3411'); -INSERT INTO `base_area` VALUES ('341172', '滁州经济技术开发区', '3411'); -INSERT INTO `base_area` VALUES ('341181', '天长市', '3411'); -INSERT INTO `base_area` VALUES ('341182', '明光市', '3411'); -INSERT INTO `base_area` VALUES ('341202', '颍州区', '3412'); -INSERT INTO `base_area` VALUES ('341203', '颍东区', '3412'); -INSERT INTO `base_area` VALUES ('341204', '颍泉区', '3412'); -INSERT INTO `base_area` VALUES ('341221', '临泉县', '3412'); -INSERT INTO `base_area` VALUES ('341222', '太和县', '3412'); -INSERT INTO `base_area` VALUES ('341225', '阜南县', '3412'); -INSERT INTO `base_area` VALUES ('341226', '颍上县', '3412'); -INSERT INTO `base_area` VALUES ('341271', '阜阳合肥现代产业园区', '3412'); -INSERT INTO `base_area` VALUES ('341272', '阜阳经济技术开发区', '3412'); -INSERT INTO `base_area` VALUES ('341282', '界首市', '3412'); -INSERT INTO `base_area` VALUES ('341302', '埇桥区', '3413'); -INSERT INTO `base_area` VALUES ('341321', '砀山县', '3413'); -INSERT INTO `base_area` VALUES ('341322', '萧县', '3413'); -INSERT INTO `base_area` VALUES ('341323', '灵璧县', '3413'); -INSERT INTO `base_area` VALUES ('341324', '泗县', '3413'); -INSERT INTO `base_area` VALUES ('341371', '宿州马鞍山现代产业园区', '3413'); -INSERT INTO `base_area` VALUES ('341372', '宿州经济技术开发区', '3413'); -INSERT INTO `base_area` VALUES ('341502', '金安区', '3415'); -INSERT INTO `base_area` VALUES ('341503', '裕安区', '3415'); -INSERT INTO `base_area` VALUES ('341504', '叶集区', '3415'); -INSERT INTO `base_area` VALUES ('341522', '霍邱县', '3415'); -INSERT INTO `base_area` VALUES ('341523', '舒城县', '3415'); -INSERT INTO `base_area` VALUES ('341524', '金寨县', '3415'); -INSERT INTO `base_area` VALUES ('341525', '霍山县', '3415'); -INSERT INTO `base_area` VALUES ('341602', '谯城区', '3416'); -INSERT INTO `base_area` VALUES ('341621', '涡阳县', '3416'); -INSERT INTO `base_area` VALUES ('341622', '蒙城县', '3416'); -INSERT INTO `base_area` VALUES ('341623', '利辛县', '3416'); -INSERT INTO `base_area` VALUES ('341702', '贵池区', '3417'); -INSERT INTO `base_area` VALUES ('341721', '东至县', '3417'); -INSERT INTO `base_area` VALUES ('341722', '石台县', '3417'); -INSERT INTO `base_area` VALUES ('341723', '青阳县', '3417'); -INSERT INTO `base_area` VALUES ('341802', '宣州区', '3418'); -INSERT INTO `base_area` VALUES ('341821', '郎溪县', '3418'); -INSERT INTO `base_area` VALUES ('341823', '泾县', '3418'); -INSERT INTO `base_area` VALUES ('341824', '绩溪县', '3418'); -INSERT INTO `base_area` VALUES ('341825', '旌德县', '3418'); -INSERT INTO `base_area` VALUES ('341871', '宣城市经济开发区', '3418'); -INSERT INTO `base_area` VALUES ('341881', '宁国市', '3418'); -INSERT INTO `base_area` VALUES ('341882', '广德市', '3418'); -INSERT INTO `base_area` VALUES ('350102', '鼓楼区', '3501'); -INSERT INTO `base_area` VALUES ('350103', '台江区', '3501'); -INSERT INTO `base_area` VALUES ('350104', '仓山区', '3501'); -INSERT INTO `base_area` VALUES ('350105', '马尾区', '3501'); -INSERT INTO `base_area` VALUES ('350111', '晋安区', '3501'); -INSERT INTO `base_area` VALUES ('350112', '长乐区', '3501'); -INSERT INTO `base_area` VALUES ('350121', '闽侯县', '3501'); -INSERT INTO `base_area` VALUES ('350122', '连江县', '3501'); -INSERT INTO `base_area` VALUES ('350123', '罗源县', '3501'); -INSERT INTO `base_area` VALUES ('350124', '闽清县', '3501'); -INSERT INTO `base_area` VALUES ('350125', '永泰县', '3501'); -INSERT INTO `base_area` VALUES ('350128', '平潭县', '3501'); -INSERT INTO `base_area` VALUES ('350181', '福清市', '3501'); -INSERT INTO `base_area` VALUES ('350203', '思明区', '3502'); -INSERT INTO `base_area` VALUES ('350205', '海沧区', '3502'); -INSERT INTO `base_area` VALUES ('350206', '湖里区', '3502'); -INSERT INTO `base_area` VALUES ('350211', '集美区', '3502'); -INSERT INTO `base_area` VALUES ('350212', '同安区', '3502'); -INSERT INTO `base_area` VALUES ('350213', '翔安区', '3502'); -INSERT INTO `base_area` VALUES ('350302', '城厢区', '3503'); -INSERT INTO `base_area` VALUES ('350303', '涵江区', '3503'); -INSERT INTO `base_area` VALUES ('350304', '荔城区', '3503'); -INSERT INTO `base_area` VALUES ('350305', '秀屿区', '3503'); -INSERT INTO `base_area` VALUES ('350322', '仙游县', '3503'); -INSERT INTO `base_area` VALUES ('350404', '三元区', '3504'); -INSERT INTO `base_area` VALUES ('350405', '沙县区', '3504'); -INSERT INTO `base_area` VALUES ('350421', '明溪县', '3504'); -INSERT INTO `base_area` VALUES ('350423', '清流县', '3504'); -INSERT INTO `base_area` VALUES ('350424', '宁化县', '3504'); -INSERT INTO `base_area` VALUES ('350425', '大田县', '3504'); -INSERT INTO `base_area` VALUES ('350426', '尤溪县', '3504'); -INSERT INTO `base_area` VALUES ('350428', '将乐县', '3504'); -INSERT INTO `base_area` VALUES ('350429', '泰宁县', '3504'); -INSERT INTO `base_area` VALUES ('350430', '建宁县', '3504'); -INSERT INTO `base_area` VALUES ('350481', '永安市', '3504'); -INSERT INTO `base_area` VALUES ('350502', '鲤城区', '3505'); -INSERT INTO `base_area` VALUES ('350503', '丰泽区', '3505'); -INSERT INTO `base_area` VALUES ('350504', '洛江区', '3505'); -INSERT INTO `base_area` VALUES ('350505', '泉港区', '3505'); -INSERT INTO `base_area` VALUES ('350521', '惠安县', '3505'); -INSERT INTO `base_area` VALUES ('350524', '安溪县', '3505'); -INSERT INTO `base_area` VALUES ('350525', '永春县', '3505'); -INSERT INTO `base_area` VALUES ('350526', '德化县', '3505'); -INSERT INTO `base_area` VALUES ('350527', '金门县', '3505'); -INSERT INTO `base_area` VALUES ('350581', '石狮市', '3505'); -INSERT INTO `base_area` VALUES ('350582', '晋江市', '3505'); -INSERT INTO `base_area` VALUES ('350583', '南安市', '3505'); -INSERT INTO `base_area` VALUES ('350602', '芗城区', '3506'); -INSERT INTO `base_area` VALUES ('350603', '龙文区', '3506'); -INSERT INTO `base_area` VALUES ('350604', '龙海区', '3506'); -INSERT INTO `base_area` VALUES ('350605', '长泰区', '3506'); -INSERT INTO `base_area` VALUES ('350622', '云霄县', '3506'); -INSERT INTO `base_area` VALUES ('350623', '漳浦县', '3506'); -INSERT INTO `base_area` VALUES ('350624', '诏安县', '3506'); -INSERT INTO `base_area` VALUES ('350626', '东山县', '3506'); -INSERT INTO `base_area` VALUES ('350627', '南靖县', '3506'); -INSERT INTO `base_area` VALUES ('350628', '平和县', '3506'); -INSERT INTO `base_area` VALUES ('350629', '华安县', '3506'); -INSERT INTO `base_area` VALUES ('350702', '延平区', '3507'); -INSERT INTO `base_area` VALUES ('350703', '建阳区', '3507'); -INSERT INTO `base_area` VALUES ('350721', '顺昌县', '3507'); -INSERT INTO `base_area` VALUES ('350722', '浦城县', '3507'); -INSERT INTO `base_area` VALUES ('350723', '光泽县', '3507'); -INSERT INTO `base_area` VALUES ('350724', '松溪县', '3507'); -INSERT INTO `base_area` VALUES ('350725', '政和县', '3507'); -INSERT INTO `base_area` VALUES ('350781', '邵武市', '3507'); -INSERT INTO `base_area` VALUES ('350782', '武夷山市', '3507'); -INSERT INTO `base_area` VALUES ('350783', '建瓯市', '3507'); -INSERT INTO `base_area` VALUES ('350802', '新罗区', '3508'); -INSERT INTO `base_area` VALUES ('350803', '永定区', '3508'); -INSERT INTO `base_area` VALUES ('350821', '长汀县', '3508'); -INSERT INTO `base_area` VALUES ('350823', '上杭县', '3508'); -INSERT INTO `base_area` VALUES ('350824', '武平县', '3508'); -INSERT INTO `base_area` VALUES ('350825', '连城县', '3508'); -INSERT INTO `base_area` VALUES ('350881', '漳平市', '3508'); -INSERT INTO `base_area` VALUES ('350902', '蕉城区', '3509'); -INSERT INTO `base_area` VALUES ('350921', '霞浦县', '3509'); -INSERT INTO `base_area` VALUES ('350922', '古田县', '3509'); -INSERT INTO `base_area` VALUES ('350923', '屏南县', '3509'); -INSERT INTO `base_area` VALUES ('350924', '寿宁县', '3509'); -INSERT INTO `base_area` VALUES ('350925', '周宁县', '3509'); -INSERT INTO `base_area` VALUES ('350926', '柘荣县', '3509'); -INSERT INTO `base_area` VALUES ('350981', '福安市', '3509'); -INSERT INTO `base_area` VALUES ('350982', '福鼎市', '3509'); -INSERT INTO `base_area` VALUES ('360102', '东湖区', '3601'); -INSERT INTO `base_area` VALUES ('360103', '西湖区', '3601'); -INSERT INTO `base_area` VALUES ('360104', '青云谱区', '3601'); -INSERT INTO `base_area` VALUES ('360111', '青山湖区', '3601'); -INSERT INTO `base_area` VALUES ('360112', '新建区', '3601'); -INSERT INTO `base_area` VALUES ('360113', '红谷滩区', '3601'); -INSERT INTO `base_area` VALUES ('360121', '南昌县', '3601'); -INSERT INTO `base_area` VALUES ('360123', '安义县', '3601'); -INSERT INTO `base_area` VALUES ('360124', '进贤县', '3601'); -INSERT INTO `base_area` VALUES ('360202', '昌江区', '3602'); -INSERT INTO `base_area` VALUES ('360203', '珠山区', '3602'); -INSERT INTO `base_area` VALUES ('360222', '浮梁县', '3602'); -INSERT INTO `base_area` VALUES ('360281', '乐平市', '3602'); -INSERT INTO `base_area` VALUES ('360302', '安源区', '3603'); -INSERT INTO `base_area` VALUES ('360313', '湘东区', '3603'); -INSERT INTO `base_area` VALUES ('360321', '莲花县', '3603'); -INSERT INTO `base_area` VALUES ('360322', '上栗县', '3603'); -INSERT INTO `base_area` VALUES ('360323', '芦溪县', '3603'); -INSERT INTO `base_area` VALUES ('360402', '濂溪区', '3604'); -INSERT INTO `base_area` VALUES ('360403', '浔阳区', '3604'); -INSERT INTO `base_area` VALUES ('360404', '柴桑区', '3604'); -INSERT INTO `base_area` VALUES ('360423', '武宁县', '3604'); -INSERT INTO `base_area` VALUES ('360424', '修水县', '3604'); -INSERT INTO `base_area` VALUES ('360425', '永修县', '3604'); -INSERT INTO `base_area` VALUES ('360426', '德安县', '3604'); -INSERT INTO `base_area` VALUES ('360428', '都昌县', '3604'); -INSERT INTO `base_area` VALUES ('360429', '湖口县', '3604'); -INSERT INTO `base_area` VALUES ('360430', '彭泽县', '3604'); -INSERT INTO `base_area` VALUES ('360481', '瑞昌市', '3604'); -INSERT INTO `base_area` VALUES ('360482', '共青城市', '3604'); -INSERT INTO `base_area` VALUES ('360483', '庐山市', '3604'); -INSERT INTO `base_area` VALUES ('360502', '渝水区', '3605'); -INSERT INTO `base_area` VALUES ('360521', '分宜县', '3605'); -INSERT INTO `base_area` VALUES ('360602', '月湖区', '3606'); -INSERT INTO `base_area` VALUES ('360603', '余江区', '3606'); -INSERT INTO `base_area` VALUES ('360681', '贵溪市', '3606'); -INSERT INTO `base_area` VALUES ('360702', '章贡区', '3607'); -INSERT INTO `base_area` VALUES ('360703', '南康区', '3607'); -INSERT INTO `base_area` VALUES ('360704', '赣县区', '3607'); -INSERT INTO `base_area` VALUES ('360722', '信丰县', '3607'); -INSERT INTO `base_area` VALUES ('360723', '大余县', '3607'); -INSERT INTO `base_area` VALUES ('360724', '上犹县', '3607'); -INSERT INTO `base_area` VALUES ('360725', '崇义县', '3607'); -INSERT INTO `base_area` VALUES ('360726', '安远县', '3607'); -INSERT INTO `base_area` VALUES ('360728', '定南县', '3607'); -INSERT INTO `base_area` VALUES ('360729', '全南县', '3607'); -INSERT INTO `base_area` VALUES ('360730', '宁都县', '3607'); -INSERT INTO `base_area` VALUES ('360731', '于都县', '3607'); -INSERT INTO `base_area` VALUES ('360732', '兴国县', '3607'); -INSERT INTO `base_area` VALUES ('360733', '会昌县', '3607'); -INSERT INTO `base_area` VALUES ('360734', '寻乌县', '3607'); -INSERT INTO `base_area` VALUES ('360735', '石城县', '3607'); -INSERT INTO `base_area` VALUES ('360781', '瑞金市', '3607'); -INSERT INTO `base_area` VALUES ('360783', '龙南市', '3607'); -INSERT INTO `base_area` VALUES ('360802', '吉州区', '3608'); -INSERT INTO `base_area` VALUES ('360803', '青原区', '3608'); -INSERT INTO `base_area` VALUES ('360821', '吉安县', '3608'); -INSERT INTO `base_area` VALUES ('360822', '吉水县', '3608'); -INSERT INTO `base_area` VALUES ('360823', '峡江县', '3608'); -INSERT INTO `base_area` VALUES ('360824', '新干县', '3608'); -INSERT INTO `base_area` VALUES ('360825', '永丰县', '3608'); -INSERT INTO `base_area` VALUES ('360826', '泰和县', '3608'); -INSERT INTO `base_area` VALUES ('360827', '遂川县', '3608'); -INSERT INTO `base_area` VALUES ('360828', '万安县', '3608'); -INSERT INTO `base_area` VALUES ('360829', '安福县', '3608'); -INSERT INTO `base_area` VALUES ('360830', '永新县', '3608'); -INSERT INTO `base_area` VALUES ('360881', '井冈山市', '3608'); -INSERT INTO `base_area` VALUES ('360902', '袁州区', '3609'); -INSERT INTO `base_area` VALUES ('360921', '奉新县', '3609'); -INSERT INTO `base_area` VALUES ('360922', '万载县', '3609'); -INSERT INTO `base_area` VALUES ('360923', '上高县', '3609'); -INSERT INTO `base_area` VALUES ('360924', '宜丰县', '3609'); -INSERT INTO `base_area` VALUES ('360925', '靖安县', '3609'); -INSERT INTO `base_area` VALUES ('360926', '铜鼓县', '3609'); -INSERT INTO `base_area` VALUES ('360981', '丰城市', '3609'); -INSERT INTO `base_area` VALUES ('360982', '樟树市', '3609'); -INSERT INTO `base_area` VALUES ('360983', '高安市', '3609'); -INSERT INTO `base_area` VALUES ('361002', '临川区', '3610'); -INSERT INTO `base_area` VALUES ('361003', '东乡区', '3610'); -INSERT INTO `base_area` VALUES ('361021', '南城县', '3610'); -INSERT INTO `base_area` VALUES ('361022', '黎川县', '3610'); -INSERT INTO `base_area` VALUES ('361023', '南丰县', '3610'); -INSERT INTO `base_area` VALUES ('361024', '崇仁县', '3610'); -INSERT INTO `base_area` VALUES ('361025', '乐安县', '3610'); -INSERT INTO `base_area` VALUES ('361026', '宜黄县', '3610'); -INSERT INTO `base_area` VALUES ('361027', '金溪县', '3610'); -INSERT INTO `base_area` VALUES ('361028', '资溪县', '3610'); -INSERT INTO `base_area` VALUES ('361030', '广昌县', '3610'); -INSERT INTO `base_area` VALUES ('361102', '信州区', '3611'); -INSERT INTO `base_area` VALUES ('361103', '广丰区', '3611'); -INSERT INTO `base_area` VALUES ('361104', '广信区', '3611'); -INSERT INTO `base_area` VALUES ('361123', '玉山县', '3611'); -INSERT INTO `base_area` VALUES ('361124', '铅山县', '3611'); -INSERT INTO `base_area` VALUES ('361125', '横峰县', '3611'); -INSERT INTO `base_area` VALUES ('361126', '弋阳县', '3611'); -INSERT INTO `base_area` VALUES ('361127', '余干县', '3611'); -INSERT INTO `base_area` VALUES ('361128', '鄱阳县', '3611'); -INSERT INTO `base_area` VALUES ('361129', '万年县', '3611'); -INSERT INTO `base_area` VALUES ('361130', '婺源县', '3611'); -INSERT INTO `base_area` VALUES ('361181', '德兴市', '3611'); -INSERT INTO `base_area` VALUES ('370102', '历下区', '3701'); -INSERT INTO `base_area` VALUES ('370103', '市中区', '3701'); -INSERT INTO `base_area` VALUES ('370104', '槐荫区', '3701'); -INSERT INTO `base_area` VALUES ('370105', '天桥区', '3701'); -INSERT INTO `base_area` VALUES ('370112', '历城区', '3701'); -INSERT INTO `base_area` VALUES ('370113', '长清区', '3701'); -INSERT INTO `base_area` VALUES ('370114', '章丘区', '3701'); -INSERT INTO `base_area` VALUES ('370115', '济阳区', '3701'); -INSERT INTO `base_area` VALUES ('370116', '莱芜区', '3701'); -INSERT INTO `base_area` VALUES ('370117', '钢城区', '3701'); -INSERT INTO `base_area` VALUES ('370124', '平阴县', '3701'); -INSERT INTO `base_area` VALUES ('370126', '商河县', '3701'); -INSERT INTO `base_area` VALUES ('370171', '济南高新技术产业开发区', '3701'); -INSERT INTO `base_area` VALUES ('370202', '市南区', '3702'); -INSERT INTO `base_area` VALUES ('370203', '市北区', '3702'); -INSERT INTO `base_area` VALUES ('370211', '黄岛区', '3702'); -INSERT INTO `base_area` VALUES ('370212', '崂山区', '3702'); -INSERT INTO `base_area` VALUES ('370213', '李沧区', '3702'); -INSERT INTO `base_area` VALUES ('370214', '城阳区', '3702'); -INSERT INTO `base_area` VALUES ('370215', '即墨区', '3702'); -INSERT INTO `base_area` VALUES ('370271', '青岛高新技术产业开发区', '3702'); -INSERT INTO `base_area` VALUES ('370281', '胶州市', '3702'); -INSERT INTO `base_area` VALUES ('370283', '平度市', '3702'); -INSERT INTO `base_area` VALUES ('370285', '莱西市', '3702'); -INSERT INTO `base_area` VALUES ('370302', '淄川区', '3703'); -INSERT INTO `base_area` VALUES ('370303', '张店区', '3703'); -INSERT INTO `base_area` VALUES ('370304', '博山区', '3703'); -INSERT INTO `base_area` VALUES ('370305', '临淄区', '3703'); -INSERT INTO `base_area` VALUES ('370306', '周村区', '3703'); -INSERT INTO `base_area` VALUES ('370321', '桓台县', '3703'); -INSERT INTO `base_area` VALUES ('370322', '高青县', '3703'); -INSERT INTO `base_area` VALUES ('370323', '沂源县', '3703'); -INSERT INTO `base_area` VALUES ('370402', '市中区', '3704'); -INSERT INTO `base_area` VALUES ('370403', '薛城区', '3704'); -INSERT INTO `base_area` VALUES ('370404', '峄城区', '3704'); -INSERT INTO `base_area` VALUES ('370405', '台儿庄区', '3704'); -INSERT INTO `base_area` VALUES ('370406', '山亭区', '3704'); -INSERT INTO `base_area` VALUES ('370481', '滕州市', '3704'); -INSERT INTO `base_area` VALUES ('370502', '东营区', '3705'); -INSERT INTO `base_area` VALUES ('370503', '河口区', '3705'); -INSERT INTO `base_area` VALUES ('370505', '垦利区', '3705'); -INSERT INTO `base_area` VALUES ('370522', '利津县', '3705'); -INSERT INTO `base_area` VALUES ('370523', '广饶县', '3705'); -INSERT INTO `base_area` VALUES ('370571', '东营经济技术开发区', '3705'); -INSERT INTO `base_area` VALUES ('370572', '东营港经济开发区', '3705'); -INSERT INTO `base_area` VALUES ('370602', '芝罘区', '3706'); -INSERT INTO `base_area` VALUES ('370611', '福山区', '3706'); -INSERT INTO `base_area` VALUES ('370612', '牟平区', '3706'); -INSERT INTO `base_area` VALUES ('370613', '莱山区', '3706'); -INSERT INTO `base_area` VALUES ('370614', '蓬莱区', '3706'); -INSERT INTO `base_area` VALUES ('370671', '烟台高新技术产业开发区', '3706'); -INSERT INTO `base_area` VALUES ('370672', '烟台经济技术开发区', '3706'); -INSERT INTO `base_area` VALUES ('370681', '龙口市', '3706'); -INSERT INTO `base_area` VALUES ('370682', '莱阳市', '3706'); -INSERT INTO `base_area` VALUES ('370683', '莱州市', '3706'); -INSERT INTO `base_area` VALUES ('370685', '招远市', '3706'); -INSERT INTO `base_area` VALUES ('370686', '栖霞市', '3706'); -INSERT INTO `base_area` VALUES ('370687', '海阳市', '3706'); -INSERT INTO `base_area` VALUES ('370702', '潍城区', '3707'); -INSERT INTO `base_area` VALUES ('370703', '寒亭区', '3707'); -INSERT INTO `base_area` VALUES ('370704', '坊子区', '3707'); -INSERT INTO `base_area` VALUES ('370705', '奎文区', '3707'); -INSERT INTO `base_area` VALUES ('370724', '临朐县', '3707'); -INSERT INTO `base_area` VALUES ('370725', '昌乐县', '3707'); -INSERT INTO `base_area` VALUES ('370772', '潍坊滨海经济技术开发区', '3707'); -INSERT INTO `base_area` VALUES ('370781', '青州市', '3707'); -INSERT INTO `base_area` VALUES ('370782', '诸城市', '3707'); -INSERT INTO `base_area` VALUES ('370783', '寿光市', '3707'); -INSERT INTO `base_area` VALUES ('370784', '安丘市', '3707'); -INSERT INTO `base_area` VALUES ('370785', '高密市', '3707'); -INSERT INTO `base_area` VALUES ('370786', '昌邑市', '3707'); -INSERT INTO `base_area` VALUES ('370811', '任城区', '3708'); -INSERT INTO `base_area` VALUES ('370812', '兖州区', '3708'); -INSERT INTO `base_area` VALUES ('370826', '微山县', '3708'); -INSERT INTO `base_area` VALUES ('370827', '鱼台县', '3708'); -INSERT INTO `base_area` VALUES ('370828', '金乡县', '3708'); -INSERT INTO `base_area` VALUES ('370829', '嘉祥县', '3708'); -INSERT INTO `base_area` VALUES ('370830', '汶上县', '3708'); -INSERT INTO `base_area` VALUES ('370831', '泗水县', '3708'); -INSERT INTO `base_area` VALUES ('370832', '梁山县', '3708'); -INSERT INTO `base_area` VALUES ('370871', '济宁高新技术产业开发区', '3708'); -INSERT INTO `base_area` VALUES ('370881', '曲阜市', '3708'); -INSERT INTO `base_area` VALUES ('370883', '邹城市', '3708'); -INSERT INTO `base_area` VALUES ('370902', '泰山区', '3709'); -INSERT INTO `base_area` VALUES ('370911', '岱岳区', '3709'); -INSERT INTO `base_area` VALUES ('370921', '宁阳县', '3709'); -INSERT INTO `base_area` VALUES ('370923', '东平县', '3709'); -INSERT INTO `base_area` VALUES ('370982', '新泰市', '3709'); -INSERT INTO `base_area` VALUES ('370983', '肥城市', '3709'); -INSERT INTO `base_area` VALUES ('371002', '环翠区', '3710'); -INSERT INTO `base_area` VALUES ('371003', '文登区', '3710'); -INSERT INTO `base_area` VALUES ('371071', '威海火炬高技术产业开发区', '3710'); -INSERT INTO `base_area` VALUES ('371072', '威海经济技术开发区', '3710'); -INSERT INTO `base_area` VALUES ('371073', '威海临港经济技术开发区', '3710'); -INSERT INTO `base_area` VALUES ('371082', '荣成市', '3710'); -INSERT INTO `base_area` VALUES ('371083', '乳山市', '3710'); -INSERT INTO `base_area` VALUES ('371102', '东港区', '3711'); -INSERT INTO `base_area` VALUES ('371103', '岚山区', '3711'); -INSERT INTO `base_area` VALUES ('371121', '五莲县', '3711'); -INSERT INTO `base_area` VALUES ('371122', '莒县', '3711'); -INSERT INTO `base_area` VALUES ('371171', '日照经济技术开发区', '3711'); -INSERT INTO `base_area` VALUES ('371302', '兰山区', '3713'); -INSERT INTO `base_area` VALUES ('371311', '罗庄区', '3713'); -INSERT INTO `base_area` VALUES ('371312', '河东区', '3713'); -INSERT INTO `base_area` VALUES ('371321', '沂南县', '3713'); -INSERT INTO `base_area` VALUES ('371322', '郯城县', '3713'); -INSERT INTO `base_area` VALUES ('371323', '沂水县', '3713'); -INSERT INTO `base_area` VALUES ('371324', '兰陵县', '3713'); -INSERT INTO `base_area` VALUES ('371325', '费县', '3713'); -INSERT INTO `base_area` VALUES ('371326', '平邑县', '3713'); -INSERT INTO `base_area` VALUES ('371327', '莒南县', '3713'); -INSERT INTO `base_area` VALUES ('371328', '蒙阴县', '3713'); -INSERT INTO `base_area` VALUES ('371329', '临沭县', '3713'); -INSERT INTO `base_area` VALUES ('371371', '临沂高新技术产业开发区', '3713'); -INSERT INTO `base_area` VALUES ('371402', '德城区', '3714'); -INSERT INTO `base_area` VALUES ('371403', '陵城区', '3714'); -INSERT INTO `base_area` VALUES ('371422', '宁津县', '3714'); -INSERT INTO `base_area` VALUES ('371423', '庆云县', '3714'); -INSERT INTO `base_area` VALUES ('371424', '临邑县', '3714'); -INSERT INTO `base_area` VALUES ('371425', '齐河县', '3714'); -INSERT INTO `base_area` VALUES ('371426', '平原县', '3714'); -INSERT INTO `base_area` VALUES ('371427', '夏津县', '3714'); -INSERT INTO `base_area` VALUES ('371428', '武城县', '3714'); -INSERT INTO `base_area` VALUES ('371471', '德州天衢新区', '3714'); -INSERT INTO `base_area` VALUES ('371481', '乐陵市', '3714'); -INSERT INTO `base_area` VALUES ('371482', '禹城市', '3714'); -INSERT INTO `base_area` VALUES ('371502', '东昌府区', '3715'); -INSERT INTO `base_area` VALUES ('371503', '茌平区', '3715'); -INSERT INTO `base_area` VALUES ('371521', '阳谷县', '3715'); -INSERT INTO `base_area` VALUES ('371522', '莘县', '3715'); -INSERT INTO `base_area` VALUES ('371524', '东阿县', '3715'); -INSERT INTO `base_area` VALUES ('371525', '冠县', '3715'); -INSERT INTO `base_area` VALUES ('371526', '高唐县', '3715'); -INSERT INTO `base_area` VALUES ('371581', '临清市', '3715'); -INSERT INTO `base_area` VALUES ('371602', '滨城区', '3716'); -INSERT INTO `base_area` VALUES ('371603', '沾化区', '3716'); -INSERT INTO `base_area` VALUES ('371621', '惠民县', '3716'); -INSERT INTO `base_area` VALUES ('371622', '阳信县', '3716'); -INSERT INTO `base_area` VALUES ('371623', '无棣县', '3716'); -INSERT INTO `base_area` VALUES ('371625', '博兴县', '3716'); -INSERT INTO `base_area` VALUES ('371681', '邹平市', '3716'); -INSERT INTO `base_area` VALUES ('371702', '牡丹区', '3717'); -INSERT INTO `base_area` VALUES ('371703', '定陶区', '3717'); -INSERT INTO `base_area` VALUES ('371721', '曹县', '3717'); -INSERT INTO `base_area` VALUES ('371722', '单县', '3717'); -INSERT INTO `base_area` VALUES ('371723', '成武县', '3717'); -INSERT INTO `base_area` VALUES ('371724', '巨野县', '3717'); -INSERT INTO `base_area` VALUES ('371725', '郓城县', '3717'); -INSERT INTO `base_area` VALUES ('371726', '鄄城县', '3717'); -INSERT INTO `base_area` VALUES ('371728', '东明县', '3717'); -INSERT INTO `base_area` VALUES ('371771', '菏泽经济技术开发区', '3717'); -INSERT INTO `base_area` VALUES ('371772', '菏泽高新技术开发区', '3717'); -INSERT INTO `base_area` VALUES ('410102', '中原区', '4101'); -INSERT INTO `base_area` VALUES ('410103', '二七区', '4101'); -INSERT INTO `base_area` VALUES ('410104', '管城回族区', '4101'); -INSERT INTO `base_area` VALUES ('410105', '金水区', '4101'); -INSERT INTO `base_area` VALUES ('410106', '上街区', '4101'); -INSERT INTO `base_area` VALUES ('410108', '惠济区', '4101'); -INSERT INTO `base_area` VALUES ('410122', '中牟县', '4101'); -INSERT INTO `base_area` VALUES ('410171', '郑州经济技术开发区', '4101'); -INSERT INTO `base_area` VALUES ('410172', '郑州高新技术产业开发区', '4101'); -INSERT INTO `base_area` VALUES ('410173', '郑州航空港经济综合实验区', '4101'); -INSERT INTO `base_area` VALUES ('410181', '巩义市', '4101'); -INSERT INTO `base_area` VALUES ('410182', '荥阳市', '4101'); -INSERT INTO `base_area` VALUES ('410183', '新密市', '4101'); -INSERT INTO `base_area` VALUES ('410184', '新郑市', '4101'); -INSERT INTO `base_area` VALUES ('410185', '登封市', '4101'); -INSERT INTO `base_area` VALUES ('410202', '龙亭区', '4102'); -INSERT INTO `base_area` VALUES ('410203', '顺河回族区', '4102'); -INSERT INTO `base_area` VALUES ('410204', '鼓楼区', '4102'); -INSERT INTO `base_area` VALUES ('410205', '禹王台区', '4102'); -INSERT INTO `base_area` VALUES ('410212', '祥符区', '4102'); -INSERT INTO `base_area` VALUES ('410221', '杞县', '4102'); -INSERT INTO `base_area` VALUES ('410222', '通许县', '4102'); -INSERT INTO `base_area` VALUES ('410223', '尉氏县', '4102'); -INSERT INTO `base_area` VALUES ('410225', '兰考县', '4102'); -INSERT INTO `base_area` VALUES ('410302', '老城区', '4103'); -INSERT INTO `base_area` VALUES ('410303', '西工区', '4103'); -INSERT INTO `base_area` VALUES ('410304', '瀍河回族区', '4103'); -INSERT INTO `base_area` VALUES ('410305', '涧西区', '4103'); -INSERT INTO `base_area` VALUES ('410307', '偃师区', '4103'); -INSERT INTO `base_area` VALUES ('410308', '孟津区', '4103'); -INSERT INTO `base_area` VALUES ('410311', '洛龙区', '4103'); -INSERT INTO `base_area` VALUES ('410323', '新安县', '4103'); -INSERT INTO `base_area` VALUES ('410324', '栾川县', '4103'); -INSERT INTO `base_area` VALUES ('410325', '嵩县', '4103'); -INSERT INTO `base_area` VALUES ('410326', '汝阳县', '4103'); -INSERT INTO `base_area` VALUES ('410327', '宜阳县', '4103'); -INSERT INTO `base_area` VALUES ('410328', '洛宁县', '4103'); -INSERT INTO `base_area` VALUES ('410329', '伊川县', '4103'); -INSERT INTO `base_area` VALUES ('410371', '洛阳高新技术产业开发区', '4103'); -INSERT INTO `base_area` VALUES ('410402', '新华区', '4104'); -INSERT INTO `base_area` VALUES ('410403', '卫东区', '4104'); -INSERT INTO `base_area` VALUES ('410404', '石龙区', '4104'); -INSERT INTO `base_area` VALUES ('410411', '湛河区', '4104'); -INSERT INTO `base_area` VALUES ('410421', '宝丰县', '4104'); -INSERT INTO `base_area` VALUES ('410422', '叶县', '4104'); -INSERT INTO `base_area` VALUES ('410423', '鲁山县', '4104'); -INSERT INTO `base_area` VALUES ('410425', '郏县', '4104'); -INSERT INTO `base_area` VALUES ('410471', '平顶山高新技术产业开发区', '4104'); -INSERT INTO `base_area` VALUES ('410472', '平顶山市城乡一体化示范区', '4104'); -INSERT INTO `base_area` VALUES ('410481', '舞钢市', '4104'); -INSERT INTO `base_area` VALUES ('410482', '汝州市', '4104'); -INSERT INTO `base_area` VALUES ('410502', '文峰区', '4105'); -INSERT INTO `base_area` VALUES ('410503', '北关区', '4105'); -INSERT INTO `base_area` VALUES ('410505', '殷都区', '4105'); -INSERT INTO `base_area` VALUES ('410506', '龙安区', '4105'); -INSERT INTO `base_area` VALUES ('410522', '安阳县', '4105'); -INSERT INTO `base_area` VALUES ('410523', '汤阴县', '4105'); -INSERT INTO `base_area` VALUES ('410526', '滑县', '4105'); -INSERT INTO `base_area` VALUES ('410527', '内黄县', '4105'); -INSERT INTO `base_area` VALUES ('410571', '安阳高新技术产业开发区', '4105'); -INSERT INTO `base_area` VALUES ('410581', '林州市', '4105'); -INSERT INTO `base_area` VALUES ('410602', '鹤山区', '4106'); -INSERT INTO `base_area` VALUES ('410603', '山城区', '4106'); -INSERT INTO `base_area` VALUES ('410611', '淇滨区', '4106'); -INSERT INTO `base_area` VALUES ('410621', '浚县', '4106'); -INSERT INTO `base_area` VALUES ('410622', '淇县', '4106'); -INSERT INTO `base_area` VALUES ('410671', '鹤壁经济技术开发区', '4106'); -INSERT INTO `base_area` VALUES ('410702', '红旗区', '4107'); -INSERT INTO `base_area` VALUES ('410703', '卫滨区', '4107'); -INSERT INTO `base_area` VALUES ('410704', '凤泉区', '4107'); -INSERT INTO `base_area` VALUES ('410711', '牧野区', '4107'); -INSERT INTO `base_area` VALUES ('410721', '新乡县', '4107'); -INSERT INTO `base_area` VALUES ('410724', '获嘉县', '4107'); -INSERT INTO `base_area` VALUES ('410725', '原阳县', '4107'); -INSERT INTO `base_area` VALUES ('410726', '延津县', '4107'); -INSERT INTO `base_area` VALUES ('410727', '封丘县', '4107'); -INSERT INTO `base_area` VALUES ('410771', '新乡高新技术产业开发区', '4107'); -INSERT INTO `base_area` VALUES ('410772', '新乡经济技术开发区', '4107'); -INSERT INTO `base_area` VALUES ('410773', '新乡市平原城乡一体化示范区', '4107'); -INSERT INTO `base_area` VALUES ('410781', '卫辉市', '4107'); -INSERT INTO `base_area` VALUES ('410782', '辉县市', '4107'); -INSERT INTO `base_area` VALUES ('410783', '长垣市', '4107'); -INSERT INTO `base_area` VALUES ('410802', '解放区', '4108'); -INSERT INTO `base_area` VALUES ('410803', '中站区', '4108'); -INSERT INTO `base_area` VALUES ('410804', '马村区', '4108'); -INSERT INTO `base_area` VALUES ('410811', '山阳区', '4108'); -INSERT INTO `base_area` VALUES ('410821', '修武县', '4108'); -INSERT INTO `base_area` VALUES ('410822', '博爱县', '4108'); -INSERT INTO `base_area` VALUES ('410823', '武陟县', '4108'); -INSERT INTO `base_area` VALUES ('410825', '温县', '4108'); -INSERT INTO `base_area` VALUES ('410871', '焦作城乡一体化示范区', '4108'); -INSERT INTO `base_area` VALUES ('410882', '沁阳市', '4108'); -INSERT INTO `base_area` VALUES ('410883', '孟州市', '4108'); -INSERT INTO `base_area` VALUES ('410902', '华龙区', '4109'); -INSERT INTO `base_area` VALUES ('410922', '清丰县', '4109'); -INSERT INTO `base_area` VALUES ('410923', '南乐县', '4109'); -INSERT INTO `base_area` VALUES ('410926', '范县', '4109'); -INSERT INTO `base_area` VALUES ('410927', '台前县', '4109'); -INSERT INTO `base_area` VALUES ('410928', '濮阳县', '4109'); -INSERT INTO `base_area` VALUES ('410971', '河南濮阳工业园区', '4109'); -INSERT INTO `base_area` VALUES ('410972', '濮阳经济技术开发区', '4109'); -INSERT INTO `base_area` VALUES ('411002', '魏都区', '4110'); -INSERT INTO `base_area` VALUES ('411003', '建安区', '4110'); -INSERT INTO `base_area` VALUES ('411024', '鄢陵县', '4110'); -INSERT INTO `base_area` VALUES ('411025', '襄城县', '4110'); -INSERT INTO `base_area` VALUES ('411071', '许昌经济技术开发区', '4110'); -INSERT INTO `base_area` VALUES ('411081', '禹州市', '4110'); -INSERT INTO `base_area` VALUES ('411082', '长葛市', '4110'); -INSERT INTO `base_area` VALUES ('411102', '源汇区', '4111'); -INSERT INTO `base_area` VALUES ('411103', '郾城区', '4111'); -INSERT INTO `base_area` VALUES ('411104', '召陵区', '4111'); -INSERT INTO `base_area` VALUES ('411121', '舞阳县', '4111'); -INSERT INTO `base_area` VALUES ('411122', '临颍县', '4111'); -INSERT INTO `base_area` VALUES ('411171', '漯河经济技术开发区', '4111'); -INSERT INTO `base_area` VALUES ('411202', '湖滨区', '4112'); -INSERT INTO `base_area` VALUES ('411203', '陕州区', '4112'); -INSERT INTO `base_area` VALUES ('411221', '渑池县', '4112'); -INSERT INTO `base_area` VALUES ('411224', '卢氏县', '4112'); -INSERT INTO `base_area` VALUES ('411271', '河南三门峡经济开发区', '4112'); -INSERT INTO `base_area` VALUES ('411281', '义马市', '4112'); -INSERT INTO `base_area` VALUES ('411282', '灵宝市', '4112'); -INSERT INTO `base_area` VALUES ('411302', '宛城区', '4113'); -INSERT INTO `base_area` VALUES ('411303', '卧龙区', '4113'); -INSERT INTO `base_area` VALUES ('411321', '南召县', '4113'); -INSERT INTO `base_area` VALUES ('411322', '方城县', '4113'); -INSERT INTO `base_area` VALUES ('411323', '西峡县', '4113'); -INSERT INTO `base_area` VALUES ('411324', '镇平县', '4113'); -INSERT INTO `base_area` VALUES ('411325', '内乡县', '4113'); -INSERT INTO `base_area` VALUES ('411326', '淅川县', '4113'); -INSERT INTO `base_area` VALUES ('411327', '社旗县', '4113'); -INSERT INTO `base_area` VALUES ('411328', '唐河县', '4113'); -INSERT INTO `base_area` VALUES ('411329', '新野县', '4113'); -INSERT INTO `base_area` VALUES ('411330', '桐柏县', '4113'); -INSERT INTO `base_area` VALUES ('411371', '南阳高新技术产业开发区', '4113'); -INSERT INTO `base_area` VALUES ('411372', '南阳市城乡一体化示范区', '4113'); -INSERT INTO `base_area` VALUES ('411381', '邓州市', '4113'); -INSERT INTO `base_area` VALUES ('411402', '梁园区', '4114'); -INSERT INTO `base_area` VALUES ('411403', '睢阳区', '4114'); -INSERT INTO `base_area` VALUES ('411421', '民权县', '4114'); -INSERT INTO `base_area` VALUES ('411422', '睢县', '4114'); -INSERT INTO `base_area` VALUES ('411423', '宁陵县', '4114'); -INSERT INTO `base_area` VALUES ('411424', '柘城县', '4114'); -INSERT INTO `base_area` VALUES ('411425', '虞城县', '4114'); -INSERT INTO `base_area` VALUES ('411426', '夏邑县', '4114'); -INSERT INTO `base_area` VALUES ('411471', '豫东综合物流产业聚集区', '4114'); -INSERT INTO `base_area` VALUES ('411472', '河南商丘经济开发区', '4114'); -INSERT INTO `base_area` VALUES ('411481', '永城市', '4114'); -INSERT INTO `base_area` VALUES ('411502', '浉河区', '4115'); -INSERT INTO `base_area` VALUES ('411503', '平桥区', '4115'); -INSERT INTO `base_area` VALUES ('411521', '罗山县', '4115'); -INSERT INTO `base_area` VALUES ('411522', '光山县', '4115'); -INSERT INTO `base_area` VALUES ('411523', '新县', '4115'); -INSERT INTO `base_area` VALUES ('411524', '商城县', '4115'); -INSERT INTO `base_area` VALUES ('411525', '固始县', '4115'); -INSERT INTO `base_area` VALUES ('411526', '潢川县', '4115'); -INSERT INTO `base_area` VALUES ('411527', '淮滨县', '4115'); -INSERT INTO `base_area` VALUES ('411528', '息县', '4115'); -INSERT INTO `base_area` VALUES ('411571', '信阳高新技术产业开发区', '4115'); -INSERT INTO `base_area` VALUES ('411602', '川汇区', '4116'); -INSERT INTO `base_area` VALUES ('411603', '淮阳区', '4116'); -INSERT INTO `base_area` VALUES ('411621', '扶沟县', '4116'); -INSERT INTO `base_area` VALUES ('411622', '西华县', '4116'); -INSERT INTO `base_area` VALUES ('411623', '商水县', '4116'); -INSERT INTO `base_area` VALUES ('411624', '沈丘县', '4116'); -INSERT INTO `base_area` VALUES ('411625', '郸城县', '4116'); -INSERT INTO `base_area` VALUES ('411627', '太康县', '4116'); -INSERT INTO `base_area` VALUES ('411628', '鹿邑县', '4116'); -INSERT INTO `base_area` VALUES ('411671', '河南周口经济开发区', '4116'); -INSERT INTO `base_area` VALUES ('411681', '项城市', '4116'); -INSERT INTO `base_area` VALUES ('411702', '驿城区', '4117'); -INSERT INTO `base_area` VALUES ('411721', '西平县', '4117'); -INSERT INTO `base_area` VALUES ('411722', '上蔡县', '4117'); -INSERT INTO `base_area` VALUES ('411723', '平舆县', '4117'); -INSERT INTO `base_area` VALUES ('411724', '正阳县', '4117'); -INSERT INTO `base_area` VALUES ('411725', '确山县', '4117'); -INSERT INTO `base_area` VALUES ('411726', '泌阳县', '4117'); -INSERT INTO `base_area` VALUES ('411727', '汝南县', '4117'); -INSERT INTO `base_area` VALUES ('411728', '遂平县', '4117'); -INSERT INTO `base_area` VALUES ('411729', '新蔡县', '4117'); -INSERT INTO `base_area` VALUES ('411771', '河南驻马店经济开发区', '4117'); -INSERT INTO `base_area` VALUES ('419001', '济源市', '4190'); -INSERT INTO `base_area` VALUES ('420102', '江岸区', '4201'); -INSERT INTO `base_area` VALUES ('420103', '江汉区', '4201'); -INSERT INTO `base_area` VALUES ('420104', '硚口区', '4201'); -INSERT INTO `base_area` VALUES ('420105', '汉阳区', '4201'); -INSERT INTO `base_area` VALUES ('420106', '武昌区', '4201'); -INSERT INTO `base_area` VALUES ('420107', '青山区', '4201'); -INSERT INTO `base_area` VALUES ('420111', '洪山区', '4201'); -INSERT INTO `base_area` VALUES ('420112', '东西湖区', '4201'); -INSERT INTO `base_area` VALUES ('420113', '汉南区', '4201'); -INSERT INTO `base_area` VALUES ('420114', '蔡甸区', '4201'); -INSERT INTO `base_area` VALUES ('420115', '江夏区', '4201'); -INSERT INTO `base_area` VALUES ('420116', '黄陂区', '4201'); -INSERT INTO `base_area` VALUES ('420117', '新洲区', '4201'); -INSERT INTO `base_area` VALUES ('420202', '黄石港区', '4202'); -INSERT INTO `base_area` VALUES ('420203', '西塞山区', '4202'); -INSERT INTO `base_area` VALUES ('420204', '下陆区', '4202'); -INSERT INTO `base_area` VALUES ('420205', '铁山区', '4202'); -INSERT INTO `base_area` VALUES ('420222', '阳新县', '4202'); -INSERT INTO `base_area` VALUES ('420281', '大冶市', '4202'); -INSERT INTO `base_area` VALUES ('420302', '茅箭区', '4203'); -INSERT INTO `base_area` VALUES ('420303', '张湾区', '4203'); -INSERT INTO `base_area` VALUES ('420304', '郧阳区', '4203'); -INSERT INTO `base_area` VALUES ('420322', '郧西县', '4203'); -INSERT INTO `base_area` VALUES ('420323', '竹山县', '4203'); -INSERT INTO `base_area` VALUES ('420324', '竹溪县', '4203'); -INSERT INTO `base_area` VALUES ('420325', '房县', '4203'); -INSERT INTO `base_area` VALUES ('420381', '丹江口市', '4203'); -INSERT INTO `base_area` VALUES ('420502', '西陵区', '4205'); -INSERT INTO `base_area` VALUES ('420503', '伍家岗区', '4205'); -INSERT INTO `base_area` VALUES ('420504', '点军区', '4205'); -INSERT INTO `base_area` VALUES ('420505', '猇亭区', '4205'); -INSERT INTO `base_area` VALUES ('420506', '夷陵区', '4205'); -INSERT INTO `base_area` VALUES ('420525', '远安县', '4205'); -INSERT INTO `base_area` VALUES ('420526', '兴山县', '4205'); -INSERT INTO `base_area` VALUES ('420527', '秭归县', '4205'); -INSERT INTO `base_area` VALUES ('420528', '长阳土家族自治县', '4205'); -INSERT INTO `base_area` VALUES ('420529', '五峰土家族自治县', '4205'); -INSERT INTO `base_area` VALUES ('420581', '宜都市', '4205'); -INSERT INTO `base_area` VALUES ('420582', '当阳市', '4205'); -INSERT INTO `base_area` VALUES ('420583', '枝江市', '4205'); -INSERT INTO `base_area` VALUES ('420602', '襄城区', '4206'); -INSERT INTO `base_area` VALUES ('420606', '樊城区', '4206'); -INSERT INTO `base_area` VALUES ('420607', '襄州区', '4206'); -INSERT INTO `base_area` VALUES ('420624', '南漳县', '4206'); -INSERT INTO `base_area` VALUES ('420625', '谷城县', '4206'); -INSERT INTO `base_area` VALUES ('420626', '保康县', '4206'); -INSERT INTO `base_area` VALUES ('420682', '老河口市', '4206'); -INSERT INTO `base_area` VALUES ('420683', '枣阳市', '4206'); -INSERT INTO `base_area` VALUES ('420684', '宜城市', '4206'); -INSERT INTO `base_area` VALUES ('420702', '梁子湖区', '4207'); -INSERT INTO `base_area` VALUES ('420703', '华容区', '4207'); -INSERT INTO `base_area` VALUES ('420704', '鄂城区', '4207'); -INSERT INTO `base_area` VALUES ('420802', '东宝区', '4208'); -INSERT INTO `base_area` VALUES ('420804', '掇刀区', '4208'); -INSERT INTO `base_area` VALUES ('420822', '沙洋县', '4208'); -INSERT INTO `base_area` VALUES ('420881', '钟祥市', '4208'); -INSERT INTO `base_area` VALUES ('420882', '京山市', '4208'); -INSERT INTO `base_area` VALUES ('420902', '孝南区', '4209'); -INSERT INTO `base_area` VALUES ('420921', '孝昌县', '4209'); -INSERT INTO `base_area` VALUES ('420922', '大悟县', '4209'); -INSERT INTO `base_area` VALUES ('420923', '云梦县', '4209'); -INSERT INTO `base_area` VALUES ('420981', '应城市', '4209'); -INSERT INTO `base_area` VALUES ('420982', '安陆市', '4209'); -INSERT INTO `base_area` VALUES ('420984', '汉川市', '4209'); -INSERT INTO `base_area` VALUES ('421002', '沙市区', '4210'); -INSERT INTO `base_area` VALUES ('421003', '荆州区', '4210'); -INSERT INTO `base_area` VALUES ('421022', '公安县', '4210'); -INSERT INTO `base_area` VALUES ('421024', '江陵县', '4210'); -INSERT INTO `base_area` VALUES ('421071', '荆州经济技术开发区', '4210'); -INSERT INTO `base_area` VALUES ('421081', '石首市', '4210'); -INSERT INTO `base_area` VALUES ('421083', '洪湖市', '4210'); -INSERT INTO `base_area` VALUES ('421087', '松滋市', '4210'); -INSERT INTO `base_area` VALUES ('421088', '监利市', '4210'); -INSERT INTO `base_area` VALUES ('421102', '黄州区', '4211'); -INSERT INTO `base_area` VALUES ('421121', '团风县', '4211'); -INSERT INTO `base_area` VALUES ('421122', '红安县', '4211'); -INSERT INTO `base_area` VALUES ('421123', '罗田县', '4211'); -INSERT INTO `base_area` VALUES ('421124', '英山县', '4211'); -INSERT INTO `base_area` VALUES ('421125', '浠水县', '4211'); -INSERT INTO `base_area` VALUES ('421126', '蕲春县', '4211'); -INSERT INTO `base_area` VALUES ('421127', '黄梅县', '4211'); -INSERT INTO `base_area` VALUES ('421171', '龙感湖管理区', '4211'); -INSERT INTO `base_area` VALUES ('421181', '麻城市', '4211'); -INSERT INTO `base_area` VALUES ('421182', '武穴市', '4211'); -INSERT INTO `base_area` VALUES ('421202', '咸安区', '4212'); -INSERT INTO `base_area` VALUES ('421221', '嘉鱼县', '4212'); -INSERT INTO `base_area` VALUES ('421222', '通城县', '4212'); -INSERT INTO `base_area` VALUES ('421223', '崇阳县', '4212'); -INSERT INTO `base_area` VALUES ('421224', '通山县', '4212'); -INSERT INTO `base_area` VALUES ('421281', '赤壁市', '4212'); -INSERT INTO `base_area` VALUES ('421303', '曾都区', '4213'); -INSERT INTO `base_area` VALUES ('421321', '随县', '4213'); -INSERT INTO `base_area` VALUES ('421381', '广水市', '4213'); -INSERT INTO `base_area` VALUES ('422801', '恩施市', '4228'); -INSERT INTO `base_area` VALUES ('422802', '利川市', '4228'); -INSERT INTO `base_area` VALUES ('422822', '建始县', '4228'); -INSERT INTO `base_area` VALUES ('422823', '巴东县', '4228'); -INSERT INTO `base_area` VALUES ('422825', '宣恩县', '4228'); -INSERT INTO `base_area` VALUES ('422826', '咸丰县', '4228'); -INSERT INTO `base_area` VALUES ('422827', '来凤县', '4228'); -INSERT INTO `base_area` VALUES ('422828', '鹤峰县', '4228'); -INSERT INTO `base_area` VALUES ('429004', '仙桃市', '4290'); -INSERT INTO `base_area` VALUES ('429005', '潜江市', '4290'); -INSERT INTO `base_area` VALUES ('429006', '天门市', '4290'); -INSERT INTO `base_area` VALUES ('429021', '神农架林区', '4290'); -INSERT INTO `base_area` VALUES ('430102', '芙蓉区', '4301'); -INSERT INTO `base_area` VALUES ('430103', '天心区', '4301'); -INSERT INTO `base_area` VALUES ('430104', '岳麓区', '4301'); -INSERT INTO `base_area` VALUES ('430105', '开福区', '4301'); -INSERT INTO `base_area` VALUES ('430111', '雨花区', '4301'); -INSERT INTO `base_area` VALUES ('430112', '望城区', '4301'); -INSERT INTO `base_area` VALUES ('430121', '长沙县', '4301'); -INSERT INTO `base_area` VALUES ('430181', '浏阳市', '4301'); -INSERT INTO `base_area` VALUES ('430182', '宁乡市', '4301'); -INSERT INTO `base_area` VALUES ('430202', '荷塘区', '4302'); -INSERT INTO `base_area` VALUES ('430203', '芦淞区', '4302'); -INSERT INTO `base_area` VALUES ('430204', '石峰区', '4302'); -INSERT INTO `base_area` VALUES ('430211', '天元区', '4302'); -INSERT INTO `base_area` VALUES ('430212', '渌口区', '4302'); -INSERT INTO `base_area` VALUES ('430223', '攸县', '4302'); -INSERT INTO `base_area` VALUES ('430224', '茶陵县', '4302'); -INSERT INTO `base_area` VALUES ('430225', '炎陵县', '4302'); -INSERT INTO `base_area` VALUES ('430281', '醴陵市', '4302'); -INSERT INTO `base_area` VALUES ('430302', '雨湖区', '4303'); -INSERT INTO `base_area` VALUES ('430304', '岳塘区', '4303'); -INSERT INTO `base_area` VALUES ('430321', '湘潭县', '4303'); -INSERT INTO `base_area` VALUES ('430371', '湖南湘潭高新技术产业园区', '4303'); -INSERT INTO `base_area` VALUES ('430372', '湘潭昭山示范区', '4303'); -INSERT INTO `base_area` VALUES ('430373', '湘潭九华示范区', '4303'); -INSERT INTO `base_area` VALUES ('430381', '湘乡市', '4303'); -INSERT INTO `base_area` VALUES ('430382', '韶山市', '4303'); -INSERT INTO `base_area` VALUES ('430405', '珠晖区', '4304'); -INSERT INTO `base_area` VALUES ('430406', '雁峰区', '4304'); -INSERT INTO `base_area` VALUES ('430407', '石鼓区', '4304'); -INSERT INTO `base_area` VALUES ('430408', '蒸湘区', '4304'); -INSERT INTO `base_area` VALUES ('430412', '南岳区', '4304'); -INSERT INTO `base_area` VALUES ('430421', '衡阳县', '4304'); -INSERT INTO `base_area` VALUES ('430422', '衡南县', '4304'); -INSERT INTO `base_area` VALUES ('430423', '衡山县', '4304'); -INSERT INTO `base_area` VALUES ('430424', '衡东县', '4304'); -INSERT INTO `base_area` VALUES ('430426', '祁东县', '4304'); -INSERT INTO `base_area` VALUES ('430471', '衡阳综合保税区', '4304'); -INSERT INTO `base_area` VALUES ('430472', '湖南衡阳高新技术产业园区', '4304'); -INSERT INTO `base_area` VALUES ('430473', '湖南衡阳松木经济开发区', '4304'); -INSERT INTO `base_area` VALUES ('430481', '耒阳市', '4304'); -INSERT INTO `base_area` VALUES ('430482', '常宁市', '4304'); -INSERT INTO `base_area` VALUES ('430502', '双清区', '4305'); -INSERT INTO `base_area` VALUES ('430503', '大祥区', '4305'); -INSERT INTO `base_area` VALUES ('430511', '北塔区', '4305'); -INSERT INTO `base_area` VALUES ('430522', '新邵县', '4305'); -INSERT INTO `base_area` VALUES ('430523', '邵阳县', '4305'); -INSERT INTO `base_area` VALUES ('430524', '隆回县', '4305'); -INSERT INTO `base_area` VALUES ('430525', '洞口县', '4305'); -INSERT INTO `base_area` VALUES ('430527', '绥宁县', '4305'); -INSERT INTO `base_area` VALUES ('430528', '新宁县', '4305'); -INSERT INTO `base_area` VALUES ('430529', '城步苗族自治县', '4305'); -INSERT INTO `base_area` VALUES ('430581', '武冈市', '4305'); -INSERT INTO `base_area` VALUES ('430582', '邵东市', '4305'); -INSERT INTO `base_area` VALUES ('430602', '岳阳楼区', '4306'); -INSERT INTO `base_area` VALUES ('430603', '云溪区', '4306'); -INSERT INTO `base_area` VALUES ('430611', '君山区', '4306'); -INSERT INTO `base_area` VALUES ('430621', '岳阳县', '4306'); -INSERT INTO `base_area` VALUES ('430623', '华容县', '4306'); -INSERT INTO `base_area` VALUES ('430624', '湘阴县', '4306'); -INSERT INTO `base_area` VALUES ('430626', '平江县', '4306'); -INSERT INTO `base_area` VALUES ('430671', '岳阳市屈原管理区', '4306'); -INSERT INTO `base_area` VALUES ('430681', '汨罗市', '4306'); -INSERT INTO `base_area` VALUES ('430682', '临湘市', '4306'); -INSERT INTO `base_area` VALUES ('430702', '武陵区', '4307'); -INSERT INTO `base_area` VALUES ('430703', '鼎城区', '4307'); -INSERT INTO `base_area` VALUES ('430721', '安乡县', '4307'); -INSERT INTO `base_area` VALUES ('430722', '汉寿县', '4307'); -INSERT INTO `base_area` VALUES ('430723', '澧县', '4307'); -INSERT INTO `base_area` VALUES ('430724', '临澧县', '4307'); -INSERT INTO `base_area` VALUES ('430725', '桃源县', '4307'); -INSERT INTO `base_area` VALUES ('430726', '石门县', '4307'); -INSERT INTO `base_area` VALUES ('430771', '常德市西洞庭管理区', '4307'); -INSERT INTO `base_area` VALUES ('430781', '津市市', '4307'); -INSERT INTO `base_area` VALUES ('430802', '永定区', '4308'); -INSERT INTO `base_area` VALUES ('430811', '武陵源区', '4308'); -INSERT INTO `base_area` VALUES ('430821', '慈利县', '4308'); -INSERT INTO `base_area` VALUES ('430822', '桑植县', '4308'); -INSERT INTO `base_area` VALUES ('430902', '资阳区', '4309'); -INSERT INTO `base_area` VALUES ('430903', '赫山区', '4309'); -INSERT INTO `base_area` VALUES ('430921', '南县', '4309'); -INSERT INTO `base_area` VALUES ('430922', '桃江县', '4309'); -INSERT INTO `base_area` VALUES ('430923', '安化县', '4309'); -INSERT INTO `base_area` VALUES ('430971', '益阳市大通湖管理区', '4309'); -INSERT INTO `base_area` VALUES ('430972', '湖南益阳高新技术产业园区', '4309'); -INSERT INTO `base_area` VALUES ('430981', '沅江市', '4309'); -INSERT INTO `base_area` VALUES ('431002', '北湖区', '4310'); -INSERT INTO `base_area` VALUES ('431003', '苏仙区', '4310'); -INSERT INTO `base_area` VALUES ('431021', '桂阳县', '4310'); -INSERT INTO `base_area` VALUES ('431022', '宜章县', '4310'); -INSERT INTO `base_area` VALUES ('431023', '永兴县', '4310'); -INSERT INTO `base_area` VALUES ('431024', '嘉禾县', '4310'); -INSERT INTO `base_area` VALUES ('431025', '临武县', '4310'); -INSERT INTO `base_area` VALUES ('431026', '汝城县', '4310'); -INSERT INTO `base_area` VALUES ('431027', '桂东县', '4310'); -INSERT INTO `base_area` VALUES ('431028', '安仁县', '4310'); -INSERT INTO `base_area` VALUES ('431081', '资兴市', '4310'); -INSERT INTO `base_area` VALUES ('431102', '零陵区', '4311'); -INSERT INTO `base_area` VALUES ('431103', '冷水滩区', '4311'); -INSERT INTO `base_area` VALUES ('431122', '东安县', '4311'); -INSERT INTO `base_area` VALUES ('431123', '双牌县', '4311'); -INSERT INTO `base_area` VALUES ('431124', '道县', '4311'); -INSERT INTO `base_area` VALUES ('431125', '江永县', '4311'); -INSERT INTO `base_area` VALUES ('431126', '宁远县', '4311'); -INSERT INTO `base_area` VALUES ('431127', '蓝山县', '4311'); -INSERT INTO `base_area` VALUES ('431128', '新田县', '4311'); -INSERT INTO `base_area` VALUES ('431129', '江华瑶族自治县', '4311'); -INSERT INTO `base_area` VALUES ('431171', '永州经济技术开发区', '4311'); -INSERT INTO `base_area` VALUES ('431173', '永州市回龙圩管理区', '4311'); -INSERT INTO `base_area` VALUES ('431181', '祁阳市', '4311'); -INSERT INTO `base_area` VALUES ('431202', '鹤城区', '4312'); -INSERT INTO `base_area` VALUES ('431221', '中方县', '4312'); -INSERT INTO `base_area` VALUES ('431222', '沅陵县', '4312'); -INSERT INTO `base_area` VALUES ('431223', '辰溪县', '4312'); -INSERT INTO `base_area` VALUES ('431224', '溆浦县', '4312'); -INSERT INTO `base_area` VALUES ('431225', '会同县', '4312'); -INSERT INTO `base_area` VALUES ('431226', '麻阳苗族自治县', '4312'); -INSERT INTO `base_area` VALUES ('431227', '新晃侗族自治县', '4312'); -INSERT INTO `base_area` VALUES ('431228', '芷江侗族自治县', '4312'); -INSERT INTO `base_area` VALUES ('431229', '靖州苗族侗族自治县', '4312'); -INSERT INTO `base_area` VALUES ('431230', '通道侗族自治县', '4312'); -INSERT INTO `base_area` VALUES ('431271', '怀化市洪江管理区', '4312'); -INSERT INTO `base_area` VALUES ('431281', '洪江市', '4312'); -INSERT INTO `base_area` VALUES ('431302', '娄星区', '4313'); -INSERT INTO `base_area` VALUES ('431321', '双峰县', '4313'); -INSERT INTO `base_area` VALUES ('431322', '新化县', '4313'); -INSERT INTO `base_area` VALUES ('431381', '冷水江市', '4313'); -INSERT INTO `base_area` VALUES ('431382', '涟源市', '4313'); -INSERT INTO `base_area` VALUES ('433101', '吉首市', '4331'); -INSERT INTO `base_area` VALUES ('433122', '泸溪县', '4331'); -INSERT INTO `base_area` VALUES ('433123', '凤凰县', '4331'); -INSERT INTO `base_area` VALUES ('433124', '花垣县', '4331'); -INSERT INTO `base_area` VALUES ('433125', '保靖县', '4331'); -INSERT INTO `base_area` VALUES ('433126', '古丈县', '4331'); -INSERT INTO `base_area` VALUES ('433127', '永顺县', '4331'); -INSERT INTO `base_area` VALUES ('433130', '龙山县', '4331'); -INSERT INTO `base_area` VALUES ('440103', '荔湾区', '4401'); -INSERT INTO `base_area` VALUES ('440104', '越秀区', '4401'); -INSERT INTO `base_area` VALUES ('440105', '海珠区', '4401'); -INSERT INTO `base_area` VALUES ('440106', '天河区', '4401'); -INSERT INTO `base_area` VALUES ('440111', '白云区', '4401'); -INSERT INTO `base_area` VALUES ('440112', '黄埔区', '4401'); -INSERT INTO `base_area` VALUES ('440113', '番禺区', '4401'); -INSERT INTO `base_area` VALUES ('440114', '花都区', '4401'); -INSERT INTO `base_area` VALUES ('440115', '南沙区', '4401'); -INSERT INTO `base_area` VALUES ('440117', '从化区', '4401'); -INSERT INTO `base_area` VALUES ('440118', '增城区', '4401'); -INSERT INTO `base_area` VALUES ('440203', '武江区', '4402'); -INSERT INTO `base_area` VALUES ('440204', '浈江区', '4402'); -INSERT INTO `base_area` VALUES ('440205', '曲江区', '4402'); -INSERT INTO `base_area` VALUES ('440222', '始兴县', '4402'); -INSERT INTO `base_area` VALUES ('440224', '仁化县', '4402'); -INSERT INTO `base_area` VALUES ('440229', '翁源县', '4402'); -INSERT INTO `base_area` VALUES ('440232', '乳源瑶族自治县', '4402'); -INSERT INTO `base_area` VALUES ('440233', '新丰县', '4402'); -INSERT INTO `base_area` VALUES ('440281', '乐昌市', '4402'); -INSERT INTO `base_area` VALUES ('440282', '南雄市', '4402'); -INSERT INTO `base_area` VALUES ('440303', '罗湖区', '4403'); -INSERT INTO `base_area` VALUES ('440304', '福田区', '4403'); -INSERT INTO `base_area` VALUES ('440305', '南山区', '4403'); -INSERT INTO `base_area` VALUES ('440306', '宝安区', '4403'); -INSERT INTO `base_area` VALUES ('440307', '龙岗区', '4403'); -INSERT INTO `base_area` VALUES ('440308', '盐田区', '4403'); -INSERT INTO `base_area` VALUES ('440309', '龙华区', '4403'); -INSERT INTO `base_area` VALUES ('440310', '坪山区', '4403'); -INSERT INTO `base_area` VALUES ('440311', '光明区', '4403'); -INSERT INTO `base_area` VALUES ('440402', '香洲区', '4404'); -INSERT INTO `base_area` VALUES ('440403', '斗门区', '4404'); -INSERT INTO `base_area` VALUES ('440404', '金湾区', '4404'); -INSERT INTO `base_area` VALUES ('440507', '龙湖区', '4405'); -INSERT INTO `base_area` VALUES ('440511', '金平区', '4405'); -INSERT INTO `base_area` VALUES ('440512', '濠江区', '4405'); -INSERT INTO `base_area` VALUES ('440513', '潮阳区', '4405'); -INSERT INTO `base_area` VALUES ('440514', '潮南区', '4405'); -INSERT INTO `base_area` VALUES ('440515', '澄海区', '4405'); -INSERT INTO `base_area` VALUES ('440523', '南澳县', '4405'); -INSERT INTO `base_area` VALUES ('440604', '禅城区', '4406'); -INSERT INTO `base_area` VALUES ('440605', '南海区', '4406'); -INSERT INTO `base_area` VALUES ('440606', '顺德区', '4406'); -INSERT INTO `base_area` VALUES ('440607', '三水区', '4406'); -INSERT INTO `base_area` VALUES ('440608', '高明区', '4406'); -INSERT INTO `base_area` VALUES ('440703', '蓬江区', '4407'); -INSERT INTO `base_area` VALUES ('440704', '江海区', '4407'); -INSERT INTO `base_area` VALUES ('440705', '新会区', '4407'); -INSERT INTO `base_area` VALUES ('440781', '台山市', '4407'); -INSERT INTO `base_area` VALUES ('440783', '开平市', '4407'); -INSERT INTO `base_area` VALUES ('440784', '鹤山市', '4407'); -INSERT INTO `base_area` VALUES ('440785', '恩平市', '4407'); -INSERT INTO `base_area` VALUES ('440802', '赤坎区', '4408'); -INSERT INTO `base_area` VALUES ('440803', '霞山区', '4408'); -INSERT INTO `base_area` VALUES ('440804', '坡头区', '4408'); -INSERT INTO `base_area` VALUES ('440811', '麻章区', '4408'); -INSERT INTO `base_area` VALUES ('440823', '遂溪县', '4408'); -INSERT INTO `base_area` VALUES ('440825', '徐闻县', '4408'); -INSERT INTO `base_area` VALUES ('440881', '廉江市', '4408'); -INSERT INTO `base_area` VALUES ('440882', '雷州市', '4408'); -INSERT INTO `base_area` VALUES ('440883', '吴川市', '4408'); -INSERT INTO `base_area` VALUES ('440902', '茂南区', '4409'); -INSERT INTO `base_area` VALUES ('440904', '电白区', '4409'); -INSERT INTO `base_area` VALUES ('440981', '高州市', '4409'); -INSERT INTO `base_area` VALUES ('440982', '化州市', '4409'); -INSERT INTO `base_area` VALUES ('440983', '信宜市', '4409'); -INSERT INTO `base_area` VALUES ('441202', '端州区', '4412'); -INSERT INTO `base_area` VALUES ('441203', '鼎湖区', '4412'); -INSERT INTO `base_area` VALUES ('441204', '高要区', '4412'); -INSERT INTO `base_area` VALUES ('441223', '广宁县', '4412'); -INSERT INTO `base_area` VALUES ('441224', '怀集县', '4412'); -INSERT INTO `base_area` VALUES ('441225', '封开县', '4412'); -INSERT INTO `base_area` VALUES ('441226', '德庆县', '4412'); -INSERT INTO `base_area` VALUES ('441284', '四会市', '4412'); -INSERT INTO `base_area` VALUES ('441302', '惠城区', '4413'); -INSERT INTO `base_area` VALUES ('441303', '惠阳区', '4413'); -INSERT INTO `base_area` VALUES ('441322', '博罗县', '4413'); -INSERT INTO `base_area` VALUES ('441323', '惠东县', '4413'); -INSERT INTO `base_area` VALUES ('441324', '龙门县', '4413'); -INSERT INTO `base_area` VALUES ('441402', '梅江区', '4414'); -INSERT INTO `base_area` VALUES ('441403', '梅县区', '4414'); -INSERT INTO `base_area` VALUES ('441422', '大埔县', '4414'); -INSERT INTO `base_area` VALUES ('441423', '丰顺县', '4414'); -INSERT INTO `base_area` VALUES ('441424', '五华县', '4414'); -INSERT INTO `base_area` VALUES ('441426', '平远县', '4414'); -INSERT INTO `base_area` VALUES ('441427', '蕉岭县', '4414'); -INSERT INTO `base_area` VALUES ('441481', '兴宁市', '4414'); -INSERT INTO `base_area` VALUES ('441502', '城区', '4415'); -INSERT INTO `base_area` VALUES ('441521', '海丰县', '4415'); -INSERT INTO `base_area` VALUES ('441523', '陆河县', '4415'); -INSERT INTO `base_area` VALUES ('441581', '陆丰市', '4415'); -INSERT INTO `base_area` VALUES ('441602', '源城区', '4416'); -INSERT INTO `base_area` VALUES ('441621', '紫金县', '4416'); -INSERT INTO `base_area` VALUES ('441622', '龙川县', '4416'); -INSERT INTO `base_area` VALUES ('441623', '连平县', '4416'); -INSERT INTO `base_area` VALUES ('441624', '和平县', '4416'); -INSERT INTO `base_area` VALUES ('441625', '东源县', '4416'); -INSERT INTO `base_area` VALUES ('441702', '江城区', '4417'); -INSERT INTO `base_area` VALUES ('441704', '阳东区', '4417'); -INSERT INTO `base_area` VALUES ('441721', '阳西县', '4417'); -INSERT INTO `base_area` VALUES ('441781', '阳春市', '4417'); -INSERT INTO `base_area` VALUES ('441802', '清城区', '4418'); -INSERT INTO `base_area` VALUES ('441803', '清新区', '4418'); -INSERT INTO `base_area` VALUES ('441821', '佛冈县', '4418'); -INSERT INTO `base_area` VALUES ('441823', '阳山县', '4418'); -INSERT INTO `base_area` VALUES ('441825', '连山壮族瑶族自治县', '4418'); -INSERT INTO `base_area` VALUES ('441826', '连南瑶族自治县', '4418'); -INSERT INTO `base_area` VALUES ('441881', '英德市', '4418'); -INSERT INTO `base_area` VALUES ('441882', '连州市', '4418'); -INSERT INTO `base_area` VALUES ('441900', '东莞市', '4419'); -INSERT INTO `base_area` VALUES ('442000', '中山市', '4420'); -INSERT INTO `base_area` VALUES ('445102', '湘桥区', '4451'); -INSERT INTO `base_area` VALUES ('445103', '潮安区', '4451'); -INSERT INTO `base_area` VALUES ('445122', '饶平县', '4451'); -INSERT INTO `base_area` VALUES ('445202', '榕城区', '4452'); -INSERT INTO `base_area` VALUES ('445203', '揭东区', '4452'); -INSERT INTO `base_area` VALUES ('445222', '揭西县', '4452'); -INSERT INTO `base_area` VALUES ('445224', '惠来县', '4452'); -INSERT INTO `base_area` VALUES ('445281', '普宁市', '4452'); -INSERT INTO `base_area` VALUES ('445302', '云城区', '4453'); -INSERT INTO `base_area` VALUES ('445303', '云安区', '4453'); -INSERT INTO `base_area` VALUES ('445321', '新兴县', '4453'); -INSERT INTO `base_area` VALUES ('445322', '郁南县', '4453'); -INSERT INTO `base_area` VALUES ('445381', '罗定市', '4453'); -INSERT INTO `base_area` VALUES ('450102', '兴宁区', '4501'); -INSERT INTO `base_area` VALUES ('450103', '青秀区', '4501'); -INSERT INTO `base_area` VALUES ('450105', '江南区', '4501'); -INSERT INTO `base_area` VALUES ('450107', '西乡塘区', '4501'); -INSERT INTO `base_area` VALUES ('450108', '良庆区', '4501'); -INSERT INTO `base_area` VALUES ('450109', '邕宁区', '4501'); -INSERT INTO `base_area` VALUES ('450110', '武鸣区', '4501'); -INSERT INTO `base_area` VALUES ('450123', '隆安县', '4501'); -INSERT INTO `base_area` VALUES ('450124', '马山县', '4501'); -INSERT INTO `base_area` VALUES ('450125', '上林县', '4501'); -INSERT INTO `base_area` VALUES ('450126', '宾阳县', '4501'); -INSERT INTO `base_area` VALUES ('450181', '横州市', '4501'); -INSERT INTO `base_area` VALUES ('450202', '城中区', '4502'); -INSERT INTO `base_area` VALUES ('450203', '鱼峰区', '4502'); -INSERT INTO `base_area` VALUES ('450204', '柳南区', '4502'); -INSERT INTO `base_area` VALUES ('450205', '柳北区', '4502'); -INSERT INTO `base_area` VALUES ('450206', '柳江区', '4502'); -INSERT INTO `base_area` VALUES ('450222', '柳城县', '4502'); -INSERT INTO `base_area` VALUES ('450223', '鹿寨县', '4502'); -INSERT INTO `base_area` VALUES ('450224', '融安县', '4502'); -INSERT INTO `base_area` VALUES ('450225', '融水苗族自治县', '4502'); -INSERT INTO `base_area` VALUES ('450226', '三江侗族自治县', '4502'); -INSERT INTO `base_area` VALUES ('450302', '秀峰区', '4503'); -INSERT INTO `base_area` VALUES ('450303', '叠彩区', '4503'); -INSERT INTO `base_area` VALUES ('450304', '象山区', '4503'); -INSERT INTO `base_area` VALUES ('450305', '七星区', '4503'); -INSERT INTO `base_area` VALUES ('450311', '雁山区', '4503'); -INSERT INTO `base_area` VALUES ('450312', '临桂区', '4503'); -INSERT INTO `base_area` VALUES ('450321', '阳朔县', '4503'); -INSERT INTO `base_area` VALUES ('450323', '灵川县', '4503'); -INSERT INTO `base_area` VALUES ('450324', '全州县', '4503'); -INSERT INTO `base_area` VALUES ('450325', '兴安县', '4503'); -INSERT INTO `base_area` VALUES ('450326', '永福县', '4503'); -INSERT INTO `base_area` VALUES ('450327', '灌阳县', '4503'); -INSERT INTO `base_area` VALUES ('450328', '龙胜各族自治县', '4503'); -INSERT INTO `base_area` VALUES ('450329', '资源县', '4503'); -INSERT INTO `base_area` VALUES ('450330', '平乐县', '4503'); -INSERT INTO `base_area` VALUES ('450332', '恭城瑶族自治县', '4503'); -INSERT INTO `base_area` VALUES ('450381', '荔浦市', '4503'); -INSERT INTO `base_area` VALUES ('450403', '万秀区', '4504'); -INSERT INTO `base_area` VALUES ('450405', '长洲区', '4504'); -INSERT INTO `base_area` VALUES ('450406', '龙圩区', '4504'); -INSERT INTO `base_area` VALUES ('450421', '苍梧县', '4504'); -INSERT INTO `base_area` VALUES ('450422', '藤县', '4504'); -INSERT INTO `base_area` VALUES ('450423', '蒙山县', '4504'); -INSERT INTO `base_area` VALUES ('450481', '岑溪市', '4504'); -INSERT INTO `base_area` VALUES ('450502', '海城区', '4505'); -INSERT INTO `base_area` VALUES ('450503', '银海区', '4505'); -INSERT INTO `base_area` VALUES ('450512', '铁山港区', '4505'); -INSERT INTO `base_area` VALUES ('450521', '合浦县', '4505'); -INSERT INTO `base_area` VALUES ('450602', '港口区', '4506'); -INSERT INTO `base_area` VALUES ('450603', '防城区', '4506'); -INSERT INTO `base_area` VALUES ('450621', '上思县', '4506'); -INSERT INTO `base_area` VALUES ('450681', '东兴市', '4506'); -INSERT INTO `base_area` VALUES ('450702', '钦南区', '4507'); -INSERT INTO `base_area` VALUES ('450703', '钦北区', '4507'); -INSERT INTO `base_area` VALUES ('450721', '灵山县', '4507'); -INSERT INTO `base_area` VALUES ('450722', '浦北县', '4507'); -INSERT INTO `base_area` VALUES ('450802', '港北区', '4508'); -INSERT INTO `base_area` VALUES ('450803', '港南区', '4508'); -INSERT INTO `base_area` VALUES ('450804', '覃塘区', '4508'); -INSERT INTO `base_area` VALUES ('450821', '平南县', '4508'); -INSERT INTO `base_area` VALUES ('450881', '桂平市', '4508'); -INSERT INTO `base_area` VALUES ('450902', '玉州区', '4509'); -INSERT INTO `base_area` VALUES ('450903', '福绵区', '4509'); -INSERT INTO `base_area` VALUES ('450921', '容县', '4509'); -INSERT INTO `base_area` VALUES ('450922', '陆川县', '4509'); -INSERT INTO `base_area` VALUES ('450923', '博白县', '4509'); -INSERT INTO `base_area` VALUES ('450924', '兴业县', '4509'); -INSERT INTO `base_area` VALUES ('450981', '北流市', '4509'); -INSERT INTO `base_area` VALUES ('451002', '右江区', '4510'); -INSERT INTO `base_area` VALUES ('451003', '田阳区', '4510'); -INSERT INTO `base_area` VALUES ('451022', '田东县', '4510'); -INSERT INTO `base_area` VALUES ('451024', '德保县', '4510'); -INSERT INTO `base_area` VALUES ('451026', '那坡县', '4510'); -INSERT INTO `base_area` VALUES ('451027', '凌云县', '4510'); -INSERT INTO `base_area` VALUES ('451028', '乐业县', '4510'); -INSERT INTO `base_area` VALUES ('451029', '田林县', '4510'); -INSERT INTO `base_area` VALUES ('451030', '西林县', '4510'); -INSERT INTO `base_area` VALUES ('451031', '隆林各族自治县', '4510'); -INSERT INTO `base_area` VALUES ('451081', '靖西市', '4510'); -INSERT INTO `base_area` VALUES ('451082', '平果市', '4510'); -INSERT INTO `base_area` VALUES ('451102', '八步区', '4511'); -INSERT INTO `base_area` VALUES ('451103', '平桂区', '4511'); -INSERT INTO `base_area` VALUES ('451121', '昭平县', '4511'); -INSERT INTO `base_area` VALUES ('451122', '钟山县', '4511'); -INSERT INTO `base_area` VALUES ('451123', '富川瑶族自治县', '4511'); -INSERT INTO `base_area` VALUES ('451202', '金城江区', '4512'); -INSERT INTO `base_area` VALUES ('451203', '宜州区', '4512'); -INSERT INTO `base_area` VALUES ('451221', '南丹县', '4512'); -INSERT INTO `base_area` VALUES ('451222', '天峨县', '4512'); -INSERT INTO `base_area` VALUES ('451223', '凤山县', '4512'); -INSERT INTO `base_area` VALUES ('451224', '东兰县', '4512'); -INSERT INTO `base_area` VALUES ('451225', '罗城仫佬族自治县', '4512'); -INSERT INTO `base_area` VALUES ('451226', '环江毛南族自治县', '4512'); -INSERT INTO `base_area` VALUES ('451227', '巴马瑶族自治县', '4512'); -INSERT INTO `base_area` VALUES ('451228', '都安瑶族自治县', '4512'); -INSERT INTO `base_area` VALUES ('451229', '大化瑶族自治县', '4512'); -INSERT INTO `base_area` VALUES ('451302', '兴宾区', '4513'); -INSERT INTO `base_area` VALUES ('451321', '忻城县', '4513'); -INSERT INTO `base_area` VALUES ('451322', '象州县', '4513'); -INSERT INTO `base_area` VALUES ('451323', '武宣县', '4513'); -INSERT INTO `base_area` VALUES ('451324', '金秀瑶族自治县', '4513'); -INSERT INTO `base_area` VALUES ('451381', '合山市', '4513'); -INSERT INTO `base_area` VALUES ('451402', '江州区', '4514'); -INSERT INTO `base_area` VALUES ('451421', '扶绥县', '4514'); -INSERT INTO `base_area` VALUES ('451422', '宁明县', '4514'); -INSERT INTO `base_area` VALUES ('451423', '龙州县', '4514'); -INSERT INTO `base_area` VALUES ('451424', '大新县', '4514'); -INSERT INTO `base_area` VALUES ('451425', '天等县', '4514'); -INSERT INTO `base_area` VALUES ('451481', '凭祥市', '4514'); -INSERT INTO `base_area` VALUES ('460105', '秀英区', '4601'); -INSERT INTO `base_area` VALUES ('460106', '龙华区', '4601'); -INSERT INTO `base_area` VALUES ('460107', '琼山区', '4601'); -INSERT INTO `base_area` VALUES ('460108', '美兰区', '4601'); -INSERT INTO `base_area` VALUES ('460202', '海棠区', '4602'); -INSERT INTO `base_area` VALUES ('460203', '吉阳区', '4602'); -INSERT INTO `base_area` VALUES ('460204', '天涯区', '4602'); -INSERT INTO `base_area` VALUES ('460205', '崖州区', '4602'); -INSERT INTO `base_area` VALUES ('460321', '西沙群岛', '4603'); -INSERT INTO `base_area` VALUES ('460322', '南沙群岛', '4603'); -INSERT INTO `base_area` VALUES ('460323', '中沙群岛的岛礁及其海域', '4603'); -INSERT INTO `base_area` VALUES ('460400', '儋州市', '4604'); -INSERT INTO `base_area` VALUES ('469001', '五指山市', '4690'); -INSERT INTO `base_area` VALUES ('469002', '琼海市', '4690'); -INSERT INTO `base_area` VALUES ('469005', '文昌市', '4690'); -INSERT INTO `base_area` VALUES ('469006', '万宁市', '4690'); -INSERT INTO `base_area` VALUES ('469007', '东方市', '4690'); -INSERT INTO `base_area` VALUES ('469021', '定安县', '4690'); -INSERT INTO `base_area` VALUES ('469022', '屯昌县', '4690'); -INSERT INTO `base_area` VALUES ('469023', '澄迈县', '4690'); -INSERT INTO `base_area` VALUES ('469024', '临高县', '4690'); -INSERT INTO `base_area` VALUES ('469025', '白沙黎族自治县', '4690'); -INSERT INTO `base_area` VALUES ('469026', '昌江黎族自治县', '4690'); -INSERT INTO `base_area` VALUES ('469027', '乐东黎族自治县', '4690'); -INSERT INTO `base_area` VALUES ('469028', '陵水黎族自治县', '4690'); -INSERT INTO `base_area` VALUES ('469029', '保亭黎族苗族自治县', '4690'); -INSERT INTO `base_area` VALUES ('469030', '琼中黎族苗族自治县', '4690'); -INSERT INTO `base_area` VALUES ('500101', '万州区', '5001'); -INSERT INTO `base_area` VALUES ('500102', '涪陵区', '5001'); -INSERT INTO `base_area` VALUES ('500103', '渝中区', '5001'); -INSERT INTO `base_area` VALUES ('500104', '大渡口区', '5001'); -INSERT INTO `base_area` VALUES ('500105', '江北区', '5001'); -INSERT INTO `base_area` VALUES ('500106', '沙坪坝区', '5001'); -INSERT INTO `base_area` VALUES ('500107', '九龙坡区', '5001'); -INSERT INTO `base_area` VALUES ('500108', '南岸区', '5001'); -INSERT INTO `base_area` VALUES ('500109', '北碚区', '5001'); -INSERT INTO `base_area` VALUES ('500110', '綦江区', '5001'); -INSERT INTO `base_area` VALUES ('500111', '大足区', '5001'); -INSERT INTO `base_area` VALUES ('500112', '渝北区', '5001'); -INSERT INTO `base_area` VALUES ('500113', '巴南区', '5001'); -INSERT INTO `base_area` VALUES ('500114', '黔江区', '5001'); -INSERT INTO `base_area` VALUES ('500115', '长寿区', '5001'); -INSERT INTO `base_area` VALUES ('500116', '江津区', '5001'); -INSERT INTO `base_area` VALUES ('500117', '合川区', '5001'); -INSERT INTO `base_area` VALUES ('500118', '永川区', '5001'); -INSERT INTO `base_area` VALUES ('500119', '南川区', '5001'); -INSERT INTO `base_area` VALUES ('500120', '璧山区', '5001'); -INSERT INTO `base_area` VALUES ('500151', '铜梁区', '5001'); -INSERT INTO `base_area` VALUES ('500152', '潼南区', '5001'); -INSERT INTO `base_area` VALUES ('500153', '荣昌区', '5001'); -INSERT INTO `base_area` VALUES ('500154', '开州区', '5001'); -INSERT INTO `base_area` VALUES ('500155', '梁平区', '5001'); -INSERT INTO `base_area` VALUES ('500156', '武隆区', '5001'); -INSERT INTO `base_area` VALUES ('500229', '城口县', '5002'); -INSERT INTO `base_area` VALUES ('500230', '丰都县', '5002'); -INSERT INTO `base_area` VALUES ('500231', '垫江县', '5002'); -INSERT INTO `base_area` VALUES ('500233', '忠县', '5002'); -INSERT INTO `base_area` VALUES ('500235', '云阳县', '5002'); -INSERT INTO `base_area` VALUES ('500236', '奉节县', '5002'); -INSERT INTO `base_area` VALUES ('500237', '巫山县', '5002'); -INSERT INTO `base_area` VALUES ('500238', '巫溪县', '5002'); -INSERT INTO `base_area` VALUES ('500240', '石柱土家族自治县', '5002'); -INSERT INTO `base_area` VALUES ('500241', '秀山土家族苗族自治县', '5002'); -INSERT INTO `base_area` VALUES ('500242', '酉阳土家族苗族自治县', '5002'); -INSERT INTO `base_area` VALUES ('500243', '彭水苗族土家族自治县', '5002'); -INSERT INTO `base_area` VALUES ('510104', '锦江区', '5101'); -INSERT INTO `base_area` VALUES ('510105', '青羊区', '5101'); -INSERT INTO `base_area` VALUES ('510106', '金牛区', '5101'); -INSERT INTO `base_area` VALUES ('510107', '武侯区', '5101'); -INSERT INTO `base_area` VALUES ('510108', '成华区', '5101'); -INSERT INTO `base_area` VALUES ('510112', '龙泉驿区', '5101'); -INSERT INTO `base_area` VALUES ('510113', '青白江区', '5101'); -INSERT INTO `base_area` VALUES ('510114', '新都区', '5101'); -INSERT INTO `base_area` VALUES ('510115', '温江区', '5101'); -INSERT INTO `base_area` VALUES ('510116', '双流区', '5101'); -INSERT INTO `base_area` VALUES ('510117', '郫都区', '5101'); -INSERT INTO `base_area` VALUES ('510118', '新津区', '5101'); -INSERT INTO `base_area` VALUES ('510121', '金堂县', '5101'); -INSERT INTO `base_area` VALUES ('510129', '大邑县', '5101'); -INSERT INTO `base_area` VALUES ('510131', '蒲江县', '5101'); -INSERT INTO `base_area` VALUES ('510181', '都江堰市', '5101'); -INSERT INTO `base_area` VALUES ('510182', '彭州市', '5101'); -INSERT INTO `base_area` VALUES ('510183', '邛崃市', '5101'); -INSERT INTO `base_area` VALUES ('510184', '崇州市', '5101'); -INSERT INTO `base_area` VALUES ('510185', '简阳市', '5101'); -INSERT INTO `base_area` VALUES ('510302', '自流井区', '5103'); -INSERT INTO `base_area` VALUES ('510303', '贡井区', '5103'); -INSERT INTO `base_area` VALUES ('510304', '大安区', '5103'); -INSERT INTO `base_area` VALUES ('510311', '沿滩区', '5103'); -INSERT INTO `base_area` VALUES ('510321', '荣县', '5103'); -INSERT INTO `base_area` VALUES ('510322', '富顺县', '5103'); -INSERT INTO `base_area` VALUES ('510402', '东区', '5104'); -INSERT INTO `base_area` VALUES ('510403', '西区', '5104'); -INSERT INTO `base_area` VALUES ('510411', '仁和区', '5104'); -INSERT INTO `base_area` VALUES ('510421', '米易县', '5104'); -INSERT INTO `base_area` VALUES ('510422', '盐边县', '5104'); -INSERT INTO `base_area` VALUES ('510502', '江阳区', '5105'); -INSERT INTO `base_area` VALUES ('510503', '纳溪区', '5105'); -INSERT INTO `base_area` VALUES ('510504', '龙马潭区', '5105'); -INSERT INTO `base_area` VALUES ('510521', '泸县', '5105'); -INSERT INTO `base_area` VALUES ('510522', '合江县', '5105'); -INSERT INTO `base_area` VALUES ('510524', '叙永县', '5105'); -INSERT INTO `base_area` VALUES ('510525', '古蔺县', '5105'); -INSERT INTO `base_area` VALUES ('510603', '旌阳区', '5106'); -INSERT INTO `base_area` VALUES ('510604', '罗江区', '5106'); -INSERT INTO `base_area` VALUES ('510623', '中江县', '5106'); -INSERT INTO `base_area` VALUES ('510681', '广汉市', '5106'); -INSERT INTO `base_area` VALUES ('510682', '什邡市', '5106'); -INSERT INTO `base_area` VALUES ('510683', '绵竹市', '5106'); -INSERT INTO `base_area` VALUES ('510703', '涪城区', '5107'); -INSERT INTO `base_area` VALUES ('510704', '游仙区', '5107'); -INSERT INTO `base_area` VALUES ('510705', '安州区', '5107'); -INSERT INTO `base_area` VALUES ('510722', '三台县', '5107'); -INSERT INTO `base_area` VALUES ('510723', '盐亭县', '5107'); -INSERT INTO `base_area` VALUES ('510725', '梓潼县', '5107'); -INSERT INTO `base_area` VALUES ('510726', '北川羌族自治县', '5107'); -INSERT INTO `base_area` VALUES ('510727', '平武县', '5107'); -INSERT INTO `base_area` VALUES ('510781', '江油市', '5107'); -INSERT INTO `base_area` VALUES ('510802', '利州区', '5108'); -INSERT INTO `base_area` VALUES ('510811', '昭化区', '5108'); -INSERT INTO `base_area` VALUES ('510812', '朝天区', '5108'); -INSERT INTO `base_area` VALUES ('510821', '旺苍县', '5108'); -INSERT INTO `base_area` VALUES ('510822', '青川县', '5108'); -INSERT INTO `base_area` VALUES ('510823', '剑阁县', '5108'); -INSERT INTO `base_area` VALUES ('510824', '苍溪县', '5108'); -INSERT INTO `base_area` VALUES ('510903', '船山区', '5109'); -INSERT INTO `base_area` VALUES ('510904', '安居区', '5109'); -INSERT INTO `base_area` VALUES ('510921', '蓬溪县', '5109'); -INSERT INTO `base_area` VALUES ('510923', '大英县', '5109'); -INSERT INTO `base_area` VALUES ('510981', '射洪市', '5109'); -INSERT INTO `base_area` VALUES ('511002', '市中区', '5110'); -INSERT INTO `base_area` VALUES ('511011', '东兴区', '5110'); -INSERT INTO `base_area` VALUES ('511024', '威远县', '5110'); -INSERT INTO `base_area` VALUES ('511025', '资中县', '5110'); -INSERT INTO `base_area` VALUES ('511083', '隆昌市', '5110'); -INSERT INTO `base_area` VALUES ('511102', '市中区', '5111'); -INSERT INTO `base_area` VALUES ('511111', '沙湾区', '5111'); -INSERT INTO `base_area` VALUES ('511112', '五通桥区', '5111'); -INSERT INTO `base_area` VALUES ('511113', '金口河区', '5111'); -INSERT INTO `base_area` VALUES ('511123', '犍为县', '5111'); -INSERT INTO `base_area` VALUES ('511124', '井研县', '5111'); -INSERT INTO `base_area` VALUES ('511126', '夹江县', '5111'); -INSERT INTO `base_area` VALUES ('511129', '沐川县', '5111'); -INSERT INTO `base_area` VALUES ('511132', '峨边彝族自治县', '5111'); -INSERT INTO `base_area` VALUES ('511133', '马边彝族自治县', '5111'); -INSERT INTO `base_area` VALUES ('511181', '峨眉山市', '5111'); -INSERT INTO `base_area` VALUES ('511302', '顺庆区', '5113'); -INSERT INTO `base_area` VALUES ('511303', '高坪区', '5113'); -INSERT INTO `base_area` VALUES ('511304', '嘉陵区', '5113'); -INSERT INTO `base_area` VALUES ('511321', '南部县', '5113'); -INSERT INTO `base_area` VALUES ('511322', '营山县', '5113'); -INSERT INTO `base_area` VALUES ('511323', '蓬安县', '5113'); -INSERT INTO `base_area` VALUES ('511324', '仪陇县', '5113'); -INSERT INTO `base_area` VALUES ('511325', '西充县', '5113'); -INSERT INTO `base_area` VALUES ('511381', '阆中市', '5113'); -INSERT INTO `base_area` VALUES ('511402', '东坡区', '5114'); -INSERT INTO `base_area` VALUES ('511403', '彭山区', '5114'); -INSERT INTO `base_area` VALUES ('511421', '仁寿县', '5114'); -INSERT INTO `base_area` VALUES ('511423', '洪雅县', '5114'); -INSERT INTO `base_area` VALUES ('511424', '丹棱县', '5114'); -INSERT INTO `base_area` VALUES ('511425', '青神县', '5114'); -INSERT INTO `base_area` VALUES ('511502', '翠屏区', '5115'); -INSERT INTO `base_area` VALUES ('511503', '南溪区', '5115'); -INSERT INTO `base_area` VALUES ('511504', '叙州区', '5115'); -INSERT INTO `base_area` VALUES ('511523', '江安县', '5115'); -INSERT INTO `base_area` VALUES ('511524', '长宁县', '5115'); -INSERT INTO `base_area` VALUES ('511525', '高县', '5115'); -INSERT INTO `base_area` VALUES ('511526', '珙县', '5115'); -INSERT INTO `base_area` VALUES ('511527', '筠连县', '5115'); -INSERT INTO `base_area` VALUES ('511528', '兴文县', '5115'); -INSERT INTO `base_area` VALUES ('511529', '屏山县', '5115'); -INSERT INTO `base_area` VALUES ('511602', '广安区', '5116'); -INSERT INTO `base_area` VALUES ('511603', '前锋区', '5116'); -INSERT INTO `base_area` VALUES ('511621', '岳池县', '5116'); -INSERT INTO `base_area` VALUES ('511622', '武胜县', '5116'); -INSERT INTO `base_area` VALUES ('511623', '邻水县', '5116'); -INSERT INTO `base_area` VALUES ('511681', '华蓥市', '5116'); -INSERT INTO `base_area` VALUES ('511702', '通川区', '5117'); -INSERT INTO `base_area` VALUES ('511703', '达川区', '5117'); -INSERT INTO `base_area` VALUES ('511722', '宣汉县', '5117'); -INSERT INTO `base_area` VALUES ('511723', '开江县', '5117'); -INSERT INTO `base_area` VALUES ('511724', '大竹县', '5117'); -INSERT INTO `base_area` VALUES ('511725', '渠县', '5117'); -INSERT INTO `base_area` VALUES ('511781', '万源市', '5117'); -INSERT INTO `base_area` VALUES ('511802', '雨城区', '5118'); -INSERT INTO `base_area` VALUES ('511803', '名山区', '5118'); -INSERT INTO `base_area` VALUES ('511822', '荥经县', '5118'); -INSERT INTO `base_area` VALUES ('511823', '汉源县', '5118'); -INSERT INTO `base_area` VALUES ('511824', '石棉县', '5118'); -INSERT INTO `base_area` VALUES ('511825', '天全县', '5118'); -INSERT INTO `base_area` VALUES ('511826', '芦山县', '5118'); -INSERT INTO `base_area` VALUES ('511827', '宝兴县', '5118'); -INSERT INTO `base_area` VALUES ('511902', '巴州区', '5119'); -INSERT INTO `base_area` VALUES ('511903', '恩阳区', '5119'); -INSERT INTO `base_area` VALUES ('511921', '通江县', '5119'); -INSERT INTO `base_area` VALUES ('511922', '南江县', '5119'); -INSERT INTO `base_area` VALUES ('511923', '平昌县', '5119'); -INSERT INTO `base_area` VALUES ('512002', '雁江区', '5120'); -INSERT INTO `base_area` VALUES ('512021', '安岳县', '5120'); -INSERT INTO `base_area` VALUES ('512022', '乐至县', '5120'); -INSERT INTO `base_area` VALUES ('513201', '马尔康市', '5132'); -INSERT INTO `base_area` VALUES ('513221', '汶川县', '5132'); -INSERT INTO `base_area` VALUES ('513222', '理县', '5132'); -INSERT INTO `base_area` VALUES ('513223', '茂县', '5132'); -INSERT INTO `base_area` VALUES ('513224', '松潘县', '5132'); -INSERT INTO `base_area` VALUES ('513225', '九寨沟县', '5132'); -INSERT INTO `base_area` VALUES ('513226', '金川县', '5132'); -INSERT INTO `base_area` VALUES ('513227', '小金县', '5132'); -INSERT INTO `base_area` VALUES ('513228', '黑水县', '5132'); -INSERT INTO `base_area` VALUES ('513230', '壤塘县', '5132'); -INSERT INTO `base_area` VALUES ('513231', '阿坝县', '5132'); -INSERT INTO `base_area` VALUES ('513232', '若尔盖县', '5132'); -INSERT INTO `base_area` VALUES ('513233', '红原县', '5132'); -INSERT INTO `base_area` VALUES ('513301', '康定市', '5133'); -INSERT INTO `base_area` VALUES ('513322', '泸定县', '5133'); -INSERT INTO `base_area` VALUES ('513323', '丹巴县', '5133'); -INSERT INTO `base_area` VALUES ('513324', '九龙县', '5133'); -INSERT INTO `base_area` VALUES ('513325', '雅江县', '5133'); -INSERT INTO `base_area` VALUES ('513326', '道孚县', '5133'); -INSERT INTO `base_area` VALUES ('513327', '炉霍县', '5133'); -INSERT INTO `base_area` VALUES ('513328', '甘孜县', '5133'); -INSERT INTO `base_area` VALUES ('513329', '新龙县', '5133'); -INSERT INTO `base_area` VALUES ('513330', '德格县', '5133'); -INSERT INTO `base_area` VALUES ('513331', '白玉县', '5133'); -INSERT INTO `base_area` VALUES ('513332', '石渠县', '5133'); -INSERT INTO `base_area` VALUES ('513333', '色达县', '5133'); -INSERT INTO `base_area` VALUES ('513334', '理塘县', '5133'); -INSERT INTO `base_area` VALUES ('513335', '巴塘县', '5133'); -INSERT INTO `base_area` VALUES ('513336', '乡城县', '5133'); -INSERT INTO `base_area` VALUES ('513337', '稻城县', '5133'); -INSERT INTO `base_area` VALUES ('513338', '得荣县', '5133'); -INSERT INTO `base_area` VALUES ('513401', '西昌市', '5134'); -INSERT INTO `base_area` VALUES ('513402', '会理市', '5134'); -INSERT INTO `base_area` VALUES ('513422', '木里藏族自治县', '5134'); -INSERT INTO `base_area` VALUES ('513423', '盐源县', '5134'); -INSERT INTO `base_area` VALUES ('513424', '德昌县', '5134'); -INSERT INTO `base_area` VALUES ('513426', '会东县', '5134'); -INSERT INTO `base_area` VALUES ('513427', '宁南县', '5134'); -INSERT INTO `base_area` VALUES ('513428', '普格县', '5134'); -INSERT INTO `base_area` VALUES ('513429', '布拖县', '5134'); -INSERT INTO `base_area` VALUES ('513430', '金阳县', '5134'); -INSERT INTO `base_area` VALUES ('513431', '昭觉县', '5134'); -INSERT INTO `base_area` VALUES ('513432', '喜德县', '5134'); -INSERT INTO `base_area` VALUES ('513433', '冕宁县', '5134'); -INSERT INTO `base_area` VALUES ('513434', '越西县', '5134'); -INSERT INTO `base_area` VALUES ('513435', '甘洛县', '5134'); -INSERT INTO `base_area` VALUES ('513436', '美姑县', '5134'); -INSERT INTO `base_area` VALUES ('513437', '雷波县', '5134'); -INSERT INTO `base_area` VALUES ('520102', '南明区', '5201'); -INSERT INTO `base_area` VALUES ('520103', '云岩区', '5201'); -INSERT INTO `base_area` VALUES ('520111', '花溪区', '5201'); -INSERT INTO `base_area` VALUES ('520112', '乌当区', '5201'); -INSERT INTO `base_area` VALUES ('520113', '白云区', '5201'); -INSERT INTO `base_area` VALUES ('520115', '观山湖区', '5201'); -INSERT INTO `base_area` VALUES ('520121', '开阳县', '5201'); -INSERT INTO `base_area` VALUES ('520122', '息烽县', '5201'); -INSERT INTO `base_area` VALUES ('520123', '修文县', '5201'); -INSERT INTO `base_area` VALUES ('520181', '清镇市', '5201'); -INSERT INTO `base_area` VALUES ('520201', '钟山区', '5202'); -INSERT INTO `base_area` VALUES ('520203', '六枝特区', '5202'); -INSERT INTO `base_area` VALUES ('520204', '水城区', '5202'); -INSERT INTO `base_area` VALUES ('520281', '盘州市', '5202'); -INSERT INTO `base_area` VALUES ('520302', '红花岗区', '5203'); -INSERT INTO `base_area` VALUES ('520303', '汇川区', '5203'); -INSERT INTO `base_area` VALUES ('520304', '播州区', '5203'); -INSERT INTO `base_area` VALUES ('520322', '桐梓县', '5203'); -INSERT INTO `base_area` VALUES ('520323', '绥阳县', '5203'); -INSERT INTO `base_area` VALUES ('520324', '正安县', '5203'); -INSERT INTO `base_area` VALUES ('520325', '道真仡佬族苗族自治县', '5203'); -INSERT INTO `base_area` VALUES ('520326', '务川仡佬族苗族自治县', '5203'); -INSERT INTO `base_area` VALUES ('520327', '凤冈县', '5203'); -INSERT INTO `base_area` VALUES ('520328', '湄潭县', '5203'); -INSERT INTO `base_area` VALUES ('520329', '余庆县', '5203'); -INSERT INTO `base_area` VALUES ('520330', '习水县', '5203'); -INSERT INTO `base_area` VALUES ('520381', '赤水市', '5203'); -INSERT INTO `base_area` VALUES ('520382', '仁怀市', '5203'); -INSERT INTO `base_area` VALUES ('520402', '西秀区', '5204'); -INSERT INTO `base_area` VALUES ('520403', '平坝区', '5204'); -INSERT INTO `base_area` VALUES ('520422', '普定县', '5204'); -INSERT INTO `base_area` VALUES ('520423', '镇宁布依族苗族自治县', '5204'); -INSERT INTO `base_area` VALUES ('520424', '关岭布依族苗族自治县', '5204'); -INSERT INTO `base_area` VALUES ('520425', '紫云苗族布依族自治县', '5204'); -INSERT INTO `base_area` VALUES ('520502', '七星关区', '5205'); -INSERT INTO `base_area` VALUES ('520521', '大方县', '5205'); -INSERT INTO `base_area` VALUES ('520523', '金沙县', '5205'); -INSERT INTO `base_area` VALUES ('520524', '织金县', '5205'); -INSERT INTO `base_area` VALUES ('520525', '纳雍县', '5205'); -INSERT INTO `base_area` VALUES ('520526', '威宁彝族回族苗族自治县', '5205'); -INSERT INTO `base_area` VALUES ('520527', '赫章县', '5205'); -INSERT INTO `base_area` VALUES ('520581', '黔西市', '5205'); -INSERT INTO `base_area` VALUES ('520602', '碧江区', '5206'); -INSERT INTO `base_area` VALUES ('520603', '万山区', '5206'); -INSERT INTO `base_area` VALUES ('520621', '江口县', '5206'); -INSERT INTO `base_area` VALUES ('520622', '玉屏侗族自治县', '5206'); -INSERT INTO `base_area` VALUES ('520623', '石阡县', '5206'); -INSERT INTO `base_area` VALUES ('520624', '思南县', '5206'); -INSERT INTO `base_area` VALUES ('520625', '印江土家族苗族自治县', '5206'); -INSERT INTO `base_area` VALUES ('520626', '德江县', '5206'); -INSERT INTO `base_area` VALUES ('520627', '沿河土家族自治县', '5206'); -INSERT INTO `base_area` VALUES ('520628', '松桃苗族自治县', '5206'); -INSERT INTO `base_area` VALUES ('522301', '兴义市', '5223'); -INSERT INTO `base_area` VALUES ('522302', '兴仁市', '5223'); -INSERT INTO `base_area` VALUES ('522323', '普安县', '5223'); -INSERT INTO `base_area` VALUES ('522324', '晴隆县', '5223'); -INSERT INTO `base_area` VALUES ('522325', '贞丰县', '5223'); -INSERT INTO `base_area` VALUES ('522326', '望谟县', '5223'); -INSERT INTO `base_area` VALUES ('522327', '册亨县', '5223'); -INSERT INTO `base_area` VALUES ('522328', '安龙县', '5223'); -INSERT INTO `base_area` VALUES ('522601', '凯里市', '5226'); -INSERT INTO `base_area` VALUES ('522622', '黄平县', '5226'); -INSERT INTO `base_area` VALUES ('522623', '施秉县', '5226'); -INSERT INTO `base_area` VALUES ('522624', '三穗县', '5226'); -INSERT INTO `base_area` VALUES ('522625', '镇远县', '5226'); -INSERT INTO `base_area` VALUES ('522626', '岑巩县', '5226'); -INSERT INTO `base_area` VALUES ('522627', '天柱县', '5226'); -INSERT INTO `base_area` VALUES ('522628', '锦屏县', '5226'); -INSERT INTO `base_area` VALUES ('522629', '剑河县', '5226'); -INSERT INTO `base_area` VALUES ('522630', '台江县', '5226'); -INSERT INTO `base_area` VALUES ('522631', '黎平县', '5226'); -INSERT INTO `base_area` VALUES ('522632', '榕江县', '5226'); -INSERT INTO `base_area` VALUES ('522633', '从江县', '5226'); -INSERT INTO `base_area` VALUES ('522634', '雷山县', '5226'); -INSERT INTO `base_area` VALUES ('522635', '麻江县', '5226'); -INSERT INTO `base_area` VALUES ('522636', '丹寨县', '5226'); -INSERT INTO `base_area` VALUES ('522701', '都匀市', '5227'); -INSERT INTO `base_area` VALUES ('522702', '福泉市', '5227'); -INSERT INTO `base_area` VALUES ('522722', '荔波县', '5227'); -INSERT INTO `base_area` VALUES ('522723', '贵定县', '5227'); -INSERT INTO `base_area` VALUES ('522725', '瓮安县', '5227'); -INSERT INTO `base_area` VALUES ('522726', '独山县', '5227'); -INSERT INTO `base_area` VALUES ('522727', '平塘县', '5227'); -INSERT INTO `base_area` VALUES ('522728', '罗甸县', '5227'); -INSERT INTO `base_area` VALUES ('522729', '长顺县', '5227'); -INSERT INTO `base_area` VALUES ('522730', '龙里县', '5227'); -INSERT INTO `base_area` VALUES ('522731', '惠水县', '5227'); -INSERT INTO `base_area` VALUES ('522732', '三都水族自治县', '5227'); -INSERT INTO `base_area` VALUES ('530102', '五华区', '5301'); -INSERT INTO `base_area` VALUES ('530103', '盘龙区', '5301'); -INSERT INTO `base_area` VALUES ('530111', '官渡区', '5301'); -INSERT INTO `base_area` VALUES ('530112', '西山区', '5301'); -INSERT INTO `base_area` VALUES ('530113', '东川区', '5301'); -INSERT INTO `base_area` VALUES ('530114', '呈贡区', '5301'); -INSERT INTO `base_area` VALUES ('530115', '晋宁区', '5301'); -INSERT INTO `base_area` VALUES ('530124', '富民县', '5301'); -INSERT INTO `base_area` VALUES ('530125', '宜良县', '5301'); -INSERT INTO `base_area` VALUES ('530126', '石林彝族自治县', '5301'); -INSERT INTO `base_area` VALUES ('530127', '嵩明县', '5301'); -INSERT INTO `base_area` VALUES ('530128', '禄劝彝族苗族自治县', '5301'); -INSERT INTO `base_area` VALUES ('530129', '寻甸回族彝族自治县', '5301'); -INSERT INTO `base_area` VALUES ('530181', '安宁市', '5301'); -INSERT INTO `base_area` VALUES ('530302', '麒麟区', '5303'); -INSERT INTO `base_area` VALUES ('530303', '沾益区', '5303'); -INSERT INTO `base_area` VALUES ('530304', '马龙区', '5303'); -INSERT INTO `base_area` VALUES ('530322', '陆良县', '5303'); -INSERT INTO `base_area` VALUES ('530323', '师宗县', '5303'); -INSERT INTO `base_area` VALUES ('530324', '罗平县', '5303'); -INSERT INTO `base_area` VALUES ('530325', '富源县', '5303'); -INSERT INTO `base_area` VALUES ('530326', '会泽县', '5303'); -INSERT INTO `base_area` VALUES ('530381', '宣威市', '5303'); -INSERT INTO `base_area` VALUES ('530402', '红塔区', '5304'); -INSERT INTO `base_area` VALUES ('530403', '江川区', '5304'); -INSERT INTO `base_area` VALUES ('530423', '通海县', '5304'); -INSERT INTO `base_area` VALUES ('530424', '华宁县', '5304'); -INSERT INTO `base_area` VALUES ('530425', '易门县', '5304'); -INSERT INTO `base_area` VALUES ('530426', '峨山彝族自治县', '5304'); -INSERT INTO `base_area` VALUES ('530427', '新平彝族傣族自治县', '5304'); -INSERT INTO `base_area` VALUES ('530428', '元江哈尼族彝族傣族自治县', '5304'); -INSERT INTO `base_area` VALUES ('530481', '澄江市', '5304'); -INSERT INTO `base_area` VALUES ('530502', '隆阳区', '5305'); -INSERT INTO `base_area` VALUES ('530521', '施甸县', '5305'); -INSERT INTO `base_area` VALUES ('530523', '龙陵县', '5305'); -INSERT INTO `base_area` VALUES ('530524', '昌宁县', '5305'); -INSERT INTO `base_area` VALUES ('530581', '腾冲市', '5305'); -INSERT INTO `base_area` VALUES ('530602', '昭阳区', '5306'); -INSERT INTO `base_area` VALUES ('530621', '鲁甸县', '5306'); -INSERT INTO `base_area` VALUES ('530622', '巧家县', '5306'); -INSERT INTO `base_area` VALUES ('530623', '盐津县', '5306'); -INSERT INTO `base_area` VALUES ('530624', '大关县', '5306'); -INSERT INTO `base_area` VALUES ('530625', '永善县', '5306'); -INSERT INTO `base_area` VALUES ('530626', '绥江县', '5306'); -INSERT INTO `base_area` VALUES ('530627', '镇雄县', '5306'); -INSERT INTO `base_area` VALUES ('530628', '彝良县', '5306'); -INSERT INTO `base_area` VALUES ('530629', '威信县', '5306'); -INSERT INTO `base_area` VALUES ('530681', '水富市', '5306'); -INSERT INTO `base_area` VALUES ('530702', '古城区', '5307'); -INSERT INTO `base_area` VALUES ('530721', '玉龙纳西族自治县', '5307'); -INSERT INTO `base_area` VALUES ('530722', '永胜县', '5307'); -INSERT INTO `base_area` VALUES ('530723', '华坪县', '5307'); -INSERT INTO `base_area` VALUES ('530724', '宁蒗彝族自治县', '5307'); -INSERT INTO `base_area` VALUES ('530802', '思茅区', '5308'); -INSERT INTO `base_area` VALUES ('530821', '宁洱哈尼族彝族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530822', '墨江哈尼族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530823', '景东彝族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530824', '景谷傣族彝族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530825', '镇沅彝族哈尼族拉祜族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530826', '江城哈尼族彝族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530827', '孟连傣族拉祜族佤族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530828', '澜沧拉祜族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530829', '西盟佤族自治县', '5308'); -INSERT INTO `base_area` VALUES ('530902', '临翔区', '5309'); -INSERT INTO `base_area` VALUES ('530921', '凤庆县', '5309'); -INSERT INTO `base_area` VALUES ('530922', '云县', '5309'); -INSERT INTO `base_area` VALUES ('530923', '永德县', '5309'); -INSERT INTO `base_area` VALUES ('530924', '镇康县', '5309'); -INSERT INTO `base_area` VALUES ('530925', '双江拉祜族佤族布朗族傣族自治县', '5309'); -INSERT INTO `base_area` VALUES ('530926', '耿马傣族佤族自治县', '5309'); -INSERT INTO `base_area` VALUES ('530927', '沧源佤族自治县', '5309'); -INSERT INTO `base_area` VALUES ('532301', '楚雄市', '5323'); -INSERT INTO `base_area` VALUES ('532302', '禄丰市', '5323'); -INSERT INTO `base_area` VALUES ('532322', '双柏县', '5323'); -INSERT INTO `base_area` VALUES ('532323', '牟定县', '5323'); -INSERT INTO `base_area` VALUES ('532324', '南华县', '5323'); -INSERT INTO `base_area` VALUES ('532325', '姚安县', '5323'); -INSERT INTO `base_area` VALUES ('532326', '大姚县', '5323'); -INSERT INTO `base_area` VALUES ('532327', '永仁县', '5323'); -INSERT INTO `base_area` VALUES ('532328', '元谋县', '5323'); -INSERT INTO `base_area` VALUES ('532329', '武定县', '5323'); -INSERT INTO `base_area` VALUES ('532501', '个旧市', '5325'); -INSERT INTO `base_area` VALUES ('532502', '开远市', '5325'); -INSERT INTO `base_area` VALUES ('532503', '蒙自市', '5325'); -INSERT INTO `base_area` VALUES ('532504', '弥勒市', '5325'); -INSERT INTO `base_area` VALUES ('532523', '屏边苗族自治县', '5325'); -INSERT INTO `base_area` VALUES ('532524', '建水县', '5325'); -INSERT INTO `base_area` VALUES ('532525', '石屏县', '5325'); -INSERT INTO `base_area` VALUES ('532527', '泸西县', '5325'); -INSERT INTO `base_area` VALUES ('532528', '元阳县', '5325'); -INSERT INTO `base_area` VALUES ('532529', '红河县', '5325'); -INSERT INTO `base_area` VALUES ('532530', '金平苗族瑶族傣族自治县', '5325'); -INSERT INTO `base_area` VALUES ('532531', '绿春县', '5325'); -INSERT INTO `base_area` VALUES ('532532', '河口瑶族自治县', '5325'); -INSERT INTO `base_area` VALUES ('532601', '文山市', '5326'); -INSERT INTO `base_area` VALUES ('532622', '砚山县', '5326'); -INSERT INTO `base_area` VALUES ('532623', '西畴县', '5326'); -INSERT INTO `base_area` VALUES ('532624', '麻栗坡县', '5326'); -INSERT INTO `base_area` VALUES ('532625', '马关县', '5326'); -INSERT INTO `base_area` VALUES ('532626', '丘北县', '5326'); -INSERT INTO `base_area` VALUES ('532627', '广南县', '5326'); -INSERT INTO `base_area` VALUES ('532628', '富宁县', '5326'); -INSERT INTO `base_area` VALUES ('532801', '景洪市', '5328'); -INSERT INTO `base_area` VALUES ('532822', '勐海县', '5328'); -INSERT INTO `base_area` VALUES ('532823', '勐腊县', '5328'); -INSERT INTO `base_area` VALUES ('532901', '大理市', '5329'); -INSERT INTO `base_area` VALUES ('532922', '漾濞彝族自治县', '5329'); -INSERT INTO `base_area` VALUES ('532923', '祥云县', '5329'); -INSERT INTO `base_area` VALUES ('532924', '宾川县', '5329'); -INSERT INTO `base_area` VALUES ('532925', '弥渡县', '5329'); -INSERT INTO `base_area` VALUES ('532926', '南涧彝族自治县', '5329'); -INSERT INTO `base_area` VALUES ('532927', '巍山彝族回族自治县', '5329'); -INSERT INTO `base_area` VALUES ('532928', '永平县', '5329'); -INSERT INTO `base_area` VALUES ('532929', '云龙县', '5329'); -INSERT INTO `base_area` VALUES ('532930', '洱源县', '5329'); -INSERT INTO `base_area` VALUES ('532931', '剑川县', '5329'); -INSERT INTO `base_area` VALUES ('532932', '鹤庆县', '5329'); -INSERT INTO `base_area` VALUES ('533102', '瑞丽市', '5331'); -INSERT INTO `base_area` VALUES ('533103', '芒市', '5331'); -INSERT INTO `base_area` VALUES ('533122', '梁河县', '5331'); -INSERT INTO `base_area` VALUES ('533123', '盈江县', '5331'); -INSERT INTO `base_area` VALUES ('533124', '陇川县', '5331'); -INSERT INTO `base_area` VALUES ('533301', '泸水市', '5333'); -INSERT INTO `base_area` VALUES ('533323', '福贡县', '5333'); -INSERT INTO `base_area` VALUES ('533324', '贡山独龙族怒族自治县', '5333'); -INSERT INTO `base_area` VALUES ('533325', '兰坪白族普米族自治县', '5333'); -INSERT INTO `base_area` VALUES ('533401', '香格里拉市', '5334'); -INSERT INTO `base_area` VALUES ('533422', '德钦县', '5334'); -INSERT INTO `base_area` VALUES ('533423', '维西傈僳族自治县', '5334'); -INSERT INTO `base_area` VALUES ('540102', '城关区', '5401'); -INSERT INTO `base_area` VALUES ('540103', '堆龙德庆区', '5401'); -INSERT INTO `base_area` VALUES ('540104', '达孜区', '5401'); -INSERT INTO `base_area` VALUES ('540121', '林周县', '5401'); -INSERT INTO `base_area` VALUES ('540122', '当雄县', '5401'); -INSERT INTO `base_area` VALUES ('540123', '尼木县', '5401'); -INSERT INTO `base_area` VALUES ('540124', '曲水县', '5401'); -INSERT INTO `base_area` VALUES ('540127', '墨竹工卡县', '5401'); -INSERT INTO `base_area` VALUES ('540171', '格尔木藏青工业园区', '5401'); -INSERT INTO `base_area` VALUES ('540172', '拉萨经济技术开发区', '5401'); -INSERT INTO `base_area` VALUES ('540173', '西藏文化旅游创意园区', '5401'); -INSERT INTO `base_area` VALUES ('540174', '达孜工业园区', '5401'); -INSERT INTO `base_area` VALUES ('540202', '桑珠孜区', '5402'); -INSERT INTO `base_area` VALUES ('540221', '南木林县', '5402'); -INSERT INTO `base_area` VALUES ('540222', '江孜县', '5402'); -INSERT INTO `base_area` VALUES ('540223', '定日县', '5402'); -INSERT INTO `base_area` VALUES ('540224', '萨迦县', '5402'); -INSERT INTO `base_area` VALUES ('540225', '拉孜县', '5402'); -INSERT INTO `base_area` VALUES ('540226', '昂仁县', '5402'); -INSERT INTO `base_area` VALUES ('540227', '谢通门县', '5402'); -INSERT INTO `base_area` VALUES ('540228', '白朗县', '5402'); -INSERT INTO `base_area` VALUES ('540229', '仁布县', '5402'); -INSERT INTO `base_area` VALUES ('540230', '康马县', '5402'); -INSERT INTO `base_area` VALUES ('540231', '定结县', '5402'); -INSERT INTO `base_area` VALUES ('540232', '仲巴县', '5402'); -INSERT INTO `base_area` VALUES ('540233', '亚东县', '5402'); -INSERT INTO `base_area` VALUES ('540234', '吉隆县', '5402'); -INSERT INTO `base_area` VALUES ('540235', '聂拉木县', '5402'); -INSERT INTO `base_area` VALUES ('540236', '萨嘎县', '5402'); -INSERT INTO `base_area` VALUES ('540237', '岗巴县', '5402'); -INSERT INTO `base_area` VALUES ('540302', '卡若区', '5403'); -INSERT INTO `base_area` VALUES ('540321', '江达县', '5403'); -INSERT INTO `base_area` VALUES ('540322', '贡觉县', '5403'); -INSERT INTO `base_area` VALUES ('540323', '类乌齐县', '5403'); -INSERT INTO `base_area` VALUES ('540324', '丁青县', '5403'); -INSERT INTO `base_area` VALUES ('540325', '察雅县', '5403'); -INSERT INTO `base_area` VALUES ('540326', '八宿县', '5403'); -INSERT INTO `base_area` VALUES ('540327', '左贡县', '5403'); -INSERT INTO `base_area` VALUES ('540328', '芒康县', '5403'); -INSERT INTO `base_area` VALUES ('540329', '洛隆县', '5403'); -INSERT INTO `base_area` VALUES ('540330', '边坝县', '5403'); -INSERT INTO `base_area` VALUES ('540402', '巴宜区', '5404'); -INSERT INTO `base_area` VALUES ('540421', '工布江达县', '5404'); -INSERT INTO `base_area` VALUES ('540422', '米林县', '5404'); -INSERT INTO `base_area` VALUES ('540423', '墨脱县', '5404'); -INSERT INTO `base_area` VALUES ('540424', '波密县', '5404'); -INSERT INTO `base_area` VALUES ('540425', '察隅县', '5404'); -INSERT INTO `base_area` VALUES ('540426', '朗县', '5404'); -INSERT INTO `base_area` VALUES ('540502', '乃东区', '5405'); -INSERT INTO `base_area` VALUES ('540521', '扎囊县', '5405'); -INSERT INTO `base_area` VALUES ('540522', '贡嘎县', '5405'); -INSERT INTO `base_area` VALUES ('540523', '桑日县', '5405'); -INSERT INTO `base_area` VALUES ('540524', '琼结县', '5405'); -INSERT INTO `base_area` VALUES ('540525', '曲松县', '5405'); -INSERT INTO `base_area` VALUES ('540526', '措美县', '5405'); -INSERT INTO `base_area` VALUES ('540527', '洛扎县', '5405'); -INSERT INTO `base_area` VALUES ('540528', '加查县', '5405'); -INSERT INTO `base_area` VALUES ('540529', '隆子县', '5405'); -INSERT INTO `base_area` VALUES ('540530', '错那县', '5405'); -INSERT INTO `base_area` VALUES ('540531', '浪卡子县', '5405'); -INSERT INTO `base_area` VALUES ('540602', '色尼区', '5406'); -INSERT INTO `base_area` VALUES ('540621', '嘉黎县', '5406'); -INSERT INTO `base_area` VALUES ('540622', '比如县', '5406'); -INSERT INTO `base_area` VALUES ('540623', '聂荣县', '5406'); -INSERT INTO `base_area` VALUES ('540624', '安多县', '5406'); -INSERT INTO `base_area` VALUES ('540625', '申扎县', '5406'); -INSERT INTO `base_area` VALUES ('540626', '索县', '5406'); -INSERT INTO `base_area` VALUES ('540627', '班戈县', '5406'); -INSERT INTO `base_area` VALUES ('540628', '巴青县', '5406'); -INSERT INTO `base_area` VALUES ('540629', '尼玛县', '5406'); -INSERT INTO `base_area` VALUES ('540630', '双湖县', '5406'); -INSERT INTO `base_area` VALUES ('542521', '普兰县', '5425'); -INSERT INTO `base_area` VALUES ('542522', '札达县', '5425'); -INSERT INTO `base_area` VALUES ('542523', '噶尔县', '5425'); -INSERT INTO `base_area` VALUES ('542524', '日土县', '5425'); -INSERT INTO `base_area` VALUES ('542525', '革吉县', '5425'); -INSERT INTO `base_area` VALUES ('542526', '改则县', '5425'); -INSERT INTO `base_area` VALUES ('542527', '措勤县', '5425'); -INSERT INTO `base_area` VALUES ('610102', '新城区', '6101'); -INSERT INTO `base_area` VALUES ('610103', '碑林区', '6101'); -INSERT INTO `base_area` VALUES ('610104', '莲湖区', '6101'); -INSERT INTO `base_area` VALUES ('610111', '灞桥区', '6101'); -INSERT INTO `base_area` VALUES ('610112', '未央区', '6101'); -INSERT INTO `base_area` VALUES ('610113', '雁塔区', '6101'); -INSERT INTO `base_area` VALUES ('610114', '阎良区', '6101'); -INSERT INTO `base_area` VALUES ('610115', '临潼区', '6101'); -INSERT INTO `base_area` VALUES ('610116', '长安区', '6101'); -INSERT INTO `base_area` VALUES ('610117', '高陵区', '6101'); -INSERT INTO `base_area` VALUES ('610118', '鄠邑区', '6101'); -INSERT INTO `base_area` VALUES ('610122', '蓝田县', '6101'); -INSERT INTO `base_area` VALUES ('610124', '周至县', '6101'); -INSERT INTO `base_area` VALUES ('610202', '王益区', '6102'); -INSERT INTO `base_area` VALUES ('610203', '印台区', '6102'); -INSERT INTO `base_area` VALUES ('610204', '耀州区', '6102'); -INSERT INTO `base_area` VALUES ('610222', '宜君县', '6102'); -INSERT INTO `base_area` VALUES ('610302', '渭滨区', '6103'); -INSERT INTO `base_area` VALUES ('610303', '金台区', '6103'); -INSERT INTO `base_area` VALUES ('610304', '陈仓区', '6103'); -INSERT INTO `base_area` VALUES ('610305', '凤翔区', '6103'); -INSERT INTO `base_area` VALUES ('610323', '岐山县', '6103'); -INSERT INTO `base_area` VALUES ('610324', '扶风县', '6103'); -INSERT INTO `base_area` VALUES ('610326', '眉县', '6103'); -INSERT INTO `base_area` VALUES ('610327', '陇县', '6103'); -INSERT INTO `base_area` VALUES ('610328', '千阳县', '6103'); -INSERT INTO `base_area` VALUES ('610329', '麟游县', '6103'); -INSERT INTO `base_area` VALUES ('610330', '凤县', '6103'); -INSERT INTO `base_area` VALUES ('610331', '太白县', '6103'); -INSERT INTO `base_area` VALUES ('610402', '秦都区', '6104'); -INSERT INTO `base_area` VALUES ('610403', '杨陵区', '6104'); -INSERT INTO `base_area` VALUES ('610404', '渭城区', '6104'); -INSERT INTO `base_area` VALUES ('610422', '三原县', '6104'); -INSERT INTO `base_area` VALUES ('610423', '泾阳县', '6104'); -INSERT INTO `base_area` VALUES ('610424', '乾县', '6104'); -INSERT INTO `base_area` VALUES ('610425', '礼泉县', '6104'); -INSERT INTO `base_area` VALUES ('610426', '永寿县', '6104'); -INSERT INTO `base_area` VALUES ('610428', '长武县', '6104'); -INSERT INTO `base_area` VALUES ('610429', '旬邑县', '6104'); -INSERT INTO `base_area` VALUES ('610430', '淳化县', '6104'); -INSERT INTO `base_area` VALUES ('610431', '武功县', '6104'); -INSERT INTO `base_area` VALUES ('610481', '兴平市', '6104'); -INSERT INTO `base_area` VALUES ('610482', '彬州市', '6104'); -INSERT INTO `base_area` VALUES ('610502', '临渭区', '6105'); -INSERT INTO `base_area` VALUES ('610503', '华州区', '6105'); -INSERT INTO `base_area` VALUES ('610522', '潼关县', '6105'); -INSERT INTO `base_area` VALUES ('610523', '大荔县', '6105'); -INSERT INTO `base_area` VALUES ('610524', '合阳县', '6105'); -INSERT INTO `base_area` VALUES ('610525', '澄城县', '6105'); -INSERT INTO `base_area` VALUES ('610526', '蒲城县', '6105'); -INSERT INTO `base_area` VALUES ('610527', '白水县', '6105'); -INSERT INTO `base_area` VALUES ('610528', '富平县', '6105'); -INSERT INTO `base_area` VALUES ('610581', '韩城市', '6105'); -INSERT INTO `base_area` VALUES ('610582', '华阴市', '6105'); -INSERT INTO `base_area` VALUES ('610602', '宝塔区', '6106'); -INSERT INTO `base_area` VALUES ('610603', '安塞区', '6106'); -INSERT INTO `base_area` VALUES ('610621', '延长县', '6106'); -INSERT INTO `base_area` VALUES ('610622', '延川县', '6106'); -INSERT INTO `base_area` VALUES ('610625', '志丹县', '6106'); -INSERT INTO `base_area` VALUES ('610626', '吴起县', '6106'); -INSERT INTO `base_area` VALUES ('610627', '甘泉县', '6106'); -INSERT INTO `base_area` VALUES ('610628', '富县', '6106'); -INSERT INTO `base_area` VALUES ('610629', '洛川县', '6106'); -INSERT INTO `base_area` VALUES ('610630', '宜川县', '6106'); -INSERT INTO `base_area` VALUES ('610631', '黄龙县', '6106'); -INSERT INTO `base_area` VALUES ('610632', '黄陵县', '6106'); -INSERT INTO `base_area` VALUES ('610681', '子长市', '6106'); -INSERT INTO `base_area` VALUES ('610702', '汉台区', '6107'); -INSERT INTO `base_area` VALUES ('610703', '南郑区', '6107'); -INSERT INTO `base_area` VALUES ('610722', '城固县', '6107'); -INSERT INTO `base_area` VALUES ('610723', '洋县', '6107'); -INSERT INTO `base_area` VALUES ('610724', '西乡县', '6107'); -INSERT INTO `base_area` VALUES ('610725', '勉县', '6107'); -INSERT INTO `base_area` VALUES ('610726', '宁强县', '6107'); -INSERT INTO `base_area` VALUES ('610727', '略阳县', '6107'); -INSERT INTO `base_area` VALUES ('610728', '镇巴县', '6107'); -INSERT INTO `base_area` VALUES ('610729', '留坝县', '6107'); -INSERT INTO `base_area` VALUES ('610730', '佛坪县', '6107'); -INSERT INTO `base_area` VALUES ('610802', '榆阳区', '6108'); -INSERT INTO `base_area` VALUES ('610803', '横山区', '6108'); -INSERT INTO `base_area` VALUES ('610822', '府谷县', '6108'); -INSERT INTO `base_area` VALUES ('610824', '靖边县', '6108'); -INSERT INTO `base_area` VALUES ('610825', '定边县', '6108'); -INSERT INTO `base_area` VALUES ('610826', '绥德县', '6108'); -INSERT INTO `base_area` VALUES ('610827', '米脂县', '6108'); -INSERT INTO `base_area` VALUES ('610828', '佳县', '6108'); -INSERT INTO `base_area` VALUES ('610829', '吴堡县', '6108'); -INSERT INTO `base_area` VALUES ('610830', '清涧县', '6108'); -INSERT INTO `base_area` VALUES ('610831', '子洲县', '6108'); -INSERT INTO `base_area` VALUES ('610881', '神木市', '6108'); -INSERT INTO `base_area` VALUES ('610902', '汉滨区', '6109'); -INSERT INTO `base_area` VALUES ('610921', '汉阴县', '6109'); -INSERT INTO `base_area` VALUES ('610922', '石泉县', '6109'); -INSERT INTO `base_area` VALUES ('610923', '宁陕县', '6109'); -INSERT INTO `base_area` VALUES ('610924', '紫阳县', '6109'); -INSERT INTO `base_area` VALUES ('610925', '岚皋县', '6109'); -INSERT INTO `base_area` VALUES ('610926', '平利县', '6109'); -INSERT INTO `base_area` VALUES ('610927', '镇坪县', '6109'); -INSERT INTO `base_area` VALUES ('610929', '白河县', '6109'); -INSERT INTO `base_area` VALUES ('610981', '旬阳市', '6109'); -INSERT INTO `base_area` VALUES ('611002', '商州区', '6110'); -INSERT INTO `base_area` VALUES ('611021', '洛南县', '6110'); -INSERT INTO `base_area` VALUES ('611022', '丹凤县', '6110'); -INSERT INTO `base_area` VALUES ('611023', '商南县', '6110'); -INSERT INTO `base_area` VALUES ('611024', '山阳县', '6110'); -INSERT INTO `base_area` VALUES ('611025', '镇安县', '6110'); -INSERT INTO `base_area` VALUES ('611026', '柞水县', '6110'); -INSERT INTO `base_area` VALUES ('620102', '城关区', '6201'); -INSERT INTO `base_area` VALUES ('620103', '七里河区', '6201'); -INSERT INTO `base_area` VALUES ('620104', '西固区', '6201'); -INSERT INTO `base_area` VALUES ('620105', '安宁区', '6201'); -INSERT INTO `base_area` VALUES ('620111', '红古区', '6201'); -INSERT INTO `base_area` VALUES ('620121', '永登县', '6201'); -INSERT INTO `base_area` VALUES ('620122', '皋兰县', '6201'); -INSERT INTO `base_area` VALUES ('620123', '榆中县', '6201'); -INSERT INTO `base_area` VALUES ('620171', '兰州新区', '6201'); -INSERT INTO `base_area` VALUES ('620201', '嘉峪关市', '6202'); -INSERT INTO `base_area` VALUES ('620302', '金川区', '6203'); -INSERT INTO `base_area` VALUES ('620321', '永昌县', '6203'); -INSERT INTO `base_area` VALUES ('620402', '白银区', '6204'); -INSERT INTO `base_area` VALUES ('620403', '平川区', '6204'); -INSERT INTO `base_area` VALUES ('620421', '靖远县', '6204'); -INSERT INTO `base_area` VALUES ('620422', '会宁县', '6204'); -INSERT INTO `base_area` VALUES ('620423', '景泰县', '6204'); -INSERT INTO `base_area` VALUES ('620502', '秦州区', '6205'); -INSERT INTO `base_area` VALUES ('620503', '麦积区', '6205'); -INSERT INTO `base_area` VALUES ('620521', '清水县', '6205'); -INSERT INTO `base_area` VALUES ('620522', '秦安县', '6205'); -INSERT INTO `base_area` VALUES ('620523', '甘谷县', '6205'); -INSERT INTO `base_area` VALUES ('620524', '武山县', '6205'); -INSERT INTO `base_area` VALUES ('620525', '张家川回族自治县', '6205'); -INSERT INTO `base_area` VALUES ('620602', '凉州区', '6206'); -INSERT INTO `base_area` VALUES ('620621', '民勤县', '6206'); -INSERT INTO `base_area` VALUES ('620622', '古浪县', '6206'); -INSERT INTO `base_area` VALUES ('620623', '天祝藏族自治县', '6206'); -INSERT INTO `base_area` VALUES ('620702', '甘州区', '6207'); -INSERT INTO `base_area` VALUES ('620721', '肃南裕固族自治县', '6207'); -INSERT INTO `base_area` VALUES ('620722', '民乐县', '6207'); -INSERT INTO `base_area` VALUES ('620723', '临泽县', '6207'); -INSERT INTO `base_area` VALUES ('620724', '高台县', '6207'); -INSERT INTO `base_area` VALUES ('620725', '山丹县', '6207'); -INSERT INTO `base_area` VALUES ('620802', '崆峒区', '6208'); -INSERT INTO `base_area` VALUES ('620821', '泾川县', '6208'); -INSERT INTO `base_area` VALUES ('620822', '灵台县', '6208'); -INSERT INTO `base_area` VALUES ('620823', '崇信县', '6208'); -INSERT INTO `base_area` VALUES ('620825', '庄浪县', '6208'); -INSERT INTO `base_area` VALUES ('620826', '静宁县', '6208'); -INSERT INTO `base_area` VALUES ('620881', '华亭市', '6208'); -INSERT INTO `base_area` VALUES ('620902', '肃州区', '6209'); -INSERT INTO `base_area` VALUES ('620921', '金塔县', '6209'); -INSERT INTO `base_area` VALUES ('620922', '瓜州县', '6209'); -INSERT INTO `base_area` VALUES ('620923', '肃北蒙古族自治县', '6209'); -INSERT INTO `base_area` VALUES ('620924', '阿克塞哈萨克族自治县', '6209'); -INSERT INTO `base_area` VALUES ('620981', '玉门市', '6209'); -INSERT INTO `base_area` VALUES ('620982', '敦煌市', '6209'); -INSERT INTO `base_area` VALUES ('621002', '西峰区', '6210'); -INSERT INTO `base_area` VALUES ('621021', '庆城县', '6210'); -INSERT INTO `base_area` VALUES ('621022', '环县', '6210'); -INSERT INTO `base_area` VALUES ('621023', '华池县', '6210'); -INSERT INTO `base_area` VALUES ('621024', '合水县', '6210'); -INSERT INTO `base_area` VALUES ('621025', '正宁县', '6210'); -INSERT INTO `base_area` VALUES ('621026', '宁县', '6210'); -INSERT INTO `base_area` VALUES ('621027', '镇原县', '6210'); -INSERT INTO `base_area` VALUES ('621102', '安定区', '6211'); -INSERT INTO `base_area` VALUES ('621121', '通渭县', '6211'); -INSERT INTO `base_area` VALUES ('621122', '陇西县', '6211'); -INSERT INTO `base_area` VALUES ('621123', '渭源县', '6211'); -INSERT INTO `base_area` VALUES ('621124', '临洮县', '6211'); -INSERT INTO `base_area` VALUES ('621125', '漳县', '6211'); -INSERT INTO `base_area` VALUES ('621126', '岷县', '6211'); -INSERT INTO `base_area` VALUES ('621202', '武都区', '6212'); -INSERT INTO `base_area` VALUES ('621221', '成县', '6212'); -INSERT INTO `base_area` VALUES ('621222', '文县', '6212'); -INSERT INTO `base_area` VALUES ('621223', '宕昌县', '6212'); -INSERT INTO `base_area` VALUES ('621224', '康县', '6212'); -INSERT INTO `base_area` VALUES ('621225', '西和县', '6212'); -INSERT INTO `base_area` VALUES ('621226', '礼县', '6212'); -INSERT INTO `base_area` VALUES ('621227', '徽县', '6212'); -INSERT INTO `base_area` VALUES ('621228', '两当县', '6212'); -INSERT INTO `base_area` VALUES ('622901', '临夏市', '6229'); -INSERT INTO `base_area` VALUES ('622921', '临夏县', '6229'); -INSERT INTO `base_area` VALUES ('622922', '康乐县', '6229'); -INSERT INTO `base_area` VALUES ('622923', '永靖县', '6229'); -INSERT INTO `base_area` VALUES ('622924', '广河县', '6229'); -INSERT INTO `base_area` VALUES ('622925', '和政县', '6229'); -INSERT INTO `base_area` VALUES ('622926', '东乡族自治县', '6229'); -INSERT INTO `base_area` VALUES ('622927', '积石山保安族东乡族撒拉族自治县', '6229'); -INSERT INTO `base_area` VALUES ('623001', '合作市', '6230'); -INSERT INTO `base_area` VALUES ('623021', '临潭县', '6230'); -INSERT INTO `base_area` VALUES ('623022', '卓尼县', '6230'); -INSERT INTO `base_area` VALUES ('623023', '舟曲县', '6230'); -INSERT INTO `base_area` VALUES ('623024', '迭部县', '6230'); -INSERT INTO `base_area` VALUES ('623025', '玛曲县', '6230'); -INSERT INTO `base_area` VALUES ('623026', '碌曲县', '6230'); -INSERT INTO `base_area` VALUES ('623027', '夏河县', '6230'); -INSERT INTO `base_area` VALUES ('630102', '城东区', '6301'); -INSERT INTO `base_area` VALUES ('630103', '城中区', '6301'); -INSERT INTO `base_area` VALUES ('630104', '城西区', '6301'); -INSERT INTO `base_area` VALUES ('630105', '城北区', '6301'); -INSERT INTO `base_area` VALUES ('630106', '湟中区', '6301'); -INSERT INTO `base_area` VALUES ('630121', '大通回族土族自治县', '6301'); -INSERT INTO `base_area` VALUES ('630123', '湟源县', '6301'); -INSERT INTO `base_area` VALUES ('630202', '乐都区', '6302'); -INSERT INTO `base_area` VALUES ('630203', '平安区', '6302'); -INSERT INTO `base_area` VALUES ('630222', '民和回族土族自治县', '6302'); -INSERT INTO `base_area` VALUES ('630223', '互助土族自治县', '6302'); -INSERT INTO `base_area` VALUES ('630224', '化隆回族自治县', '6302'); -INSERT INTO `base_area` VALUES ('630225', '循化撒拉族自治县', '6302'); -INSERT INTO `base_area` VALUES ('632221', '门源回族自治县', '6322'); -INSERT INTO `base_area` VALUES ('632222', '祁连县', '6322'); -INSERT INTO `base_area` VALUES ('632223', '海晏县', '6322'); -INSERT INTO `base_area` VALUES ('632224', '刚察县', '6322'); -INSERT INTO `base_area` VALUES ('632301', '同仁市', '6323'); -INSERT INTO `base_area` VALUES ('632322', '尖扎县', '6323'); -INSERT INTO `base_area` VALUES ('632323', '泽库县', '6323'); -INSERT INTO `base_area` VALUES ('632324', '河南蒙古族自治县', '6323'); -INSERT INTO `base_area` VALUES ('632521', '共和县', '6325'); -INSERT INTO `base_area` VALUES ('632522', '同德县', '6325'); -INSERT INTO `base_area` VALUES ('632523', '贵德县', '6325'); -INSERT INTO `base_area` VALUES ('632524', '兴海县', '6325'); -INSERT INTO `base_area` VALUES ('632525', '贵南县', '6325'); -INSERT INTO `base_area` VALUES ('632621', '玛沁县', '6326'); -INSERT INTO `base_area` VALUES ('632622', '班玛县', '6326'); -INSERT INTO `base_area` VALUES ('632623', '甘德县', '6326'); -INSERT INTO `base_area` VALUES ('632624', '达日县', '6326'); -INSERT INTO `base_area` VALUES ('632625', '久治县', '6326'); -INSERT INTO `base_area` VALUES ('632626', '玛多县', '6326'); -INSERT INTO `base_area` VALUES ('632701', '玉树市', '6327'); -INSERT INTO `base_area` VALUES ('632722', '杂多县', '6327'); -INSERT INTO `base_area` VALUES ('632723', '称多县', '6327'); -INSERT INTO `base_area` VALUES ('632724', '治多县', '6327'); -INSERT INTO `base_area` VALUES ('632725', '囊谦县', '6327'); -INSERT INTO `base_area` VALUES ('632726', '曲麻莱县', '6327'); -INSERT INTO `base_area` VALUES ('632801', '格尔木市', '6328'); -INSERT INTO `base_area` VALUES ('632802', '德令哈市', '6328'); -INSERT INTO `base_area` VALUES ('632803', '茫崖市', '6328'); -INSERT INTO `base_area` VALUES ('632821', '乌兰县', '6328'); -INSERT INTO `base_area` VALUES ('632822', '都兰县', '6328'); -INSERT INTO `base_area` VALUES ('632823', '天峻县', '6328'); -INSERT INTO `base_area` VALUES ('632857', '大柴旦行政委员会', '6328'); -INSERT INTO `base_area` VALUES ('640104', '兴庆区', '6401'); -INSERT INTO `base_area` VALUES ('640105', '西夏区', '6401'); -INSERT INTO `base_area` VALUES ('640106', '金凤区', '6401'); -INSERT INTO `base_area` VALUES ('640121', '永宁县', '6401'); -INSERT INTO `base_area` VALUES ('640122', '贺兰县', '6401'); -INSERT INTO `base_area` VALUES ('640181', '灵武市', '6401'); -INSERT INTO `base_area` VALUES ('640202', '大武口区', '6402'); -INSERT INTO `base_area` VALUES ('640205', '惠农区', '6402'); -INSERT INTO `base_area` VALUES ('640221', '平罗县', '6402'); -INSERT INTO `base_area` VALUES ('640302', '利通区', '6403'); -INSERT INTO `base_area` VALUES ('640303', '红寺堡区', '6403'); -INSERT INTO `base_area` VALUES ('640323', '盐池县', '6403'); -INSERT INTO `base_area` VALUES ('640324', '同心县', '6403'); -INSERT INTO `base_area` VALUES ('640381', '青铜峡市', '6403'); -INSERT INTO `base_area` VALUES ('640402', '原州区', '6404'); -INSERT INTO `base_area` VALUES ('640422', '西吉县', '6404'); -INSERT INTO `base_area` VALUES ('640423', '隆德县', '6404'); -INSERT INTO `base_area` VALUES ('640424', '泾源县', '6404'); -INSERT INTO `base_area` VALUES ('640425', '彭阳县', '6404'); -INSERT INTO `base_area` VALUES ('640502', '沙坡头区', '6405'); -INSERT INTO `base_area` VALUES ('640521', '中宁县', '6405'); -INSERT INTO `base_area` VALUES ('640522', '海原县', '6405'); -INSERT INTO `base_area` VALUES ('650102', '天山区', '6501'); -INSERT INTO `base_area` VALUES ('650103', '沙依巴克区', '6501'); -INSERT INTO `base_area` VALUES ('650104', '新市区', '6501'); -INSERT INTO `base_area` VALUES ('650105', '水磨沟区', '6501'); -INSERT INTO `base_area` VALUES ('650106', '头屯河区', '6501'); -INSERT INTO `base_area` VALUES ('650107', '达坂城区', '6501'); -INSERT INTO `base_area` VALUES ('650109', '米东区', '6501'); -INSERT INTO `base_area` VALUES ('650121', '乌鲁木齐县', '6501'); -INSERT INTO `base_area` VALUES ('650202', '独山子区', '6502'); -INSERT INTO `base_area` VALUES ('650203', '克拉玛依区', '6502'); -INSERT INTO `base_area` VALUES ('650204', '白碱滩区', '6502'); -INSERT INTO `base_area` VALUES ('650205', '乌尔禾区', '6502'); -INSERT INTO `base_area` VALUES ('650402', '高昌区', '6504'); -INSERT INTO `base_area` VALUES ('650421', '鄯善县', '6504'); -INSERT INTO `base_area` VALUES ('650422', '托克逊县', '6504'); -INSERT INTO `base_area` VALUES ('650502', '伊州区', '6505'); -INSERT INTO `base_area` VALUES ('650521', '巴里坤哈萨克自治县', '6505'); -INSERT INTO `base_area` VALUES ('650522', '伊吾县', '6505'); -INSERT INTO `base_area` VALUES ('652301', '昌吉市', '6523'); -INSERT INTO `base_area` VALUES ('652302', '阜康市', '6523'); -INSERT INTO `base_area` VALUES ('652323', '呼图壁县', '6523'); -INSERT INTO `base_area` VALUES ('652324', '玛纳斯县', '6523'); -INSERT INTO `base_area` VALUES ('652325', '奇台县', '6523'); -INSERT INTO `base_area` VALUES ('652327', '吉木萨尔县', '6523'); -INSERT INTO `base_area` VALUES ('652328', '木垒哈萨克自治县', '6523'); -INSERT INTO `base_area` VALUES ('652701', '博乐市', '6527'); -INSERT INTO `base_area` VALUES ('652702', '阿拉山口市', '6527'); -INSERT INTO `base_area` VALUES ('652722', '精河县', '6527'); -INSERT INTO `base_area` VALUES ('652723', '温泉县', '6527'); -INSERT INTO `base_area` VALUES ('652801', '库尔勒市', '6528'); -INSERT INTO `base_area` VALUES ('652822', '轮台县', '6528'); -INSERT INTO `base_area` VALUES ('652823', '尉犁县', '6528'); -INSERT INTO `base_area` VALUES ('652824', '若羌县', '6528'); -INSERT INTO `base_area` VALUES ('652825', '且末县', '6528'); -INSERT INTO `base_area` VALUES ('652826', '焉耆回族自治县', '6528'); -INSERT INTO `base_area` VALUES ('652827', '和静县', '6528'); -INSERT INTO `base_area` VALUES ('652828', '和硕县', '6528'); -INSERT INTO `base_area` VALUES ('652829', '博湖县', '6528'); -INSERT INTO `base_area` VALUES ('652871', '库尔勒经济技术开发区', '6528'); -INSERT INTO `base_area` VALUES ('652901', '阿克苏市', '6529'); -INSERT INTO `base_area` VALUES ('652902', '库车市', '6529'); -INSERT INTO `base_area` VALUES ('652922', '温宿县', '6529'); -INSERT INTO `base_area` VALUES ('652924', '沙雅县', '6529'); -INSERT INTO `base_area` VALUES ('652925', '新和县', '6529'); -INSERT INTO `base_area` VALUES ('652926', '拜城县', '6529'); -INSERT INTO `base_area` VALUES ('652927', '乌什县', '6529'); -INSERT INTO `base_area` VALUES ('652928', '阿瓦提县', '6529'); -INSERT INTO `base_area` VALUES ('652929', '柯坪县', '6529'); -INSERT INTO `base_area` VALUES ('653001', '阿图什市', '6530'); -INSERT INTO `base_area` VALUES ('653022', '阿克陶县', '6530'); -INSERT INTO `base_area` VALUES ('653023', '阿合奇县', '6530'); -INSERT INTO `base_area` VALUES ('653024', '乌恰县', '6530'); -INSERT INTO `base_area` VALUES ('653101', '喀什市', '6531'); -INSERT INTO `base_area` VALUES ('653121', '疏附县', '6531'); -INSERT INTO `base_area` VALUES ('653122', '疏勒县', '6531'); -INSERT INTO `base_area` VALUES ('653123', '英吉沙县', '6531'); -INSERT INTO `base_area` VALUES ('653124', '泽普县', '6531'); -INSERT INTO `base_area` VALUES ('653125', '莎车县', '6531'); -INSERT INTO `base_area` VALUES ('653126', '叶城县', '6531'); -INSERT INTO `base_area` VALUES ('653127', '麦盖提县', '6531'); -INSERT INTO `base_area` VALUES ('653128', '岳普湖县', '6531'); -INSERT INTO `base_area` VALUES ('653129', '伽师县', '6531'); -INSERT INTO `base_area` VALUES ('653130', '巴楚县', '6531'); -INSERT INTO `base_area` VALUES ('653131', '塔什库尔干塔吉克自治县', '6531'); -INSERT INTO `base_area` VALUES ('653201', '和田市', '6532'); -INSERT INTO `base_area` VALUES ('653221', '和田县', '6532'); -INSERT INTO `base_area` VALUES ('653222', '墨玉县', '6532'); -INSERT INTO `base_area` VALUES ('653223', '皮山县', '6532'); -INSERT INTO `base_area` VALUES ('653224', '洛浦县', '6532'); -INSERT INTO `base_area` VALUES ('653225', '策勒县', '6532'); -INSERT INTO `base_area` VALUES ('653226', '于田县', '6532'); -INSERT INTO `base_area` VALUES ('653227', '民丰县', '6532'); -INSERT INTO `base_area` VALUES ('654002', '伊宁市', '6540'); -INSERT INTO `base_area` VALUES ('654003', '奎屯市', '6540'); -INSERT INTO `base_area` VALUES ('654004', '霍尔果斯市', '6540'); -INSERT INTO `base_area` VALUES ('654021', '伊宁县', '6540'); -INSERT INTO `base_area` VALUES ('654022', '察布查尔锡伯自治县', '6540'); -INSERT INTO `base_area` VALUES ('654023', '霍城县', '6540'); -INSERT INTO `base_area` VALUES ('654024', '巩留县', '6540'); -INSERT INTO `base_area` VALUES ('654025', '新源县', '6540'); -INSERT INTO `base_area` VALUES ('654026', '昭苏县', '6540'); -INSERT INTO `base_area` VALUES ('654027', '特克斯县', '6540'); -INSERT INTO `base_area` VALUES ('654028', '尼勒克县', '6540'); -INSERT INTO `base_area` VALUES ('654201', '塔城市', '6542'); -INSERT INTO `base_area` VALUES ('654202', '乌苏市', '6542'); -INSERT INTO `base_area` VALUES ('654203', '沙湾市', '6542'); -INSERT INTO `base_area` VALUES ('654221', '额敏县', '6542'); -INSERT INTO `base_area` VALUES ('654224', '托里县', '6542'); -INSERT INTO `base_area` VALUES ('654225', '裕民县', '6542'); -INSERT INTO `base_area` VALUES ('654226', '和布克赛尔蒙古自治县', '6542'); -INSERT INTO `base_area` VALUES ('654301', '阿勒泰市', '6543'); -INSERT INTO `base_area` VALUES ('654321', '布尔津县', '6543'); -INSERT INTO `base_area` VALUES ('654322', '富蕴县', '6543'); -INSERT INTO `base_area` VALUES ('654323', '福海县', '6543'); -INSERT INTO `base_area` VALUES ('654324', '哈巴河县', '6543'); -INSERT INTO `base_area` VALUES ('654325', '青河县', '6543'); -INSERT INTO `base_area` VALUES ('654326', '吉木乃县', '6543'); -INSERT INTO `base_area` VALUES ('659001', '石河子市', '6590'); -INSERT INTO `base_area` VALUES ('659002', '阿拉尔市', '6590'); -INSERT INTO `base_area` VALUES ('659003', '图木舒克市', '6590'); -INSERT INTO `base_area` VALUES ('659004', '五家渠市', '6590'); -INSERT INTO `base_area` VALUES ('659005', '北屯市', '6590'); -INSERT INTO `base_area` VALUES ('659006', '铁门关市', '6590'); -INSERT INTO `base_area` VALUES ('659007', '双河市', '6590'); -INSERT INTO `base_area` VALUES ('659008', '可克达拉市', '6590'); -INSERT INTO `base_area` VALUES ('659009', '昆玉市', '6590'); -INSERT INTO `base_area` VALUES ('659010', '胡杨河市', '6590'); -INSERT INTO `base_area` VALUES ('659011', '新星市', '6590'); - --- ---------------------------- --- Table structure for base_city --- ---------------------------- -DROP TABLE IF EXISTS `base_city`; -CREATE TABLE `base_city` ( - `code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '城市编码', - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '城市名称', - `province_code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '省份编码', - PRIMARY KEY (`code`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '城市表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_city --- ---------------------------- -INSERT INTO `base_city` VALUES ('1101', '市辖区', '11'); -INSERT INTO `base_city` VALUES ('1201', '市辖区', '12'); -INSERT INTO `base_city` VALUES ('1301', '石家庄市', '13'); -INSERT INTO `base_city` VALUES ('1302', '唐山市', '13'); -INSERT INTO `base_city` VALUES ('1303', '秦皇岛市', '13'); -INSERT INTO `base_city` VALUES ('1304', '邯郸市', '13'); -INSERT INTO `base_city` VALUES ('1305', '邢台市', '13'); -INSERT INTO `base_city` VALUES ('1306', '保定市', '13'); -INSERT INTO `base_city` VALUES ('1307', '张家口市', '13'); -INSERT INTO `base_city` VALUES ('1308', '承德市', '13'); -INSERT INTO `base_city` VALUES ('1309', '沧州市', '13'); -INSERT INTO `base_city` VALUES ('1310', '廊坊市', '13'); -INSERT INTO `base_city` VALUES ('1311', '衡水市', '13'); -INSERT INTO `base_city` VALUES ('1401', '太原市', '14'); -INSERT INTO `base_city` VALUES ('1402', '大同市', '14'); -INSERT INTO `base_city` VALUES ('1403', '阳泉市', '14'); -INSERT INTO `base_city` VALUES ('1404', '长治市', '14'); -INSERT INTO `base_city` VALUES ('1405', '晋城市', '14'); -INSERT INTO `base_city` VALUES ('1406', '朔州市', '14'); -INSERT INTO `base_city` VALUES ('1407', '晋中市', '14'); -INSERT INTO `base_city` VALUES ('1408', '运城市', '14'); -INSERT INTO `base_city` VALUES ('1409', '忻州市', '14'); -INSERT INTO `base_city` VALUES ('1410', '临汾市', '14'); -INSERT INTO `base_city` VALUES ('1411', '吕梁市', '14'); -INSERT INTO `base_city` VALUES ('1501', '呼和浩特市', '15'); -INSERT INTO `base_city` VALUES ('1502', '包头市', '15'); -INSERT INTO `base_city` VALUES ('1503', '乌海市', '15'); -INSERT INTO `base_city` VALUES ('1504', '赤峰市', '15'); -INSERT INTO `base_city` VALUES ('1505', '通辽市', '15'); -INSERT INTO `base_city` VALUES ('1506', '鄂尔多斯市', '15'); -INSERT INTO `base_city` VALUES ('1507', '呼伦贝尔市', '15'); -INSERT INTO `base_city` VALUES ('1508', '巴彦淖尔市', '15'); -INSERT INTO `base_city` VALUES ('1509', '乌兰察布市', '15'); -INSERT INTO `base_city` VALUES ('1522', '兴安盟', '15'); -INSERT INTO `base_city` VALUES ('1525', '锡林郭勒盟', '15'); -INSERT INTO `base_city` VALUES ('1529', '阿拉善盟', '15'); -INSERT INTO `base_city` VALUES ('2101', '沈阳市', '21'); -INSERT INTO `base_city` VALUES ('2102', '大连市', '21'); -INSERT INTO `base_city` VALUES ('2103', '鞍山市', '21'); -INSERT INTO `base_city` VALUES ('2104', '抚顺市', '21'); -INSERT INTO `base_city` VALUES ('2105', '本溪市', '21'); -INSERT INTO `base_city` VALUES ('2106', '丹东市', '21'); -INSERT INTO `base_city` VALUES ('2107', '锦州市', '21'); -INSERT INTO `base_city` VALUES ('2108', '营口市', '21'); -INSERT INTO `base_city` VALUES ('2109', '阜新市', '21'); -INSERT INTO `base_city` VALUES ('2110', '辽阳市', '21'); -INSERT INTO `base_city` VALUES ('2111', '盘锦市', '21'); -INSERT INTO `base_city` VALUES ('2112', '铁岭市', '21'); -INSERT INTO `base_city` VALUES ('2113', '朝阳市', '21'); -INSERT INTO `base_city` VALUES ('2114', '葫芦岛市', '21'); -INSERT INTO `base_city` VALUES ('2201', '长春市', '22'); -INSERT INTO `base_city` VALUES ('2202', '吉林市', '22'); -INSERT INTO `base_city` VALUES ('2203', '四平市', '22'); -INSERT INTO `base_city` VALUES ('2204', '辽源市', '22'); -INSERT INTO `base_city` VALUES ('2205', '通化市', '22'); -INSERT INTO `base_city` VALUES ('2206', '白山市', '22'); -INSERT INTO `base_city` VALUES ('2207', '松原市', '22'); -INSERT INTO `base_city` VALUES ('2208', '白城市', '22'); -INSERT INTO `base_city` VALUES ('2224', '延边朝鲜族自治州', '22'); -INSERT INTO `base_city` VALUES ('2301', '哈尔滨市', '23'); -INSERT INTO `base_city` VALUES ('2302', '齐齐哈尔市', '23'); -INSERT INTO `base_city` VALUES ('2303', '鸡西市', '23'); -INSERT INTO `base_city` VALUES ('2304', '鹤岗市', '23'); -INSERT INTO `base_city` VALUES ('2305', '双鸭山市', '23'); -INSERT INTO `base_city` VALUES ('2306', '大庆市', '23'); -INSERT INTO `base_city` VALUES ('2307', '伊春市', '23'); -INSERT INTO `base_city` VALUES ('2308', '佳木斯市', '23'); -INSERT INTO `base_city` VALUES ('2309', '七台河市', '23'); -INSERT INTO `base_city` VALUES ('2310', '牡丹江市', '23'); -INSERT INTO `base_city` VALUES ('2311', '黑河市', '23'); -INSERT INTO `base_city` VALUES ('2312', '绥化市', '23'); -INSERT INTO `base_city` VALUES ('2327', '大兴安岭地区', '23'); -INSERT INTO `base_city` VALUES ('3101', '市辖区', '31'); -INSERT INTO `base_city` VALUES ('3201', '南京市', '32'); -INSERT INTO `base_city` VALUES ('3202', '无锡市', '32'); -INSERT INTO `base_city` VALUES ('3203', '徐州市', '32'); -INSERT INTO `base_city` VALUES ('3204', '常州市', '32'); -INSERT INTO `base_city` VALUES ('3205', '苏州市', '32'); -INSERT INTO `base_city` VALUES ('3206', '南通市', '32'); -INSERT INTO `base_city` VALUES ('3207', '连云港市', '32'); -INSERT INTO `base_city` VALUES ('3208', '淮安市', '32'); -INSERT INTO `base_city` VALUES ('3209', '盐城市', '32'); -INSERT INTO `base_city` VALUES ('3210', '扬州市', '32'); -INSERT INTO `base_city` VALUES ('3211', '镇江市', '32'); -INSERT INTO `base_city` VALUES ('3212', '泰州市', '32'); -INSERT INTO `base_city` VALUES ('3213', '宿迁市', '32'); -INSERT INTO `base_city` VALUES ('3301', '杭州市', '33'); -INSERT INTO `base_city` VALUES ('3302', '宁波市', '33'); -INSERT INTO `base_city` VALUES ('3303', '温州市', '33'); -INSERT INTO `base_city` VALUES ('3304', '嘉兴市', '33'); -INSERT INTO `base_city` VALUES ('3305', '湖州市', '33'); -INSERT INTO `base_city` VALUES ('3306', '绍兴市', '33'); -INSERT INTO `base_city` VALUES ('3307', '金华市', '33'); -INSERT INTO `base_city` VALUES ('3308', '衢州市', '33'); -INSERT INTO `base_city` VALUES ('3309', '舟山市', '33'); -INSERT INTO `base_city` VALUES ('3310', '台州市', '33'); -INSERT INTO `base_city` VALUES ('3311', '丽水市', '33'); -INSERT INTO `base_city` VALUES ('3401', '合肥市', '34'); -INSERT INTO `base_city` VALUES ('3402', '芜湖市', '34'); -INSERT INTO `base_city` VALUES ('3403', '蚌埠市', '34'); -INSERT INTO `base_city` VALUES ('3404', '淮南市', '34'); -INSERT INTO `base_city` VALUES ('3405', '马鞍山市', '34'); -INSERT INTO `base_city` VALUES ('3406', '淮北市', '34'); -INSERT INTO `base_city` VALUES ('3407', '铜陵市', '34'); -INSERT INTO `base_city` VALUES ('3408', '安庆市', '34'); -INSERT INTO `base_city` VALUES ('3410', '黄山市', '34'); -INSERT INTO `base_city` VALUES ('3411', '滁州市', '34'); -INSERT INTO `base_city` VALUES ('3412', '阜阳市', '34'); -INSERT INTO `base_city` VALUES ('3413', '宿州市', '34'); -INSERT INTO `base_city` VALUES ('3415', '六安市', '34'); -INSERT INTO `base_city` VALUES ('3416', '亳州市', '34'); -INSERT INTO `base_city` VALUES ('3417', '池州市', '34'); -INSERT INTO `base_city` VALUES ('3418', '宣城市', '34'); -INSERT INTO `base_city` VALUES ('3501', '福州市', '35'); -INSERT INTO `base_city` VALUES ('3502', '厦门市', '35'); -INSERT INTO `base_city` VALUES ('3503', '莆田市', '35'); -INSERT INTO `base_city` VALUES ('3504', '三明市', '35'); -INSERT INTO `base_city` VALUES ('3505', '泉州市', '35'); -INSERT INTO `base_city` VALUES ('3506', '漳州市', '35'); -INSERT INTO `base_city` VALUES ('3507', '南平市', '35'); -INSERT INTO `base_city` VALUES ('3508', '龙岩市', '35'); -INSERT INTO `base_city` VALUES ('3509', '宁德市', '35'); -INSERT INTO `base_city` VALUES ('3601', '南昌市', '36'); -INSERT INTO `base_city` VALUES ('3602', '景德镇市', '36'); -INSERT INTO `base_city` VALUES ('3603', '萍乡市', '36'); -INSERT INTO `base_city` VALUES ('3604', '九江市', '36'); -INSERT INTO `base_city` VALUES ('3605', '新余市', '36'); -INSERT INTO `base_city` VALUES ('3606', '鹰潭市', '36'); -INSERT INTO `base_city` VALUES ('3607', '赣州市', '36'); -INSERT INTO `base_city` VALUES ('3608', '吉安市', '36'); -INSERT INTO `base_city` VALUES ('3609', '宜春市', '36'); -INSERT INTO `base_city` VALUES ('3610', '抚州市', '36'); -INSERT INTO `base_city` VALUES ('3611', '上饶市', '36'); -INSERT INTO `base_city` VALUES ('3701', '济南市', '37'); -INSERT INTO `base_city` VALUES ('3702', '青岛市', '37'); -INSERT INTO `base_city` VALUES ('3703', '淄博市', '37'); -INSERT INTO `base_city` VALUES ('3704', '枣庄市', '37'); -INSERT INTO `base_city` VALUES ('3705', '东营市', '37'); -INSERT INTO `base_city` VALUES ('3706', '烟台市', '37'); -INSERT INTO `base_city` VALUES ('3707', '潍坊市', '37'); -INSERT INTO `base_city` VALUES ('3708', '济宁市', '37'); -INSERT INTO `base_city` VALUES ('3709', '泰安市', '37'); -INSERT INTO `base_city` VALUES ('3710', '威海市', '37'); -INSERT INTO `base_city` VALUES ('3711', '日照市', '37'); -INSERT INTO `base_city` VALUES ('3713', '临沂市', '37'); -INSERT INTO `base_city` VALUES ('3714', '德州市', '37'); -INSERT INTO `base_city` VALUES ('3715', '聊城市', '37'); -INSERT INTO `base_city` VALUES ('3716', '滨州市', '37'); -INSERT INTO `base_city` VALUES ('3717', '菏泽市', '37'); -INSERT INTO `base_city` VALUES ('4101', '郑州市', '41'); -INSERT INTO `base_city` VALUES ('4102', '开封市', '41'); -INSERT INTO `base_city` VALUES ('4103', '洛阳市', '41'); -INSERT INTO `base_city` VALUES ('4104', '平顶山市', '41'); -INSERT INTO `base_city` VALUES ('4105', '安阳市', '41'); -INSERT INTO `base_city` VALUES ('4106', '鹤壁市', '41'); -INSERT INTO `base_city` VALUES ('4107', '新乡市', '41'); -INSERT INTO `base_city` VALUES ('4108', '焦作市', '41'); -INSERT INTO `base_city` VALUES ('4109', '濮阳市', '41'); -INSERT INTO `base_city` VALUES ('4110', '许昌市', '41'); -INSERT INTO `base_city` VALUES ('4111', '漯河市', '41'); -INSERT INTO `base_city` VALUES ('4112', '三门峡市', '41'); -INSERT INTO `base_city` VALUES ('4113', '南阳市', '41'); -INSERT INTO `base_city` VALUES ('4114', '商丘市', '41'); -INSERT INTO `base_city` VALUES ('4115', '信阳市', '41'); -INSERT INTO `base_city` VALUES ('4116', '周口市', '41'); -INSERT INTO `base_city` VALUES ('4117', '驻马店市', '41'); -INSERT INTO `base_city` VALUES ('4190', '省直辖县级行政区划', '41'); -INSERT INTO `base_city` VALUES ('4201', '武汉市', '42'); -INSERT INTO `base_city` VALUES ('4202', '黄石市', '42'); -INSERT INTO `base_city` VALUES ('4203', '十堰市', '42'); -INSERT INTO `base_city` VALUES ('4205', '宜昌市', '42'); -INSERT INTO `base_city` VALUES ('4206', '襄阳市', '42'); -INSERT INTO `base_city` VALUES ('4207', '鄂州市', '42'); -INSERT INTO `base_city` VALUES ('4208', '荆门市', '42'); -INSERT INTO `base_city` VALUES ('4209', '孝感市', '42'); -INSERT INTO `base_city` VALUES ('4210', '荆州市', '42'); -INSERT INTO `base_city` VALUES ('4211', '黄冈市', '42'); -INSERT INTO `base_city` VALUES ('4212', '咸宁市', '42'); -INSERT INTO `base_city` VALUES ('4213', '随州市', '42'); -INSERT INTO `base_city` VALUES ('4228', '恩施土家族苗族自治州', '42'); -INSERT INTO `base_city` VALUES ('4290', '省直辖县级行政区划', '42'); -INSERT INTO `base_city` VALUES ('4301', '长沙市', '43'); -INSERT INTO `base_city` VALUES ('4302', '株洲市', '43'); -INSERT INTO `base_city` VALUES ('4303', '湘潭市', '43'); -INSERT INTO `base_city` VALUES ('4304', '衡阳市', '43'); -INSERT INTO `base_city` VALUES ('4305', '邵阳市', '43'); -INSERT INTO `base_city` VALUES ('4306', '岳阳市', '43'); -INSERT INTO `base_city` VALUES ('4307', '常德市', '43'); -INSERT INTO `base_city` VALUES ('4308', '张家界市', '43'); -INSERT INTO `base_city` VALUES ('4309', '益阳市', '43'); -INSERT INTO `base_city` VALUES ('4310', '郴州市', '43'); -INSERT INTO `base_city` VALUES ('4311', '永州市', '43'); -INSERT INTO `base_city` VALUES ('4312', '怀化市', '43'); -INSERT INTO `base_city` VALUES ('4313', '娄底市', '43'); -INSERT INTO `base_city` VALUES ('4331', '湘西土家族苗族自治州', '43'); -INSERT INTO `base_city` VALUES ('4401', '广州市', '44'); -INSERT INTO `base_city` VALUES ('4402', '韶关市', '44'); -INSERT INTO `base_city` VALUES ('4403', '深圳市', '44'); -INSERT INTO `base_city` VALUES ('4404', '珠海市', '44'); -INSERT INTO `base_city` VALUES ('4405', '汕头市', '44'); -INSERT INTO `base_city` VALUES ('4406', '佛山市', '44'); -INSERT INTO `base_city` VALUES ('4407', '江门市', '44'); -INSERT INTO `base_city` VALUES ('4408', '湛江市', '44'); -INSERT INTO `base_city` VALUES ('4409', '茂名市', '44'); -INSERT INTO `base_city` VALUES ('4412', '肇庆市', '44'); -INSERT INTO `base_city` VALUES ('4413', '惠州市', '44'); -INSERT INTO `base_city` VALUES ('4414', '梅州市', '44'); -INSERT INTO `base_city` VALUES ('4415', '汕尾市', '44'); -INSERT INTO `base_city` VALUES ('4416', '河源市', '44'); -INSERT INTO `base_city` VALUES ('4417', '阳江市', '44'); -INSERT INTO `base_city` VALUES ('4418', '清远市', '44'); -INSERT INTO `base_city` VALUES ('4419', '东莞市', '44'); -INSERT INTO `base_city` VALUES ('4420', '中山市', '44'); -INSERT INTO `base_city` VALUES ('4451', '潮州市', '44'); -INSERT INTO `base_city` VALUES ('4452', '揭阳市', '44'); -INSERT INTO `base_city` VALUES ('4453', '云浮市', '44'); -INSERT INTO `base_city` VALUES ('4501', '南宁市', '45'); -INSERT INTO `base_city` VALUES ('4502', '柳州市', '45'); -INSERT INTO `base_city` VALUES ('4503', '桂林市', '45'); -INSERT INTO `base_city` VALUES ('4504', '梧州市', '45'); -INSERT INTO `base_city` VALUES ('4505', '北海市', '45'); -INSERT INTO `base_city` VALUES ('4506', '防城港市', '45'); -INSERT INTO `base_city` VALUES ('4507', '钦州市', '45'); -INSERT INTO `base_city` VALUES ('4508', '贵港市', '45'); -INSERT INTO `base_city` VALUES ('4509', '玉林市', '45'); -INSERT INTO `base_city` VALUES ('4510', '百色市', '45'); -INSERT INTO `base_city` VALUES ('4511', '贺州市', '45'); -INSERT INTO `base_city` VALUES ('4512', '河池市', '45'); -INSERT INTO `base_city` VALUES ('4513', '来宾市', '45'); -INSERT INTO `base_city` VALUES ('4514', '崇左市', '45'); -INSERT INTO `base_city` VALUES ('4601', '海口市', '46'); -INSERT INTO `base_city` VALUES ('4602', '三亚市', '46'); -INSERT INTO `base_city` VALUES ('4603', '三沙市', '46'); -INSERT INTO `base_city` VALUES ('4604', '儋州市', '46'); -INSERT INTO `base_city` VALUES ('4690', '省直辖县级行政区划', '46'); -INSERT INTO `base_city` VALUES ('5001', '市辖区', '50'); -INSERT INTO `base_city` VALUES ('5002', '县', '50'); -INSERT INTO `base_city` VALUES ('5101', '成都市', '51'); -INSERT INTO `base_city` VALUES ('5103', '自贡市', '51'); -INSERT INTO `base_city` VALUES ('5104', '攀枝花市', '51'); -INSERT INTO `base_city` VALUES ('5105', '泸州市', '51'); -INSERT INTO `base_city` VALUES ('5106', '德阳市', '51'); -INSERT INTO `base_city` VALUES ('5107', '绵阳市', '51'); -INSERT INTO `base_city` VALUES ('5108', '广元市', '51'); -INSERT INTO `base_city` VALUES ('5109', '遂宁市', '51'); -INSERT INTO `base_city` VALUES ('5110', '内江市', '51'); -INSERT INTO `base_city` VALUES ('5111', '乐山市', '51'); -INSERT INTO `base_city` VALUES ('5113', '南充市', '51'); -INSERT INTO `base_city` VALUES ('5114', '眉山市', '51'); -INSERT INTO `base_city` VALUES ('5115', '宜宾市', '51'); -INSERT INTO `base_city` VALUES ('5116', '广安市', '51'); -INSERT INTO `base_city` VALUES ('5117', '达州市', '51'); -INSERT INTO `base_city` VALUES ('5118', '雅安市', '51'); -INSERT INTO `base_city` VALUES ('5119', '巴中市', '51'); -INSERT INTO `base_city` VALUES ('5120', '资阳市', '51'); -INSERT INTO `base_city` VALUES ('5132', '阿坝藏族羌族自治州', '51'); -INSERT INTO `base_city` VALUES ('5133', '甘孜藏族自治州', '51'); -INSERT INTO `base_city` VALUES ('5134', '凉山彝族自治州', '51'); -INSERT INTO `base_city` VALUES ('5201', '贵阳市', '52'); -INSERT INTO `base_city` VALUES ('5202', '六盘水市', '52'); -INSERT INTO `base_city` VALUES ('5203', '遵义市', '52'); -INSERT INTO `base_city` VALUES ('5204', '安顺市', '52'); -INSERT INTO `base_city` VALUES ('5205', '毕节市', '52'); -INSERT INTO `base_city` VALUES ('5206', '铜仁市', '52'); -INSERT INTO `base_city` VALUES ('5223', '黔西南布依族苗族自治州', '52'); -INSERT INTO `base_city` VALUES ('5226', '黔东南苗族侗族自治州', '52'); -INSERT INTO `base_city` VALUES ('5227', '黔南布依族苗族自治州', '52'); -INSERT INTO `base_city` VALUES ('5301', '昆明市', '53'); -INSERT INTO `base_city` VALUES ('5303', '曲靖市', '53'); -INSERT INTO `base_city` VALUES ('5304', '玉溪市', '53'); -INSERT INTO `base_city` VALUES ('5305', '保山市', '53'); -INSERT INTO `base_city` VALUES ('5306', '昭通市', '53'); -INSERT INTO `base_city` VALUES ('5307', '丽江市', '53'); -INSERT INTO `base_city` VALUES ('5308', '普洱市', '53'); -INSERT INTO `base_city` VALUES ('5309', '临沧市', '53'); -INSERT INTO `base_city` VALUES ('5323', '楚雄彝族自治州', '53'); -INSERT INTO `base_city` VALUES ('5325', '红河哈尼族彝族自治州', '53'); -INSERT INTO `base_city` VALUES ('5326', '文山壮族苗族自治州', '53'); -INSERT INTO `base_city` VALUES ('5328', '西双版纳傣族自治州', '53'); -INSERT INTO `base_city` VALUES ('5329', '大理白族自治州', '53'); -INSERT INTO `base_city` VALUES ('5331', '德宏傣族景颇族自治州', '53'); -INSERT INTO `base_city` VALUES ('5333', '怒江傈僳族自治州', '53'); -INSERT INTO `base_city` VALUES ('5334', '迪庆藏族自治州', '53'); -INSERT INTO `base_city` VALUES ('5401', '拉萨市', '54'); -INSERT INTO `base_city` VALUES ('5402', '日喀则市', '54'); -INSERT INTO `base_city` VALUES ('5403', '昌都市', '54'); -INSERT INTO `base_city` VALUES ('5404', '林芝市', '54'); -INSERT INTO `base_city` VALUES ('5405', '山南市', '54'); -INSERT INTO `base_city` VALUES ('5406', '那曲市', '54'); -INSERT INTO `base_city` VALUES ('5425', '阿里地区', '54'); -INSERT INTO `base_city` VALUES ('6101', '西安市', '61'); -INSERT INTO `base_city` VALUES ('6102', '铜川市', '61'); -INSERT INTO `base_city` VALUES ('6103', '宝鸡市', '61'); -INSERT INTO `base_city` VALUES ('6104', '咸阳市', '61'); -INSERT INTO `base_city` VALUES ('6105', '渭南市', '61'); -INSERT INTO `base_city` VALUES ('6106', '延安市', '61'); -INSERT INTO `base_city` VALUES ('6107', '汉中市', '61'); -INSERT INTO `base_city` VALUES ('6108', '榆林市', '61'); -INSERT INTO `base_city` VALUES ('6109', '安康市', '61'); -INSERT INTO `base_city` VALUES ('6110', '商洛市', '61'); -INSERT INTO `base_city` VALUES ('6201', '兰州市', '62'); -INSERT INTO `base_city` VALUES ('6202', '嘉峪关市', '62'); -INSERT INTO `base_city` VALUES ('6203', '金昌市', '62'); -INSERT INTO `base_city` VALUES ('6204', '白银市', '62'); -INSERT INTO `base_city` VALUES ('6205', '天水市', '62'); -INSERT INTO `base_city` VALUES ('6206', '武威市', '62'); -INSERT INTO `base_city` VALUES ('6207', '张掖市', '62'); -INSERT INTO `base_city` VALUES ('6208', '平凉市', '62'); -INSERT INTO `base_city` VALUES ('6209', '酒泉市', '62'); -INSERT INTO `base_city` VALUES ('6210', '庆阳市', '62'); -INSERT INTO `base_city` VALUES ('6211', '定西市', '62'); -INSERT INTO `base_city` VALUES ('6212', '陇南市', '62'); -INSERT INTO `base_city` VALUES ('6229', '临夏回族自治州', '62'); -INSERT INTO `base_city` VALUES ('6230', '甘南藏族自治州', '62'); -INSERT INTO `base_city` VALUES ('6301', '西宁市', '63'); -INSERT INTO `base_city` VALUES ('6302', '海东市', '63'); -INSERT INTO `base_city` VALUES ('6322', '海北藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6323', '黄南藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6325', '海南藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6326', '果洛藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6327', '玉树藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6328', '海西蒙古族藏族自治州', '63'); -INSERT INTO `base_city` VALUES ('6401', '银川市', '64'); -INSERT INTO `base_city` VALUES ('6402', '石嘴山市', '64'); -INSERT INTO `base_city` VALUES ('6403', '吴忠市', '64'); -INSERT INTO `base_city` VALUES ('6404', '固原市', '64'); -INSERT INTO `base_city` VALUES ('6405', '中卫市', '64'); -INSERT INTO `base_city` VALUES ('6501', '乌鲁木齐市', '65'); -INSERT INTO `base_city` VALUES ('6502', '克拉玛依市', '65'); -INSERT INTO `base_city` VALUES ('6504', '吐鲁番市', '65'); -INSERT INTO `base_city` VALUES ('6505', '哈密市', '65'); -INSERT INTO `base_city` VALUES ('6523', '昌吉回族自治州', '65'); -INSERT INTO `base_city` VALUES ('6527', '博尔塔拉蒙古自治州', '65'); -INSERT INTO `base_city` VALUES ('6528', '巴音郭楞蒙古自治州', '65'); -INSERT INTO `base_city` VALUES ('6529', '阿克苏地区', '65'); -INSERT INTO `base_city` VALUES ('6530', '克孜勒苏柯尔克孜自治州', '65'); -INSERT INTO `base_city` VALUES ('6531', '喀什地区', '65'); -INSERT INTO `base_city` VALUES ('6532', '和田地区', '65'); -INSERT INTO `base_city` VALUES ('6540', '伊犁哈萨克自治州', '65'); -INSERT INTO `base_city` VALUES ('6542', '塔城地区', '65'); -INSERT INTO `base_city` VALUES ('6543', '阿勒泰地区', '65'); -INSERT INTO `base_city` VALUES ('6590', '自治区直辖县级行政区划', '65'); - --- ---------------------------- --- Table structure for base_dict --- ---------------------------- -DROP TABLE IF EXISTS `base_dict`; -CREATE TABLE `base_dict` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编码', - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', - `group_tag` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '分类标签', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dict --- ---------------------------- -INSERT INTO `base_dict` VALUES (1422929378374828033, 'Sex', '性别', b'1', '基础属性', '性别', 0, '2021-08-04 22:36:15', 1399985191002447872, '2022-05-11 19:48:40', 0, 6); -INSERT INTO `base_dict` VALUES (1425744045414772737, 'MenuType', '菜单类型', b'1', '系统属性', '菜单类型', 0, '2021-08-12 17:00:44', 1399985191002447872, '2022-05-11 19:48:44', 0, 4); -INSERT INTO `base_dict` VALUES (1430063572491411456, 'loginType', '字典类型', b'1', NULL, '字典类型', 1399985191002447872, '2021-08-24 15:05:00', 1399985191002447872, '2021-08-24 15:05:00', 1, 2); -INSERT INTO `base_dict` VALUES (1435829999592759296, 'UserStatusCode', '用户状态码', b'1', '系统属性', '用户状态码', 1399985191002447872, '2021-09-09 12:58:43', 1399985191002447872, '2022-05-11 19:48:56', 0, 2); -INSERT INTO `base_dict` VALUES (1435838066191458304, 'LogBusinessType', '业务操作类型', b'1', '系统属性', '操作日志记录的业务操作类型', 1399985191002447872, '2021-09-09 13:30:46', 1399985191002447872, '2022-05-11 19:49:00', 0, 2); -INSERT INTO `base_dict` VALUES (1438078864509317120, 'MailSecurityCode', '邮箱安全方式编码', b'1', '消息服务', '邮箱安全方式编码', 1399985191002447872, '2021-09-15 17:54:54', 1399985191002447872, '2022-05-11 19:49:06', 0, 2); -INSERT INTO `base_dict` VALUES (1439961232651034624, 'MessageTemplateCode', '消息模板类型', b'1', '消息服务', '消息模板类型', 1399985191002447872, '2021-09-20 22:34:46', 1399985191002447872, '2022-05-11 19:48:34', 0, 1); -INSERT INTO `base_dict` VALUES (1452836604783845376, 'SocialType', '三方系统类型', b'1', '系统属性', '三方系统类型', 1399985191002447872, '2021-10-26 11:16:54', 1399985191002447872, '2022-05-11 19:48:28', 0, 3); -INSERT INTO `base_dict` VALUES (1452843488735621120, 'ParamType', '参数类型', b'1', '系统属性', '参数类型', 1399985191002447872, '2021-10-26 11:44:15', 1399985191002447872, '2022-05-11 19:48:21', 0, 2); -INSERT INTO `base_dict` VALUES (1496024933900169216, 'Political', '政治面貌', b'1', '基础数据', '政治面貌', 1399985191002447872, '2022-02-22 15:31:54', 1399985191002447872, '2022-05-11 19:48:04', 0, 1); -INSERT INTO `base_dict` VALUES (1496722894707728384, 'PayChannel', '支付通道', b'1', '支付服务', '支付宝, 微信, 云闪付等', 1399985191002447872, '2022-02-24 13:45:21', 1399985191002447872, '2022-05-11 19:47:51', 0, 1); -INSERT INTO `base_dict` VALUES (1496723207565058048, 'PayWay', '支付方式', b'1', '支付服务', '扫码支付、Wap、App支付等', 1399985191002447872, '2022-02-24 13:46:35', 1399985191002447872, '2022-05-11 19:47:46', 0, 1); -INSERT INTO `base_dict` VALUES (1497140849954185216, 'PayStatus', '支付状态', b'1', '支付服务', '支付中,成功,失败等', 1399985191002447872, '2022-02-25 17:26:09', 1399985191002447872, '2022-05-11 19:47:40', 0, 2); -INSERT INTO `base_dict` VALUES (1501031423232937984, 'AsyncPayChannel', '异步支付通道', b'1', '支付服务', '如微信支付宝云闪付等第三方支付', 1399985191002447872, '2022-03-08 11:05:54', 1399985191002447872, '2022-05-11 19:47:37', 0, 1); -INSERT INTO `base_dict` VALUES (1502276739978473472, 'WalletStatus', '钱包状态', b'1', '支付服务', '钱包状态', 1399985191002447872, '2022-03-11 21:34:20', 1399985191002447872, '2022-05-11 19:47:33', 0, 2); -INSERT INTO `base_dict` VALUES (1502624342339448832, 'WalletOperation', '钱包日志操作类型', b'1', NULL, '', 1399985191002447872, '2022-03-12 20:35:35', 1399985191002447872, '2022-03-12 20:35:35', 1, 0); -INSERT INTO `base_dict` VALUES (1502624515799085056, 'WalletLogType', '钱包日志类型', b'1', '支付服务', '钱包日志类型', 1399985191002447872, '2022-03-12 20:36:17', 1399985191002447872, '2022-05-11 19:47:29', 0, 1); -INSERT INTO `base_dict` VALUES (1502624632392347648, 'WalletLogOperation', '钱包日志操作类型', b'1', '支付服务', '钱包日志操作类型', 1399985191002447872, '2022-03-12 20:36:44', 1399985191002447872, '2022-05-11 19:47:21', 0, 1); -INSERT INTO `base_dict` VALUES (1503340128037212160, 'VoucherStatus', '储值卡状态', b'1', '支付服务', '储值卡状态', 1399985191002447872, '2022-03-14 19:59:52', 1399985191002447872, '2022-05-11 19:47:12', 0, 1); -INSERT INTO `base_dict` VALUES (1524356168611188736, 'input', '手工输入', b'1', '商品服务', '', 1399985191002447872, '2022-05-11 19:50:06', 1399985191002447872, '2022-05-11 19:50:06', 1, 0); -INSERT INTO `base_dict` VALUES (1524356376518643712, 'GoodsParamType', '参数类型', b'1', '商品服务', '列表/手动输入', 1399985191002447872, '2022-05-11 19:50:56', 1399985191002447872, '2022-05-14 23:05:41', 0, 1); -INSERT INTO `base_dict` VALUES (1546757092010078208, 'PayNotifyProcess', '支付回调处理状态', b'1', '支付服务', '成功/忽略/失败', 1399985191002447872, '2022-07-12 15:23:23', 1399985191002447872, '2022-07-12 15:23:53', 0, 1); -INSERT INTO `base_dict` VALUES (1556996322223968256, 'WeChatMediaType', '微信媒体类型', b'1', '微信', '微信媒体类型', 1399985191002447872, '2022-08-09 21:30:25', 1399985191002447872, '2022-08-09 21:30:26', 0, 0); -INSERT INTO `base_dict` VALUES (1561003021674987520, 'SiteMessageReceive', '消息接收类型', b'1', '站内信', '站内信接收类型', 1399985191002447872, '2022-08-20 22:51:37', 1399985191002447872, '2022-08-20 22:51:37', 0, 0); -INSERT INTO `base_dict` VALUES (1561003189111603200, 'SiteMessageState', '消息发布状态', b'1', '站内信', '站内信消息发布状态', 1399985191002447872, '2022-08-20 22:52:17', 1399985191002447872, '2022-08-20 22:52:17', 0, 0); -INSERT INTO `base_dict` VALUES (1562696107020230656, 'BpmModelPublish', '工作流模型发布状态', b'1', '工作流', '工作流模型发布状态', 1399985191002447872, '2022-08-25 14:59:20', 1399985191002447872, '2022-08-25 15:27:55', 0, 1); -INSERT INTO `base_dict` VALUES (1563083969989423104, 'BpmTaskAssignType', '工作流处理人分配类型', b'1', '工作流', '流程任务处理人分配类型', 1399985191002447872, '2022-08-26 16:40:34', 1399985191002447872, '2022-08-26 16:40:53', 0, 1); -INSERT INTO `base_dict` VALUES (1567091641298386944, 'BpmTaskState', '流程任务状态', b'1', '工作流', '流程任务状态', 1399985191002447872, '2022-09-06 18:05:37', 1399985191002447872, '2022-09-06 18:05:47', 0, 1); -INSERT INTO `base_dict` VALUES (1570343684024705024, 'BpmTaskResult', '流程任务处理结果', b'1', '工作流', '流程任务处理结果', 1399985191002447872, '2022-09-15 17:28:05', 1414143554414059520, '2022-10-19 23:13:40', 0, 1); -INSERT INTO `base_dict` VALUES (1570764395519111168, 'BpmInstanceState', '流程实例状态', b'1', '工作流', '流程实例状态', 1399985191002447872, '2022-09-16 21:19:50', 1414143554414059520, '2022-10-19 23:13:33', 0, 1); -INSERT INTO `base_dict` VALUES (1589527951317389312, 'DataScopePerm', '数据范围权限', b'1', '系统属性', '数据范围权限', 1414143554414059520, '2022-11-07 15:59:30', 1414143554414059520, '2022-11-07 16:00:27', 0, 1); - --- ---------------------------- --- Table structure for base_dict_item --- ---------------------------- -DROP TABLE IF EXISTS `base_dict_item`; -CREATE TABLE `base_dict_item` ( - `id` bigint(20) NOT NULL, - `dict_id` bigint(20) NOT NULL COMMENT '字典id', - `dict_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典code', - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项code', - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项名称', - `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', - `sort_no` double(8, 2) NOT NULL COMMENT '排序', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_dictionary_id`(`dict_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典项' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dict_item --- ---------------------------- -INSERT INTO `base_dict_item` VALUES (1422931375807242241, 1422929378374828033, 'Sex', '1', '男', b'1', 0.00, '男性', 0, '2021-08-04 22:44:11', 0, '2021-08-04 22:44:11', 0, 2); -INSERT INTO `base_dict_item` VALUES (1425729455402401794, 1422929378374828033, 'Sex', '2', '女', b'1', 0.00, '女性', 0, '2021-08-12 16:02:46', 0, '2021-08-12 16:02:46', 0, 1); -INSERT INTO `base_dict_item` VALUES (1425744258544136194, 1425744045414772737, 'MenuType', '0', '顶级菜单', b'1', 0.00, '顶级菜单', 0, '2021-08-12 17:01:35', 0, '2021-08-12 17:01:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1425744436592340993, 1425744045414772737, 'MenuType', '1', '子菜单', b'1', 0.00, '子菜单', 0, '2021-08-12 17:02:17', 0, '2021-08-12 17:02:17', 0, 0); -INSERT INTO `base_dict_item` VALUES (1425744470582980610, 1425744045414772737, 'MenuType', '2', '按钮权限', b'1', 0.00, '按钮权限', 0, '2021-08-12 17:02:26', 0, '2021-08-12 17:02:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1430094707250413568, 1422929378374828033, 'Sex', '0', '未知', b'1', 0.00, '不确定性别', 1399985191002447872, '2021-08-24 17:08:43', 1399985191002447872, '2021-08-24 17:08:43', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830086406463488, 1435829999592759296, 'UserStatusCode', '1', '正常', b'1', 0.00, 'NORMAL', 1399985191002447872, '2021-09-09 12:59:04', 1399985191002447872, '2021-09-09 12:59:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435830141855162368, 1435829999592759296, 'UserStatusCode', '2', '锁定', b'1', 0.00, 'LOCK, 多次登录失败被锁定', 1399985191002447872, '2021-09-09 12:59:17', 1399985191002447872, '2021-09-09 12:59:17', 0, 1); -INSERT INTO `base_dict_item` VALUES (1435830260503633920, 1435829999592759296, 'UserStatusCode', '3', '封禁', b'1', 0.00, 'BAN', 1399985191002447872, '2021-09-09 12:59:45', 1399985191002447872, '2021-09-09 12:59:45', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838374749626368, 1435838066191458304, 'LogBusinessType', 'other', '其它', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:00', 1399985191002447872, '2021-09-09 13:32:00', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838414436130816, 1435838066191458304, 'LogBusinessType', 'insert', '新增', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:09', 1399985191002447872, '2021-09-09 13:32:09', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838467624099840, 1435838066191458304, 'LogBusinessType', 'update', '修改', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:22', 1399985191002447872, '2021-09-09 13:32:22', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838502755590144, 1435838066191458304, 'LogBusinessType', 'delete', '删除', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:30', 1399985191002447872, '2021-09-09 13:32:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838546934194176, 1435838066191458304, 'LogBusinessType', 'grant', '授权', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:41', 1399985191002447872, '2021-09-09 13:32:41', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838605537009664, 1435838066191458304, 'LogBusinessType', 'export', '导出', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:55', 1399985191002447872, '2021-09-09 13:32:55', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838705457913856, 1435838066191458304, 'LogBusinessType', 'import', '导入', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:19', 1399985191002447872, '2021-09-09 13:33:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838745861644288, 1435838066191458304, 'LogBusinessType', 'force', '强退', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:28', 1399985191002447872, '2021-09-09 13:33:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1435838786273763328, 1435838066191458304, 'LogBusinessType', 'clean', '清空数据', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:38', 1399985191002447872, '2021-09-09 13:33:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438079113630003200, 1438078864509317120, 'MailSecurityCode', '1', '普通方式', b'1', 0.00, 'SECURITY_TYPE_PLAIN', 1399985191002447872, '2021-09-15 17:55:54', 1399985191002447872, '2021-09-15 17:55:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438080323061755904, 1438078864509317120, 'MailSecurityCode', '2', 'TLS方式', b'1', 0.00, 'SECURITY_TYPE_TLS', 1399985191002447872, '2021-09-15 18:00:42', 1399985191002447872, '2021-09-15 18:00:42', 0, 0); -INSERT INTO `base_dict_item` VALUES (1438080372231581696, 1438078864509317120, 'MailSecurityCode', '3', 'SSL方式', b'1', 0.00, 'SECURITY_TYPE_SSL', 1399985191002447872, '2021-09-15 18:00:54', 1399985191002447872, '2021-09-15 18:00:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439961603914047488, 1439961232651034624, 'MessageTemplateCode', '5', '微信', b'1', -10.00, 'WECHAT', 1399985191002447872, '2021-09-20 22:36:14', 1399985191002447872, '2021-09-20 22:36:14', 0, 1); -INSERT INTO `base_dict_item` VALUES (1439961704321490944, 1439961232651034624, 'MessageTemplateCode', '4', 'Email', b'1', 0.00, 'EMAIL', 1399985191002447872, '2021-09-20 22:36:38', 1399985191002447872, '2021-09-20 22:36:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962132744478720, 1439961232651034624, 'MessageTemplateCode', '3', '短信', b'1', 0.00, 'SMS', 1399985191002447872, '2021-09-20 22:38:20', 1399985191002447872, '2021-09-20 22:38:20', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962205578567680, 1439961232651034624, 'MessageTemplateCode', '2', '钉钉机器人', b'1', 0.00, 'DING_TALK_ROBOT', 1399985191002447872, '2021-09-20 22:38:38', 1399985191002447872, '2021-09-20 22:38:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1439962267511660544, 1439961232651034624, 'MessageTemplateCode', '1', '钉钉', b'1', 0.00, 'DING_TALK', 1399985191002447872, '2021-09-20 22:38:52', 1399985191002447872, '2021-09-20 22:38:52', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452836696873984000, 1452836604783845376, 'SocialType', 'WeChat', '微信', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:17:16', 1399985191002447872, '2021-10-26 11:17:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452837435482529792, 1452836604783845376, 'SocialType', 'QQ', 'QQ', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:20:12', 1399985191002447872, '2021-10-26 11:20:12', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452837523030237184, 1452836604783845376, 'SocialType', 'DingTalk', '钉钉', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:20:33', 1399985191002447872, '2021-10-26 11:20:33', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452844537911406592, 1452843488735621120, 'ParamType', '1', '系统参数', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:48:25', 1399985191002447872, '2021-10-26 11:48:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1452844565031776256, 1452843488735621120, 'ParamType', '2', '用户参数', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:48:32', 1399985191002447872, '2021-10-26 11:48:32', 0, 2); -INSERT INTO `base_dict_item` VALUES (1496026946344005632, 1496024933900169216, 'Political', '1', '中共党员', b'1', 1.00, '', 1399985191002447872, '2022-02-22 15:39:54', 1399985191002447872, '2022-02-22 15:39:54', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027004560945152, 1496024933900169216, 'Political', '2', '中共预备党员', b'1', 2.00, '', 1399985191002447872, '2022-02-22 15:40:07', 1399985191002447872, '2022-02-22 15:40:07', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027039264616448, 1496024933900169216, 'Political', '3', '共青团员', b'1', 3.00, '', 1399985191002447872, '2022-02-22 15:40:16', 1399985191002447872, '2022-02-22 15:40:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027077550223360, 1496024933900169216, 'Political', '4', '民革党员', b'1', 4.00, '', 1399985191002447872, '2022-02-22 15:40:25', 1399985191002447872, '2022-02-22 15:40:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027123461074944, 1496024933900169216, 'Political', '5', '民盟盟员', b'1', 5.00, '', 1399985191002447872, '2022-02-22 15:40:36', 1399985191002447872, '2022-02-22 15:40:36', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027197566038016, 1496024933900169216, 'Political', '6', '民建会员', b'1', 6.00, '', 1399985191002447872, '2022-02-22 15:40:53', 1399985191002447872, '2022-02-22 15:40:53', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027234803068928, 1496024933900169216, 'Political', '7', '民进会员', b'1', 7.00, '', 1399985191002447872, '2022-02-22 15:41:02', 1399985191002447872, '2022-02-22 15:41:02', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027272941875200, 1496024933900169216, 'Political', '8', '农工党党员', b'1', 8.00, '', 1399985191002447872, '2022-02-22 15:41:11', 1399985191002447872, '2022-02-22 15:41:11', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027306634719232, 1496024933900169216, 'Political', '9', '致公党党员', b'1', 9.00, '', 1399985191002447872, '2022-02-22 15:41:19', 1399985191002447872, '2022-02-22 15:41:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027369796743168, 1496024933900169216, 'Political', '10', '九三学社社员', b'1', 10.00, '', 1399985191002447872, '2022-02-22 15:41:34', 1399985191002447872, '2022-02-22 15:41:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027408141070336, 1496024933900169216, 'Political', '11', '台盟盟员', b'1', 11.00, '', 1399985191002447872, '2022-02-22 15:41:44', 1399985191002447872, '2022-02-22 15:41:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027456849522688, 1496024933900169216, 'Political', '12', '无党派人士', b'1', 12.00, '', 1399985191002447872, '2022-02-22 15:41:55', 1399985191002447872, '2022-02-22 15:41:55', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496027516639326208, 1496024933900169216, 'Political', '13', '群众', b'1', 13.00, '', 1399985191002447872, '2022-02-22 15:42:09', 1399985191002447872, '2022-02-22 15:42:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780500696539136, 1496722894707728384, 'PayChannel', '1', '支付宝', b'1', 1.00, '', 1399985191002447872, '2022-02-24 17:34:15', 1399985191002447872, '2022-03-08 11:02:59', 0, 3); -INSERT INTO `base_dict_item` VALUES (1496780576818962432, 1496722894707728384, 'PayChannel', '2', '微信', b'1', 2.00, '', 1399985191002447872, '2022-02-24 17:34:33', 1399985191002447872, '2022-03-08 11:04:00', 0, 2); -INSERT INTO `base_dict_item` VALUES (1496780712492113920, 1496723207565058048, 'PayWay', '1', 'wap支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:05', 1399985191002447872, '2022-02-24 17:35:05', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780757647990784, 1496723207565058048, 'PayWay', '2', '应用支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:16', 1399985191002447872, '2022-02-24 17:35:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780799691694080, 1496723207565058048, 'PayWay', '3', 'web支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:26', 1399985191002447872, '2022-02-24 17:35:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780838451257344, 1496723207565058048, 'PayWay', '4', '二维码扫码支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:35', 1399985191002447872, '2022-02-24 17:35:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1496780876388737024, 1496723207565058048, 'PayWay', '5', '付款码支付', b'1', 0.00, '', 1399985191002447872, '2022-02-24 17:35:44', 1399985191002447872, '2022-02-24 17:35:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141630803566592, 1497140849954185216, 'PayStatus', '3', '支付取消', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:15', 1399985191002447872, '2022-02-25 17:29:15', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141652379066368, 1497140849954185216, 'PayStatus', '2', '失败', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:20', 1399985191002447872, '2022-02-25 17:29:20', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141681915355136, 1497140849954185216, 'PayStatus', '1', '成功', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:27', 1399985191002447872, '2022-02-25 17:29:27', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497141712743489536, 1497140849954185216, 'PayStatus', '0', '支付中', b'1', 0.00, '', 1399985191002447872, '2022-02-25 17:29:35', 1399985191002447872, '2022-02-25 17:29:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1497506810439892992, 1497140849954185216, 'PayStatus', '4', '部分退款', b'1', 1.00, '部分退款', 1399985191002447872, '2022-02-26 17:40:21', 1399985191002447872, '2022-03-04 21:22:46', 0, 7); -INSERT INTO `base_dict_item` VALUES (1499367587857694720, 1497140849954185216, 'PayStatus', '5', '已退款', b'1', 2.00, '完全退款', 1399985191002447872, '2022-03-03 20:54:25', 1399985191002447872, '2022-03-04 21:22:49', 0, 3); -INSERT INTO `base_dict_item` VALUES (1501030031432847360, 1496722894707728384, 'PayChannel', '3', '云闪付', b'1', 3.00, '', 1399985191002447872, '2022-03-08 11:00:22', 1399985191002447872, '2022-03-08 11:04:07', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030073489133568, 1496722894707728384, 'PayChannel', '4', '现金', b'1', 4.00, '', 1399985191002447872, '2022-03-08 11:00:32', 1399985191002447872, '2022-03-08 11:04:10', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501030108314439680, 1496722894707728384, 'PayChannel', '5', '钱包', b'1', 5.00, '', 1399985191002447872, '2022-03-08 11:00:40', 1399985191002447872, '2022-03-08 11:04:14', 0, 2); -INSERT INTO `base_dict_item` VALUES (1501031490513768448, 1501031423232937984, 'AsyncPayChannel', '3', '云闪付', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:10', 1399985191002447872, '2022-03-08 11:06:10', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031518208757760, 1501031423232937984, 'AsyncPayChannel', '2', '微信', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:16', 1399985191002447872, '2022-03-08 11:06:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1501031544360243200, 1501031423232937984, 'AsyncPayChannel', '1', '支付宝', b'1', 0.00, '', 1399985191002447872, '2022-03-08 11:06:23', 1399985191002447872, '2022-03-08 11:06:23', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276841057005568, 1502276739978473472, 'WalletStatus', '2', '禁用', b'1', 0.00, '', 1399985191002447872, '2022-03-11 21:34:45', 1399985191002447872, '2022-03-11 21:34:45', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502276862108217344, 1502276739978473472, 'WalletStatus', '1', '正常', b'1', 0.00, '', 1399985191002447872, '2022-03-11 21:34:50', 1399985191002447872, '2022-03-11 21:34:50', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624716257456128, 1502624515799085056, 'WalletLogType', '1', '开通', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:37:04', 1399985191002447872, '2022-03-12 20:37:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624931978899456, 1502624515799085056, 'WalletLogType', '2', '主动充值', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:37:56', 1399985191002447872, '2022-03-12 20:37:56', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502624956209393664, 1502624515799085056, 'WalletLogType', '3', '自动充值', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:02', 1399985191002447872, '2022-03-12 20:38:02', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625014719934464, 1502624515799085056, 'WalletLogType', '4', '余额变动', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:16', 1399985191002447872, '2022-03-12 20:38:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625053097816064, 1502624515799085056, 'WalletLogType', '5', '支付', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:25', 1399985191002447872, '2022-03-12 20:38:25', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625091639275520, 1502624515799085056, 'WalletLogType', '6', '系统扣除余额', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:34', 1399985191002447872, '2022-03-12 20:38:34', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625123725701120, 1502624515799085056, 'WalletLogType', '7', '退款', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:38:42', 1399985191002447872, '2022-03-12 20:38:42', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625783145787392, 1502624632392347648, 'WalletLogOperation', '1', '系统操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:19', 1399985191002447872, '2022-03-12 20:41:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625814837948416, 1502624632392347648, 'WalletLogOperation', '2', '管理员操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:26', 1399985191002447872, '2022-03-12 20:41:26', 0, 0); -INSERT INTO `base_dict_item` VALUES (1502625850355314688, 1502624632392347648, 'WalletLogOperation', '3', '用户操作', b'1', 0.00, '', 1399985191002447872, '2022-03-12 20:41:35', 1399985191002447872, '2022-03-12 20:41:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340241493135360, 1503340128037212160, 'VoucherStatus', '1', '启用', b'1', 0.00, '', 1399985191002447872, '2022-03-14 20:00:19', 1399985191002447872, '2022-03-14 20:00:19', 0, 0); -INSERT INTO `base_dict_item` VALUES (1503340326645895168, 1503340128037212160, 'VoucherStatus', '2', '停用', b'1', 0.00, '', 1399985191002447872, '2022-03-14 20:00:39', 1399985191002447872, '2022-03-14 20:00:39', 0, 0); -INSERT INTO `base_dict_item` VALUES (1505112357976612864, 1496722894707728384, 'PayChannel', '6', '储值卡', b'1', 0.00, '', 1399985191002447872, '2022-03-19 17:22:04', 1399985191002447872, '2022-03-19 17:22:04', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356452720758784, 1524356376518643712, 'GoodsParamType', 'input', '手工录入', b'1', 0.00, '', 1399985191002447872, '2022-05-11 19:51:14', 1399985191002447872, '2022-05-11 19:51:14', 0, 0); -INSERT INTO `base_dict_item` VALUES (1524356510157557760, 1524356376518643712, 'GoodsParamType', 'select', '列表选择', b'1', 0.00, '', 1399985191002447872, '2022-05-11 19:51:28', 1399985191002447872, '2022-05-11 19:51:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1546757293592522752, 1546757092010078208, 'PayNotifyProcess', '0', '失败', b'1', 0.00, '', 1399985191002447872, '2022-07-12 15:24:11', 1399985191002447872, '2022-07-12 15:24:11', 0, 0); -INSERT INTO `base_dict_item` VALUES (1546757327901929472, 1546757092010078208, 'PayNotifyProcess', '1', '成功', b'1', -1.00, '', 1399985191002447872, '2022-07-12 15:24:19', 1399985191002447872, '2022-07-12 15:31:38', 0, 2); -INSERT INTO `base_dict_item` VALUES (1546757375637303296, 1546757092010078208, 'PayNotifyProcess', '2', '忽略', b'1', 0.00, '', 1399985191002447872, '2022-07-12 15:24:30', 1399985191002447872, '2022-07-12 15:24:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996422006460416, 1556996322223968256, 'WeChatMediaType', 'news', '新闻', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:30:49', 1399985191002447872, '2022-08-09 21:30:49', 1, 0); -INSERT INTO `base_dict_item` VALUES (1556996472661069824, 1556996322223968256, 'WeChatMediaType', 'voice', '语音', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:01', 1399985191002447872, '2022-08-09 21:31:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996501417218048, 1556996322223968256, 'WeChatMediaType', 'image', '图片', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:08', 1399985191002447872, '2022-08-09 21:31:08', 0, 0); -INSERT INTO `base_dict_item` VALUES (1556996529565192192, 1556996322223968256, 'WeChatMediaType', 'video', '视频', b'1', 0.00, '', 1399985191002447872, '2022-08-09 21:31:15', 1399985191002447872, '2022-08-09 21:31:15', 0, 0); -INSERT INTO `base_dict_item` VALUES (1561003235710320640, 1561003189111603200, 'SiteMessageState', 'user', '指定用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:52:28', 1399985191002447872, '2022-08-20 22:52:28', 1, 0); -INSERT INTO `base_dict_item` VALUES (1561003279322693632, 1561003189111603200, 'SiteMessageState', 'all', '全部用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:52:38', 1399985191002447872, '2022-08-20 22:52:39', 1, 0); -INSERT INTO `base_dict_item` VALUES (1561003368762032128, 1561003021674987520, 'SiteMessageReceive', 'user', '指定用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:00', 1399985191002447872, '2022-08-20 22:53:00', 0, 0); -INSERT INTO `base_dict_item` VALUES (1561003399778910208, 1561003021674987520, 'SiteMessageReceive', 'all', '全部用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:07', 1399985191002447872, '2022-08-20 22:53:24', 0, 1); -INSERT INTO `base_dict_item` VALUES (1561003539772194816, 1561003189111603200, 'SiteMessageState', 'sent', '已发送', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:41', 1399985191002447872, '2022-08-20 22:53:41', 0, 0); -INSERT INTO `base_dict_item` VALUES (1561003575608328192, 1561003189111603200, 'SiteMessageState', 'cancel', '撤销', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:49', 1399985191002447872, '2022-08-20 22:53:49', 0, 0); -INSERT INTO `base_dict_item` VALUES (1561245469535080448, 1561003189111603200, 'SiteMessageState', 'draft', '草稿', b'1', 0.00, '', 1399985191002447872, '2022-08-21 14:55:01', 1399985191002447872, '2022-08-21 14:55:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1562696390043475968, 1562696107020230656, 'BpmModelPublish', 'published', '已发布', b'1', 0.00, '', 1399985191002447872, '2022-08-25 15:00:28', 1399985191002447872, '2022-08-25 15:00:28', 0, 0); -INSERT INTO `base_dict_item` VALUES (1562696420561231872, 1562696107020230656, 'BpmModelPublish', 'unpublished', '未发布', b'1', 0.00, '未上传xml文档', 1399985191002447872, '2022-08-25 15:00:35', 1399985191002447872, '2022-08-25 15:28:09', 0, 1); -INSERT INTO `base_dict_item` VALUES (1562703450588028928, 1562696107020230656, 'BpmModelPublish', 'unpublishedXml', '未发布(已上传BPMN)', b'1', 0.00, '有xml文档', 1399985191002447872, '2022-08-25 15:28:31', 1399985191002447872, '2022-08-25 15:34:45', 0, 1); -INSERT INTO `base_dict_item` VALUES (1563087300157747200, 1563083969989423104, 'BpmTaskAssignType', 'user', '用户', b'1', 0.00, '', 1399985191002447872, '2022-08-26 16:53:48', 1399985191002447872, '2022-09-06 22:50:15', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567091825981980672, 1567091641298386944, 'BpmTaskState', 'running', '处理中', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:21', 1399985191002447872, '2022-09-06 18:06:21', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567091863017684992, 1567091641298386944, 'BpmTaskState', 'pass', '通过', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:30', 1399985191002447872, '2022-09-06 18:06:30', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567091902414782464, 1567091641298386944, 'BpmTaskState', 'reject', '驳回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:06:39', 1399985191002447872, '2022-09-06 18:06:51', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567091993569591296, 1567091641298386944, 'BpmTaskState', 'back', '退回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:01', 1399985191002447872, '2022-09-06 18:07:01', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567092037261656064, 1567091641298386944, 'BpmTaskState', 'retrieve', '取回', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:12', 1399985191002447872, '2022-09-06 18:07:22', 0, 1); -INSERT INTO `base_dict_item` VALUES (1567092124226355200, 1567091641298386944, 'BpmTaskState', 'skip', '跳过', b'1', 0.00, '', 1399985191002447872, '2022-09-06 18:07:32', 1399985191002447872, '2022-09-06 18:07:32', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163310103564288, 1563083969989423104, 'BpmTaskAssignType', 'userGroup', '用户组', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:24', 1399985191002447872, '2022-09-06 22:50:24', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163343288897536, 1563083969989423104, 'BpmTaskAssignType', 'role', '角色', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:32', 1399985191002447872, '2022-09-06 22:50:32', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163380693700608, 1563083969989423104, 'BpmTaskAssignType', 'deptMember', '部门成员', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:41', 1399985191002447872, '2022-09-06 22:50:41', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567163412960481280, 1563083969989423104, 'BpmTaskAssignType', 'deptLeader', '部门的负责人', b'1', 0.00, '', 1399985191002447872, '2022-09-06 22:50:49', 1399985191002447872, '2022-09-06 22:50:49', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567175558888923136, 1563083969989423104, 'BpmTaskAssignType', 'roleGroup', '角色组', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:39:05', 1399985191002447872, '2022-09-06 23:39:05', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567178994242002944, 1563083969989423104, 'BpmTaskAssignType', 'sponsor', '发起人', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:52:44', 1399985191002447872, '2022-09-06 23:52:44', 0, 0); -INSERT INTO `base_dict_item` VALUES (1567179143576002560, 1563083969989423104, 'BpmTaskAssignType', 'select', '用户手动选择', b'1', 0.00, '', 1399985191002447872, '2022-09-06 23:53:19', 1399985191002447872, '2022-09-07 00:01:22', 0, 1); -INSERT INTO `base_dict_item` VALUES (1570343731634249728, 1570343684024705024, 'BpmTaskResult', 'pass', '通过', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:16', 1399985191002447872, '2022-09-15 17:28:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343761636106240, 1570343684024705024, 'BpmTaskResult', 'notPass', '不通过', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:23', 1399985191002447872, '2022-09-15 17:28:23', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343788056027136, 1570343684024705024, 'BpmTaskResult', 'abstain', '弃权', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:29', 1399985191002447872, '2022-09-15 17:28:29', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343826018672640, 1570343684024705024, 'BpmTaskResult', 'reject', '驳回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:38', 1399985191002447872, '2022-09-15 17:28:38', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343873737269248, 1570343684024705024, 'BpmTaskResult', 'back', '退回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:50', 1399985191002447872, '2022-09-15 17:28:50', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570343913918701568, 1570343684024705024, 'BpmTaskResult', 'retrieve', '取回', b'1', 0.00, '', 1399985191002447872, '2022-09-15 17:28:59', 1399985191002447872, '2022-09-15 17:28:59', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570685888076120064, 1570343684024705024, 'BpmTaskResult', 'autoFinish', '自动完成', b'1', 0.00, '', 1399985191002447872, '2022-09-16 16:07:52', 1399985191002447872, '2022-09-16 16:08:02', 0, 1); -INSERT INTO `base_dict_item` VALUES (1570764765255397376, 1570764395519111168, 'BpmInstanceState', 'running', '运行中', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:18', 1399985191002447872, '2022-09-16 21:21:18', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570764802047832064, 1570764395519111168, 'BpmInstanceState', 'finish', '已完成', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:27', 1399985191002447872, '2022-09-16 21:21:27', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570764836319490048, 1570764395519111168, 'BpmInstanceState', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 21:21:35', 1399985191002447872, '2022-09-16 21:21:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570784215744585728, 1570343684024705024, 'BpmTaskResult', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 22:38:35', 1399985191002447872, '2022-09-16 22:38:35', 0, 0); -INSERT INTO `base_dict_item` VALUES (1570784331511570432, 1567091641298386944, 'BpmTaskState', 'cancel', '取消', b'1', 0.00, '', 1399985191002447872, '2022-09-16 22:39:03', 1399985191002447872, '2022-09-16 22:39:03', 0, 0); -INSERT INTO `base_dict_item` VALUES (1573665422392098816, 1439961232651034624, 'MessageTemplateCode', '0', '站内信', b'1', -11.00, 'SITE', 1399985191002447872, '2022-09-24 21:27:29', 1399985191002447872, '2022-09-24 21:27:39', 0, 1); -INSERT INTO `base_dict_item` VALUES (1589528254477488128, 1589527951317389312, 'DataScopePerm', '7', '所在及下级部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:43', 1414143554414059520, '2022-11-07 16:00:43', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528283539820544, 1589527951317389312, 'DataScopePerm', '6', '所在部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:49', 1414143554414059520, '2022-11-07 16:00:49', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528315672383488, 1589527951317389312, 'DataScopePerm', '5', '全部数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:57', 1414143554414059520, '2022-11-07 16:00:57', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528340267782144, 1589527951317389312, 'DataScopePerm', '4', '部门和用户范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:03', 1414143554414059520, '2022-11-07 16:01:03', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528367228768256, 1589527951317389312, 'DataScopePerm', '3', '部门范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:09', 1414143554414059520, '2022-11-07 16:01:09', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528393292173312, 1589527951317389312, 'DataScopePerm', '2', '用户范围', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:16', 1414143554414059520, '2022-11-07 16:01:16', 0, 0); -INSERT INTO `base_dict_item` VALUES (1589528423956729856, 1589527951317389312, 'DataScopePerm', '1', '自身数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:23', 1414143554414059520, '2022-11-07 16:01:23', 0, 0); - --- ---------------------------- --- Table structure for base_dynamic_data_source --- ---------------------------- -DROP TABLE IF EXISTS `base_dynamic_data_source`; -CREATE TABLE `base_dynamic_data_source` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源名称', - `database_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库类型', - `db_driver` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '驱动类', - `db_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库地址', - `db_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库名称', - `db_username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', - `db_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态数据源管理' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dynamic_data_source --- ---------------------------- - --- ---------------------------- --- Table structure for base_dynamic_form --- ---------------------------- -DROP TABLE IF EXISTS `base_dynamic_form`; -CREATE TABLE `base_dynamic_form` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单键名', - `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '表单内容', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态表单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_dynamic_form --- ---------------------------- -INSERT INTO `base_dynamic_form` VALUES (1552656018381422592, '测试表单', 'test', '{\"list\":[{\"type\":\"input\",\"label\":\"输入框\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"aa\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"文本框\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"bb\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}],\"config\":{\"layout\":\"horizontal\",\"labelCol\":{\"xs\":4,\"sm\":4,\"md\":4,\"lg\":4,\"xl\":4,\"xxl\":4},\"labelWidth\":100,\"labelLayout\":\"flex\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1399985191002447872, '2022-07-29 09:55:22', 0, 7); -INSERT INTO `base_dynamic_form` VALUES (1552656018381422593, '测试表单1', 'test1', '{\"list\":[{\"type\":\"input\",\"label\":\"申请人\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"apply_by\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"input\",\"label\":\"请假天数\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":false,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"leave_days\",\"key\":\"input_1662106166142\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"备注\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"remark\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"switch\",\"label\":\"开关\",\"options\":{\"defaultValue\":false,\"hidden\":false,\"disabled\":false},\"model\":\"switch_1662108221389\",\"key\":\"switch_1662108221389\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"table\",\"label\":\"表格布局\",\"trs\":[{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]},{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[{\"type\":\"editor\",\"label\":\"富文本\",\"icon\":\"icon-LC_icon_edit_line_1\",\"list\":[],\"options\":{\"height\":300,\"placeholder\":\"请输入\",\"defaultValue\":\"\",\"chinesization\":true,\"hidden\":false,\"disabled\":false,\"showLabel\":false,\"width\":\"100%\"},\"model\":\"editor_1662106288134\",\"key\":\"editor_1662106288134\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]}],\"options\":{\"width\":\"100%\",\"bordered\":true,\"bright\":false,\"small\":true,\"customStyle\":\"\"},\"key\":\"table_1662106283652\"}],\"config\":{\"layout\":\"vertical\",\"labelCol\":{\"xs\":6,\"sm\":6,\"md\":6,\"lg\":6,\"xl\":6,\"xxl\":6},\"labelWidth\":100,\"labelLayout\":\"Grid\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1414143554414059520, '2022-09-02 16:44:01', 0, 12); - --- ---------------------------- --- Table structure for base_key_value --- ---------------------------- -DROP TABLE IF EXISTS `base_key_value`; -CREATE TABLE `base_key_value` ( - `id` bigint(20) NOT NULL, - `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', - `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'kv存储' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_key_value --- ---------------------------- - --- ---------------------------- --- Table structure for base_param --- ---------------------------- -DROP TABLE IF EXISTS `base_param`; -CREATE TABLE `base_param` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数名称', - `param_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', - `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', - `type` int(4) NULL DEFAULT NULL COMMENT '参数类型', - `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', - `internal` bit(1) NOT NULL COMMENT '内置参数', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统参数配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_param --- ---------------------------- -INSERT INTO `base_param` VALUES (1452842684284891136, '测试', 'test.v1', '123', 1, b'1', b'0', NULL, 1399985191002447872, '2021-10-26 11:41:03', 1399985191002447872, '2021-10-26 11:41:03', 0, 0); -INSERT INTO `base_param` VALUES (1500338438182789120, '结算台聚合支付请求地址', 'CashierAggregateUrl', 'http://127.0.0.1/api/', 1, b'1', b'1', '', 1399985191002447872, '2022-03-06 13:12:13', 1399985191002447872, '2022-05-01 15:03:03', 0, 3); -INSERT INTO `base_param` VALUES (1520668030248361984, '文件服务器地址', 'FileServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-01 15:34:46', 1399985191002447872, '2022-05-19 12:53:21', 0, 5); -INSERT INTO `base_param` VALUES (1529281530059161600, 'websocket服务器地址', 'WebsocketServerUrl', 'ws://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-25 10:01:44', 1399985191002447872, '2022-05-25 10:01:44', 0, 0); -INSERT INTO `base_param` VALUES (1545765299880448000, '服务器地址', 'ServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-07-09 21:42:21', 1399985191002447872, '2022-07-09 21:42:21', 0, 0); -INSERT INTO `base_param` VALUES (1547511252795912192, '微信jsapi支付回调服务地址', 'JsapiRedirectUrl', 'http://127.0.0.1/api/', 1, b'1', b'1', '', 1414143554414059520, '2022-07-14 17:20:09', 1414143554414059520, '2022-07-14 17:20:09', 0, 0); - --- ---------------------------- --- Table structure for base_province --- ---------------------------- -DROP TABLE IF EXISTS `base_province`; -CREATE TABLE `base_province` ( - `code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省份编码', - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '省份名称', - PRIMARY KEY (`code`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '省份表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_province --- ---------------------------- -INSERT INTO `base_province` VALUES ('11', '北京市'); -INSERT INTO `base_province` VALUES ('12', '天津市'); -INSERT INTO `base_province` VALUES ('13', '河北省'); -INSERT INTO `base_province` VALUES ('14', '山西省'); -INSERT INTO `base_province` VALUES ('15', '内蒙古自治区'); -INSERT INTO `base_province` VALUES ('21', '辽宁省'); -INSERT INTO `base_province` VALUES ('22', '吉林省'); -INSERT INTO `base_province` VALUES ('23', '黑龙江省'); -INSERT INTO `base_province` VALUES ('31', '上海市'); -INSERT INTO `base_province` VALUES ('32', '江苏省'); -INSERT INTO `base_province` VALUES ('33', '浙江省'); -INSERT INTO `base_province` VALUES ('34', '安徽省'); -INSERT INTO `base_province` VALUES ('35', '福建省'); -INSERT INTO `base_province` VALUES ('36', '江西省'); -INSERT INTO `base_province` VALUES ('37', '山东省'); -INSERT INTO `base_province` VALUES ('41', '河南省'); -INSERT INTO `base_province` VALUES ('42', '湖北省'); -INSERT INTO `base_province` VALUES ('43', '湖南省'); -INSERT INTO `base_province` VALUES ('44', '广东省'); -INSERT INTO `base_province` VALUES ('45', '广西壮族自治区'); -INSERT INTO `base_province` VALUES ('46', '海南省'); -INSERT INTO `base_province` VALUES ('50', '重庆市'); -INSERT INTO `base_province` VALUES ('51', '四川省'); -INSERT INTO `base_province` VALUES ('52', '贵州省'); -INSERT INTO `base_province` VALUES ('53', '云南省'); -INSERT INTO `base_province` VALUES ('54', '西藏自治区'); -INSERT INTO `base_province` VALUES ('61', '陕西省'); -INSERT INTO `base_province` VALUES ('62', '甘肃省'); -INSERT INTO `base_province` VALUES ('63', '青海省'); -INSERT INTO `base_province` VALUES ('64', '宁夏回族自治区'); -INSERT INTO `base_province` VALUES ('65', '新疆维吾尔自治区'); - --- ---------------------------- --- Table structure for base_street --- ---------------------------- -DROP TABLE IF EXISTS `base_street`; -CREATE TABLE `base_street` ( - `code` char(9) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码', - `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '街道名称', - `area_code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '县区编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_area_code`(`area_code`) USING BTREE COMMENT '县区' -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '街道表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_street --- ---------------------------- - --- ---------------------------- --- Table structure for base_village --- ---------------------------- -DROP TABLE IF EXISTS `base_village`; -CREATE TABLE `base_village` ( - `code` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '编码', - `name` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名称', - `street_code` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '社区/乡镇编码', - PRIMARY KEY (`code`) USING BTREE, - INDEX `inx_street_code`(`street_code`) USING BTREE COMMENT '所属街道索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '村庄/社区' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of base_village --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_instance --- ---------------------------- -DROP TABLE IF EXISTS `bpm_instance`; -CREATE TABLE `bpm_instance` ( - `id` bigint(20) NOT NULL, - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程标题', - `model_id` bigint(20) NULL DEFAULT NULL COMMENT '模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义ID', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程实例的状态', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程实例扩展' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_instance --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_model --- ---------------------------- -DROP TABLE IF EXISTS `bpm_model`; -CREATE TABLE `bpm_model` ( - `id` bigint(20) NOT NULL, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `model_type` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程类型', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发布状态', - `enable` bit(1) NULL DEFAULT NULL COMMENT '启用状态', - `deploy_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '部署id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称', - `def_remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程备注', - `main_process` bit(1) NULL DEFAULT NULL COMMENT '是否主流程', - `process_version` int(8) NULL DEFAULT NULL COMMENT '流程版本号', - `model_editor_xml` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '流程xml', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程模型' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_model --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_model_node --- ---------------------------- -DROP TABLE IF EXISTS `bpm_model_node`; -CREATE TABLE `bpm_model_node` ( - `id` bigint(20) NOT NULL, - `model_id` bigint(20) NOT NULL COMMENT '关联模型id', - `def_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义id', - `def_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程key', - `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `multi` bit(1) NOT NULL COMMENT '是否多任务', - `sequential` bit(1) NULL DEFAULT NULL COMMENT '是否串签', - `or_sign` bit(1) NULL DEFAULT NULL COMMENT '是否是或签', - `ratio_pass` bit(1) NULL DEFAULT NULL COMMENT '是否比例通过', - `pass_ratio` int(3) NULL DEFAULT NULL COMMENT '通过比例', - `reject` bit(1) NOT NULL COMMENT '是否允许驳回', - `back` bit(1) NOT NULL COMMENT '是否允许回退', - `retrieve` bit(1) NOT NULL COMMENT '是否允许取回', - `skip` bit(1) NOT NULL COMMENT '是否跳过当前节点', - `form_id` bigint(20) NULL DEFAULT NULL COMMENT '关联表单', - `assign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分配类型', - `assign_raw` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的原始数据', - `assign_show` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '分配的数据的展示', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '模型任务节点配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_model_node --- ---------------------------- - --- ---------------------------- --- Table structure for bpm_task --- ---------------------------- -DROP TABLE IF EXISTS `bpm_task`; -CREATE TABLE `bpm_task` ( - `id` bigint(20) NOT NULL, - `task_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '任务ID', - `execution_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务执行 ID', - `multi_id` bigint(20) NULL DEFAULT NULL COMMENT '多实例关联id', - `instance_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '流程实例的id', - `instance_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程名称(业务标题)', - `def_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流程定义名称', - `node_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点id', - `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '任务节点名称', - `state` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理状态', - `result` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理结果', - `reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理意见', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '当前处理人', - `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '当前处理人', - `start_user_id` bigint(20) NULL DEFAULT NULL COMMENT '发起人', - `start_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发起人名称', - `form_variables` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '提交的表单值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', - `version` int(8) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '流程任务扩展' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of bpm_task --- ---------------------------- - --- ---------------------------- --- Table structure for common_sequence_range --- ---------------------------- -DROP TABLE IF EXISTS `common_sequence_range`; -CREATE TABLE `common_sequence_range` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `range_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '区间key', - `range_value` bigint(20) NOT NULL COMMENT '区间开始值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '序列生成器队列区间管理' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of common_sequence_range --- ---------------------------- -INSERT INTO `common_sequence_range` VALUES (1470679520373862400, 'Sequence:cs', 2006, 0, '2021-12-14 16:58:16', 0, '2021-12-14 16:58:16', 6, 0); -INSERT INTO `common_sequence_range` VALUES (1470679955230908416, 'cs', 2020, 0, '2021-12-14 17:00:00', 0, '2021-12-14 17:00:00', 13, 0); - --- ---------------------------- --- Table structure for demo_data_encrypt --- ---------------------------- -DROP TABLE IF EXISTS `demo_data_encrypt`; -CREATE TABLE `demo_data_encrypt` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据加密解密演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_encrypt --- ---------------------------- -INSERT INTO `demo_data_encrypt` VALUES (1506922411881103360, '测试加密效果', 'eI2RIrRLG+QUna3jMK+kejyJTTKdPFhaYWP4EhktJ2lkGTEsIxZesetNTzcqUA934ZN/OUdw4aj4t5Q+u1sH7A==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); -INSERT INTO `demo_data_encrypt` VALUES (1506943412354408448, '测试下', 'Dgv5OSNiXuknceoZzeOUOQ==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); - --- ---------------------------- --- Table structure for demo_data_perm --- ---------------------------- -DROP TABLE IF EXISTS `demo_data_perm`; -CREATE TABLE `demo_data_perm` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者名称', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据权限演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_perm --- ---------------------------- -INSERT INTO `demo_data_perm` VALUES (1495969849707220992, '33', 'xxm', '444', 1399985191002447872, '2022-02-22 11:53:01', 1399985191002447872, '2022-02-22 11:53:01', 0, 0); -INSERT INTO `demo_data_perm` VALUES (1506921683460521984, '测试', '小小明', NULL, 1399985191002447872, '2022-03-24 17:11:41', 1399985191002447872, '2022-03-24 17:11:41', 0, 0); -INSERT INTO `demo_data_perm` VALUES (1531547191561072640, '测试', '测试', '123', 1435967884114194432, '2022-05-31 16:04:40', 1435967884114194432, '2022-05-31 16:04:40', 0, 0); - --- ---------------------------- --- Table structure for demo_data_sensitive --- ---------------------------- -DROP TABLE IF EXISTS `demo_data_sensitive`; -CREATE TABLE `demo_data_sensitive` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `chinese_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '中文名字', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', - `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号', - `mobile_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', - `car_license` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '车牌号', - `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮件', - `other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其他', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据脱敏演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_data_sensitive --- ---------------------------- -INSERT INTO `demo_data_sensitive` VALUES (1506942377435037696, '刘向东', '123456', '372921199302021125', '13324591123', '鲁A8S8866', 'bootx123@outlook.com', '测试测试测试测试测试测试测试问题', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:36:09', 2, 0); -INSERT INTO `demo_data_sensitive` VALUES (1506943326094352384, '成是非', '99885511', '101278112512107721', '18855446622', '汉S123456', 'chengshifei@foxmail.com', '这个就是就是就是就是就是就是这样的', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:35:00', 1, 0); - --- ---------------------------- --- Table structure for demo_super_query --- ---------------------------- -DROP TABLE IF EXISTS `demo_super_query`; -CREATE TABLE `demo_super_query` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `age` int(5) NULL DEFAULT NULL COMMENT '年龄', - `vip` bit(1) NULL DEFAULT NULL COMMENT '是否vip', - `birthday` date NULL DEFAULT NULL COMMENT '生日', - `work_time` time(0) NULL DEFAULT NULL COMMENT '上班时间', - `registration_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', - `political` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '政治面貌', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '超级查询演示' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of demo_super_query --- ---------------------------- -INSERT INTO `demo_super_query` VALUES (1496046463434567680, '小小明', 18, b'1', '1998-01-23', '08:30:00', '2022-02-22 16:57:27', '13', '这是备注', 1399985191002447872, '2022-02-22 16:57:27', 1399985191002447872, '2022-02-22 17:03:34', 1, 0); -INSERT INTO `demo_super_query` VALUES (1496372341213433856, '关羽', 52, b'1', '2000-02-23', '14:31:36', '2022-02-23 14:32:22', '1', '', 1399985191002447872, '2022-02-23 14:32:22', 1399985191002447872, '2022-02-23 14:32:22', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496372489909899264, '张飞', 54, b'0', '1996-02-11', '08:00:00', '2022-02-23 14:32:58', '7', '备注', 1399985191002447872, '2022-02-23 14:32:58', 1399985191002447872, '2022-02-23 14:32:58', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496372766427779072, '梁冀', 38, b'1', '1958-02-08', '08:30:00', '2022-02-23 14:34:03', '1', '', 1399985191002447872, '2022-02-23 14:34:03', 1399985191002447872, '2022-02-23 14:34:03', 0, 0); -INSERT INTO `demo_super_query` VALUES (1496373512871284736, '刘备', 108, b'0', '1993-11-12', '09:30:10', '2022-02-23 14:37:01', '2', '刘羽禅的粑粑', 1399985191002447872, '2022-02-23 14:37:01', 1399985191002447872, '2022-02-23 14:37:01', 0, 0); - --- ---------------------------- --- Table structure for iam_client --- ---------------------------- -DROP TABLE IF EXISTS `iam_client`; -CREATE TABLE `iam_client` ( - `id` bigint(20) NOT NULL, - `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `enable` bit(1) NOT NULL COMMENT '是否可用', - `login_type_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联登录方式\r\n', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '认证终端' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_client --- ---------------------------- -INSERT INTO `iam_client` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-07-02 14:55:11', 4, 0); -INSERT INTO `iam_client` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-06-29 18:31:45', 1, 0); -INSERT INTO `iam_client` VALUES (1580487061605175296, 'adminv3', 'pc管理端(vue3版)', b'0', b'1', '1430430071299207168,1430478946919653376,1435138582839009280,1542091599907115008,1542804450312122368,1543126042909016064', 'vue3版本', 1399985191002447872, '2022-10-13 17:14:14', 1399985191002447872, '2022-10-13 17:14:25', 1, 0); -INSERT INTO `iam_client` VALUES (1626840094767714304, 'GoView', '可视化平台', b'0', b'1', '1430430071299207168', '', 1414143554414059520, '2023-02-18 15:04:38', 1414143554414059520, '2023-02-18 15:04:38', 0, 0); - --- ---------------------------- --- Table structure for iam_data_scope --- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope`; -CREATE TABLE `iam_data_scope` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `type` int(4) NOT NULL COMMENT '类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据范围权限' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope --- ---------------------------- -INSERT INTO `iam_data_scope` VALUES (1474706893178871808, 'self', '自身数据', 1, '只能查看自身范围的数据', 1399985191002447872, '2021-12-25 19:41:37', 1399985191002447872, '2021-12-25 19:41:37', 1, 0); -INSERT INTO `iam_data_scope` VALUES (1474717084985270272, 'user', '用户数据权限', 2, '用户数据权限', 1399985191002447872, '2021-12-25 20:22:07', 1399985191002447872, '2021-12-25 20:22:07', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717160671485952, 'dept', '部门权限', 3, '', 1399985191002447872, '2021-12-25 20:22:25', 1399985191002447872, '2021-12-25 20:22:25', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717276908232704, 'userAndDept', '用户和部门权限', 4, '', 1399985191002447872, '2021-12-25 20:22:52', 1399985191002447872, '2021-12-25 20:22:52', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1474717344562356224, 'all', '全部数据', 5, '', 1399985191002447872, '2021-12-25 20:23:09', 1399985191002447872, '2021-12-25 20:23:09', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990268903804928, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:34', 1399985191002447872, '2022-01-03 21:08:35', 0, 0); -INSERT INTO `iam_data_scope` VALUES (1477990290521247744, 'belong_dept', '所在部门', 6, '', 1399985191002447872, '2022-01-03 21:08:40', 1399985191002447872, '2022-01-03 21:08:40', 0, 1); -INSERT INTO `iam_data_scope` VALUES (1477990439800721408, 'belong_dept_and_sub', '所在及下级部门', 7, '', 1399985191002447872, '2022-01-03 21:09:15', 1399985191002447872, '2022-01-03 21:09:15', 0, 0); - --- ---------------------------- --- Table structure for iam_data_scope_dept --- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope_dept`; -CREATE TABLE `iam_data_scope_dept` ( - `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', - `dept_id` bigint(20) NOT NULL COMMENT '部门id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围部门关联配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope_dept --- ---------------------------- -INSERT INTO `iam_data_scope_dept` VALUES (1478742690014101504, 1474717160671485952, 1477978464559484928); -INSERT INTO `iam_data_scope_dept` VALUES (1478742920071675904, 1474717160671485952, 1477977592291053568); - --- ---------------------------- --- Table structure for iam_data_scope_user --- ---------------------------- -DROP TABLE IF EXISTS `iam_data_scope_user`; -CREATE TABLE `iam_data_scope_user` ( - `id` bigint(20) NOT NULL, - `data_scope_id` bigint(20) NOT NULL COMMENT '数据范围id', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围用户关联配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_data_scope_user --- ---------------------------- -INSERT INTO `iam_data_scope_user` VALUES (1478738754876149760, 1474717084985270272, 1399985191002447872); -INSERT INTO `iam_data_scope_user` VALUES (1478738766460817408, 1474717084985270272, 1414143554414059520); -INSERT INTO `iam_data_scope_user` VALUES (1478738811792855040, 1474717084985270272, 1477997602862505984); -INSERT INTO `iam_data_scope_user` VALUES (1478747304583114752, 1474717084985270272, 1435894470432456704); -INSERT INTO `iam_data_scope_user` VALUES (1478747304587309056, 1474717084985270272, 1477997391729631232); - --- ---------------------------- --- Table structure for iam_dept --- ---------------------------- -DROP TABLE IF EXISTS `iam_dept`; -CREATE TABLE `iam_dept` ( - `id` bigint(20) NOT NULL COMMENT 'ID', - `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父机构ID', - `dept_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构/部门名称', - `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', - `org_category` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '机构类别 1公司 2部门 3岗位', - `org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构编码', - `mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', - `fax` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '传真', - `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', - `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门组织机构表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_dept --- ---------------------------- -INSERT INTO `iam_dept` VALUES (1259382878857957377, NULL, 'Bootx Platform总公司', 0, '1', '1', '', NULL, '济南市高新区齐鲁软件园', NULL, -1, '2020-05-10 15:20:51', -1, '2020-05-10 17:52:15', 4, 0); -INSERT INTO `iam_dept` VALUES (1477976804995026944, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:15:04', 1399985191002447872, '2022-01-03 20:15:05', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977184768282624, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:16:35', 1399985191002447872, '2022-01-03 20:16:35', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977301365739520, NULL, 'Bootx Cloud总公司', 0, '1', '2', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:17:03', 1399985191002447872, '2022-01-03 20:17:03', 1, 0); -INSERT INTO `iam_dept` VALUES (1477977592291053568, 1259382878857957377, 'bp济南分公司', 0, '1', '1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:12', 1399985191002447872, '2022-01-03 20:18:12', 1, 0); -INSERT INTO `iam_dept` VALUES (1477977690928500736, 1259382878857957377, '历城分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:36', 1399985191002447872, '2022-01-03 20:18:36', 0, 1); -INSERT INTO `iam_dept` VALUES (1477977827897692160, 1259382878857957377, 'bp潍坊分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:08', 1399985191002447872, '2022-01-03 20:19:08', 0, 0); -INSERT INTO `iam_dept` VALUES (1477977880947249152, 1477977301365739520, 'bc菏泽分公司', 0, '1', '2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:21', 1399985191002447872, '2022-01-03 20:19:21', 0, 0); -INSERT INTO `iam_dept` VALUES (1477977930175795200, 1477977301365739520, 'bc日照分公司', 0, '1', '2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:33', 1399985191002447872, '2022-01-03 20:19:33', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978464559484928, 1477977592291053568, '历城办事部', 0, '2', '1_1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:40', 1399985191002447872, '2022-01-03 20:21:40', 1, 0); -INSERT INTO `iam_dept` VALUES (1477978512177418240, 1477977592291053568, '历下办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:51', 1399985191002447872, '2022-01-03 20:21:52', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978610865197056, 1477977592291053568, '高新办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:22:15', 1399985191002447872, '2022-01-03 20:22:15', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978810526650368, 1477977827897692160, '奎文办事部', 0, '2', '1_2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:03', 1399985191002447872, '2022-01-03 20:23:03', 0, 0); -INSERT INTO `iam_dept` VALUES (1477978883247493120, 1477977827897692160, '潍城办事部', 0, '2', '1_2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:20', 1399985191002447872, '2022-01-03 20:23:20', 0, 0); - --- ---------------------------- --- Table structure for iam_login_type --- ---------------------------- -DROP TABLE IF EXISTS `iam_login_type`; -CREATE TABLE `iam_login_type` ( - `id` bigint(20) NOT NULL, - `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', - `system` bit(1) NOT NULL COMMENT '是否系统内置', - `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长 秒', - `captcha` bit(1) NOT NULL COMMENT '启用验证码', - `pwd_err_num` int(8) NOT NULL COMMENT '密码错误次数', - `enable` bit(1) NOT NULL COMMENT '是否可用', - `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录方式' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_login_type --- ---------------------------- -INSERT INTO `iam_login_type` VALUES (1430430071299207168, 'password', '账号密码登陆', 'password', b'1', 3600, b'0', -1, b'1', NULL, 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-11-03 22:24:53', 20, 0); -INSERT INTO `iam_login_type` VALUES (1430478946919653376, 'miniApp', '微信小程序', 'openId', b'0', 99999, b'0', 0, b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2022-07-16 12:32:26', 3, 0); -INSERT INTO `iam_login_type` VALUES (1435138582839009280, 'phone', '手机短信登录', 'openId', b'0', 3600, b'0', 0, b'1', NULL, 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-07-16 12:32:19', 5, 0); -INSERT INTO `iam_login_type` VALUES (1542091599907115008, 'dingTalk', '钉钉', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, 0); -INSERT INTO `iam_login_type` VALUES (1542804450312122368, 'weCom', '企业微信', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, 0); -INSERT INTO `iam_login_type` VALUES (1543126042909016064, 'weChat', '微信登录', 'openId', b'0', 5, b'0', -1, b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 0, '2022-10-12 22:15:05', 2, 0); -INSERT INTO `iam_login_type` VALUES (1626845524617203712, 'passwordGoView', '可视化平台登录', 'password', b'0', 3600, b'0', -1, b'1', '', 1414143554414059520, '2023-02-18 15:26:13', 1414143554414059520, '2023-02-18 15:26:13', 0, 0); - --- ---------------------------- --- Table structure for iam_perm_menu --- ---------------------------- -DROP TABLE IF EXISTS `iam_perm_menu`; -CREATE TABLE `iam_perm_menu` ( - `id` bigint(20) NOT NULL, - `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '终端code', - `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由名称', - `perm_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单权限编码', - `effect` bit(1) NULL DEFAULT NULL COMMENT '是否有效', - `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', - `hidden` bit(1) NOT NULL COMMENT '是否隐藏', - `hide_children_in_menu` bit(1) NOT NULL COMMENT '是否隐藏子菜单', - `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件', - `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件名字', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路径', - `redirect` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单跳转地址(重定向)', - `sort_no` double NOT NULL COMMENT '菜单排序', - `menu_type` int(5) NOT NULL COMMENT '类型(0:一级菜单;1:子菜单 ;2:按钮权限)', - `leaf` bit(1) NULL DEFAULT NULL COMMENT '是否叶子节点', - `keep_alive` bit(1) NULL DEFAULT NULL COMMENT '是否缓存页面', - `target_outside` bit(1) NULL DEFAULT NULL COMMENT '是否外部打开方式', - `hidden_header_content` bit(1) NULL DEFAULT NULL COMMENT '隐藏的标题内容', - `admin` bit(1) NOT NULL COMMENT '系统菜单', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_菜单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_perm_menu --- ---------------------------- -INSERT INTO `iam_perm_menu` VALUES (1414596052497092608, 'admin', NULL, '系统管理', 'system', '', NULL, 'desktop', b'0', b'0', 'RouteView', '', '/system', '/system/user', -99999, 0, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:02:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596647509446656, 'admin', 1452569691537256448, '用户管理', 'User', '', NULL, '', b'0', b'0', 'system/user/UserList', '', '/system/userAuth/user', '', 0, 1, b'0', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:17:40', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596773275652096, 'admin', 1414596052497092608, '菜单管理', 'Menu', '', NULL, '', b'0', b'0', 'system/menu/MenuList', '', '/system/permission/menu', '', 0, 1, b'0', b'1', b'0', b'0', b'1', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:16', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596805538238464, 'admin', 1452569339987472384, '角色管理', 'Role', '', NULL, '', b'0', b'0', 'system/role/RoleList', '', '/system/permission/role', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:04', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596842322284544, 'admin', 1452569691537256448, '部门管理', 'Dept', '', NULL, '', b'0', b'0', 'system/dept/DeptList', '', '/system/userAuth/dept', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-26 23:56:31', 7, 0); -INSERT INTO `iam_perm_menu` VALUES (1414596877617352704, 'admin', 1452571269199540224, '数据字典', 'Dict', '', b'0', '', b'0', b'0', 'system/dict/DictList', '', '/system/config/dict', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2022-05-19 09:04:55', 11, 0); -INSERT INTO `iam_perm_menu` VALUES (1431082258161434624, 'admin', 1452569691537256448, '在线用户管理', 'OnlineUser', '', NULL, '', b'0', b'0', 'system/online/OnlineUserList', NULL, '/system/userAuth/online', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:32:53', 1399985191002447872, '2021-08-27 10:32:53', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1431083330909208576, 'admin', 1541427353886859264, '登录方式', 'LoginType', '', b'0', '', b'0', b'0', 'system/client/LoginTypeList', NULL, '/system/config/loginType', '', 9, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:09', 1399985191002447872, '2022-07-05 21:18:12', 11, 0); -INSERT INTO `iam_perm_menu` VALUES (1431089129232498688, 'admin', 1452569339987472384, '请求权限管理', 'Path', '', NULL, '', b'0', b'0', 'system/path/PathList', NULL, '/system/permission/path', '', 0, 1, b'1', b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 11:00:11', 1399985191002447872, '2021-08-27 11:00:11', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1431152689832525824, 'admin', NULL, '系统监控', 'monitor', '', b'0', 'radar-chart', b'0', b'0', 'RouteView', NULL, '/monitor', '', 0, 0, b'1', b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2021-08-27 15:12:45', 1399985191002447872, '2022-06-17 17:57:30', 21, 0); -INSERT INTO `iam_perm_menu` VALUES (1431153358157348864, 'admin', 1431152689832525824, '接口文档', 'ApiSwagger', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, b'1', b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 15:15:25', 1399985191002447872, '2022-10-14 17:47:12', 18, 0); -INSERT INTO `iam_perm_menu` VALUES (1435143678721236992, 'admin', 1452567897717321728, '登录日志', 'LoginLog', '', b'0', '', b'0', b'0', 'starter/log/LoginLogList', NULL, '/monitor/log/loginLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-07 15:31:31', 1399985191002447872, '2022-10-20 20:38:06', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1435476255797624832, 'admin', 1452567897717321728, '操作日志', 'OperateLog', '', b'0', '', b'0', b'0', 'starter/log/OperateLogList', NULL, '/monitor/log/OperateLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-08 13:33:04', 1399985191002447872, '2022-10-20 20:38:12', 8, 0); -INSERT INTO `iam_perm_menu` VALUES (1438061887002759168, 'admin', NULL, '通知管理', 'notice', '', NULL, 'message', b'0', b'0', 'RouteView', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 16:47:26', 1399985191002447872, '2021-09-15 16:47:26', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1438072357281542144, 'admin', 1438061887002759168, '邮件配置', 'MailConfig', '', NULL, '', b'0', b'0', 'notice/mail/MailConfigList', NULL, '/notice/mailConfig', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-15 17:29:03', 1399985191002447872, '2021-09-15 17:29:03', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1439196893514031104, 'admin', 1438061887002759168, '消息模板', 'MessageTemplate', '', NULL, '', b'0', b'0', 'notice/template/TemplateList', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-18 19:57:33', 1399985191002447872, '2021-09-18 19:57:33', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1440216178722050048, 'admin', 1438061887002759168, '钉钉', 'DingTalk', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/notice/dingTalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:27:50', 1399985191002447872, '2021-09-21 15:27:50', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1440216612211757056, 'admin', 1450822511087271936, '钉钉机器人', 'DingTalkRobot', '', b'0', '', b'0', b'0', 'third/dingtalk/robot/DingRobotConfigList', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-09-21 15:29:33', 1399985191002447872, '2022-07-26 13:34:35', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450473063320526848, 'admin', 1452569691537256448, '第三方登录', 'Social', '', b'0', '', b'1', b'0', 'system/social/SocialList', NULL, '/system/userAuth/social', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-19 22:45:01', 1399985191002447872, '2022-07-26 13:35:47', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450803906215886848, 'admin', 1452571269199540224, '定时任务', 'QuartzJobList', '', NULL, '', b'0', b'0', 'starter/quartz/QuartzJobList', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 20:39:41', 1399985191002447872, '2021-10-20 20:39:41', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1450819607680991232, 'admin', NULL, '第三方对接', 'third', '', b'0', 'branches', b'0', b'0', 'RouteView', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:42:04', 1399985191002447872, '2022-07-26 13:34:02', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821723027881984, 'admin', 1450819607680991232, '微信', 'WeChat', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:50:28', 1399985191002447872, '2022-08-03 23:23:10', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450821877831254016, 'admin', 1450819607680991232, '企业微信', 'WeCom', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:51:05', 1399985191002447872, '2022-08-03 23:22:58', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822511087271936, 'admin', 1450819607680991232, '钉钉', 'DingTalk', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/third/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:53:36', 1399985191002447872, '2022-08-03 23:23:29', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450822842995130368, 'admin', NULL, '支付管理', 'PayManager', '', NULL, 'pay-circle', b'0', b'0', 'RouteView', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:54:55', 1399985191002447872, '2021-10-20 21:54:55', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450823960236081152, 'admin', 1450822842995130368, '支付通道', 'PayChannel', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:22', 1399985191002447872, '2021-10-20 21:59:22', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824117849636864, 'admin', 1450823960236081152, '支付宝', 'AliPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/alipay/AliPayConfigList', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 21:59:59', 1399985191002447872, '2021-10-20 21:59:59', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824319868289024, 'admin', 1450823960236081152, '微信支付', 'WeChatPayConfig', '', NULL, '', b'0', b'0', 'payment/channel/wechat/WeChatConfigList', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:00:48', 1399985191002447872, '2021-10-20 22:00:48', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824637876224000, 'admin', 1450823960236081152, '云闪付', 'UnionPayConfig', '', b'0', '', b'0', b'0', 'payment/channel/unionpay/UnionPayConfigList', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:02:03', 1399985191002447872, '2022-03-04 16:12:13', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450824875198332928, 'admin', 1450823960236081152, '现金支付', 'CashPayConfig', '', b'0', '', b'1', b'0', '', NULL, '/payment/channel/cash', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:03:00', 1399985191002447872, '2022-03-04 16:12:08', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825488577544192, 'admin', 1546850918849249280, '收银台', 'PayCashier', '', b'0', '', b'0', b'0', 'payment/cashier/Cashier', NULL, '/demo/pay/cashier', '', -1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:26', 1399985191002447872, '2022-07-12 21:37:22', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825615857893376, 'admin', 1450822842995130368, '订单管理', 'PayOrder', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:05:57', 1399985191002447872, '2021-10-20 22:05:57', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450825819436826624, 'admin', 1450822842995130368, '回调记录', 'PayNotify', '', NULL, '', b'0', b'0', 'payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:06:45', 1399985191002447872, '2021-10-20 22:06:45', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1450826890318135296, 'admin', 1450825615857893376, '支付订单', 'PaymentOrder', '', b'0', '', b'0', b'0', 'payment/order/payment/PaymentList', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:11:00', 1399985191002447872, '2022-02-25 15:17:07', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827159626006528, 'admin', 1450825615857893376, '退款订单', 'ReturnOrder', '', b'0', '', b'0', b'0', 'payment/order/refund/RefundRecordList', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:05', 1399985191002447872, '2022-03-04 15:44:06', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827308515409920, 'admin', 1450825615857893376, '转账订单', 'TransferOrder', '', b'0', '', b'1', b'0', 'payment/order/transfer/TransferList', NULL, '/payment/order/transfer', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:12:40', 1399985191002447872, '2022-03-04 15:33:31', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1450827660459458560, 'admin', 1438061887002759168, '微信', 'NoticeWeChat', '', b'0', '', b'0', b'0', 'Dev', NULL, '/notice/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-20 22:14:04', 1399985191002447872, '2022-06-21 20:53:04', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1452567897717321728, 'admin', 1431152689832525824, '审计日志', 'auditLog', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/monitor/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:29:09', 1399985191002447872, '2022-10-20 20:37:46', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569339987472384, 'admin', 1414596052497092608, '权限管理', 'permission', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:34:53', 1399985191002447872, '2021-10-25 17:34:53', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452569691537256448, 'admin', 1414596052497092608, '用户信息', 'userAuth', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/userAuth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:36:17', 1399985191002447872, '2021-10-25 17:36:17', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452571269199540224, 'admin', 1414596052497092608, '系统配置', 'systemConfig', '', NULL, '', b'0', b'0', 'RouteView', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 17:42:33', 1399985191002447872, '2021-10-25 17:42:33', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1452638905302966272, 'admin', 1452571269199540224, '系统参数', 'SystemParam', '', NULL, '', b'0', b'0', 'system/param/SystemParamList', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-10-25 22:11:18', 1399985191002447872, '2021-10-25 22:11:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1474694545336676352, 'admin', 1452569339987472384, '数据范围权限', 'DataScope', '', NULL, '', b'0', b'0', 'system/scope/DataScopeList', NULL, '/system/permission/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-12-25 18:52:33', 1399985191002447872, '2021-12-25 18:52:33', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1480839877352476672, 'admin', 1452567897717321728, '数据版本日志', 'DataVersionLog', NULL, b'0', '', b'0', b'0', 'starter/log/DataVersionLogList', NULL, '/monitor/log/DataVersionLog', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-01-11 17:51:54', 1399985191002447872, '2022-10-20 20:38:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1490984296616263680, 'admin', 1552207982510706688, '文件管理', 'FIleUpLoad', NULL, b'0', '', b'0', b'0', 'develop/file/FileUploadList', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-08 17:42:12', 1399985191002447872, '2022-07-28 09:16:56', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1495013564652429312, 'admin', 1552207982510706688, '代码生成', 'CodeGen', NULL, b'0', '', b'0', b'0', 'develop/codegen/CodeGenList', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-19 20:33:04', 1399985191002447872, '2022-07-27 16:25:05', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1495968302034210816, 'admin', NULL, '功能演示', 'Demo', NULL, b'0', 'block', b'0', b'0', 'RouteView', NULL, '/demo', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:46:52', 1399985191002447872, '2022-05-10 11:02:05', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1495969099987963904, 'admin', 1495968302034210816, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 11:50:02', 1399985191002447872, '2022-03-24 16:27:46', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1496020308992143360, 'admin', 1495968302034210816, '超级查询', 'SuperQueryDemo', NULL, b'0', '', b'0', b'0', 'demo/query/SuperQueryDemoList', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-02-22 15:13:31', 1399985191002447872, '2022-05-27 17:34:41', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501740492360962048, 'admin', 1450822842995130368, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:03:29', 1399985191002447872, '2022-03-10 10:04:53', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742229142556672, 'admin', 1501740492360962048, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:10:23', 1399985191002447872, '2022-03-10 17:06:19', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501742417378725888, 'admin', 1501740492360962048, '个人钱包', 'PersonalWallet', NULL, b'0', '', b'0', b'0', 'payment/wallet/list/WalletList', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 10:11:08', 1399985191002447872, '2022-03-10 17:06:10', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1501847310319972352, 'admin', 1546850918849249280, '组合支付', 'CombinationCashier', NULL, b'0', '', b'0', b'0', 'payment/combination/CombinationCashier', NULL, '/demo/pay/combination', '', -0.5, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-10 17:07:56', 1399985191002447872, '2022-07-12 21:37:59', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1502926397176242176, 'admin', 1450822842995130368, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', 'payment/voucher/VoucherList', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-13 16:35:51', 1399985191002447872, '2022-03-14 19:39:45', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910599819165696, 'admin', 1495969099987963904, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', 'demo/data/perm/DataPermDemoList', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:27:39', 1399985191002447872, '2022-03-24 16:28:56', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1506910885463851008, 'admin', 1495969099987963904, '加密解密', 'DataEncryptDemo', NULL, b'0', '', b'0', b'0', 'demo/data/encrypt/DataEncryptDemoList', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:28:47', 1399985191002447872, '2022-03-24 16:28:47', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1506911113394913280, 'admin', 1495969099987963904, '数据脱敏', 'DataSensitiveDemo', NULL, b'0', '', b'0', b'0', 'demo/data/sensitive/DataSensitiveDemoList', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-24 16:29:41', 1399985191002447872, '2022-03-24 17:16:03', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1507998458886197248, 'admin', 1495968302034210816, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', 'demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-27 16:30:25', 1399985191002447872, '2022-03-27 16:30:25', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1509488473583562752, 'admin', 1495968302034210816, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', 'demo/idempotent/Idempotent', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-03-31 19:11:12', 1399985191002447872, '2022-05-27 17:35:00', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1511266086400524288, 'admin', 1450822511087271936, '钉钉配置', 'DingTalkConfig', NULL, b'0', '', b'1', b'0', 'third/dingtalk/config/DingTalkConfigList', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-04-05 16:54:48', 1399985191002447872, '2022-07-26 13:34:44', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1523860792695283712, 'admin', NULL, '商品管理', 'GoodsManager', NULL, b'0', 'car', b'1', b'0', 'RouteView', NULL, '/goods', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 11:01:40', 1399985191002447872, '2022-10-07 12:38:50', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1523941932282114048, 'admin', 1523860792695283712, '类目管理', 'CategoryManager', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/goods/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:05', 1399985191002447872, '2022-05-10 16:24:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1523942130555252736, 'admin', 1523941932282114048, '类目', 'Category', NULL, b'0', '', b'0', b'0', 'goods/category/CategoryList', NULL, '/goods/category/category', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 16:24:52', 1399985191002447872, '2022-05-10 16:25:23', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044195818278912, 'admin', 1523941932282114048, '品牌', 'Brand', NULL, b'0', '', b'0', b'0', 'goods/brand/BrandList', NULL, '/goods/category/brand', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:10:26', 1399985191002447872, '2022-05-10 23:14:20', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044395823665152, 'admin', 1523941932282114048, '规格', 'SpecificationList', NULL, b'0', '', b'0', b'0', 'goods/spec/SpecificationList', NULL, '/goods/category/spec', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:11:14', 1399985191002447872, '2022-05-10 23:13:51', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1524044678314233856, 'admin', 1523941932282114048, '参数组', 'ParameterGroup', NULL, b'0', '', b'1', b'0', 'goods/parameter/ParameterGroupList', NULL, '/goods/category/parameter', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-10 23:12:21', 1399985191002447872, '2022-05-12 20:30:23', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1525472571967860736, 'admin', 1523860792695283712, '商品', 'Goods', '', b'0', '', b'0', b'0', 'goods/goods/GoodsList', NULL, '/goods/goods', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-14 21:46:18', 1399985191002447872, '2022-05-14 21:46:18', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120084482084864, 'admin', 1495968302034210816, '消息中间件演示', 'MQDemo', NULL, b'0', '', b'0', b'0', 'demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:33:51', 1399985191002447872, '2022-05-31 15:12:15', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1530120684645044224, 'admin', 1530120084482084864, 'MQTT消息', 'MqttDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/mqtt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:14', 1399985191002447872, '2022-05-27 17:36:14', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1530120821144473600, 'admin', 1530120084482084864, 'RabbitMQ', 'RabbitDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/demo/mq/rabbit', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-05-27 17:36:47', 1399985191002447872, '2022-05-27 17:36:47', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1534000136370204672, 'admin', 1431152689832525824, 'ELK日志', 'ELK', '', b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 10:31:48', 1399985191002447872, '2022-06-07 10:31:48', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1534008203006652416, 'admin', 1431152689832525824, 'PlumeLog日志', 'PlumeLog', '', b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-06-07 11:03:51', 1399985191002447872, '2022-06-07 11:06:13', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1535451167008436224, 'admin', 1431152689832525824, '系统信息', 'SysInfo', NULL, b'0', '', b'0', b'0', 'starter/monitor/SystemInfoMonitor', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-11 10:37:40', 1399985191002447872, '2022-06-13 13:07:46', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1535965936371085312, 'admin', 1431152689832525824, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', 'starter/monitor/RedisInfoMonitor', NULL, '/monitor/redis', '', 0, 1, NULL, b'0', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-12 20:43:11', 1399985191002447872, '2022-06-13 13:07:38', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1537730140522348544, 'admin', 1438061887002759168, '站内信', 'SiteMessageSender', '', b'0', '', b'0', b'0', 'notice/site/sender/SiteMessageList', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:33:30', 1399985191002447872, '2022-08-20 21:12:30', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1537732440632524800, 'admin', NULL, '个人办公', 'person', '', b'0', 'user', b'0', b'0', 'RouteView', NULL, '/person', '', -99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:42:38', 1399985191002447872, '2022-08-20 22:15:21', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1537733801860333568, 'admin', 1537732440632524800, '我的消息', 'PersonSiteMessage', NULL, b'0', '', b'0', b'0', 'notice/site/receive/SiteMessageList', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:48:03', 1399985191002447872, '2022-10-24 11:10:35', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1537735851818024960, 'admin', 1537732440632524800, '待办任务', 'MyTodoTaskList', NULL, b'0', '', b'0', b'0', 'office/mytodo/MyTodoList', NULL, '/person/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-17 17:56:11', 1399985191002447872, '2022-08-30 22:46:47', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1538160478872625152, 'admin', 1495968302034210816, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', 'demo/wangeditor/WangEditorDemo', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-18 22:03:30', 1399985191002447872, '2022-06-18 22:03:31', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1541355214204030976, 'admin', 1541427353886859264, '认证终端', 'Client', '', b'0', '', b'0', b'0', 'system/client/ClientList', NULL, '/system/config/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2021-08-27 10:37:08', 1399985191002447872, '2022-07-05 21:17:45', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1541427353886859264, 'admin', 1414596052497092608, '认证管理', 'Auth', '', b'0', '', b'0', b'0', 'RouteView', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-06-27 22:24:54', 1399985191002447872, '2022-06-27 22:24:54', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1544952211901218816, 'admin', 1546850918849249280, '支付结算台演示', 'CashierDemo', NULL, b'0', '', b'0', b'0', '', NULL, '/cashier', '', 0, 1, NULL, b'0', b'1', b'0', b'0', NULL, 1399985191002447872, '2022-07-07 15:51:26', 1399985191002447872, '2022-11-23 15:31:08', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1546850918849249280, 'admin', 1495968302034210816, '支付演示', 'DemoPay', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/pay', '', 9, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-12 21:36:13', 1399985191002447872, '2022-08-03 14:49:16', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1551803592828932096, 'admin', 1450821877831254016, '企微机器人', 'WeComRobot', '', b'0', '', b'0', b'0', 'third/wecom/robot/WeComRobotConfigList', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-26 13:36:22', 1399985191002447872, '2022-10-24 11:07:27', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1552207982510706688, 'admin', NULL, '开发管理', 'develop', NULL, b'0', 'gold', b'0', b'0', 'RouteView', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:23:16', 1399985191002447872, '2022-07-27 16:39:09', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1552208167664062464, 'admin', 1552207982510706688, '动态表单', 'DynamicForm', NULL, b'0', '', b'0', b'0', 'develop/dynamicform/DynamicFormList', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-07-27 16:24:00', 1399985191002447872, '2022-07-27 16:38:05', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1554720980865380352, 'admin', 1495968302034210816, '消息通知', 'NoticeDemo', NULL, b'0', '', b'0', b'0', 'RouteView', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:49:02', 1399985191002447872, '2022-08-03 14:49:02', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1554721654336385024, 'admin', 1554720980865380352, '邮件发送', 'EmailDemo', NULL, b'0', '', b'0', b'0', 'demo/notice/email/EmailSender', NULL, '/demo/notice/email', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 14:51:42', 1399985191002447872, '2022-08-03 14:51:42', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1554850179754975232, 'admin', 1450821723027881984, '消息模板', 'WeChatTemplate', NULL, b'0', '', b'0', b'0', 'third/wechat/template/WeChatTemplateList', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-03 23:22:25', 1399985191002447872, '2022-08-03 23:23:18', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1555835229426368512, 'admin', 1450821723027881984, '自定义菜单', 'WeChatMenu', NULL, b'0', '', b'0', b'0', 'third/wechat/menu/WeChatMenuList', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-06 16:36:39', 1399985191002447872, '2022-08-08 12:14:14', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1556997405528805376, 'admin', 1450821723027881984, '素材管理', 'WeChatMedia', NULL, b'0', '', b'0', b'0', 'third/wechat/media/WeChatMediaList', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-09 21:34:44', 1399985191002447872, '2022-08-09 21:34:44', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1562460770753544192, 'admin', NULL, '流程管理', 'Bpm', NULL, b'0', 'audit', b'0', b'0', 'RouteView', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:24:12', 1399985191002447872, '2022-08-24 23:25:11', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1562461289450536960, 'admin', 1562460770753544192, '流程模型', 'BpmModel', NULL, b'0', '', b'0', b'0', 'bpm/model/BpmModelList', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:26:15', 1399985191002447872, '2022-08-24 23:26:15', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1562461620766998528, 'admin', 1562460770753544192, '流程表单', 'BpmFrom', NULL, b'0', '', b'0', b'0', 'Dev', NULL, '/bpm/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-24 23:27:34', 1399985191002447872, '2022-08-24 23:27:56', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1563092672406859776, 'admin', 1537732440632524800, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', 'office/myapply/MyApplyList', NULL, '/person/myApply', '', 1, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-26 17:15:09', 1399985191002447872, '2022-08-30 22:46:25', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1564626025579462656, 'admin', 1537732440632524800, '已办任务', 'MyDoneTaskList', NULL, b'0', '', b'0', b'0', 'office/mydone/MyDoneList', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-08-30 22:48:09', 1399985191002447872, '2022-08-30 22:48:29', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1571023702122766336, 'admin', 1562460770753544192, '未处理任务', 'BpmTodoTask', NULL, b'0', '', b'0', b'0', 'bpm/task/TodoTaskList', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:30:13', 1399985191002447872, '2022-09-17 14:31:23', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1571023925834358784, 'admin', 1562460770753544192, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', 'bpm/task/DoneTaskList', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:31:07', 1399985191002447872, '2022-09-17 14:31:07', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1571024250171498496, 'admin', 1562460770753544192, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', 'bpm/instance/InstanceList', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-17 14:32:24', 1399985191002447872, '2022-09-17 14:32:24', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1573669546890297344, 'admin', 1552207982510706688, '动态数据源', 'DynamicSource', NULL, b'0', '', b'0', b'0', 'develop/dynamicsource/DynamicDataSourceList', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-09-24 21:43:52', 1399985191002447872, '2022-09-24 21:43:52', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1580740450633101312, 'adminv3', NULL, '系统管理', 'System', NULL, b'0', 'ant-design:setting-outlined', b'0', b'0', 'Layout', NULL, '/system', '/system1/client', -99999, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:07', 1414143554414059520, '2022-10-18 15:32:09', 4, 0); -INSERT INTO `iam_perm_menu` VALUES (1580740637841666048, 'adminv3', 1582253306356649984, '终端管理', 'ClientList', NULL, b'0', '', b'0', b'0', '/modules/system/client/ClientList.vue', NULL, '/system/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:51', 1414143554414059520, '2022-10-18 14:13:27', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1580740758629232640, 'adminv3', 1582253306356649984, '登录方式', 'LoginTypeList', NULL, b'0', '', b'0', b'0', '/modules/system/loginType/LoginTypeList.vue', NULL, '/system/loginType', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:02:20', 1414143554414059520, '2022-10-18 14:13:40', 5, 0); -INSERT INTO `iam_perm_menu` VALUES (1580858583654051840, 'adminv3', 1580740450633101312, '测试Iframe', 'Iframe', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/system/Iframe', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 17:50:32', 1414143554414059520, '2022-10-17 17:46:19', 5, 1); -INSERT INTO `iam_perm_menu` VALUES (1580917438227075072, 'adminv3', 1580740450633101312, '三极目录', 'hello', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system1/a', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:24', 1399985191002447872, '2022-10-14 23:38:16', 2, 1); -INSERT INTO `iam_perm_menu` VALUES (1580917571069071360, 'adminv3', 1580917438227075072, '百度', 'baidu', NULL, b'0', '', b'0', b'0', '', NULL, 'https://www.baidu.com/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:56', 1399985191002447872, '2022-10-14 23:37:44', 3, 1); -INSERT INTO `iam_perm_menu` VALUES (1580928436300337152, 'adminv3', 1580740450633101312, '菜单管理', 'MenuList', NULL, b'0', '', b'0', b'0', '/modules/system/menu/MenuList.vue', NULL, '/system/menu', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 22:28:06', 1399985191002447872, '2022-10-14 22:28:32', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582249924602580992, 'adminv3', 1580740450633101312, '权限管理', 'Permission', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 13:59:13', 1414143554414059520, '2022-10-18 13:59:13', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582253011803262976, 'adminv3', 1580740450633101312, '用户信息', 'UserAuth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/user', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:11:30', 1414143554414059520, '2022-10-18 14:11:30', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582253152903843840, 'adminv3', 1580740450633101312, '系统配置', 'SystemConfig', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:03', 1414143554414059520, '2022-10-18 14:12:03', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582253306356649984, 'adminv3', 1580740450633101312, '认证管理', 'Auth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:40', 1414143554414059520, '2022-10-18 14:13:13', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582274981055909888, 'adminv3', NULL, '个人办公', 'Person', NULL, b'0', 'ant-design:align-right-outlined', b'0', b'0', 'Layout', NULL, '/person', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:38:47', 1414143554414059520, '2022-10-18 15:38:47', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582275875424129024, 'adminv3', NULL, '系统监控', 'Monitor', NULL, b'0', 'ant-design:monitor-outlined', b'0', b'0', 'Layout', NULL, '/monitor', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:21', 1414143554414059520, '2022-10-19 17:29:29', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582275984849326080, 'adminv3', NULL, '通知管理', 'Notice', NULL, b'0', 'ant-design:message-outlined', b'0', b'0', 'Layout', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:47', 1414143554414059520, '2022-10-19 17:30:06', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276092038959104, 'adminv3', NULL, '第三方对接', 'Third', NULL, b'0', 'ant-design:api-twotone', b'0', b'0', 'Layout', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:12', 1414143554414059520, '2022-10-19 17:32:04', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276184120709120, 'adminv3', NULL, '支付管理', 'PayManager', NULL, b'0', 'ant-design:pay-circle-outlined', b'0', b'0', 'Layout', NULL, '/payment', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:34', 1414143554414059520, '2022-10-19 17:31:46', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276341792985088, 'adminv3', NULL, '开发管理', 'Develop', NULL, b'0', 'ant-design:apartment-outlined', b'0', b'0', 'Layout', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:12', 1414143554414059520, '2022-10-19 15:24:22', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276447602692096, 'adminv3', NULL, '流程管理', 'Bpm', NULL, b'0', 'ant-design:file-protect-outlined', b'0', b'0', 'Layout', NULL, '/bpm', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:37', 1414143554414059520, '2022-10-19 17:34:11', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582276516905177088, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', 'ant-design:appstore-twotone', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:54', 1414143554414059520, '2022-10-19 17:34:26', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582277076421136384, 'adminv3', 1582249924602580992, '角色管理', 'RoleList', NULL, b'0', '', b'0', b'0', '/modules/system/role/RoleList.vue', NULL, '/system/permission/role', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:47:07', 1414143554414059520, '2022-10-18 15:59:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582301940364308480, 'adminv3', 1582249924602580992, '请求权限管理', 'PermPathList', NULL, b'0', '', b'0', b'0', '/modules/system/path/PermPathList.vue', NULL, '/system/permission/path', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:25:55', 1414143554414059520, '2022-10-18 20:41:22', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582302180999917568, 'adminv3', 1582249924602580992, '数据范围权限', 'DataScopeList', NULL, b'0', '', b'0', b'0', '/modules/system/scope/DataScopeList.vue', NULL, '/system/permission/scope', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:26:52', 1414143554414059520, '2022-10-18 17:26:52', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582302542955769856, 'adminv3', 1582253011803262976, '用户管理', 'UserList', NULL, b'0', '', b'0', b'0', '/modules/system/user/UserList.vue', NULL, '/system/user/info', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:28:19', 1414143554414059520, '2022-10-18 17:28:19', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582302764129808384, 'adminv3', 1582253011803262976, '部门管理', 'DeptList', NULL, b'0', '', b'0', b'0', '/modules/system/dept/DeptList.vue', NULL, '/system/user/dept', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:29:11', 1414143554414059520, '2022-10-18 17:32:26', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582303143110340608, 'adminv3', 1582253152903843840, '数据字典', 'DictList', NULL, b'0', '', b'0', b'0', '/modules/system/dict/DictList.vue', NULL, '/system/config/dict', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:30:42', 1414143554414059520, '2022-10-18 17:30:42', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582303290070364160, 'adminv3', 1582253152903843840, '定时任务', 'QuartzJobList', NULL, b'0', '', b'0', b'0', '/modules/system/quartz/QuartzJobList.vue', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:17', 1414143554414059520, '2022-10-18 17:32:12', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582303447428067328, 'adminv3', 1582253152903843840, '系统参数', 'SystemParamList', NULL, b'0', '', b'0', b'0', '/modules/system/param/SystemParamList.vue', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:54', 1414143554414059520, '2022-10-19 23:14:16', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582632873244172288, 'adminv3', 1582276341792985088, '文件管理', 'FileUploadList', NULL, b'0', '', b'0', b'0', '/modules/develop/file/FileUploadList.vue', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:20:56', 1414143554414059520, '2022-10-19 15:20:56', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582633196587261952, 'adminv3', 1582276341792985088, '代码生成', 'CodeGenList', NULL, b'0', '', b'0', b'0', '/modules/develop/codegen/CodeGenList.vue', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:13', 1414143554414059520, '2022-10-19 15:23:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1582633307786649600, 'adminv3', 1582276341792985088, '动态表单', 'DynamicFormList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicform/DynamicFormList.vue', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:39', 1414143554414059520, '2022-10-19 15:22:39', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1582633620321017856, 'adminv3', 1582276341792985088, '动态数据源', 'DynamicDataSourceList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicsource/DynamicDataSourceList.vue', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:23:54', 1414143554414059520, '2022-10-19 15:23:54', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583074308040925184, 'adminv3', 1582275875424129024, '接口文档', 'ApiSwagger', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:35:02', 1414143554414059520, '2022-11-23 13:59:09', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1583075229563068416, 'adminv3', 1582275875424129024, '审计日志', 'AuditLog', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/monitor/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:38:42', 1414143554414059520, '2022-10-20 20:41:38', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1583076217481043968, 'adminv3', 1583075229563068416, '登录日志', 'LoginLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/login/LoginLogList.vue', NULL, '/monitor/log/login', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:42:37', 1414143554414059520, '2022-10-20 20:43:36', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1583076424935514112, 'adminv3', 1583075229563068416, '操作日志', 'OperateLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/operate/OperateLogList.vue', NULL, '/monitor/log/operate', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:43:26', 1414143554414059520, '2022-10-20 20:43:26', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583076670881112064, 'adminv3', 1583075229563068416, '数据版本日志', 'DataVersionLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/data/DataVersionLogList.vue', NULL, '/monitor/log/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:44:25', 1414143554414059520, '2022-10-20 20:44:25', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583076878956339200, 'adminv3', 1582275875424129024, 'ELK日志', 'ELK', NULL, b'0', '', b'0', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:15', 1414143554414059520, '2022-11-21 15:04:13', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1583077015434797056, 'adminv3', 1582275875424129024, 'PlumeLog日志', 'PlumeLog', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:47', 1414143554414059520, '2022-10-20 20:45:47', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583077198772019200, 'adminv3', 1582275875424129024, '系统信息', 'SystemInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/system/SystemInfoMonitor.vue', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:46:31', 1414143554414059520, '2022-10-20 20:46:31', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1583077360827342848, 'adminv3', 1582275875424129024, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/redis/RedisInfoMonitor.vue', NULL, '/monitor/redis', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:47:10', 1414143554414059520, '2022-10-20 20:47:10', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584378294652051456, 'adminv3', 1582275984849326080, '邮件配置', 'MailConfigList', NULL, b'0', '', b'0', b'0', '/modules/notice/mail/MailConfigList.vue', NULL, '/notice/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:56:36', 1414143554414059520, '2022-10-24 16:14:34', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584378497824137216, 'adminv3', 1582275984849326080, '消息模板', 'MessageTemplateList', NULL, b'0', '', b'0', b'0', '/modules/notice/template/MessageTemplateList.vue', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:57:25', 1414143554414059520, '2022-10-25 22:14:14', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1584378671266996224, 'adminv3', 1582275984849326080, '站内信', 'SiteMessageList', NULL, b'0', '', b'0', b'0', '/modules/notice/site/sender/SiteMessageList.vue', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:58:06', 1414143554414059520, '2022-10-24 10:58:06', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584379602188574720, 'adminv3', 1582276092038959104, '微信', 'WeChat', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:01:48', 1414143554414059520, '2022-10-24 11:01:48', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584379704122744832, 'adminv3', 1582276092038959104, '企业微信', 'WeCom', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:02:12', 1414143554414059520, '2022-10-24 11:02:12', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584380087805091840, 'adminv3', 1582276092038959104, '钉钉', 'DingTalk', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:03:44', 1414143554414059520, '2022-10-24 11:03:44', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584380527829524480, 'adminv3', 1584379602188574720, '消息模板', 'WechatTemplateList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/template/WechatTemplateList.vue', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:05:29', 1414143554414059520, '2022-10-26 15:58:56', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584380679478779904, 'adminv3', 1584379602188574720, '自定义菜单', 'WechatMenuList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/menu/WechatMenuList.vue', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:05', 1414143554414059520, '2022-10-27 10:15:24', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584380824308097024, 'adminv3', 1584379602188574720, '素材管理', 'WechatMediaList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/media/WechatMediaList.vue', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:40', 1414143554414059520, '2022-10-27 16:38:47', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584381134950834176, 'adminv3', 1584379704122744832, '企微机器人', 'WeComRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/wecom/robot/WecomRobotConfigList.vue', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:07:54', 1414143554414059520, '2022-11-12 20:58:25', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1584381322184564736, 'adminv3', 1584380087805091840, '钉钉机器人', 'DingRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/dingtalk/robot/DingRobotConfigList.vue', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:08:38', 1414143554414059520, '2022-11-12 20:58:37', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1584381477986181120, 'adminv3', 1584380087805091840, '钉钉配置', 'DingRobotConfigList', NULL, b'0', '', b'1', b'0', '/modules/third/dingtalk/config/DingTalkConfigList.vue', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:09:15', 1414143554414059520, '2022-11-11 16:04:47', 1, 1); -INSERT INTO `iam_perm_menu` VALUES (1584381848238366720, 'adminv3', 1582274981055909888, '我的消息', 'SiteMessageListReceive', NULL, b'0', '', b'0', b'0', '/modules/notice/site/receive/SiteMessageList.vue', NULL, '/person/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:10:44', 1414143554414059520, '2022-11-17 09:08:02', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584381976508571648, 'adminv3', 1582274981055909888, '待办任务', 'MyTodoList', NULL, b'0', '', b'0', b'0', '/modules/office/mytodo/MyTodoList.vue', NULL, '/person/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:14', 1414143554414059520, '2022-10-24 11:11:14', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382091327643648, 'adminv3', 1582274981055909888, '已办任务', 'MyDoneList', NULL, b'0', '', b'0', b'0', '/modules/office/mydone/MyDoneList.vue', NULL, '/person/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:11:42', 1414143554414059520, '2022-10-24 11:12:29', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382258307080192, 'adminv3', 1582274981055909888, '我的发起', 'MyApplyList', NULL, b'0', '', b'0', b'0', '/modules/office/myapply/MyApplyList.vue', NULL, '/person/myApply', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:12:21', 1414143554414059520, '2022-10-24 11:12:21', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382569381830656, 'adminv3', 1582276184120709120, '支付通道', 'PayChannel', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/channel', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:13:36', 1414143554414059520, '2022-10-24 11:13:36', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382723186958336, 'adminv3', 1582276184120709120, '支付订单', 'PayOrder', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/order', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:12', 1414143554414059520, '2022-10-24 11:14:12', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584382815407120384, 'adminv3', 1582276184120709120, '回调记录', 'PayNotify', NULL, b'0', '', b'0', b'0', '/modules/payment/notify/PayNotifyRecordList', NULL, '/payment/notify', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:14:34', 1414143554414059520, '2022-10-24 11:23:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383492338425856, 'adminv3', 1582276184120709120, '钱包管理', 'Wallet', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/payment/wallet', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:16', 1414143554414059520, '2022-10-24 11:17:16', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383640942616576, 'adminv3', 1582276184120709120, '储值卡', 'Voucher', NULL, b'0', '', b'0', b'0', '/modules/payment/voucher/VoucherList.vue', NULL, '/payment/voucher', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:17:51', 1414143554414059520, '2022-12-01 22:17:39', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584383859121922048, 'adminv3', 1584382569381830656, '支付宝', 'AliPayConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/alipay/AlipayConfigList.vue', NULL, '/payment/channel/alipay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:18:43', 1414143554414059520, '2022-11-22 15:20:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384015338774528, 'adminv3', 1584382569381830656, '微信支付', 'WeChatConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/wechat/WechatPayConfigList.vue', NULL, '/payment/channel/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:20', 1414143554414059520, '2022-11-22 22:22:07', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384160574939136, 'adminv3', 1584382569381830656, '云闪付', 'UnionPayConfigList', NULL, b'0', '', b'0', b'0', '/modules/payment/channel/unionpay/UnionPayConfigList.vue', NULL, '/payment/channel/unionpay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:19:55', 1414143554414059520, '2022-11-22 22:27:32', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384526511185920, 'adminv3', 1584382723186958336, '支付订单', 'PaymentList', NULL, b'0', '', b'0', b'0', '/modules/payment/order/payment/PaymentList.vue', NULL, '/payment/order/payment', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:21:22', 1414143554414059520, '2022-10-24 11:21:22', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1584384752940687360, 'adminv3', 1584382723186958336, '退款订单', 'ReturnOrder', NULL, b'0', '', b'0', b'0', '/modules/payment/order/refund/RefundRecordList.vue', NULL, '/payment/order/return', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:22:16', 1414143554414059520, '2022-10-24 11:22:16', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1589495250199760896, 'adminv3', 1580740450633101312, '22', NULL, '11', b'1', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1414143554414059520, '2022-11-07 13:49:34', 1414143554414059520, '2022-11-07 13:49:34', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689087570378752, 'adminv3', 1582276447602692096, '流程模型', 'BpmModelList', NULL, b'0', '', b'0', b'0', '/modules/bpm/model/BpmModelList.vue', NULL, '/bpm/model', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:05', 1414143554414059520, '2022-11-13 15:07:05', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689307427405824, 'adminv3', 1582276447602692096, '未处理任务', 'TodoTaskList', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/TodoTaskList.vue', NULL, '/bpm/todo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:07:58', 1414143554414059520, '2022-11-14 22:45:57', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1591689479075102720, 'adminv3', 1582276447602692096, '已处理任务', 'BpmDoneTask', NULL, b'0', '', b'0', b'0', '/modules/bpm/task/DoneTaskList.vue', NULL, '/bpm/done', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:08:39', 1414143554414059520, '2022-11-13 15:14:17', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1591690820224778240, 'adminv3', 1582276447602692096, '流程实例', 'BpmInstance', NULL, b'0', '', b'0', b'0', '/modules/bpm/instance/InstanceList.vue', NULL, '/bpm/instance', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-13 15:13:58', 1414143554414059520, '2022-11-13 15:13:58', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1594586131247075328, 'adminv3', 1582275875424129024, 'ELK日志x', 'ELKx', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/monitor/elk', 'https://www.antdv.com/components/overview-cn', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-21 14:58:54', 1414143554414059520, '2022-11-21 15:21:35', 6, 0); -INSERT INTO `iam_perm_menu` VALUES (1595255743081025536, 'adminv3', 1580740450633101312, '菜单管理1', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:////system/menu?onlytab=1&__full__', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-23 11:19:42', 1414143554414059520, '2022-11-23 21:02:52', 20, 1); -INSERT INTO `iam_perm_menu` VALUES (1597044371008516096, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 09:47:04', 1414143554414059520, '2022-11-28 09:47:04', 0, 1); -INSERT INTO `iam_perm_menu` VALUES (1597102799370317824, 'adminv3', 1582276516905177088, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 13:39:15', 1414143554414059520, '2022-11-28 13:39:15', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1597210969883275264, 'adminv3', 1582276516905177088, '超级查询', 'SuperQueryDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/query/SuperQueryDemoList.vue', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 20:49:05', 1414143554414059520, '2022-11-28 21:00:14', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1598306560788877312, 'adminv3', 1584383492338425856, '钱包列表', 'WalletList', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/list/WalletList.vue', NULL, '/payment/wallet/list', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:22:34', 1414143554414059520, '2022-12-01 21:22:34', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1598306760764903424, 'adminv3', 1584383492338425856, '个人钱包', 'MyWallet', NULL, b'0', '', b'0', b'0', '/modules/payment/wallet/personal/MyWallet.vue', NULL, '/payment/wallet/personal', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-01 21:23:22', 1414143554414059520, '2022-12-01 21:23:22', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1599337250200440832, 'adminv3', NULL, '关于', '', NULL, b'0', 'simple-icons:about-dot-me', b'0', b'0', '', NULL, '/about/index', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 17:38:09', 1414143554414059520, '2022-12-04 17:43:32', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378494880436224, 'adminv3', 1582276516905177088, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:03', 1414143554414059520, '2023-02-08 12:17:58', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378579513102336, 'adminv3', 1582276516905177088, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/idempotent/IdempotentDemo', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:23', 1414143554414059520, '2023-02-08 11:46:00', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378728490586112, 'adminv3', 1582276516905177088, '消息中间件演示', 'MqDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:59', 1414143554414059520, '2023-02-08 22:09:04', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378838519762944, 'adminv3', 1582276516905177088, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/wangeditor/WangEditorDemo.vue', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:23:25', 1414143554414059520, '2023-02-10 09:05:16', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599378992811429888, 'adminv3', 1582276516905177088, '消息通知', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:02', 1414143554414059520, '2022-12-04 20:24:37', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379197124366336, 'adminv3', 1582276516905177088, '支付演示', '', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/pay', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:24:50', 1414143554414059520, '2022-12-04 20:24:50', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379348144476160, 'adminv3', 1599379197124366336, '收银台', 'SimpleCashier', NULL, b'0', '', b'0', b'0', '/demo/payment/cashier/SimpleCashier.vue', NULL, '/demo/pay/cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:26', 1414143554414059520, '2022-12-05 21:28:10', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379428784164864, 'adminv3', 1599379197124366336, '组合支付', 'CombinationCashier', NULL, b'0', '', b'0', b'0', '/demo/payment/cashier/CombinationCashier.vue', NULL, '/demo/pay/combination', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:25:46', 1414143554414059520, '2022-12-08 22:32:55', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1599379539232772096, 'adminv3', 1599379197124366336, '支付结算台演示', '', NULL, b'0', '', b'0', b'0', '', NULL, 'outside:///cashier', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:26:12', 1414143554414059520, '2022-12-04 20:26:34', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1617513861605191680, 'admin', 1414596052497092608, '123', NULL, '123', b'0', NULL, b'0', b'0', NULL, NULL, NULL, NULL, 0, 2, NULL, b'0', b'0', b'0', b'0', '', 1399985191002447872, '2023-01-23 21:25:31', 1399985191002447872, '2023-01-23 21:56:34', 3, 0); -INSERT INTO `iam_perm_menu` VALUES (1617847577158324224, 'adminv3', 1597102799370317824, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/perm/DataPermDemoList.vue', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:35', 1414143554414059520, '2023-01-24 20:06:04', 2, 0); -INSERT INTO `iam_perm_menu` VALUES (1617847653746315264, 'adminv3', 1597102799370317824, '加密解密', 'DataEncryptDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/encrypt/DataEncryptDemoList.vue', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:53', 1414143554414059520, '2023-01-24 20:05:45', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1617847747375763456, 'adminv3', 1597102799370317824, '数据脱敏', 'DataSensitiveDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/sensitive/DataSensitiveDemoList.vue', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:32:16', 1414143554414059520, '2023-01-24 20:06:58', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1621150743447965696, 'admin', 1495968302034210816, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', 'demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-02 22:17:11', 1399985191002447872, '2023-02-08 09:43:39', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1623156857846034432, 'adminv3', 1582276516905177088, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 11:08:46', 1414143554414059520, '2023-02-08 11:08:46', 0, 0); -INSERT INTO `iam_perm_menu` VALUES (1623325795944439808, 'adminv3', 1599378992811429888, '邮件通知', 'EmailSenderDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/notice/email/EmailSenderDemo.vue', NULL, '/demo/notice/email', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 22:20:04', 1414143554414059520, '2023-02-20 10:38:55', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1623494586215579648, 'admin', 1552207982510706688, '行政区划', 'ChinaRegion', NULL, b'0', '', b'1', b'0', 'develop/region/ChinaRegionList', NULL, '/develop/region', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-09 09:30:47', 1399985191002447872, '2023-02-09 17:50:05', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1629039360928075776, 'adminv3', 1582276341792985088, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', '/modules/develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-24 16:43:44', 1414143554414059520, '2023-02-24 16:44:17', 1, 0); -INSERT INTO `iam_perm_menu` VALUES (1631946120891707392, 'admin', 1552207982510706688, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', 'develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-03-04 17:14:10', 1399985191002447872, '2023-03-04 17:14:10', 0, 0); - --- ---------------------------- --- Table structure for iam_perm_path --- ---------------------------- -DROP TABLE IF EXISTS `iam_perm_path`; -CREATE TABLE `iam_perm_path` ( - `id` bigint(20) NOT NULL, - `code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限标识', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限名称', - `request_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求类型', - `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求路径', - `group_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组名称', - `enable` bit(1) NOT NULL COMMENT '启用状态', - `generate` bit(1) NOT NULL COMMENT '是否通过系统生成的权限', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `deleted` bit(1) NOT NULL, - `version` int(11) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_请求' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_perm_path --- ---------------------------- - --- ---------------------------- --- Table structure for iam_role --- ---------------------------- -DROP TABLE IF EXISTS `iam_role`; -CREATE TABLE `iam_role` ( - `id` bigint(20) NOT NULL COMMENT '角色ID', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', - `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `internal` bit(1) NOT NULL COMMENT '是否系统内置', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role --- ---------------------------- -INSERT INTO `iam_role` VALUES (1405414804771971072, 'admin', '管理员', b'1', '管理员', 1, '2021-06-17 14:39:35', 1399985191002447872, '2021-07-18 22:31:02', 6, 0); -INSERT INTO `iam_role` VALUES (1416730722714144768, 'test', '测试', b'0', '测试角色', 1399985191002447872, '2021-07-18 20:05:01', 1399985191002447872, '2021-07-18 20:16:15', 1, 0); -INSERT INTO `iam_role` VALUES (1422832797731778562, 'user', '用户', b'0', '用户角色', 0, '2021-08-04 16:12:29', 1399985191002447872, '2021-08-04 16:15:03', 7, 1); -INSERT INTO `iam_role` VALUES (1428891259564445696, 'manager', '管理者', b'0', 'manager管理者', 1399985191002447872, '2021-08-21 09:26:38', 1399985191002447872, '2021-08-21 09:26:39', 0, 1); - --- ---------------------------- --- Table structure for iam_role_menu --- ---------------------------- -DROP TABLE IF EXISTS `iam_role_menu`; -CREATE TABLE `iam_role_menu` ( - `id` bigint(20) NOT NULL, - `role_id` bigint(20) NOT NULL COMMENT '角色id', - `client_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '终端code', - `permission_id` bigint(20) NOT NULL COMMENT '菜单权限id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色菜单权限表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role_menu --- ---------------------------- - --- ---------------------------- --- Table structure for iam_role_path --- ---------------------------- -DROP TABLE IF EXISTS `iam_role_path`; -CREATE TABLE `iam_role_path` ( - `id` bigint(20) NOT NULL, - `role_id` bigint(20) NOT NULL COMMENT '角色id', - `permission_id` bigint(20) NOT NULL COMMENT '请求权限id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色请求权限表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_role_path --- ---------------------------- - --- ---------------------------- --- Table structure for iam_user_data_scope --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_data_scope`; -CREATE TABLE `iam_user_data_scope` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `data_scope_id` bigint(20) NOT NULL COMMENT '数据权限ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户数据范围关系\r\n' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_data_scope --- ---------------------------- -INSERT INTO `iam_user_data_scope` VALUES (1477617820165345280, 1414143554414059520, 1474717084985270272); -INSERT INTO `iam_user_data_scope` VALUES (1477991040840290304, 1477990832987361280, 1477990439800721408); -INSERT INTO `iam_user_data_scope` VALUES (1477997504506077184, 1477997391729631232, 1477990268903804928); -INSERT INTO `iam_user_data_scope` VALUES (1477997685993611264, 1477997602862505984, 1474706893178871808); - --- ---------------------------- --- Table structure for iam_user_dept --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_dept`; -CREATE TABLE `iam_user_dept` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `dept_id` bigint(20) NOT NULL COMMENT '部门id', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户部门关联表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_dept --- ---------------------------- -INSERT INTO `iam_user_dept` VALUES (1450088892861501440, 1399985191002447872, 1259383345604300802); -INSERT INTO `iam_user_dept` VALUES (1477996765012533248, 1477990832987361280, 1477977592291053568); -INSERT INTO `iam_user_dept` VALUES (1477997463997489152, 1477997391729631232, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1477997655618461696, 1477997602862505984, 1477978610865197056); -INSERT INTO `iam_user_dept` VALUES (1478741775446118400, 1435967884114194432, 1477978810526650368); -INSERT INTO `iam_user_dept` VALUES (1478741775450312704, 1435967884114194432, 1477978464559484928); -INSERT INTO `iam_user_dept` VALUES (1478741775450312705, 1435967884114194432, 1477978610865197056); - --- ---------------------------- --- Table structure for iam_user_expand_info --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_expand_info`; -CREATE TABLE `iam_user_expand_info` ( - `id` bigint(20) NOT NULL, - `sex` int(4) NULL DEFAULT NULL COMMENT '性别', - `birthday` date NULL DEFAULT NULL COMMENT '生日', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '上次登录时间', - `current_login_time` datetime(0) NULL DEFAULT NULL COMMENT '本次登录时间', - `initial_password` bit(1) NOT NULL COMMENT '是否初始密码', - `last_change_password_time` datetime(0) NULL DEFAULT NULL COMMENT '上次修改密码时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户扩展信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_expand_info --- ---------------------------- -INSERT INTO `iam_user_expand_info` VALUES (1399985191002447872, 1, '1996-12-01', '1495331905770315776', '2022-10-29 08:44:52', '2022-11-02 09:59:06', b'0', '2022-06-19 21:25:00', 1, '2021-06-02 15:04:15', 0, '2022-11-02 09:59:06', 367, 0); -INSERT INTO `iam_user_expand_info` VALUES (1414143554414059520, 1, '2022-10-31', '1586953599627546624', '2022-11-02 21:32:23', '2022-11-02 21:33:21', b'0', NULL, 1, '2021-07-11 16:44:32', 0, '2022-11-02 21:33:21', 62, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435894470432456704, 1, NULL, NULL, '2022-09-16 16:48:16', '2022-09-17 17:20:58', b'0', '2022-06-29 00:39:23', 1399985191002447872, '2021-09-09 17:14:54', 0, '2022-09-17 17:20:58', 5, 0); -INSERT INTO `iam_user_expand_info` VALUES (1435967884114194432, 1, NULL, NULL, NULL, '2022-05-31 15:59:42', b'0', NULL, 1414143554414059520, '2021-09-09 22:06:37', 0, '2022-05-31 15:59:42', 1, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477990832987361280, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-01-03 21:10:49', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997391729631232, 1, NULL, NULL, NULL, NULL, b'0', NULL, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-01-03 21:36:53', 0, 0); -INSERT INTO `iam_user_expand_info` VALUES (1477997602862505984, 1, NULL, NULL, NULL, '2022-06-01 16:51:46', b'0', NULL, 1399985191002447872, '2022-01-03 21:37:43', 0, '2022-06-01 16:51:46', 1, 0); - --- ---------------------------- --- Table structure for iam_user_info --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_info`; -CREATE TABLE `iam_user_info` ( - `id` bigint(20) NOT NULL, - `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', - `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', - `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手机号', - `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱', - `client_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联终端ds', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '注册来源', - `admin` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否超级管理员', - `register_time` datetime(0) NULL DEFAULT NULL COMMENT '注册时间', - `status` tinyint(4) NOT NULL COMMENT '账号状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_info --- ---------------------------- -INSERT INTO `iam_user_info` VALUES (1399985191002447872, '小小明', 'xxm', 'f52020dca765fd3943ed40a615dc2c5c', '133****3333', 'x******@outlook.com', '1430430071299207168,1430430071299207169,1626840094767714304,1580487061605175296', NULL, NULL, b'1', '2021-06-02 15:04:12', 1, 1, '2021-06-02 15:04:15', 1414143554414059520, '2023-02-18 15:08:42', 55, 0); -INSERT INTO `iam_user_info` VALUES (1414143554414059520, '小小明1995', 'xxm1995', 'f52020dca765fd3943ed40a615dc2c5c', '130****0000', 'x******@foxmail.com', '1430430071299207168,1580487061605175296,1430430071299207169,1626840094767714304', NULL, NULL, b'1', '2021-07-11 16:44:31', 1, 1, '2021-07-11 16:44:32', 1414143554414059520, '2023-02-18 15:08:48', 9, 0); -INSERT INTO `iam_user_info` VALUES (1435894470432456704, '管理员', 'admin', 'f52020dca765fd3943ed40a615dc2c5c', '13000001111', 'admin@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 17:14:52', 1, 1399985191002447872, '2021-09-09 17:14:54', 1399985191002447872, '2022-09-16 16:41:51', 7, 0); -INSERT INTO `iam_user_info` VALUES (1435967884114194432, '测试', 'test', 'f52020dca765fd3943ed40a615dc2c5c', '13311111111', 'test@qq.com', '1430430071299207168', '', NULL, b'0', '2021-09-09 22:06:37', 1, 1414143554414059520, '2021-09-09 22:06:37', 1399985191002447872, '2022-05-31 15:59:37', 9, 0); -INSERT INTO `iam_user_info` VALUES (1477990832987361280, '测试用户001', 'test001', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:10:49', 1, 1399985191002447872, '2022-01-03 21:10:49', 1399985191002447872, '2022-06-05 20:26:26', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997391729631232, '测试用户002', 'test002', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:36:53', 1, 1399985191002447872, '2022-01-03 21:36:53', 1399985191002447872, '2022-06-05 20:26:19', 1, 0); -INSERT INTO `iam_user_info` VALUES (1477997602862505984, '测试用户003', 'test003', 'f52020dca765fd3943ed40a615dc2c5c', '', '', '1430430071299207168', '', NULL, b'0', '2022-01-03 21:37:43', 1, 1399985191002447872, '2022-01-03 21:37:43', 1399985191002447872, '2022-05-19 13:00:05', 4, 0); - --- ---------------------------- --- Table structure for iam_user_role --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_role`; -CREATE TABLE `iam_user_role` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户ID', - `role_id` bigint(20) NOT NULL COMMENT '角色ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系\r\n' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_role --- ---------------------------- -INSERT INTO `iam_user_role` VALUES (1533038443724980224, 1435894470432456704, 1405414804771971072); - --- ---------------------------- --- Table structure for iam_user_third --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_third`; -CREATE TABLE `iam_user_third` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', - `we_chat_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信openId', - `we_chat_open_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信开放平台id', - `qq_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'qqId', - `weibo_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微博Id', - `gitee_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '码云唯一标识', - `ding_talk_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉唯一标识', - `we_com_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业微信唯一标识', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_index`(`user_id`) USING BTREE COMMENT '用户id索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户三方登录绑定' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_third --- ---------------------------- - --- ---------------------------- --- Table structure for iam_user_third_info --- ---------------------------- -DROP TABLE IF EXISTS `iam_user_third_info`; -CREATE TABLE `iam_user_third_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '第三方终端类型', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', - `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户昵称', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户头像', - `third_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '关联第三方平台的用户id', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_client`(`user_id`, `client_code`) USING BTREE COMMENT '用户id和终端code' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户三方登录绑定详情' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of iam_user_third_info --- ---------------------------- - --- ---------------------------- --- Table structure for notice_mail_config --- ---------------------------- -DROP TABLE IF EXISTS `notice_mail_config`; -CREATE TABLE `notice_mail_config` ( - `id` bigint(20) NOT NULL, - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编号', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', - `host` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器host', - `port` int(5) NOT NULL COMMENT '邮箱服务器 port', - `username` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 username', - `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 password', - `sender` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 sender', - `from_` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 from', - `activity` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `security_type` int(2) NULL DEFAULT NULL COMMENT '安全传输方式 1:plain 2:tls 3:ssl', - `creator` bigint(18) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(18) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(8) NULL DEFAULT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_mail_config --- ---------------------------- -INSERT INTO `notice_mail_config` VALUES (1554739296333955072, 'fox', 'foxmail邮箱', 'smtp.qq.com', 465, 'sJfAJDDviYlqZ3BtdjMZF8V5jVSYCaMa9DNdVGDbe/s=', '7AtgVwObaO7wrsRpLvKkoo5O+udeEcFP1ONq4gYwOj0=', 'bootx-platform平台', 'xxm1995@foxmail.com', 1, 3, 1399985191002447872, '2022-08-03 16:01:49', 1399985191002447872, '2022-08-03 16:14:55', 0, 8); -INSERT INTO `notice_mail_config` VALUES (1584814372311744512, '11', '22', '33', 465, 'pwfAgEMJjGLjbVYEcgdXzA==', 'f3zJMwbPGmNRlNXpN5AMyA==', '666', '33333333@foxmail.com', 0, 1, 1414143554414059520, '2022-10-25 15:49:25', 1414143554414059520, '2022-10-25 16:27:12', 0, 10); - --- ---------------------------- --- Table structure for notice_message_template --- ---------------------------- -DROP TABLE IF EXISTS `notice_message_template`; -CREATE TABLE `notice_message_template` ( - `id` bigint(20) NOT NULL, - `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模板数据', - `type` int(11) NULL DEFAULT NULL COMMENT '模板类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息模板' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_message_template --- ---------------------------- -INSERT INTO `notice_message_template` VALUES (1424936204932169730, 'cs', '测试', 'hello ${msg}6666666666666666666666666666', 1, '测试模板', 0, '2021-08-10 11:30:40', 0, '2021-08-10 11:30:40', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573951326893510656, 'BpmTaskCreated', '流程任务创建事件', '流程任务创建事件', 0, '', 1399985191002447872, '2022-09-25 16:23:34', 1399985191002447872, '2022-09-25 16:23:34', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573951515616219136, 'BpmTaskAssignCreated', '流程任务更改处理人事件(新处理人)', '流程任务更改处理人事件(新处理人)', 0, '', 1399985191002447872, '2022-09-25 16:24:19', 1399985191002447872, '2022-09-25 16:27:09', 1, 0); -INSERT INTO `notice_message_template` VALUES (1573952505056727040, 'BpmTaskAssignCancel', '流程任务更改处理人事件(原处理人)', '流程任务更改处理人事件(原处理人)', 0, '', 1399985191002447872, '2022-09-25 16:28:14', 1399985191002447872, '2022-09-25 16:28:14', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952568654958592, 'BpmTaskCancel', '流程任务取消事件', '流程任务取消事件', 0, '', 1399985191002447872, '2022-09-25 16:28:30', 1399985191002447872, '2022-09-25 16:28:30', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952621826150400, 'BpmTaskReject', '流程任务驳回事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-09-25 16:28:42', 1399985191002447872, '2022-09-25 16:28:42', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952709432578048, 'BpmInstanceCompleted', '流程完成时通知发起人', '流程完成时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:03', 1399985191002447872, '2022-09-25 16:29:03', 0, 0); -INSERT INTO `notice_message_template` VALUES (1573952762507300864, 'BpmInstanceCancel', '流程取消时通知发起人', '流程取消时通知发起人', 0, '', 1399985191002447872, '2022-09-25 16:29:16', 1399985191002447872, '2022-09-25 16:29:16', 0, 0); -INSERT INTO `notice_message_template` VALUES (1580083314274070528, 'BpmTaskBack', '流程任务回退事件', '流程任务驳回事件', 0, '', 1399985191002447872, '2022-10-12 14:29:53', 1399985191002447872, '2022-10-12 14:30:11', 1, 0); - --- ---------------------------- --- Table structure for notice_site_message --- ---------------------------- -DROP TABLE IF EXISTS `notice_site_message`; -CREATE TABLE `notice_site_message` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息标题', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '消息内容', - `sender_id` bigint(20) NULL DEFAULT NULL COMMENT '发送者id', - `sender_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发送者姓名', - `sender_time` datetime(0) NULL DEFAULT NULL COMMENT '发送时间', - `receive_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息类型', - `send_state` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布状态', - `efficient_time` datetime(0) NULL DEFAULT NULL COMMENT '截至有效期', - `cancel_time` datetime(0) NULL DEFAULT NULL COMMENT '撤回时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '站内信' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_site_message --- ---------------------------- -INSERT INTO `notice_site_message` VALUES (1424212599079161857, '测试消息', '
55
5
5
5
5
5
5
5
5
5
5
5
6等非撒扥森速度扥三扥所
6
8
8
5撒扥森森的
5
5撒扥岁送
8
8
8
', 1399985191002447872, '小小明', '2021-08-08 11:34:11', 'all', 'cancel', NULL, '2022-08-21 23:01:16', 1399985191002447872, '2021-08-08 11:35:19', 1399985191002447872, '2022-08-21 23:01:16', 1, 0); -INSERT INTO `notice_site_message` VALUES (1558781525200130048, '测试站内信', '
sdfsdfsdf
  1. 333
  • 4444
  • 3443434
', 0, '未知', '2022-08-14 19:44:11', NULL, 'sent', NULL, NULL, 0, '2022-08-14 19:44:11', 0, '2022-08-14 19:44:11', 0, 0); -INSERT INTO `notice_site_message` VALUES (1561363288741085184, '测试消息', '

三扥广丰和扥撒扥撒扥东方

', 1399985191002447872, '小小明', '2022-08-21 22:59:45', 'all', 'draft', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:43:11', 1399985191002447872, '2022-08-21 23:23:03', 4, 1); -INSERT INTO `notice_site_message` VALUES (1561365894804766720, '测试数据', '

234554通扥广森

', 1399985191002447872, '小小明', '2022-08-21 23:48:55', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 22:53:33', 1399985191002447872, '2022-08-21 23:48:55', 1, 0); -INSERT INTO `notice_site_message` VALUES (1561368170558623744, '测试数据', '

234554通扥广森

DFF

撒扥萨芬的

11
33
44
风很高
', 1399985191002447872, '小小明', '2022-08-21 23:33:01', 'all', 'sent', '2022-09-20 00:00:00', NULL, 1399985191002447872, '2022-08-21 23:02:35', 1399985191002447872, '2022-08-21 23:33:01', 7, 0); - --- ---------------------------- --- Table structure for notice_site_message_user --- ---------------------------- -DROP TABLE IF EXISTS `notice_site_message_user`; -CREATE TABLE `notice_site_message_user` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `message_id` bigint(20) NOT NULL COMMENT '消息id', - `receive_id` bigint(20) NOT NULL COMMENT '接收者id', - `have_read` bit(1) NOT NULL COMMENT '已读/未读', - `read_time` datetime(0) NULL DEFAULT NULL COMMENT '已读时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uni_receive_message`(`receive_id`, `message_id`) USING BTREE COMMENT '接收人和消息联合索引', - INDEX `inx_message`(`message_id`) USING BTREE COMMENT '消息索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '消息用户关联' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_site_message_user --- ---------------------------- -INSERT INTO `notice_site_message_user` VALUES (1558781525422428160, 1558781525200130048, 1399985191002447872, b'1', '2022-08-14 19:47:53', 0, '2022-08-14 19:44:11', 0); -INSERT INTO `notice_site_message_user` VALUES (1559917646856540160, 1424212599079161857, 1399985191002447872, b'1', '2022-08-17 22:58:43', 1399985191002447872, '2022-08-17 22:58:44', 0); -INSERT INTO `notice_site_message_user` VALUES (1561379790089302016, 1561368170558623744, 1399985191002447872, b'1', '2022-08-21 23:48:43', 1399985191002447872, '2022-08-21 23:48:46', 0); -INSERT INTO `notice_site_message_user` VALUES (1561379841968648192, 1561365894804766720, 1399985191002447872, b'1', '2022-08-21 23:48:58', 1399985191002447872, '2022-08-21 23:48:58', 0); - --- ---------------------------- --- Table structure for notice_sms_config --- ---------------------------- -DROP TABLE IF EXISTS `notice_sms_config`; -CREATE TABLE `notice_sms_config` ( - `id` bigint(18) NOT NULL, - `tid` bigint(18) NOT NULL COMMENT '租户id', - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `account_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `path_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送号码的唯一标识(基于twillio的命名风格)', - `auth_token` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `from_num` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, - `version` int(10) NULL DEFAULT NULL, - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `isp` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `reply_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_sms_config --- ---------------------------- - --- ---------------------------- --- Table structure for notice_wechat_config --- ---------------------------- -DROP TABLE IF EXISTS `notice_wechat_config`; -CREATE TABLE `notice_wechat_config` ( - `id` bigint(18) NOT NULL, - `tid` bigint(18) NOT NULL COMMENT '租户id', - `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `corp_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `corp_secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', - `creator` bigint(18) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - `last_modifier` bigint(18) NULL DEFAULT NULL, - `last_modified_time` datetime(0) NULL DEFAULT NULL, - `version` int(10) NULL DEFAULT NULL, - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '微信消息配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of notice_wechat_config --- ---------------------------- -INSERT INTO `notice_wechat_config` VALUES (181361815405135421, 0, 'test01', 'test01', 'ww9d6247559117d202', '8n6A3SzN-DJNkw8wyCcJnr8-SOjFFWSOlBqZN8vypKM', 1, 1415, '2018-11-20 11:07:07', 1415, '2018-11-20 11:07:07', 0, 0); - --- ---------------------------- --- Table structure for pay_ali_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_ali_payment`; -CREATE TABLE `pay_ali_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `trade_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付宝关联流水号', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NULL DEFAULT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_ali_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_alipay_config --- ---------------------------- -DROP TABLE IF EXISTS `pay_alipay_config`; -CREATE TABLE `pay_alipay_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', - `app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付宝商户appId', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `server_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求网关地址', - `auth_type` int(4) NOT NULL COMMENT '认证方式', - `sign_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '签名类型', - `alipay_public_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥', - `private_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '私钥', - `app_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '应用公钥', - `alipay_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝公钥证书', - `alipay_root_cert` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付宝CA根证书', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `expire_time` int(10) NOT NULL COMMENT '超时配置', - `pay_ways` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支持的支付类型', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付宝配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_alipay_config --- ---------------------------- - --- ---------------------------- --- Table structure for pay_cash_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_cash_payment`; -CREATE TABLE `pay_cash_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '现金交易记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_cash_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_notify_record --- ---------------------------- -DROP TABLE IF EXISTS `pay_pay_notify_record`; -CREATE TABLE `pay_pay_notify_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付号', - `notify_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知消息', - `pay_channel` int(11) NOT NULL COMMENT '支付通道', - `status` int(2) NOT NULL COMMENT '处理状态', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示信息', - `notify_time` datetime(6) NULL DEFAULT NULL COMMENT '回调时间', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付回调记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_notify_record --- ---------------------------- - --- ---------------------------- --- Table structure for pay_pay_order_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_pay_order_log`; -CREATE TABLE `pay_pay_order_log` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_pay_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单扩展业务参数', - `pay_order_param` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '订单参数', - `creator` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(6) NULL DEFAULT NULL, - `last_modifier` bigint(20) NULL DEFAULT NULL, - `last_modified_time` datetime(6) NULL DEFAULT NULL, - `version` int(11) NOT NULL, - `deleted` bit(1) NOT NULL, - `tid` bigint(20) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付关联订单信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_pay_order_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_payment`; -CREATE TABLE `pay_payment` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务id', - `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `description` varchar(240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款余额', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `pay_type_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付信息', - `async_pay_mode` bit(1) NOT NULL COMMENT '是否是异步支付', - `async_pay_channel` int(11) NULL DEFAULT NULL COMMENT '异步支付方式', - `pay_channel_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支付通道信息列表', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `expired_time` datetime(6) NULL DEFAULT NULL COMMENT '过期时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uniq_business_id`(`business_id`) USING BTREE COMMENT '业务编号id, 唯一ID' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_refund_record --- ---------------------------- -DROP TABLE IF EXISTS `pay_refund_record`; -CREATE TABLE `pay_refund_record` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '支付记录id', - `business_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联业务id', - `refund_request_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '异步方式关联退款请求号', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题', - `amount` decimal(19, 2) NOT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '剩余可退款金额', - `refundable_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '可退款信息', - `refund_status` int(2) NULL DEFAULT NULL COMMENT '退款状态', - `refund_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ip', - `error_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误码', - `error_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '退款记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_refund_record --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher`; -CREATE TABLE `pay_voucher` ( - `id` bigint(20) NOT NULL, - `card_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '卡号', - `batch_no` bigint(20) NULL DEFAULT NULL COMMENT '批次号', - `face_value` decimal(15, 2) NULL DEFAULT NULL COMMENT '面值', - `balance` decimal(15, 2) NULL DEFAULT NULL COMMENT '余额', - `enduring` bit(1) NOT NULL COMMENT '是否长期有效', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `status` int(2) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher_log`; -CREATE TABLE `pay_voucher_log` ( - `id` bigint(20) NOT NULL, - `voucher_id` bigint(20) NOT NULL, - `voucher_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `amount` decimal(19, 2) NULL DEFAULT NULL, - `type` int(5) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_voucher_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_voucher_payment`; -CREATE TABLE `pay_voucher_payment` ( - `id` bigint(20) NOT NULL, - `voucher_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '储值卡id列表', - `payment_id` bigint(20) NOT NULL COMMENT '支付id', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_status` int(11) NULL DEFAULT NULL COMMENT '支付状态', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '储值卡支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_voucher_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wallet --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet`; -CREATE TABLE `pay_wallet` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL COMMENT '关联用户id', - `balance` decimal(19, 2) NOT NULL COMMENT '余额', - `status` int(11) NOT NULL COMMENT '状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE, - INDEX `pk_user_id`(`user_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet --- ---------------------------- -INSERT INTO `pay_wallet` VALUES (1336489524259352576, 1399985191002447872, 999982.96, 1, NULL, '2022-03-11 21:37:33', 1399985191002447872, '2022-05-03 21:24:04', 29, 0); -INSERT INTO `pay_wallet` VALUES (1502554238582968320, 1414143554414059520, 1019.00, 1, 1399985191002447872, '2022-03-12 15:57:01', 1399985191002447872, '2022-03-13 11:21:10', 2, 0); -INSERT INTO `pay_wallet` VALUES (1502848353136791552, 1435894470432456704, 100.00, 1, 1399985191002447872, '2022-03-13 11:25:44', 1399985191002447872, '2022-03-24 13:22:37', 1, 0); - --- ---------------------------- --- Table structure for pay_wallet_log --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet_log`; -CREATE TABLE `pay_wallet_log` ( - `id` bigint(20) NOT NULL, - `wallet_id` bigint(20) NOT NULL COMMENT '钱包id', - `user_id` bigint(20) NOT NULL COMMENT '用户id', - `type` int(11) NOT NULL COMMENT '类型', - `payment_id` bigint(20) NULL DEFAULT NULL COMMENT '交易记录ID', - `client_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作终端ip', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务ID', - `operation_source` int(11) NOT NULL COMMENT '操作源', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '金额', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_log --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wallet_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_wallet_payment`; -CREATE TABLE `pay_wallet_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `wallet_id` bigint(20) NULL DEFAULT NULL COMMENT '钱包ID', - `amount` decimal(19, 2) NULL DEFAULT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钱包交易记录表' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wallet_payment --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_pay_config --- ---------------------------- -DROP TABLE IF EXISTS `pay_wechat_pay_config`; -CREATE TABLE `pay_wechat_pay_config` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `app_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信应用AppId', - `mch_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户号', - `api_version` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务商应用编号', - `api_key_v2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv2 密钥', - `api_key_v3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商户平台「API安全」中的 APIv3 密钥', - `app_secret` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'APPID对应的接口密码,用于获取接口调用凭证access_token时使用', - `p12` bigint(20) NULL DEFAULT NULL COMMENT 'p12的文件id', - `cert_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 cert.pem', - `key_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'API 证书中的 key.pem', - `domain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '应用域名,回调中会使用此参数', - `notify_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器异步通知页面路径', - `return_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '页面跳转同步通知页面路径', - `pay_ways` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '支持的支付类型', - `sandbox` bit(1) NOT NULL COMMENT '是否沙箱环境', - `expire_time` int(10) NOT NULL COMMENT '超时配置', - `activity` bit(1) NOT NULL COMMENT '是否启用', - `state` int(11) NULL DEFAULT NULL COMMENT '状态', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wechat_pay_config --- ---------------------------- - --- ---------------------------- --- Table structure for pay_wechat_payment --- ---------------------------- -DROP TABLE IF EXISTS `pay_wechat_payment`; -CREATE TABLE `pay_wechat_payment` ( - `id` bigint(20) NOT NULL, - `payment_id` bigint(20) NOT NULL COMMENT '交易记录ID', - `pay_status` int(11) NOT NULL COMMENT '支付状态', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', - `trade_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信交易号', - `amount` decimal(19, 2) NOT NULL COMMENT '交易金额', - `refundable_balance` decimal(19, 2) NULL DEFAULT NULL COMMENT '可退款金额', - `business_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务id', - `pay_time` datetime(6) NULL DEFAULT NULL COMMENT '支付时间', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信支付记录' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of pay_wechat_payment --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_blob_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_blob_triggers`; -CREATE TABLE `qrtz_blob_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `BLOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_blob_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_calendars --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_calendars`; -CREATE TABLE `qrtz_calendars` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR` blob NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_calendars --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_cron_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_cron_triggers`; -CREATE TABLE `qrtz_cron_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_cron_triggers --- ---------------------------- -INSERT INTO `qrtz_cron_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '0/5 * * * * ? *', 'Asia/Shanghai'); - --- ---------------------------- --- Table structure for qrtz_fired_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_fired_triggers`; -CREATE TABLE `qrtz_fired_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `FIRED_TIME` bigint(13) NOT NULL, - `SCHED_TIME` bigint(13) NOT NULL, - `PRIORITY` int(11) NOT NULL, - `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, - INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, - INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, - INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_fired_triggers --- ---------------------------- -INSERT INTO `qrtz_fired_triggers` VALUES ('quartzScheduler', 'NON_CLUSTERED1663741439856', '1546857070483939328', 'DEFAULT', 'NON_CLUSTERED', 1663741920988, 1663741925000, 5, 'ACQUIRED', NULL, NULL, '0', '0'); - --- ---------------------------- --- Table structure for qrtz_job_details --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_job_details`; -CREATE TABLE `qrtz_job_details` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_job_details --- ---------------------------- -INSERT INTO `qrtz_job_details` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', NULL, 'cn.bootx.payment.task.PayExpiredTimeTask', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800); - --- ---------------------------- --- Table structure for qrtz_locks --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_locks`; -CREATE TABLE `qrtz_locks` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_locks --- ---------------------------- -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'STATE_ACCESS'); -INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); - --- ---------------------------- --- Table structure for qrtz_paused_trigger_grps --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; -CREATE TABLE `qrtz_paused_trigger_grps` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_paused_trigger_grps --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_scheduler_state --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_scheduler_state`; -CREATE TABLE `qrtz_scheduler_state` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `LAST_CHECKIN_TIME` bigint(13) NOT NULL, - `CHECKIN_INTERVAL` bigint(13) NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_scheduler_state --- ---------------------------- -INSERT INTO `qrtz_scheduler_state` VALUES ('quartzScheduler', 'xxm1638448483700', 1638451157328, 10000); - --- ---------------------------- --- Table structure for qrtz_simple_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_simple_triggers`; -CREATE TABLE `qrtz_simple_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REPEAT_COUNT` bigint(7) NOT NULL, - `REPEAT_INTERVAL` bigint(12) NOT NULL, - `TIMES_TRIGGERED` bigint(10) NOT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_simple_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_simprop_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_simprop_triggers`; -CREATE TABLE `qrtz_simprop_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `INT_PROP_1` int(11) NULL DEFAULT NULL, - `INT_PROP_2` int(11) NULL DEFAULT NULL, - `LONG_PROP_1` bigint(20) NULL DEFAULT NULL, - `LONG_PROP_2` bigint(20) NULL DEFAULT NULL, - `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, - `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, - `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_simprop_triggers --- ---------------------------- - --- ---------------------------- --- Table structure for qrtz_triggers --- ---------------------------- -DROP TABLE IF EXISTS `qrtz_triggers`; -CREATE TABLE `qrtz_triggers` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL, - `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL, - `PRIORITY` int(11) NULL DEFAULT NULL, - `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `START_TIME` bigint(13) NOT NULL, - `END_TIME` bigint(13) NULL DEFAULT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL, - `JOB_DATA` blob NULL, - PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, - INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, - INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, - INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, - CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of qrtz_triggers --- ---------------------------- -INSERT INTO `qrtz_triggers` VALUES ('quartzScheduler', '1546857070483939328', 'DEFAULT', '1546857070483939328', 'DEFAULT', NULL, 1663741925000, 1663741920000, 5, 'ACQUIRED', 'CRON', 1657634445000, 0, NULL, 0, ''); - --- ---------------------------- --- Table structure for report_project_info --- ---------------------------- -DROP TABLE IF EXISTS `report_project_info`; -CREATE TABLE `report_project_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目名称', - `state` int(11) NULL DEFAULT NULL COMMENT '发布状态', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '乐观锁', - `deleted` bit(1) NOT NULL COMMENT '删除标志', - `index_image` bigint(20) NULL DEFAULT NULL COMMENT '预览图片id', - `edit` bit(1) NULL DEFAULT NULL COMMENT '是否在编辑中', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of report_project_info --- ---------------------------- - --- ---------------------------- --- Table structure for report_project_info_publish --- ---------------------------- -DROP TABLE IF EXISTS `report_project_info_publish`; -CREATE TABLE `report_project_info_publish` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '乐观锁', - `deleted` bit(1) NOT NULL COMMENT '删除标志', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏发布信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of report_project_info_publish --- ---------------------------- - --- ---------------------------- --- Table structure for starter_audit_data_version --- ---------------------------- -DROP TABLE IF EXISTS `starter_audit_data_version`; -CREATE TABLE `starter_audit_data_version` ( - `id` bigint(20) NOT NULL, - `table_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据表名称', - `data_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据名称', - `data_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据主键', - `data_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据内容', - `change_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据更新内容', - `version` int(10) NOT NULL COMMENT '版本', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据版本日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_data_version --- ---------------------------- -INSERT INTO `starter_audit_data_version` VALUES (1480550993828446208, '', 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:43:58\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', NULL, 1, 0, '2022-01-10 22:43:59'); -INSERT INTO `starter_audit_data_version` VALUES (1480551021779288064, '', 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:44:05\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', NULL, 2, 0, '2022-01-10 22:44:06'); - --- ---------------------------- --- Table structure for starter_audit_login_log --- ---------------------------- -DROP TABLE IF EXISTS `starter_audit_login_log`; -CREATE TABLE `starter_audit_login_log` ( - `id` bigint(20) NOT NULL, - `user_id` bigint(11) NULL DEFAULT NULL COMMENT '用户id', - `account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名称', - `login` bit(1) NULL DEFAULT NULL COMMENT '登录成功状态', - `client` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '终端', - `login_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录方式', - `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录IP地址', - `login_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录地点', - `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', - `browser` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器类型', - `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示消息', - `login_time` datetime(0) NULL DEFAULT NULL COMMENT '访问时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登陆日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_login_log --- ---------------------------- - --- ---------------------------- --- Table structure for starter_audit_operate_log --- ---------------------------- -DROP TABLE IF EXISTS `starter_audit_operate_log`; -CREATE TABLE `starter_audit_operate_log` ( - `id` bigint(20) NOT NULL, - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作模块', - `operate_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人员id', - `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作人员账号', - `business_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务类型', - `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方法', - `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', - `operate_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求url', - `operate_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作ip', - `operate_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作地点', - `operate_param` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求参数', - `operate_return` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回参数', - `success` bit(1) NULL DEFAULT NULL COMMENT '是否成功', - `error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误提示', - `operate_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_audit_operate_log --- ---------------------------- - --- ---------------------------- --- Table structure for starter_ding_media_md5 --- ---------------------------- -DROP TABLE IF EXISTS `starter_ding_media_md5`; -CREATE TABLE `starter_ding_media_md5` ( - `id` bigint(20) NOT NULL, - `media_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '媒体id', - `md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'md5值', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉媒体文件MD5值关联关系' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_ding_media_md5 --- ---------------------------- - --- ---------------------------- --- Table structure for starter_ding_robot_config --- ---------------------------- -DROP TABLE IF EXISTS `starter_ding_robot_config`; -CREATE TABLE `starter_ding_robot_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', - `access_token` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人访问token', - `enable_signature_check` bit(1) NOT NULL COMMENT '是否开启验签', - `sign_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人私钥', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉机器人配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_ding_robot_config --- ---------------------------- - --- ---------------------------- --- Table structure for starter_file_upload_info --- ---------------------------- -DROP TABLE IF EXISTS `starter_file_upload_info`; -CREATE TABLE `starter_file_upload_info` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '存储位置', - `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名称', - `file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件类型', - `file_suffix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件后缀', - `file_size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小', - `external_storage_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '外部关联id', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '上传文件信息' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_file_upload_info --- ---------------------------- -INSERT INTO `starter_file_upload_info` VALUES (1495330622946631680, NULL, 'blob', 'jpg', 'jpg', 68, '62120ac9efeec06e2275fc52', 1399985191002447872, '2022-02-20 17:32:57'); -INSERT INTO `starter_file_upload_info` VALUES (1495331213525606400, NULL, 'blob', 'jpg', 'jpg', 68, '62120b55efeec06e2275fc54', 1399985191002447872, '2022-02-20 17:35:28'); -INSERT INTO `starter_file_upload_info` VALUES (1495331812178616320, NULL, 'blob', 'jpg', 'jpg', 74, '62120be4efeec06e2275fc56', 1399985191002447872, '2022-02-20 17:37:43'); -INSERT INTO `starter_file_upload_info` VALUES (1495331905770315776, NULL, 'blob', 'jpg', 'jpg', 76, '62120bfaefeec06e2275fc58', 1399985191002447872, '2022-02-20 17:38:03'); -INSERT INTO `starter_file_upload_info` VALUES (1530065639127871488, NULL, 'blob', 'jpg', 'jpg', 83, '6290684abf0e90583f414dcf', 1414143554414059520, '2022-05-27 13:57:31'); - --- ---------------------------- --- Table structure for starter_quartz_job --- ---------------------------- -DROP TABLE IF EXISTS `starter_quartz_job`; -CREATE TABLE `starter_quartz_job` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称', - `job_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务类名', - `cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'cron表达式', - `parameter` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数', - `state` int(4) NULL DEFAULT NULL COMMENT '状态', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_quartz_job --- ---------------------------- -INSERT INTO `starter_quartz_job` VALUES (1456579473573867520, '测试任务', 'cn.bootx.starter.quartz.task.TestTask', '50 0 * * * ? *', '{\"aaa\":\"5255\"}', 0, '测试任务', 1399985191002447872, '2021-11-05 19:09:43', 1399985191002447872, '2022-06-22 00:37:48', 25, 0); -INSERT INTO `starter_quartz_job` VALUES (1546857070483939328, '支付单超时检测', 'cn.bootx.payment.task.PayExpiredTimeTask', '0/5 * * * * ? *', NULL, 1, '检测超时的支付单, 超时后发送超时事件', 1399985191002447872, '2022-07-12 22:00:39', 1399985191002447872, '2022-07-12 22:00:45', 1, 0); - --- ---------------------------- --- Table structure for starter_quartz_job_log --- ---------------------------- -DROP TABLE IF EXISTS `starter_quartz_job_log`; -CREATE TABLE `starter_quartz_job_log` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `handler_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器名称', - `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器全限定名', - `success` bit(1) NOT NULL COMMENT '是否执行成功', - `error_message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', - `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', - `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', - `duration` bigint(255) NULL DEFAULT NULL COMMENT '执行时长', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务执行日志' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_quartz_job_log --- ---------------------------- - --- ---------------------------- --- Table structure for starter_wecom_robot_config --- ---------------------------- -DROP TABLE IF EXISTS `starter_wecom_robot_config`; -CREATE TABLE `starter_wecom_robot_config` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', - `webhook_key` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'webhook地址的key值', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信机器人配置' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_wecom_robot_config --- ---------------------------- - --- ---------------------------- --- Table structure for starter_wx_fans --- ---------------------------- -DROP TABLE IF EXISTS `starter_wx_fans`; -CREATE TABLE `starter_wx_fans` ( - `id` bigint(20) NOT NULL, - `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联OpenId', - `subscribe_status` bit(1) NULL DEFAULT NULL COMMENT '订阅状态', - `subscribe_time` datetime(0) NULL DEFAULT NULL COMMENT '订阅时间', - `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称', - `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别', - `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '语言', - `country` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家', - `province` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份', - `city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市', - `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像地址', - `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号粉丝' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_wx_fans --- ---------------------------- - --- ---------------------------- --- Table structure for starter_wx_menu --- ---------------------------- -DROP TABLE IF EXISTS `starter_wx_menu`; -CREATE TABLE `starter_wx_menu` ( - `id` bigint(20) NOT NULL COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称', - `menu_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '菜单信息', - `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', - `publish` bit(1) NOT NULL COMMENT '是否发布', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', - `version` int(11) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '微信自定义菜单' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_wx_menu --- ---------------------------- - --- ---------------------------- --- Table structure for starter_wx_template --- ---------------------------- -DROP TABLE IF EXISTS `starter_wx_template`; -CREATE TABLE `starter_wx_template` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', - `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', - `enable` bit(1) NOT NULL COMMENT '是否启用', - `template_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板ID', - `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板标题', - `primary_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的一级行业', - `deputy_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的二级行业', - `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板内容', - `example` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '示例', - `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', - `last_modified_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改时间', - `version` int(11) NOT NULL COMMENT '版本', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `inx_`(`template_id`) USING BTREE COMMENT '模板id' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息模板' ROW_FORMAT = DYNAMIC; - --- ---------------------------- --- Records of starter_wx_template --- ---------------------------- - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/bootx-start/src/main/resources/db/migration/V1.3.6_240131__release.sql b/bootx-start/src/main/resources/db/migration/V1.3.6_240131__release.sql new file mode 100644 index 000000000..4033c873d --- /dev/null +++ b/bootx-start/src/main/resources/db/migration/V1.3.6_240131__release.sql @@ -0,0 +1,5359 @@ +/* + Navicat Premium Data Transfer + + Source Server Type : MySQL + + Target Server Type : MySQL + File Encoding : 65001 + + Date: 31/01/2024 10:42:54 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for base_area +-- ---------------------------- +DROP TABLE IF EXISTS `base_area`; +CREATE TABLE `base_area` ( + `code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '区域名称', + `city_code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '城市编码', + PRIMARY KEY (`code`) USING BTREE, + INDEX `inx_city_code`(`city_code`) USING BTREE COMMENT '城市' +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '县区表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_area +-- ---------------------------- +INSERT INTO `base_area` VALUES ('110101', '东城区', '1101'); +INSERT INTO `base_area` VALUES ('110102', '西城区', '1101'); +INSERT INTO `base_area` VALUES ('110105', '朝阳区', '1101'); +INSERT INTO `base_area` VALUES ('110106', '丰台区', '1101'); +INSERT INTO `base_area` VALUES ('110107', '石景山区', '1101'); +INSERT INTO `base_area` VALUES ('110108', '海淀区', '1101'); +INSERT INTO `base_area` VALUES ('110109', '门头沟区', '1101'); +INSERT INTO `base_area` VALUES ('110111', '房山区', '1101'); +INSERT INTO `base_area` VALUES ('110112', '通州区', '1101'); +INSERT INTO `base_area` VALUES ('110113', '顺义区', '1101'); +INSERT INTO `base_area` VALUES ('110114', '昌平区', '1101'); +INSERT INTO `base_area` VALUES ('110115', '大兴区', '1101'); +INSERT INTO `base_area` VALUES ('110116', '怀柔区', '1101'); +INSERT INTO `base_area` VALUES ('110117', '平谷区', '1101'); +INSERT INTO `base_area` VALUES ('110118', '密云区', '1101'); +INSERT INTO `base_area` VALUES ('110119', '延庆区', '1101'); +INSERT INTO `base_area` VALUES ('120101', '和平区', '1201'); +INSERT INTO `base_area` VALUES ('120102', '河东区', '1201'); +INSERT INTO `base_area` VALUES ('120103', '河西区', '1201'); +INSERT INTO `base_area` VALUES ('120104', '南开区', '1201'); +INSERT INTO `base_area` VALUES ('120105', '河北区', '1201'); +INSERT INTO `base_area` VALUES ('120106', '红桥区', '1201'); +INSERT INTO `base_area` VALUES ('120110', '东丽区', '1201'); +INSERT INTO `base_area` VALUES ('120111', '西青区', '1201'); +INSERT INTO `base_area` VALUES ('120112', '津南区', '1201'); +INSERT INTO `base_area` VALUES ('120113', '北辰区', '1201'); +INSERT INTO `base_area` VALUES ('120114', '武清区', '1201'); +INSERT INTO `base_area` VALUES ('120115', '宝坻区', '1201'); +INSERT INTO `base_area` VALUES ('120116', '滨海新区', '1201'); +INSERT INTO `base_area` VALUES ('120117', '宁河区', '1201'); +INSERT INTO `base_area` VALUES ('120118', '静海区', '1201'); +INSERT INTO `base_area` VALUES ('120119', '蓟州区', '1201'); +INSERT INTO `base_area` VALUES ('130102', '长安区', '1301'); +INSERT INTO `base_area` VALUES ('130104', '桥西区', '1301'); +INSERT INTO `base_area` VALUES ('130105', '新华区', '1301'); +INSERT INTO `base_area` VALUES ('130107', '井陉矿区', '1301'); +INSERT INTO `base_area` VALUES ('130108', '裕华区', '1301'); +INSERT INTO `base_area` VALUES ('130109', '藁城区', '1301'); +INSERT INTO `base_area` VALUES ('130110', '鹿泉区', '1301'); +INSERT INTO `base_area` VALUES ('130111', '栾城区', '1301'); +INSERT INTO `base_area` VALUES ('130121', '井陉县', '1301'); +INSERT INTO `base_area` VALUES ('130123', '正定县', '1301'); +INSERT INTO `base_area` VALUES ('130125', '行唐县', '1301'); +INSERT INTO `base_area` VALUES ('130126', '灵寿县', '1301'); +INSERT INTO `base_area` VALUES ('130127', '高邑县', '1301'); +INSERT INTO `base_area` VALUES ('130128', '深泽县', '1301'); +INSERT INTO `base_area` VALUES ('130129', '赞皇县', '1301'); +INSERT INTO `base_area` VALUES ('130130', '无极县', '1301'); +INSERT INTO `base_area` VALUES ('130131', '平山县', '1301'); +INSERT INTO `base_area` VALUES ('130132', '元氏县', '1301'); +INSERT INTO `base_area` VALUES ('130133', '赵县', '1301'); +INSERT INTO `base_area` VALUES ('130171', '石家庄高新技术产业开发区', '1301'); +INSERT INTO `base_area` VALUES ('130172', '石家庄循环化工园区', '1301'); +INSERT INTO `base_area` VALUES ('130181', '辛集市', '1301'); +INSERT INTO `base_area` VALUES ('130183', '晋州市', '1301'); +INSERT INTO `base_area` VALUES ('130184', '新乐市', '1301'); +INSERT INTO `base_area` VALUES ('130202', '路南区', '1302'); +INSERT INTO `base_area` VALUES ('130203', '路北区', '1302'); +INSERT INTO `base_area` VALUES ('130204', '古冶区', '1302'); +INSERT INTO `base_area` VALUES ('130205', '开平区', '1302'); +INSERT INTO `base_area` VALUES ('130207', '丰南区', '1302'); +INSERT INTO `base_area` VALUES ('130208', '丰润区', '1302'); +INSERT INTO `base_area` VALUES ('130209', '曹妃甸区', '1302'); +INSERT INTO `base_area` VALUES ('130224', '滦南县', '1302'); +INSERT INTO `base_area` VALUES ('130225', '乐亭县', '1302'); +INSERT INTO `base_area` VALUES ('130227', '迁西县', '1302'); +INSERT INTO `base_area` VALUES ('130229', '玉田县', '1302'); +INSERT INTO `base_area` VALUES ('130271', '河北唐山芦台经济开发区', '1302'); +INSERT INTO `base_area` VALUES ('130272', '唐山市汉沽管理区', '1302'); +INSERT INTO `base_area` VALUES ('130273', '唐山高新技术产业开发区', '1302'); +INSERT INTO `base_area` VALUES ('130274', '河北唐山海港经济开发区', '1302'); +INSERT INTO `base_area` VALUES ('130281', '遵化市', '1302'); +INSERT INTO `base_area` VALUES ('130283', '迁安市', '1302'); +INSERT INTO `base_area` VALUES ('130284', '滦州市', '1302'); +INSERT INTO `base_area` VALUES ('130302', '海港区', '1303'); +INSERT INTO `base_area` VALUES ('130303', '山海关区', '1303'); +INSERT INTO `base_area` VALUES ('130304', '北戴河区', '1303'); +INSERT INTO `base_area` VALUES ('130306', '抚宁区', '1303'); +INSERT INTO `base_area` VALUES ('130321', '青龙满族自治县', '1303'); +INSERT INTO `base_area` VALUES ('130322', '昌黎县', '1303'); +INSERT INTO `base_area` VALUES ('130324', '卢龙县', '1303'); +INSERT INTO `base_area` VALUES ('130371', '秦皇岛市经济技术开发区', '1303'); +INSERT INTO `base_area` VALUES ('130372', '北戴河新区', '1303'); +INSERT INTO `base_area` VALUES ('130402', '邯山区', '1304'); +INSERT INTO `base_area` VALUES ('130403', '丛台区', '1304'); +INSERT INTO `base_area` VALUES ('130404', '复兴区', '1304'); +INSERT INTO `base_area` VALUES ('130406', '峰峰矿区', '1304'); +INSERT INTO `base_area` VALUES ('130407', '肥乡区', '1304'); +INSERT INTO `base_area` VALUES ('130408', '永年区', '1304'); +INSERT INTO `base_area` VALUES ('130423', '临漳县', '1304'); +INSERT INTO `base_area` VALUES ('130424', '成安县', '1304'); +INSERT INTO `base_area` VALUES ('130425', '大名县', '1304'); +INSERT INTO `base_area` VALUES ('130426', '涉县', '1304'); +INSERT INTO `base_area` VALUES ('130427', '磁县', '1304'); +INSERT INTO `base_area` VALUES ('130430', '邱县', '1304'); +INSERT INTO `base_area` VALUES ('130431', '鸡泽县', '1304'); +INSERT INTO `base_area` VALUES ('130432', '广平县', '1304'); +INSERT INTO `base_area` VALUES ('130433', '馆陶县', '1304'); +INSERT INTO `base_area` VALUES ('130434', '魏县', '1304'); +INSERT INTO `base_area` VALUES ('130435', '曲周县', '1304'); +INSERT INTO `base_area` VALUES ('130471', '邯郸经济技术开发区', '1304'); +INSERT INTO `base_area` VALUES ('130473', '邯郸冀南新区', '1304'); +INSERT INTO `base_area` VALUES ('130481', '武安市', '1304'); +INSERT INTO `base_area` VALUES ('130502', '襄都区', '1305'); +INSERT INTO `base_area` VALUES ('130503', '信都区', '1305'); +INSERT INTO `base_area` VALUES ('130505', '任泽区', '1305'); +INSERT INTO `base_area` VALUES ('130506', '南和区', '1305'); +INSERT INTO `base_area` VALUES ('130522', '临城县', '1305'); +INSERT INTO `base_area` VALUES ('130523', '内丘县', '1305'); +INSERT INTO `base_area` VALUES ('130524', '柏乡县', '1305'); +INSERT INTO `base_area` VALUES ('130525', '隆尧县', '1305'); +INSERT INTO `base_area` VALUES ('130528', '宁晋县', '1305'); +INSERT INTO `base_area` VALUES ('130529', '巨鹿县', '1305'); +INSERT INTO `base_area` VALUES ('130530', '新河县', '1305'); +INSERT INTO `base_area` VALUES ('130531', '广宗县', '1305'); +INSERT INTO `base_area` VALUES ('130532', '平乡县', '1305'); +INSERT INTO `base_area` VALUES ('130533', '威县', '1305'); +INSERT INTO `base_area` VALUES ('130534', '清河县', '1305'); +INSERT INTO `base_area` VALUES ('130535', '临西县', '1305'); +INSERT INTO `base_area` VALUES ('130571', '河北邢台经济开发区', '1305'); +INSERT INTO `base_area` VALUES ('130581', '南宫市', '1305'); +INSERT INTO `base_area` VALUES ('130582', '沙河市', '1305'); +INSERT INTO `base_area` VALUES ('130602', '竞秀区', '1306'); +INSERT INTO `base_area` VALUES ('130606', '莲池区', '1306'); +INSERT INTO `base_area` VALUES ('130607', '满城区', '1306'); +INSERT INTO `base_area` VALUES ('130608', '清苑区', '1306'); +INSERT INTO `base_area` VALUES ('130609', '徐水区', '1306'); +INSERT INTO `base_area` VALUES ('130623', '涞水县', '1306'); +INSERT INTO `base_area` VALUES ('130624', '阜平县', '1306'); +INSERT INTO `base_area` VALUES ('130626', '定兴县', '1306'); +INSERT INTO `base_area` VALUES ('130627', '唐县', '1306'); +INSERT INTO `base_area` VALUES ('130628', '高阳县', '1306'); +INSERT INTO `base_area` VALUES ('130629', '容城县', '1306'); +INSERT INTO `base_area` VALUES ('130630', '涞源县', '1306'); +INSERT INTO `base_area` VALUES ('130631', '望都县', '1306'); +INSERT INTO `base_area` VALUES ('130632', '安新县', '1306'); +INSERT INTO `base_area` VALUES ('130633', '易县', '1306'); +INSERT INTO `base_area` VALUES ('130634', '曲阳县', '1306'); +INSERT INTO `base_area` VALUES ('130635', '蠡县', '1306'); +INSERT INTO `base_area` VALUES ('130636', '顺平县', '1306'); +INSERT INTO `base_area` VALUES ('130637', '博野县', '1306'); +INSERT INTO `base_area` VALUES ('130638', '雄县', '1306'); +INSERT INTO `base_area` VALUES ('130671', '保定高新技术产业开发区', '1306'); +INSERT INTO `base_area` VALUES ('130672', '保定白沟新城', '1306'); +INSERT INTO `base_area` VALUES ('130681', '涿州市', '1306'); +INSERT INTO `base_area` VALUES ('130682', '定州市', '1306'); +INSERT INTO `base_area` VALUES ('130683', '安国市', '1306'); +INSERT INTO `base_area` VALUES ('130684', '高碑店市', '1306'); +INSERT INTO `base_area` VALUES ('130702', '桥东区', '1307'); +INSERT INTO `base_area` VALUES ('130703', '桥西区', '1307'); +INSERT INTO `base_area` VALUES ('130705', '宣化区', '1307'); +INSERT INTO `base_area` VALUES ('130706', '下花园区', '1307'); +INSERT INTO `base_area` VALUES ('130708', '万全区', '1307'); +INSERT INTO `base_area` VALUES ('130709', '崇礼区', '1307'); +INSERT INTO `base_area` VALUES ('130722', '张北县', '1307'); +INSERT INTO `base_area` VALUES ('130723', '康保县', '1307'); +INSERT INTO `base_area` VALUES ('130724', '沽源县', '1307'); +INSERT INTO `base_area` VALUES ('130725', '尚义县', '1307'); +INSERT INTO `base_area` VALUES ('130726', '蔚县', '1307'); +INSERT INTO `base_area` VALUES ('130727', '阳原县', '1307'); +INSERT INTO `base_area` VALUES ('130728', '怀安县', '1307'); +INSERT INTO `base_area` VALUES ('130730', '怀来县', '1307'); +INSERT INTO `base_area` VALUES ('130731', '涿鹿县', '1307'); +INSERT INTO `base_area` VALUES ('130732', '赤城县', '1307'); +INSERT INTO `base_area` VALUES ('130771', '张家口经济开发区', '1307'); +INSERT INTO `base_area` VALUES ('130772', '张家口市察北管理区', '1307'); +INSERT INTO `base_area` VALUES ('130773', '张家口市塞北管理区', '1307'); +INSERT INTO `base_area` VALUES ('130802', '双桥区', '1308'); +INSERT INTO `base_area` VALUES ('130803', '双滦区', '1308'); +INSERT INTO `base_area` VALUES ('130804', '鹰手营子矿区', '1308'); +INSERT INTO `base_area` VALUES ('130821', '承德县', '1308'); +INSERT INTO `base_area` VALUES ('130822', '兴隆县', '1308'); +INSERT INTO `base_area` VALUES ('130824', '滦平县', '1308'); +INSERT INTO `base_area` VALUES ('130825', '隆化县', '1308'); +INSERT INTO `base_area` VALUES ('130826', '丰宁满族自治县', '1308'); +INSERT INTO `base_area` VALUES ('130827', '宽城满族自治县', '1308'); +INSERT INTO `base_area` VALUES ('130828', '围场满族蒙古族自治县', '1308'); +INSERT INTO `base_area` VALUES ('130871', '承德高新技术产业开发区', '1308'); +INSERT INTO `base_area` VALUES ('130881', '平泉市', '1308'); +INSERT INTO `base_area` VALUES ('130902', '新华区', '1309'); +INSERT INTO `base_area` VALUES ('130903', '运河区', '1309'); +INSERT INTO `base_area` VALUES ('130921', '沧县', '1309'); +INSERT INTO `base_area` VALUES ('130922', '青县', '1309'); +INSERT INTO `base_area` VALUES ('130923', '东光县', '1309'); +INSERT INTO `base_area` VALUES ('130924', '海兴县', '1309'); +INSERT INTO `base_area` VALUES ('130925', '盐山县', '1309'); +INSERT INTO `base_area` VALUES ('130926', '肃宁县', '1309'); +INSERT INTO `base_area` VALUES ('130927', '南皮县', '1309'); +INSERT INTO `base_area` VALUES ('130928', '吴桥县', '1309'); +INSERT INTO `base_area` VALUES ('130929', '献县', '1309'); +INSERT INTO `base_area` VALUES ('130930', '孟村回族自治县', '1309'); +INSERT INTO `base_area` VALUES ('130971', '河北沧州经济开发区', '1309'); +INSERT INTO `base_area` VALUES ('130972', '沧州高新技术产业开发区', '1309'); +INSERT INTO `base_area` VALUES ('130973', '沧州渤海新区', '1309'); +INSERT INTO `base_area` VALUES ('130981', '泊头市', '1309'); +INSERT INTO `base_area` VALUES ('130982', '任丘市', '1309'); +INSERT INTO `base_area` VALUES ('130983', '黄骅市', '1309'); +INSERT INTO `base_area` VALUES ('130984', '河间市', '1309'); +INSERT INTO `base_area` VALUES ('131002', '安次区', '1310'); +INSERT INTO `base_area` VALUES ('131003', '广阳区', '1310'); +INSERT INTO `base_area` VALUES ('131022', '固安县', '1310'); +INSERT INTO `base_area` VALUES ('131023', '永清县', '1310'); +INSERT INTO `base_area` VALUES ('131024', '香河县', '1310'); +INSERT INTO `base_area` VALUES ('131025', '大城县', '1310'); +INSERT INTO `base_area` VALUES ('131026', '文安县', '1310'); +INSERT INTO `base_area` VALUES ('131028', '大厂回族自治县', '1310'); +INSERT INTO `base_area` VALUES ('131071', '廊坊经济技术开发区', '1310'); +INSERT INTO `base_area` VALUES ('131081', '霸州市', '1310'); +INSERT INTO `base_area` VALUES ('131082', '三河市', '1310'); +INSERT INTO `base_area` VALUES ('131102', '桃城区', '1311'); +INSERT INTO `base_area` VALUES ('131103', '冀州区', '1311'); +INSERT INTO `base_area` VALUES ('131121', '枣强县', '1311'); +INSERT INTO `base_area` VALUES ('131122', '武邑县', '1311'); +INSERT INTO `base_area` VALUES ('131123', '武强县', '1311'); +INSERT INTO `base_area` VALUES ('131124', '饶阳县', '1311'); +INSERT INTO `base_area` VALUES ('131125', '安平县', '1311'); +INSERT INTO `base_area` VALUES ('131126', '故城县', '1311'); +INSERT INTO `base_area` VALUES ('131127', '景县', '1311'); +INSERT INTO `base_area` VALUES ('131128', '阜城县', '1311'); +INSERT INTO `base_area` VALUES ('131171', '河北衡水高新技术产业开发区', '1311'); +INSERT INTO `base_area` VALUES ('131172', '衡水滨湖新区', '1311'); +INSERT INTO `base_area` VALUES ('131182', '深州市', '1311'); +INSERT INTO `base_area` VALUES ('140105', '小店区', '1401'); +INSERT INTO `base_area` VALUES ('140106', '迎泽区', '1401'); +INSERT INTO `base_area` VALUES ('140107', '杏花岭区', '1401'); +INSERT INTO `base_area` VALUES ('140108', '尖草坪区', '1401'); +INSERT INTO `base_area` VALUES ('140109', '万柏林区', '1401'); +INSERT INTO `base_area` VALUES ('140110', '晋源区', '1401'); +INSERT INTO `base_area` VALUES ('140121', '清徐县', '1401'); +INSERT INTO `base_area` VALUES ('140122', '阳曲县', '1401'); +INSERT INTO `base_area` VALUES ('140123', '娄烦县', '1401'); +INSERT INTO `base_area` VALUES ('140171', '山西转型综合改革示范区', '1401'); +INSERT INTO `base_area` VALUES ('140181', '古交市', '1401'); +INSERT INTO `base_area` VALUES ('140212', '新荣区', '1402'); +INSERT INTO `base_area` VALUES ('140213', '平城区', '1402'); +INSERT INTO `base_area` VALUES ('140214', '云冈区', '1402'); +INSERT INTO `base_area` VALUES ('140215', '云州区', '1402'); +INSERT INTO `base_area` VALUES ('140221', '阳高县', '1402'); +INSERT INTO `base_area` VALUES ('140222', '天镇县', '1402'); +INSERT INTO `base_area` VALUES ('140223', '广灵县', '1402'); +INSERT INTO `base_area` VALUES ('140224', '灵丘县', '1402'); +INSERT INTO `base_area` VALUES ('140225', '浑源县', '1402'); +INSERT INTO `base_area` VALUES ('140226', '左云县', '1402'); +INSERT INTO `base_area` VALUES ('140271', '山西大同经济开发区', '1402'); +INSERT INTO `base_area` VALUES ('140302', '城区', '1403'); +INSERT INTO `base_area` VALUES ('140303', '矿区', '1403'); +INSERT INTO `base_area` VALUES ('140311', '郊区', '1403'); +INSERT INTO `base_area` VALUES ('140321', '平定县', '1403'); +INSERT INTO `base_area` VALUES ('140322', '盂县', '1403'); +INSERT INTO `base_area` VALUES ('140403', '潞州区', '1404'); +INSERT INTO `base_area` VALUES ('140404', '上党区', '1404'); +INSERT INTO `base_area` VALUES ('140405', '屯留区', '1404'); +INSERT INTO `base_area` VALUES ('140406', '潞城区', '1404'); +INSERT INTO `base_area` VALUES ('140423', '襄垣县', '1404'); +INSERT INTO `base_area` VALUES ('140425', '平顺县', '1404'); +INSERT INTO `base_area` VALUES ('140426', '黎城县', '1404'); +INSERT INTO `base_area` VALUES ('140427', '壶关县', '1404'); +INSERT INTO `base_area` VALUES ('140428', '长子县', '1404'); +INSERT INTO `base_area` VALUES ('140429', '武乡县', '1404'); +INSERT INTO `base_area` VALUES ('140430', '沁县', '1404'); +INSERT INTO `base_area` VALUES ('140431', '沁源县', '1404'); +INSERT INTO `base_area` VALUES ('140471', '山西长治高新技术产业园区', '1404'); +INSERT INTO `base_area` VALUES ('140502', '城区', '1405'); +INSERT INTO `base_area` VALUES ('140521', '沁水县', '1405'); +INSERT INTO `base_area` VALUES ('140522', '阳城县', '1405'); +INSERT INTO `base_area` VALUES ('140524', '陵川县', '1405'); +INSERT INTO `base_area` VALUES ('140525', '泽州县', '1405'); +INSERT INTO `base_area` VALUES ('140581', '高平市', '1405'); +INSERT INTO `base_area` VALUES ('140602', '朔城区', '1406'); +INSERT INTO `base_area` VALUES ('140603', '平鲁区', '1406'); +INSERT INTO `base_area` VALUES ('140621', '山阴县', '1406'); +INSERT INTO `base_area` VALUES ('140622', '应县', '1406'); +INSERT INTO `base_area` VALUES ('140623', '右玉县', '1406'); +INSERT INTO `base_area` VALUES ('140671', '山西朔州经济开发区', '1406'); +INSERT INTO `base_area` VALUES ('140681', '怀仁市', '1406'); +INSERT INTO `base_area` VALUES ('140702', '榆次区', '1407'); +INSERT INTO `base_area` VALUES ('140703', '太谷区', '1407'); +INSERT INTO `base_area` VALUES ('140721', '榆社县', '1407'); +INSERT INTO `base_area` VALUES ('140722', '左权县', '1407'); +INSERT INTO `base_area` VALUES ('140723', '和顺县', '1407'); +INSERT INTO `base_area` VALUES ('140724', '昔阳县', '1407'); +INSERT INTO `base_area` VALUES ('140725', '寿阳县', '1407'); +INSERT INTO `base_area` VALUES ('140727', '祁县', '1407'); +INSERT INTO `base_area` VALUES ('140728', '平遥县', '1407'); +INSERT INTO `base_area` VALUES ('140729', '灵石县', '1407'); +INSERT INTO `base_area` VALUES ('140781', '介休市', '1407'); +INSERT INTO `base_area` VALUES ('140802', '盐湖区', '1408'); +INSERT INTO `base_area` VALUES ('140821', '临猗县', '1408'); +INSERT INTO `base_area` VALUES ('140822', '万荣县', '1408'); +INSERT INTO `base_area` VALUES ('140823', '闻喜县', '1408'); +INSERT INTO `base_area` VALUES ('140824', '稷山县', '1408'); +INSERT INTO `base_area` VALUES ('140825', '新绛县', '1408'); +INSERT INTO `base_area` VALUES ('140826', '绛县', '1408'); +INSERT INTO `base_area` VALUES ('140827', '垣曲县', '1408'); +INSERT INTO `base_area` VALUES ('140828', '夏县', '1408'); +INSERT INTO `base_area` VALUES ('140829', '平陆县', '1408'); +INSERT INTO `base_area` VALUES ('140830', '芮城县', '1408'); +INSERT INTO `base_area` VALUES ('140881', '永济市', '1408'); +INSERT INTO `base_area` VALUES ('140882', '河津市', '1408'); +INSERT INTO `base_area` VALUES ('140902', '忻府区', '1409'); +INSERT INTO `base_area` VALUES ('140921', '定襄县', '1409'); +INSERT INTO `base_area` VALUES ('140922', '五台县', '1409'); +INSERT INTO `base_area` VALUES ('140923', '代县', '1409'); +INSERT INTO `base_area` VALUES ('140924', '繁峙县', '1409'); +INSERT INTO `base_area` VALUES ('140925', '宁武县', '1409'); +INSERT INTO `base_area` VALUES ('140926', '静乐县', '1409'); +INSERT INTO `base_area` VALUES ('140927', '神池县', '1409'); +INSERT INTO `base_area` VALUES ('140928', '五寨县', '1409'); +INSERT INTO `base_area` VALUES ('140929', '岢岚县', '1409'); +INSERT INTO `base_area` VALUES ('140930', '河曲县', '1409'); +INSERT INTO `base_area` VALUES ('140931', '保德县', '1409'); +INSERT INTO `base_area` VALUES ('140932', '偏关县', '1409'); +INSERT INTO `base_area` VALUES ('140971', '五台山风景名胜区', '1409'); +INSERT INTO `base_area` VALUES ('140981', '原平市', '1409'); +INSERT INTO `base_area` VALUES ('141002', '尧都区', '1410'); +INSERT INTO `base_area` VALUES ('141021', '曲沃县', '1410'); +INSERT INTO `base_area` VALUES ('141022', '翼城县', '1410'); +INSERT INTO `base_area` VALUES ('141023', '襄汾县', '1410'); +INSERT INTO `base_area` VALUES ('141024', '洪洞县', '1410'); +INSERT INTO `base_area` VALUES ('141025', '古县', '1410'); +INSERT INTO `base_area` VALUES ('141026', '安泽县', '1410'); +INSERT INTO `base_area` VALUES ('141027', '浮山县', '1410'); +INSERT INTO `base_area` VALUES ('141028', '吉县', '1410'); +INSERT INTO `base_area` VALUES ('141029', '乡宁县', '1410'); +INSERT INTO `base_area` VALUES ('141030', '大宁县', '1410'); +INSERT INTO `base_area` VALUES ('141031', '隰县', '1410'); +INSERT INTO `base_area` VALUES ('141032', '永和县', '1410'); +INSERT INTO `base_area` VALUES ('141033', '蒲县', '1410'); +INSERT INTO `base_area` VALUES ('141034', '汾西县', '1410'); +INSERT INTO `base_area` VALUES ('141081', '侯马市', '1410'); +INSERT INTO `base_area` VALUES ('141082', '霍州市', '1410'); +INSERT INTO `base_area` VALUES ('141102', '离石区', '1411'); +INSERT INTO `base_area` VALUES ('141121', '文水县', '1411'); +INSERT INTO `base_area` VALUES ('141122', '交城县', '1411'); +INSERT INTO `base_area` VALUES ('141123', '兴县', '1411'); +INSERT INTO `base_area` VALUES ('141124', '临县', '1411'); +INSERT INTO `base_area` VALUES ('141125', '柳林县', '1411'); +INSERT INTO `base_area` VALUES ('141126', '石楼县', '1411'); +INSERT INTO `base_area` VALUES ('141127', '岚县', '1411'); +INSERT INTO `base_area` VALUES ('141128', '方山县', '1411'); +INSERT INTO `base_area` VALUES ('141129', '中阳县', '1411'); +INSERT INTO `base_area` VALUES ('141130', '交口县', '1411'); +INSERT INTO `base_area` VALUES ('141181', '孝义市', '1411'); +INSERT INTO `base_area` VALUES ('141182', '汾阳市', '1411'); +INSERT INTO `base_area` VALUES ('150102', '新城区', '1501'); +INSERT INTO `base_area` VALUES ('150103', '回民区', '1501'); +INSERT INTO `base_area` VALUES ('150104', '玉泉区', '1501'); +INSERT INTO `base_area` VALUES ('150105', '赛罕区', '1501'); +INSERT INTO `base_area` VALUES ('150121', '土默特左旗', '1501'); +INSERT INTO `base_area` VALUES ('150122', '托克托县', '1501'); +INSERT INTO `base_area` VALUES ('150123', '和林格尔县', '1501'); +INSERT INTO `base_area` VALUES ('150124', '清水河县', '1501'); +INSERT INTO `base_area` VALUES ('150125', '武川县', '1501'); +INSERT INTO `base_area` VALUES ('150172', '呼和浩特经济技术开发区', '1501'); +INSERT INTO `base_area` VALUES ('150202', '东河区', '1502'); +INSERT INTO `base_area` VALUES ('150203', '昆都仑区', '1502'); +INSERT INTO `base_area` VALUES ('150204', '青山区', '1502'); +INSERT INTO `base_area` VALUES ('150205', '石拐区', '1502'); +INSERT INTO `base_area` VALUES ('150206', '白云鄂博矿区', '1502'); +INSERT INTO `base_area` VALUES ('150207', '九原区', '1502'); +INSERT INTO `base_area` VALUES ('150221', '土默特右旗', '1502'); +INSERT INTO `base_area` VALUES ('150222', '固阳县', '1502'); +INSERT INTO `base_area` VALUES ('150223', '达尔罕茂明安联合旗', '1502'); +INSERT INTO `base_area` VALUES ('150271', '包头稀土高新技术产业开发区', '1502'); +INSERT INTO `base_area` VALUES ('150302', '海勃湾区', '1503'); +INSERT INTO `base_area` VALUES ('150303', '海南区', '1503'); +INSERT INTO `base_area` VALUES ('150304', '乌达区', '1503'); +INSERT INTO `base_area` VALUES ('150402', '红山区', '1504'); +INSERT INTO `base_area` VALUES ('150403', '元宝山区', '1504'); +INSERT INTO `base_area` VALUES ('150404', '松山区', '1504'); +INSERT INTO `base_area` VALUES ('150421', '阿鲁科尔沁旗', '1504'); +INSERT INTO `base_area` VALUES ('150422', '巴林左旗', '1504'); +INSERT INTO `base_area` VALUES ('150423', '巴林右旗', '1504'); +INSERT INTO `base_area` VALUES ('150424', '林西县', '1504'); +INSERT INTO `base_area` VALUES ('150425', '克什克腾旗', '1504'); +INSERT INTO `base_area` VALUES ('150426', '翁牛特旗', '1504'); +INSERT INTO `base_area` VALUES ('150428', '喀喇沁旗', '1504'); +INSERT INTO `base_area` VALUES ('150429', '宁城县', '1504'); +INSERT INTO `base_area` VALUES ('150430', '敖汉旗', '1504'); +INSERT INTO `base_area` VALUES ('150502', '科尔沁区', '1505'); +INSERT INTO `base_area` VALUES ('150521', '科尔沁左翼中旗', '1505'); +INSERT INTO `base_area` VALUES ('150522', '科尔沁左翼后旗', '1505'); +INSERT INTO `base_area` VALUES ('150523', '开鲁县', '1505'); +INSERT INTO `base_area` VALUES ('150524', '库伦旗', '1505'); +INSERT INTO `base_area` VALUES ('150525', '奈曼旗', '1505'); +INSERT INTO `base_area` VALUES ('150526', '扎鲁特旗', '1505'); +INSERT INTO `base_area` VALUES ('150571', '通辽经济技术开发区', '1505'); +INSERT INTO `base_area` VALUES ('150581', '霍林郭勒市', '1505'); +INSERT INTO `base_area` VALUES ('150602', '东胜区', '1506'); +INSERT INTO `base_area` VALUES ('150603', '康巴什区', '1506'); +INSERT INTO `base_area` VALUES ('150621', '达拉特旗', '1506'); +INSERT INTO `base_area` VALUES ('150622', '准格尔旗', '1506'); +INSERT INTO `base_area` VALUES ('150623', '鄂托克前旗', '1506'); +INSERT INTO `base_area` VALUES ('150624', '鄂托克旗', '1506'); +INSERT INTO `base_area` VALUES ('150625', '杭锦旗', '1506'); +INSERT INTO `base_area` VALUES ('150626', '乌审旗', '1506'); +INSERT INTO `base_area` VALUES ('150627', '伊金霍洛旗', '1506'); +INSERT INTO `base_area` VALUES ('150702', '海拉尔区', '1507'); +INSERT INTO `base_area` VALUES ('150703', '扎赉诺尔区', '1507'); +INSERT INTO `base_area` VALUES ('150721', '阿荣旗', '1507'); +INSERT INTO `base_area` VALUES ('150722', '莫力达瓦达斡尔族自治旗', '1507'); +INSERT INTO `base_area` VALUES ('150723', '鄂伦春自治旗', '1507'); +INSERT INTO `base_area` VALUES ('150724', '鄂温克族自治旗', '1507'); +INSERT INTO `base_area` VALUES ('150725', '陈巴尔虎旗', '1507'); +INSERT INTO `base_area` VALUES ('150726', '新巴尔虎左旗', '1507'); +INSERT INTO `base_area` VALUES ('150727', '新巴尔虎右旗', '1507'); +INSERT INTO `base_area` VALUES ('150781', '满洲里市', '1507'); +INSERT INTO `base_area` VALUES ('150782', '牙克石市', '1507'); +INSERT INTO `base_area` VALUES ('150783', '扎兰屯市', '1507'); +INSERT INTO `base_area` VALUES ('150784', '额尔古纳市', '1507'); +INSERT INTO `base_area` VALUES ('150785', '根河市', '1507'); +INSERT INTO `base_area` VALUES ('150802', '临河区', '1508'); +INSERT INTO `base_area` VALUES ('150821', '五原县', '1508'); +INSERT INTO `base_area` VALUES ('150822', '磴口县', '1508'); +INSERT INTO `base_area` VALUES ('150823', '乌拉特前旗', '1508'); +INSERT INTO `base_area` VALUES ('150824', '乌拉特中旗', '1508'); +INSERT INTO `base_area` VALUES ('150825', '乌拉特后旗', '1508'); +INSERT INTO `base_area` VALUES ('150826', '杭锦后旗', '1508'); +INSERT INTO `base_area` VALUES ('150902', '集宁区', '1509'); +INSERT INTO `base_area` VALUES ('150921', '卓资县', '1509'); +INSERT INTO `base_area` VALUES ('150922', '化德县', '1509'); +INSERT INTO `base_area` VALUES ('150923', '商都县', '1509'); +INSERT INTO `base_area` VALUES ('150924', '兴和县', '1509'); +INSERT INTO `base_area` VALUES ('150925', '凉城县', '1509'); +INSERT INTO `base_area` VALUES ('150926', '察哈尔右翼前旗', '1509'); +INSERT INTO `base_area` VALUES ('150927', '察哈尔右翼中旗', '1509'); +INSERT INTO `base_area` VALUES ('150928', '察哈尔右翼后旗', '1509'); +INSERT INTO `base_area` VALUES ('150929', '四子王旗', '1509'); +INSERT INTO `base_area` VALUES ('150981', '丰镇市', '1509'); +INSERT INTO `base_area` VALUES ('152201', '乌兰浩特市', '1522'); +INSERT INTO `base_area` VALUES ('152202', '阿尔山市', '1522'); +INSERT INTO `base_area` VALUES ('152221', '科尔沁右翼前旗', '1522'); +INSERT INTO `base_area` VALUES ('152222', '科尔沁右翼中旗', '1522'); +INSERT INTO `base_area` VALUES ('152223', '扎赉特旗', '1522'); +INSERT INTO `base_area` VALUES ('152224', '突泉县', '1522'); +INSERT INTO `base_area` VALUES ('152501', '二连浩特市', '1525'); +INSERT INTO `base_area` VALUES ('152502', '锡林浩特市', '1525'); +INSERT INTO `base_area` VALUES ('152522', '阿巴嘎旗', '1525'); +INSERT INTO `base_area` VALUES ('152523', '苏尼特左旗', '1525'); +INSERT INTO `base_area` VALUES ('152524', '苏尼特右旗', '1525'); +INSERT INTO `base_area` VALUES ('152525', '东乌珠穆沁旗', '1525'); +INSERT INTO `base_area` VALUES ('152526', '西乌珠穆沁旗', '1525'); +INSERT INTO `base_area` VALUES ('152527', '太仆寺旗', '1525'); +INSERT INTO `base_area` VALUES ('152528', '镶黄旗', '1525'); +INSERT INTO `base_area` VALUES ('152529', '正镶白旗', '1525'); +INSERT INTO `base_area` VALUES ('152530', '正蓝旗', '1525'); +INSERT INTO `base_area` VALUES ('152531', '多伦县', '1525'); +INSERT INTO `base_area` VALUES ('152571', '乌拉盖管委会', '1525'); +INSERT INTO `base_area` VALUES ('152921', '阿拉善左旗', '1529'); +INSERT INTO `base_area` VALUES ('152922', '阿拉善右旗', '1529'); +INSERT INTO `base_area` VALUES ('152923', '额济纳旗', '1529'); +INSERT INTO `base_area` VALUES ('152971', '内蒙古阿拉善高新技术产业开发区', '1529'); +INSERT INTO `base_area` VALUES ('210102', '和平区', '2101'); +INSERT INTO `base_area` VALUES ('210103', '沈河区', '2101'); +INSERT INTO `base_area` VALUES ('210104', '大东区', '2101'); +INSERT INTO `base_area` VALUES ('210105', '皇姑区', '2101'); +INSERT INTO `base_area` VALUES ('210106', '铁西区', '2101'); +INSERT INTO `base_area` VALUES ('210111', '苏家屯区', '2101'); +INSERT INTO `base_area` VALUES ('210112', '浑南区', '2101'); +INSERT INTO `base_area` VALUES ('210113', '沈北新区', '2101'); +INSERT INTO `base_area` VALUES ('210114', '于洪区', '2101'); +INSERT INTO `base_area` VALUES ('210115', '辽中区', '2101'); +INSERT INTO `base_area` VALUES ('210123', '康平县', '2101'); +INSERT INTO `base_area` VALUES ('210124', '法库县', '2101'); +INSERT INTO `base_area` VALUES ('210181', '新民市', '2101'); +INSERT INTO `base_area` VALUES ('210202', '中山区', '2102'); +INSERT INTO `base_area` VALUES ('210203', '西岗区', '2102'); +INSERT INTO `base_area` VALUES ('210204', '沙河口区', '2102'); +INSERT INTO `base_area` VALUES ('210211', '甘井子区', '2102'); +INSERT INTO `base_area` VALUES ('210212', '旅顺口区', '2102'); +INSERT INTO `base_area` VALUES ('210213', '金州区', '2102'); +INSERT INTO `base_area` VALUES ('210214', '普兰店区', '2102'); +INSERT INTO `base_area` VALUES ('210224', '长海县', '2102'); +INSERT INTO `base_area` VALUES ('210281', '瓦房店市', '2102'); +INSERT INTO `base_area` VALUES ('210283', '庄河市', '2102'); +INSERT INTO `base_area` VALUES ('210302', '铁东区', '2103'); +INSERT INTO `base_area` VALUES ('210303', '铁西区', '2103'); +INSERT INTO `base_area` VALUES ('210304', '立山区', '2103'); +INSERT INTO `base_area` VALUES ('210311', '千山区', '2103'); +INSERT INTO `base_area` VALUES ('210321', '台安县', '2103'); +INSERT INTO `base_area` VALUES ('210323', '岫岩满族自治县', '2103'); +INSERT INTO `base_area` VALUES ('210381', '海城市', '2103'); +INSERT INTO `base_area` VALUES ('210402', '新抚区', '2104'); +INSERT INTO `base_area` VALUES ('210403', '东洲区', '2104'); +INSERT INTO `base_area` VALUES ('210404', '望花区', '2104'); +INSERT INTO `base_area` VALUES ('210411', '顺城区', '2104'); +INSERT INTO `base_area` VALUES ('210421', '抚顺县', '2104'); +INSERT INTO `base_area` VALUES ('210422', '新宾满族自治县', '2104'); +INSERT INTO `base_area` VALUES ('210423', '清原满族自治县', '2104'); +INSERT INTO `base_area` VALUES ('210502', '平山区', '2105'); +INSERT INTO `base_area` VALUES ('210503', '溪湖区', '2105'); +INSERT INTO `base_area` VALUES ('210504', '明山区', '2105'); +INSERT INTO `base_area` VALUES ('210505', '南芬区', '2105'); +INSERT INTO `base_area` VALUES ('210521', '本溪满族自治县', '2105'); +INSERT INTO `base_area` VALUES ('210522', '桓仁满族自治县', '2105'); +INSERT INTO `base_area` VALUES ('210602', '元宝区', '2106'); +INSERT INTO `base_area` VALUES ('210603', '振兴区', '2106'); +INSERT INTO `base_area` VALUES ('210604', '振安区', '2106'); +INSERT INTO `base_area` VALUES ('210624', '宽甸满族自治县', '2106'); +INSERT INTO `base_area` VALUES ('210681', '东港市', '2106'); +INSERT INTO `base_area` VALUES ('210682', '凤城市', '2106'); +INSERT INTO `base_area` VALUES ('210702', '古塔区', '2107'); +INSERT INTO `base_area` VALUES ('210703', '凌河区', '2107'); +INSERT INTO `base_area` VALUES ('210711', '太和区', '2107'); +INSERT INTO `base_area` VALUES ('210726', '黑山县', '2107'); +INSERT INTO `base_area` VALUES ('210727', '义县', '2107'); +INSERT INTO `base_area` VALUES ('210781', '凌海市', '2107'); +INSERT INTO `base_area` VALUES ('210782', '北镇市', '2107'); +INSERT INTO `base_area` VALUES ('210802', '站前区', '2108'); +INSERT INTO `base_area` VALUES ('210803', '西市区', '2108'); +INSERT INTO `base_area` VALUES ('210804', '鲅鱼圈区', '2108'); +INSERT INTO `base_area` VALUES ('210811', '老边区', '2108'); +INSERT INTO `base_area` VALUES ('210881', '盖州市', '2108'); +INSERT INTO `base_area` VALUES ('210882', '大石桥市', '2108'); +INSERT INTO `base_area` VALUES ('210902', '海州区', '2109'); +INSERT INTO `base_area` VALUES ('210903', '新邱区', '2109'); +INSERT INTO `base_area` VALUES ('210904', '太平区', '2109'); +INSERT INTO `base_area` VALUES ('210905', '清河门区', '2109'); +INSERT INTO `base_area` VALUES ('210911', '细河区', '2109'); +INSERT INTO `base_area` VALUES ('210921', '阜新蒙古族自治县', '2109'); +INSERT INTO `base_area` VALUES ('210922', '彰武县', '2109'); +INSERT INTO `base_area` VALUES ('211002', '白塔区', '2110'); +INSERT INTO `base_area` VALUES ('211003', '文圣区', '2110'); +INSERT INTO `base_area` VALUES ('211004', '宏伟区', '2110'); +INSERT INTO `base_area` VALUES ('211005', '弓长岭区', '2110'); +INSERT INTO `base_area` VALUES ('211011', '太子河区', '2110'); +INSERT INTO `base_area` VALUES ('211021', '辽阳县', '2110'); +INSERT INTO `base_area` VALUES ('211081', '灯塔市', '2110'); +INSERT INTO `base_area` VALUES ('211102', '双台子区', '2111'); +INSERT INTO `base_area` VALUES ('211103', '兴隆台区', '2111'); +INSERT INTO `base_area` VALUES ('211104', '大洼区', '2111'); +INSERT INTO `base_area` VALUES ('211122', '盘山县', '2111'); +INSERT INTO `base_area` VALUES ('211202', '银州区', '2112'); +INSERT INTO `base_area` VALUES ('211204', '清河区', '2112'); +INSERT INTO `base_area` VALUES ('211221', '铁岭县', '2112'); +INSERT INTO `base_area` VALUES ('211223', '西丰县', '2112'); +INSERT INTO `base_area` VALUES ('211224', '昌图县', '2112'); +INSERT INTO `base_area` VALUES ('211281', '调兵山市', '2112'); +INSERT INTO `base_area` VALUES ('211282', '开原市', '2112'); +INSERT INTO `base_area` VALUES ('211302', '双塔区', '2113'); +INSERT INTO `base_area` VALUES ('211303', '龙城区', '2113'); +INSERT INTO `base_area` VALUES ('211321', '朝阳县', '2113'); +INSERT INTO `base_area` VALUES ('211322', '建平县', '2113'); +INSERT INTO `base_area` VALUES ('211324', '喀喇沁左翼蒙古族自治县', '2113'); +INSERT INTO `base_area` VALUES ('211381', '北票市', '2113'); +INSERT INTO `base_area` VALUES ('211382', '凌源市', '2113'); +INSERT INTO `base_area` VALUES ('211402', '连山区', '2114'); +INSERT INTO `base_area` VALUES ('211403', '龙港区', '2114'); +INSERT INTO `base_area` VALUES ('211404', '南票区', '2114'); +INSERT INTO `base_area` VALUES ('211421', '绥中县', '2114'); +INSERT INTO `base_area` VALUES ('211422', '建昌县', '2114'); +INSERT INTO `base_area` VALUES ('211481', '兴城市', '2114'); +INSERT INTO `base_area` VALUES ('220102', '南关区', '2201'); +INSERT INTO `base_area` VALUES ('220103', '宽城区', '2201'); +INSERT INTO `base_area` VALUES ('220104', '朝阳区', '2201'); +INSERT INTO `base_area` VALUES ('220105', '二道区', '2201'); +INSERT INTO `base_area` VALUES ('220106', '绿园区', '2201'); +INSERT INTO `base_area` VALUES ('220112', '双阳区', '2201'); +INSERT INTO `base_area` VALUES ('220113', '九台区', '2201'); +INSERT INTO `base_area` VALUES ('220122', '农安县', '2201'); +INSERT INTO `base_area` VALUES ('220171', '长春经济技术开发区', '2201'); +INSERT INTO `base_area` VALUES ('220172', '长春净月高新技术产业开发区', '2201'); +INSERT INTO `base_area` VALUES ('220173', '长春高新技术产业开发区', '2201'); +INSERT INTO `base_area` VALUES ('220174', '长春汽车经济技术开发区', '2201'); +INSERT INTO `base_area` VALUES ('220182', '榆树市', '2201'); +INSERT INTO `base_area` VALUES ('220183', '德惠市', '2201'); +INSERT INTO `base_area` VALUES ('220184', '公主岭市', '2201'); +INSERT INTO `base_area` VALUES ('220202', '昌邑区', '2202'); +INSERT INTO `base_area` VALUES ('220203', '龙潭区', '2202'); +INSERT INTO `base_area` VALUES ('220204', '船营区', '2202'); +INSERT INTO `base_area` VALUES ('220211', '丰满区', '2202'); +INSERT INTO `base_area` VALUES ('220221', '永吉县', '2202'); +INSERT INTO `base_area` VALUES ('220271', '吉林经济开发区', '2202'); +INSERT INTO `base_area` VALUES ('220272', '吉林高新技术产业开发区', '2202'); +INSERT INTO `base_area` VALUES ('220273', '吉林中国新加坡食品区', '2202'); +INSERT INTO `base_area` VALUES ('220281', '蛟河市', '2202'); +INSERT INTO `base_area` VALUES ('220282', '桦甸市', '2202'); +INSERT INTO `base_area` VALUES ('220283', '舒兰市', '2202'); +INSERT INTO `base_area` VALUES ('220284', '磐石市', '2202'); +INSERT INTO `base_area` VALUES ('220302', '铁西区', '2203'); +INSERT INTO `base_area` VALUES ('220303', '铁东区', '2203'); +INSERT INTO `base_area` VALUES ('220322', '梨树县', '2203'); +INSERT INTO `base_area` VALUES ('220323', '伊通满族自治县', '2203'); +INSERT INTO `base_area` VALUES ('220382', '双辽市', '2203'); +INSERT INTO `base_area` VALUES ('220402', '龙山区', '2204'); +INSERT INTO `base_area` VALUES ('220403', '西安区', '2204'); +INSERT INTO `base_area` VALUES ('220421', '东丰县', '2204'); +INSERT INTO `base_area` VALUES ('220422', '东辽县', '2204'); +INSERT INTO `base_area` VALUES ('220502', '东昌区', '2205'); +INSERT INTO `base_area` VALUES ('220503', '二道江区', '2205'); +INSERT INTO `base_area` VALUES ('220521', '通化县', '2205'); +INSERT INTO `base_area` VALUES ('220523', '辉南县', '2205'); +INSERT INTO `base_area` VALUES ('220524', '柳河县', '2205'); +INSERT INTO `base_area` VALUES ('220581', '梅河口市', '2205'); +INSERT INTO `base_area` VALUES ('220582', '集安市', '2205'); +INSERT INTO `base_area` VALUES ('220602', '浑江区', '2206'); +INSERT INTO `base_area` VALUES ('220605', '江源区', '2206'); +INSERT INTO `base_area` VALUES ('220621', '抚松县', '2206'); +INSERT INTO `base_area` VALUES ('220622', '靖宇县', '2206'); +INSERT INTO `base_area` VALUES ('220623', '长白朝鲜族自治县', '2206'); +INSERT INTO `base_area` VALUES ('220681', '临江市', '2206'); +INSERT INTO `base_area` VALUES ('220702', '宁江区', '2207'); +INSERT INTO `base_area` VALUES ('220721', '前郭尔罗斯蒙古族自治县', '2207'); +INSERT INTO `base_area` VALUES ('220722', '长岭县', '2207'); +INSERT INTO `base_area` VALUES ('220723', '乾安县', '2207'); +INSERT INTO `base_area` VALUES ('220771', '吉林松原经济开发区', '2207'); +INSERT INTO `base_area` VALUES ('220781', '扶余市', '2207'); +INSERT INTO `base_area` VALUES ('220802', '洮北区', '2208'); +INSERT INTO `base_area` VALUES ('220821', '镇赉县', '2208'); +INSERT INTO `base_area` VALUES ('220822', '通榆县', '2208'); +INSERT INTO `base_area` VALUES ('220871', '吉林白城经济开发区', '2208'); +INSERT INTO `base_area` VALUES ('220881', '洮南市', '2208'); +INSERT INTO `base_area` VALUES ('220882', '大安市', '2208'); +INSERT INTO `base_area` VALUES ('222401', '延吉市', '2224'); +INSERT INTO `base_area` VALUES ('222402', '图们市', '2224'); +INSERT INTO `base_area` VALUES ('222403', '敦化市', '2224'); +INSERT INTO `base_area` VALUES ('222404', '珲春市', '2224'); +INSERT INTO `base_area` VALUES ('222405', '龙井市', '2224'); +INSERT INTO `base_area` VALUES ('222406', '和龙市', '2224'); +INSERT INTO `base_area` VALUES ('222424', '汪清县', '2224'); +INSERT INTO `base_area` VALUES ('222426', '安图县', '2224'); +INSERT INTO `base_area` VALUES ('230102', '道里区', '2301'); +INSERT INTO `base_area` VALUES ('230103', '南岗区', '2301'); +INSERT INTO `base_area` VALUES ('230104', '道外区', '2301'); +INSERT INTO `base_area` VALUES ('230108', '平房区', '2301'); +INSERT INTO `base_area` VALUES ('230109', '松北区', '2301'); +INSERT INTO `base_area` VALUES ('230110', '香坊区', '2301'); +INSERT INTO `base_area` VALUES ('230111', '呼兰区', '2301'); +INSERT INTO `base_area` VALUES ('230112', '阿城区', '2301'); +INSERT INTO `base_area` VALUES ('230113', '双城区', '2301'); +INSERT INTO `base_area` VALUES ('230123', '依兰县', '2301'); +INSERT INTO `base_area` VALUES ('230124', '方正县', '2301'); +INSERT INTO `base_area` VALUES ('230125', '宾县', '2301'); +INSERT INTO `base_area` VALUES ('230126', '巴彦县', '2301'); +INSERT INTO `base_area` VALUES ('230127', '木兰县', '2301'); +INSERT INTO `base_area` VALUES ('230128', '通河县', '2301'); +INSERT INTO `base_area` VALUES ('230129', '延寿县', '2301'); +INSERT INTO `base_area` VALUES ('230183', '尚志市', '2301'); +INSERT INTO `base_area` VALUES ('230184', '五常市', '2301'); +INSERT INTO `base_area` VALUES ('230202', '龙沙区', '2302'); +INSERT INTO `base_area` VALUES ('230203', '建华区', '2302'); +INSERT INTO `base_area` VALUES ('230204', '铁锋区', '2302'); +INSERT INTO `base_area` VALUES ('230205', '昂昂溪区', '2302'); +INSERT INTO `base_area` VALUES ('230206', '富拉尔基区', '2302'); +INSERT INTO `base_area` VALUES ('230207', '碾子山区', '2302'); +INSERT INTO `base_area` VALUES ('230208', '梅里斯达斡尔族区', '2302'); +INSERT INTO `base_area` VALUES ('230221', '龙江县', '2302'); +INSERT INTO `base_area` VALUES ('230223', '依安县', '2302'); +INSERT INTO `base_area` VALUES ('230224', '泰来县', '2302'); +INSERT INTO `base_area` VALUES ('230225', '甘南县', '2302'); +INSERT INTO `base_area` VALUES ('230227', '富裕县', '2302'); +INSERT INTO `base_area` VALUES ('230229', '克山县', '2302'); +INSERT INTO `base_area` VALUES ('230230', '克东县', '2302'); +INSERT INTO `base_area` VALUES ('230231', '拜泉县', '2302'); +INSERT INTO `base_area` VALUES ('230281', '讷河市', '2302'); +INSERT INTO `base_area` VALUES ('230302', '鸡冠区', '2303'); +INSERT INTO `base_area` VALUES ('230303', '恒山区', '2303'); +INSERT INTO `base_area` VALUES ('230304', '滴道区', '2303'); +INSERT INTO `base_area` VALUES ('230305', '梨树区', '2303'); +INSERT INTO `base_area` VALUES ('230306', '城子河区', '2303'); +INSERT INTO `base_area` VALUES ('230307', '麻山区', '2303'); +INSERT INTO `base_area` VALUES ('230321', '鸡东县', '2303'); +INSERT INTO `base_area` VALUES ('230381', '虎林市', '2303'); +INSERT INTO `base_area` VALUES ('230382', '密山市', '2303'); +INSERT INTO `base_area` VALUES ('230402', '向阳区', '2304'); +INSERT INTO `base_area` VALUES ('230403', '工农区', '2304'); +INSERT INTO `base_area` VALUES ('230404', '南山区', '2304'); +INSERT INTO `base_area` VALUES ('230405', '兴安区', '2304'); +INSERT INTO `base_area` VALUES ('230406', '东山区', '2304'); +INSERT INTO `base_area` VALUES ('230407', '兴山区', '2304'); +INSERT INTO `base_area` VALUES ('230421', '萝北县', '2304'); +INSERT INTO `base_area` VALUES ('230422', '绥滨县', '2304'); +INSERT INTO `base_area` VALUES ('230502', '尖山区', '2305'); +INSERT INTO `base_area` VALUES ('230503', '岭东区', '2305'); +INSERT INTO `base_area` VALUES ('230505', '四方台区', '2305'); +INSERT INTO `base_area` VALUES ('230506', '宝山区', '2305'); +INSERT INTO `base_area` VALUES ('230521', '集贤县', '2305'); +INSERT INTO `base_area` VALUES ('230522', '友谊县', '2305'); +INSERT INTO `base_area` VALUES ('230523', '宝清县', '2305'); +INSERT INTO `base_area` VALUES ('230524', '饶河县', '2305'); +INSERT INTO `base_area` VALUES ('230602', '萨尔图区', '2306'); +INSERT INTO `base_area` VALUES ('230603', '龙凤区', '2306'); +INSERT INTO `base_area` VALUES ('230604', '让胡路区', '2306'); +INSERT INTO `base_area` VALUES ('230605', '红岗区', '2306'); +INSERT INTO `base_area` VALUES ('230606', '大同区', '2306'); +INSERT INTO `base_area` VALUES ('230621', '肇州县', '2306'); +INSERT INTO `base_area` VALUES ('230622', '肇源县', '2306'); +INSERT INTO `base_area` VALUES ('230623', '林甸县', '2306'); +INSERT INTO `base_area` VALUES ('230624', '杜尔伯特蒙古族自治县', '2306'); +INSERT INTO `base_area` VALUES ('230671', '大庆高新技术产业开发区', '2306'); +INSERT INTO `base_area` VALUES ('230717', '伊美区', '2307'); +INSERT INTO `base_area` VALUES ('230718', '乌翠区', '2307'); +INSERT INTO `base_area` VALUES ('230719', '友好区', '2307'); +INSERT INTO `base_area` VALUES ('230722', '嘉荫县', '2307'); +INSERT INTO `base_area` VALUES ('230723', '汤旺县', '2307'); +INSERT INTO `base_area` VALUES ('230724', '丰林县', '2307'); +INSERT INTO `base_area` VALUES ('230725', '大箐山县', '2307'); +INSERT INTO `base_area` VALUES ('230726', '南岔县', '2307'); +INSERT INTO `base_area` VALUES ('230751', '金林区', '2307'); +INSERT INTO `base_area` VALUES ('230781', '铁力市', '2307'); +INSERT INTO `base_area` VALUES ('230803', '向阳区', '2308'); +INSERT INTO `base_area` VALUES ('230804', '前进区', '2308'); +INSERT INTO `base_area` VALUES ('230805', '东风区', '2308'); +INSERT INTO `base_area` VALUES ('230811', '郊区', '2308'); +INSERT INTO `base_area` VALUES ('230822', '桦南县', '2308'); +INSERT INTO `base_area` VALUES ('230826', '桦川县', '2308'); +INSERT INTO `base_area` VALUES ('230828', '汤原县', '2308'); +INSERT INTO `base_area` VALUES ('230881', '同江市', '2308'); +INSERT INTO `base_area` VALUES ('230882', '富锦市', '2308'); +INSERT INTO `base_area` VALUES ('230883', '抚远市', '2308'); +INSERT INTO `base_area` VALUES ('230902', '新兴区', '2309'); +INSERT INTO `base_area` VALUES ('230903', '桃山区', '2309'); +INSERT INTO `base_area` VALUES ('230904', '茄子河区', '2309'); +INSERT INTO `base_area` VALUES ('230921', '勃利县', '2309'); +INSERT INTO `base_area` VALUES ('231002', '东安区', '2310'); +INSERT INTO `base_area` VALUES ('231003', '阳明区', '2310'); +INSERT INTO `base_area` VALUES ('231004', '爱民区', '2310'); +INSERT INTO `base_area` VALUES ('231005', '西安区', '2310'); +INSERT INTO `base_area` VALUES ('231025', '林口县', '2310'); +INSERT INTO `base_area` VALUES ('231071', '牡丹江经济技术开发区', '2310'); +INSERT INTO `base_area` VALUES ('231081', '绥芬河市', '2310'); +INSERT INTO `base_area` VALUES ('231083', '海林市', '2310'); +INSERT INTO `base_area` VALUES ('231084', '宁安市', '2310'); +INSERT INTO `base_area` VALUES ('231085', '穆棱市', '2310'); +INSERT INTO `base_area` VALUES ('231086', '东宁市', '2310'); +INSERT INTO `base_area` VALUES ('231102', '爱辉区', '2311'); +INSERT INTO `base_area` VALUES ('231123', '逊克县', '2311'); +INSERT INTO `base_area` VALUES ('231124', '孙吴县', '2311'); +INSERT INTO `base_area` VALUES ('231181', '北安市', '2311'); +INSERT INTO `base_area` VALUES ('231182', '五大连池市', '2311'); +INSERT INTO `base_area` VALUES ('231183', '嫩江市', '2311'); +INSERT INTO `base_area` VALUES ('231202', '北林区', '2312'); +INSERT INTO `base_area` VALUES ('231221', '望奎县', '2312'); +INSERT INTO `base_area` VALUES ('231222', '兰西县', '2312'); +INSERT INTO `base_area` VALUES ('231223', '青冈县', '2312'); +INSERT INTO `base_area` VALUES ('231224', '庆安县', '2312'); +INSERT INTO `base_area` VALUES ('231225', '明水县', '2312'); +INSERT INTO `base_area` VALUES ('231226', '绥棱县', '2312'); +INSERT INTO `base_area` VALUES ('231281', '安达市', '2312'); +INSERT INTO `base_area` VALUES ('231282', '肇东市', '2312'); +INSERT INTO `base_area` VALUES ('231283', '海伦市', '2312'); +INSERT INTO `base_area` VALUES ('232701', '漠河市', '2327'); +INSERT INTO `base_area` VALUES ('232721', '呼玛县', '2327'); +INSERT INTO `base_area` VALUES ('232722', '塔河县', '2327'); +INSERT INTO `base_area` VALUES ('232761', '加格达奇区', '2327'); +INSERT INTO `base_area` VALUES ('232762', '松岭区', '2327'); +INSERT INTO `base_area` VALUES ('232763', '新林区', '2327'); +INSERT INTO `base_area` VALUES ('232764', '呼中区', '2327'); +INSERT INTO `base_area` VALUES ('310101', '黄浦区', '3101'); +INSERT INTO `base_area` VALUES ('310104', '徐汇区', '3101'); +INSERT INTO `base_area` VALUES ('310105', '长宁区', '3101'); +INSERT INTO `base_area` VALUES ('310106', '静安区', '3101'); +INSERT INTO `base_area` VALUES ('310107', '普陀区', '3101'); +INSERT INTO `base_area` VALUES ('310109', '虹口区', '3101'); +INSERT INTO `base_area` VALUES ('310110', '杨浦区', '3101'); +INSERT INTO `base_area` VALUES ('310112', '闵行区', '3101'); +INSERT INTO `base_area` VALUES ('310113', '宝山区', '3101'); +INSERT INTO `base_area` VALUES ('310114', '嘉定区', '3101'); +INSERT INTO `base_area` VALUES ('310115', '浦东新区', '3101'); +INSERT INTO `base_area` VALUES ('310116', '金山区', '3101'); +INSERT INTO `base_area` VALUES ('310117', '松江区', '3101'); +INSERT INTO `base_area` VALUES ('310118', '青浦区', '3101'); +INSERT INTO `base_area` VALUES ('310120', '奉贤区', '3101'); +INSERT INTO `base_area` VALUES ('310151', '崇明区', '3101'); +INSERT INTO `base_area` VALUES ('320102', '玄武区', '3201'); +INSERT INTO `base_area` VALUES ('320104', '秦淮区', '3201'); +INSERT INTO `base_area` VALUES ('320105', '建邺区', '3201'); +INSERT INTO `base_area` VALUES ('320106', '鼓楼区', '3201'); +INSERT INTO `base_area` VALUES ('320111', '浦口区', '3201'); +INSERT INTO `base_area` VALUES ('320113', '栖霞区', '3201'); +INSERT INTO `base_area` VALUES ('320114', '雨花台区', '3201'); +INSERT INTO `base_area` VALUES ('320115', '江宁区', '3201'); +INSERT INTO `base_area` VALUES ('320116', '六合区', '3201'); +INSERT INTO `base_area` VALUES ('320117', '溧水区', '3201'); +INSERT INTO `base_area` VALUES ('320118', '高淳区', '3201'); +INSERT INTO `base_area` VALUES ('320205', '锡山区', '3202'); +INSERT INTO `base_area` VALUES ('320206', '惠山区', '3202'); +INSERT INTO `base_area` VALUES ('320211', '滨湖区', '3202'); +INSERT INTO `base_area` VALUES ('320213', '梁溪区', '3202'); +INSERT INTO `base_area` VALUES ('320214', '新吴区', '3202'); +INSERT INTO `base_area` VALUES ('320281', '江阴市', '3202'); +INSERT INTO `base_area` VALUES ('320282', '宜兴市', '3202'); +INSERT INTO `base_area` VALUES ('320302', '鼓楼区', '3203'); +INSERT INTO `base_area` VALUES ('320303', '云龙区', '3203'); +INSERT INTO `base_area` VALUES ('320305', '贾汪区', '3203'); +INSERT INTO `base_area` VALUES ('320311', '泉山区', '3203'); +INSERT INTO `base_area` VALUES ('320312', '铜山区', '3203'); +INSERT INTO `base_area` VALUES ('320321', '丰县', '3203'); +INSERT INTO `base_area` VALUES ('320322', '沛县', '3203'); +INSERT INTO `base_area` VALUES ('320324', '睢宁县', '3203'); +INSERT INTO `base_area` VALUES ('320371', '徐州经济技术开发区', '3203'); +INSERT INTO `base_area` VALUES ('320381', '新沂市', '3203'); +INSERT INTO `base_area` VALUES ('320382', '邳州市', '3203'); +INSERT INTO `base_area` VALUES ('320402', '天宁区', '3204'); +INSERT INTO `base_area` VALUES ('320404', '钟楼区', '3204'); +INSERT INTO `base_area` VALUES ('320411', '新北区', '3204'); +INSERT INTO `base_area` VALUES ('320412', '武进区', '3204'); +INSERT INTO `base_area` VALUES ('320413', '金坛区', '3204'); +INSERT INTO `base_area` VALUES ('320481', '溧阳市', '3204'); +INSERT INTO `base_area` VALUES ('320505', '虎丘区', '3205'); +INSERT INTO `base_area` VALUES ('320506', '吴中区', '3205'); +INSERT INTO `base_area` VALUES ('320507', '相城区', '3205'); +INSERT INTO `base_area` VALUES ('320508', '姑苏区', '3205'); +INSERT INTO `base_area` VALUES ('320509', '吴江区', '3205'); +INSERT INTO `base_area` VALUES ('320571', '苏州工业园区', '3205'); +INSERT INTO `base_area` VALUES ('320581', '常熟市', '3205'); +INSERT INTO `base_area` VALUES ('320582', '张家港市', '3205'); +INSERT INTO `base_area` VALUES ('320583', '昆山市', '3205'); +INSERT INTO `base_area` VALUES ('320585', '太仓市', '3205'); +INSERT INTO `base_area` VALUES ('320612', '通州区', '3206'); +INSERT INTO `base_area` VALUES ('320613', '崇川区', '3206'); +INSERT INTO `base_area` VALUES ('320614', '海门区', '3206'); +INSERT INTO `base_area` VALUES ('320623', '如东县', '3206'); +INSERT INTO `base_area` VALUES ('320671', '南通经济技术开发区', '3206'); +INSERT INTO `base_area` VALUES ('320681', '启东市', '3206'); +INSERT INTO `base_area` VALUES ('320682', '如皋市', '3206'); +INSERT INTO `base_area` VALUES ('320685', '海安市', '3206'); +INSERT INTO `base_area` VALUES ('320703', '连云区', '3207'); +INSERT INTO `base_area` VALUES ('320706', '海州区', '3207'); +INSERT INTO `base_area` VALUES ('320707', '赣榆区', '3207'); +INSERT INTO `base_area` VALUES ('320722', '东海县', '3207'); +INSERT INTO `base_area` VALUES ('320723', '灌云县', '3207'); +INSERT INTO `base_area` VALUES ('320724', '灌南县', '3207'); +INSERT INTO `base_area` VALUES ('320771', '连云港经济技术开发区', '3207'); +INSERT INTO `base_area` VALUES ('320772', '连云港高新技术产业开发区', '3207'); +INSERT INTO `base_area` VALUES ('320803', '淮安区', '3208'); +INSERT INTO `base_area` VALUES ('320804', '淮阴区', '3208'); +INSERT INTO `base_area` VALUES ('320812', '清江浦区', '3208'); +INSERT INTO `base_area` VALUES ('320813', '洪泽区', '3208'); +INSERT INTO `base_area` VALUES ('320826', '涟水县', '3208'); +INSERT INTO `base_area` VALUES ('320830', '盱眙县', '3208'); +INSERT INTO `base_area` VALUES ('320831', '金湖县', '3208'); +INSERT INTO `base_area` VALUES ('320871', '淮安经济技术开发区', '3208'); +INSERT INTO `base_area` VALUES ('320902', '亭湖区', '3209'); +INSERT INTO `base_area` VALUES ('320903', '盐都区', '3209'); +INSERT INTO `base_area` VALUES ('320904', '大丰区', '3209'); +INSERT INTO `base_area` VALUES ('320921', '响水县', '3209'); +INSERT INTO `base_area` VALUES ('320922', '滨海县', '3209'); +INSERT INTO `base_area` VALUES ('320923', '阜宁县', '3209'); +INSERT INTO `base_area` VALUES ('320924', '射阳县', '3209'); +INSERT INTO `base_area` VALUES ('320925', '建湖县', '3209'); +INSERT INTO `base_area` VALUES ('320971', '盐城经济技术开发区', '3209'); +INSERT INTO `base_area` VALUES ('320981', '东台市', '3209'); +INSERT INTO `base_area` VALUES ('321002', '广陵区', '3210'); +INSERT INTO `base_area` VALUES ('321003', '邗江区', '3210'); +INSERT INTO `base_area` VALUES ('321012', '江都区', '3210'); +INSERT INTO `base_area` VALUES ('321023', '宝应县', '3210'); +INSERT INTO `base_area` VALUES ('321071', '扬州经济技术开发区', '3210'); +INSERT INTO `base_area` VALUES ('321081', '仪征市', '3210'); +INSERT INTO `base_area` VALUES ('321084', '高邮市', '3210'); +INSERT INTO `base_area` VALUES ('321102', '京口区', '3211'); +INSERT INTO `base_area` VALUES ('321111', '润州区', '3211'); +INSERT INTO `base_area` VALUES ('321112', '丹徒区', '3211'); +INSERT INTO `base_area` VALUES ('321171', '镇江新区', '3211'); +INSERT INTO `base_area` VALUES ('321181', '丹阳市', '3211'); +INSERT INTO `base_area` VALUES ('321182', '扬中市', '3211'); +INSERT INTO `base_area` VALUES ('321183', '句容市', '3211'); +INSERT INTO `base_area` VALUES ('321202', '海陵区', '3212'); +INSERT INTO `base_area` VALUES ('321203', '高港区', '3212'); +INSERT INTO `base_area` VALUES ('321204', '姜堰区', '3212'); +INSERT INTO `base_area` VALUES ('321271', '泰州医药高新技术产业开发区', '3212'); +INSERT INTO `base_area` VALUES ('321281', '兴化市', '3212'); +INSERT INTO `base_area` VALUES ('321282', '靖江市', '3212'); +INSERT INTO `base_area` VALUES ('321283', '泰兴市', '3212'); +INSERT INTO `base_area` VALUES ('321302', '宿城区', '3213'); +INSERT INTO `base_area` VALUES ('321311', '宿豫区', '3213'); +INSERT INTO `base_area` VALUES ('321322', '沭阳县', '3213'); +INSERT INTO `base_area` VALUES ('321323', '泗阳县', '3213'); +INSERT INTO `base_area` VALUES ('321324', '泗洪县', '3213'); +INSERT INTO `base_area` VALUES ('321371', '宿迁经济技术开发区', '3213'); +INSERT INTO `base_area` VALUES ('330102', '上城区', '3301'); +INSERT INTO `base_area` VALUES ('330105', '拱墅区', '3301'); +INSERT INTO `base_area` VALUES ('330106', '西湖区', '3301'); +INSERT INTO `base_area` VALUES ('330108', '滨江区', '3301'); +INSERT INTO `base_area` VALUES ('330109', '萧山区', '3301'); +INSERT INTO `base_area` VALUES ('330110', '余杭区', '3301'); +INSERT INTO `base_area` VALUES ('330111', '富阳区', '3301'); +INSERT INTO `base_area` VALUES ('330112', '临安区', '3301'); +INSERT INTO `base_area` VALUES ('330113', '临平区', '3301'); +INSERT INTO `base_area` VALUES ('330114', '钱塘区', '3301'); +INSERT INTO `base_area` VALUES ('330122', '桐庐县', '3301'); +INSERT INTO `base_area` VALUES ('330127', '淳安县', '3301'); +INSERT INTO `base_area` VALUES ('330182', '建德市', '3301'); +INSERT INTO `base_area` VALUES ('330203', '海曙区', '3302'); +INSERT INTO `base_area` VALUES ('330205', '江北区', '3302'); +INSERT INTO `base_area` VALUES ('330206', '北仑区', '3302'); +INSERT INTO `base_area` VALUES ('330211', '镇海区', '3302'); +INSERT INTO `base_area` VALUES ('330212', '鄞州区', '3302'); +INSERT INTO `base_area` VALUES ('330213', '奉化区', '3302'); +INSERT INTO `base_area` VALUES ('330225', '象山县', '3302'); +INSERT INTO `base_area` VALUES ('330226', '宁海县', '3302'); +INSERT INTO `base_area` VALUES ('330281', '余姚市', '3302'); +INSERT INTO `base_area` VALUES ('330282', '慈溪市', '3302'); +INSERT INTO `base_area` VALUES ('330302', '鹿城区', '3303'); +INSERT INTO `base_area` VALUES ('330303', '龙湾区', '3303'); +INSERT INTO `base_area` VALUES ('330304', '瓯海区', '3303'); +INSERT INTO `base_area` VALUES ('330305', '洞头区', '3303'); +INSERT INTO `base_area` VALUES ('330324', '永嘉县', '3303'); +INSERT INTO `base_area` VALUES ('330326', '平阳县', '3303'); +INSERT INTO `base_area` VALUES ('330327', '苍南县', '3303'); +INSERT INTO `base_area` VALUES ('330328', '文成县', '3303'); +INSERT INTO `base_area` VALUES ('330329', '泰顺县', '3303'); +INSERT INTO `base_area` VALUES ('330381', '瑞安市', '3303'); +INSERT INTO `base_area` VALUES ('330382', '乐清市', '3303'); +INSERT INTO `base_area` VALUES ('330383', '龙港市', '3303'); +INSERT INTO `base_area` VALUES ('330402', '南湖区', '3304'); +INSERT INTO `base_area` VALUES ('330411', '秀洲区', '3304'); +INSERT INTO `base_area` VALUES ('330421', '嘉善县', '3304'); +INSERT INTO `base_area` VALUES ('330424', '海盐县', '3304'); +INSERT INTO `base_area` VALUES ('330481', '海宁市', '3304'); +INSERT INTO `base_area` VALUES ('330482', '平湖市', '3304'); +INSERT INTO `base_area` VALUES ('330483', '桐乡市', '3304'); +INSERT INTO `base_area` VALUES ('330502', '吴兴区', '3305'); +INSERT INTO `base_area` VALUES ('330503', '南浔区', '3305'); +INSERT INTO `base_area` VALUES ('330521', '德清县', '3305'); +INSERT INTO `base_area` VALUES ('330522', '长兴县', '3305'); +INSERT INTO `base_area` VALUES ('330523', '安吉县', '3305'); +INSERT INTO `base_area` VALUES ('330602', '越城区', '3306'); +INSERT INTO `base_area` VALUES ('330603', '柯桥区', '3306'); +INSERT INTO `base_area` VALUES ('330604', '上虞区', '3306'); +INSERT INTO `base_area` VALUES ('330624', '新昌县', '3306'); +INSERT INTO `base_area` VALUES ('330681', '诸暨市', '3306'); +INSERT INTO `base_area` VALUES ('330683', '嵊州市', '3306'); +INSERT INTO `base_area` VALUES ('330702', '婺城区', '3307'); +INSERT INTO `base_area` VALUES ('330703', '金东区', '3307'); +INSERT INTO `base_area` VALUES ('330723', '武义县', '3307'); +INSERT INTO `base_area` VALUES ('330726', '浦江县', '3307'); +INSERT INTO `base_area` VALUES ('330727', '磐安县', '3307'); +INSERT INTO `base_area` VALUES ('330781', '兰溪市', '3307'); +INSERT INTO `base_area` VALUES ('330782', '义乌市', '3307'); +INSERT INTO `base_area` VALUES ('330783', '东阳市', '3307'); +INSERT INTO `base_area` VALUES ('330784', '永康市', '3307'); +INSERT INTO `base_area` VALUES ('330802', '柯城区', '3308'); +INSERT INTO `base_area` VALUES ('330803', '衢江区', '3308'); +INSERT INTO `base_area` VALUES ('330822', '常山县', '3308'); +INSERT INTO `base_area` VALUES ('330824', '开化县', '3308'); +INSERT INTO `base_area` VALUES ('330825', '龙游县', '3308'); +INSERT INTO `base_area` VALUES ('330881', '江山市', '3308'); +INSERT INTO `base_area` VALUES ('330902', '定海区', '3309'); +INSERT INTO `base_area` VALUES ('330903', '普陀区', '3309'); +INSERT INTO `base_area` VALUES ('330921', '岱山县', '3309'); +INSERT INTO `base_area` VALUES ('330922', '嵊泗县', '3309'); +INSERT INTO `base_area` VALUES ('331002', '椒江区', '3310'); +INSERT INTO `base_area` VALUES ('331003', '黄岩区', '3310'); +INSERT INTO `base_area` VALUES ('331004', '路桥区', '3310'); +INSERT INTO `base_area` VALUES ('331022', '三门县', '3310'); +INSERT INTO `base_area` VALUES ('331023', '天台县', '3310'); +INSERT INTO `base_area` VALUES ('331024', '仙居县', '3310'); +INSERT INTO `base_area` VALUES ('331081', '温岭市', '3310'); +INSERT INTO `base_area` VALUES ('331082', '临海市', '3310'); +INSERT INTO `base_area` VALUES ('331083', '玉环市', '3310'); +INSERT INTO `base_area` VALUES ('331102', '莲都区', '3311'); +INSERT INTO `base_area` VALUES ('331121', '青田县', '3311'); +INSERT INTO `base_area` VALUES ('331122', '缙云县', '3311'); +INSERT INTO `base_area` VALUES ('331123', '遂昌县', '3311'); +INSERT INTO `base_area` VALUES ('331124', '松阳县', '3311'); +INSERT INTO `base_area` VALUES ('331125', '云和县', '3311'); +INSERT INTO `base_area` VALUES ('331126', '庆元县', '3311'); +INSERT INTO `base_area` VALUES ('331127', '景宁畲族自治县', '3311'); +INSERT INTO `base_area` VALUES ('331181', '龙泉市', '3311'); +INSERT INTO `base_area` VALUES ('340102', '瑶海区', '3401'); +INSERT INTO `base_area` VALUES ('340103', '庐阳区', '3401'); +INSERT INTO `base_area` VALUES ('340104', '蜀山区', '3401'); +INSERT INTO `base_area` VALUES ('340111', '包河区', '3401'); +INSERT INTO `base_area` VALUES ('340121', '长丰县', '3401'); +INSERT INTO `base_area` VALUES ('340122', '肥东县', '3401'); +INSERT INTO `base_area` VALUES ('340123', '肥西县', '3401'); +INSERT INTO `base_area` VALUES ('340124', '庐江县', '3401'); +INSERT INTO `base_area` VALUES ('340171', '合肥高新技术产业开发区', '3401'); +INSERT INTO `base_area` VALUES ('340172', '合肥经济技术开发区', '3401'); +INSERT INTO `base_area` VALUES ('340173', '合肥新站高新技术产业开发区', '3401'); +INSERT INTO `base_area` VALUES ('340181', '巢湖市', '3401'); +INSERT INTO `base_area` VALUES ('340202', '镜湖区', '3402'); +INSERT INTO `base_area` VALUES ('340207', '鸠江区', '3402'); +INSERT INTO `base_area` VALUES ('340209', '弋江区', '3402'); +INSERT INTO `base_area` VALUES ('340210', '湾沚区', '3402'); +INSERT INTO `base_area` VALUES ('340212', '繁昌区', '3402'); +INSERT INTO `base_area` VALUES ('340223', '南陵县', '3402'); +INSERT INTO `base_area` VALUES ('340271', '芜湖经济技术开发区', '3402'); +INSERT INTO `base_area` VALUES ('340272', '安徽芜湖三山经济开发区', '3402'); +INSERT INTO `base_area` VALUES ('340281', '无为市', '3402'); +INSERT INTO `base_area` VALUES ('340302', '龙子湖区', '3403'); +INSERT INTO `base_area` VALUES ('340303', '蚌山区', '3403'); +INSERT INTO `base_area` VALUES ('340304', '禹会区', '3403'); +INSERT INTO `base_area` VALUES ('340311', '淮上区', '3403'); +INSERT INTO `base_area` VALUES ('340321', '怀远县', '3403'); +INSERT INTO `base_area` VALUES ('340322', '五河县', '3403'); +INSERT INTO `base_area` VALUES ('340323', '固镇县', '3403'); +INSERT INTO `base_area` VALUES ('340371', '蚌埠市高新技术开发区', '3403'); +INSERT INTO `base_area` VALUES ('340372', '蚌埠市经济开发区', '3403'); +INSERT INTO `base_area` VALUES ('340402', '大通区', '3404'); +INSERT INTO `base_area` VALUES ('340403', '田家庵区', '3404'); +INSERT INTO `base_area` VALUES ('340404', '谢家集区', '3404'); +INSERT INTO `base_area` VALUES ('340405', '八公山区', '3404'); +INSERT INTO `base_area` VALUES ('340406', '潘集区', '3404'); +INSERT INTO `base_area` VALUES ('340421', '凤台县', '3404'); +INSERT INTO `base_area` VALUES ('340422', '寿县', '3404'); +INSERT INTO `base_area` VALUES ('340503', '花山区', '3405'); +INSERT INTO `base_area` VALUES ('340504', '雨山区', '3405'); +INSERT INTO `base_area` VALUES ('340506', '博望区', '3405'); +INSERT INTO `base_area` VALUES ('340521', '当涂县', '3405'); +INSERT INTO `base_area` VALUES ('340522', '含山县', '3405'); +INSERT INTO `base_area` VALUES ('340523', '和县', '3405'); +INSERT INTO `base_area` VALUES ('340602', '杜集区', '3406'); +INSERT INTO `base_area` VALUES ('340603', '相山区', '3406'); +INSERT INTO `base_area` VALUES ('340604', '烈山区', '3406'); +INSERT INTO `base_area` VALUES ('340621', '濉溪县', '3406'); +INSERT INTO `base_area` VALUES ('340705', '铜官区', '3407'); +INSERT INTO `base_area` VALUES ('340706', '义安区', '3407'); +INSERT INTO `base_area` VALUES ('340711', '郊区', '3407'); +INSERT INTO `base_area` VALUES ('340722', '枞阳县', '3407'); +INSERT INTO `base_area` VALUES ('340802', '迎江区', '3408'); +INSERT INTO `base_area` VALUES ('340803', '大观区', '3408'); +INSERT INTO `base_area` VALUES ('340811', '宜秀区', '3408'); +INSERT INTO `base_area` VALUES ('340822', '怀宁县', '3408'); +INSERT INTO `base_area` VALUES ('340825', '太湖县', '3408'); +INSERT INTO `base_area` VALUES ('340826', '宿松县', '3408'); +INSERT INTO `base_area` VALUES ('340827', '望江县', '3408'); +INSERT INTO `base_area` VALUES ('340828', '岳西县', '3408'); +INSERT INTO `base_area` VALUES ('340871', '安徽安庆经济开发区', '3408'); +INSERT INTO `base_area` VALUES ('340881', '桐城市', '3408'); +INSERT INTO `base_area` VALUES ('340882', '潜山市', '3408'); +INSERT INTO `base_area` VALUES ('341002', '屯溪区', '3410'); +INSERT INTO `base_area` VALUES ('341003', '黄山区', '3410'); +INSERT INTO `base_area` VALUES ('341004', '徽州区', '3410'); +INSERT INTO `base_area` VALUES ('341021', '歙县', '3410'); +INSERT INTO `base_area` VALUES ('341022', '休宁县', '3410'); +INSERT INTO `base_area` VALUES ('341023', '黟县', '3410'); +INSERT INTO `base_area` VALUES ('341024', '祁门县', '3410'); +INSERT INTO `base_area` VALUES ('341102', '琅琊区', '3411'); +INSERT INTO `base_area` VALUES ('341103', '南谯区', '3411'); +INSERT INTO `base_area` VALUES ('341122', '来安县', '3411'); +INSERT INTO `base_area` VALUES ('341124', '全椒县', '3411'); +INSERT INTO `base_area` VALUES ('341125', '定远县', '3411'); +INSERT INTO `base_area` VALUES ('341126', '凤阳县', '3411'); +INSERT INTO `base_area` VALUES ('341171', '中新苏滁高新技术产业开发区', '3411'); +INSERT INTO `base_area` VALUES ('341172', '滁州经济技术开发区', '3411'); +INSERT INTO `base_area` VALUES ('341181', '天长市', '3411'); +INSERT INTO `base_area` VALUES ('341182', '明光市', '3411'); +INSERT INTO `base_area` VALUES ('341202', '颍州区', '3412'); +INSERT INTO `base_area` VALUES ('341203', '颍东区', '3412'); +INSERT INTO `base_area` VALUES ('341204', '颍泉区', '3412'); +INSERT INTO `base_area` VALUES ('341221', '临泉县', '3412'); +INSERT INTO `base_area` VALUES ('341222', '太和县', '3412'); +INSERT INTO `base_area` VALUES ('341225', '阜南县', '3412'); +INSERT INTO `base_area` VALUES ('341226', '颍上县', '3412'); +INSERT INTO `base_area` VALUES ('341271', '阜阳合肥现代产业园区', '3412'); +INSERT INTO `base_area` VALUES ('341272', '阜阳经济技术开发区', '3412'); +INSERT INTO `base_area` VALUES ('341282', '界首市', '3412'); +INSERT INTO `base_area` VALUES ('341302', '埇桥区', '3413'); +INSERT INTO `base_area` VALUES ('341321', '砀山县', '3413'); +INSERT INTO `base_area` VALUES ('341322', '萧县', '3413'); +INSERT INTO `base_area` VALUES ('341323', '灵璧县', '3413'); +INSERT INTO `base_area` VALUES ('341324', '泗县', '3413'); +INSERT INTO `base_area` VALUES ('341371', '宿州马鞍山现代产业园区', '3413'); +INSERT INTO `base_area` VALUES ('341372', '宿州经济技术开发区', '3413'); +INSERT INTO `base_area` VALUES ('341502', '金安区', '3415'); +INSERT INTO `base_area` VALUES ('341503', '裕安区', '3415'); +INSERT INTO `base_area` VALUES ('341504', '叶集区', '3415'); +INSERT INTO `base_area` VALUES ('341522', '霍邱县', '3415'); +INSERT INTO `base_area` VALUES ('341523', '舒城县', '3415'); +INSERT INTO `base_area` VALUES ('341524', '金寨县', '3415'); +INSERT INTO `base_area` VALUES ('341525', '霍山县', '3415'); +INSERT INTO `base_area` VALUES ('341602', '谯城区', '3416'); +INSERT INTO `base_area` VALUES ('341621', '涡阳县', '3416'); +INSERT INTO `base_area` VALUES ('341622', '蒙城县', '3416'); +INSERT INTO `base_area` VALUES ('341623', '利辛县', '3416'); +INSERT INTO `base_area` VALUES ('341702', '贵池区', '3417'); +INSERT INTO `base_area` VALUES ('341721', '东至县', '3417'); +INSERT INTO `base_area` VALUES ('341722', '石台县', '3417'); +INSERT INTO `base_area` VALUES ('341723', '青阳县', '3417'); +INSERT INTO `base_area` VALUES ('341802', '宣州区', '3418'); +INSERT INTO `base_area` VALUES ('341821', '郎溪县', '3418'); +INSERT INTO `base_area` VALUES ('341823', '泾县', '3418'); +INSERT INTO `base_area` VALUES ('341824', '绩溪县', '3418'); +INSERT INTO `base_area` VALUES ('341825', '旌德县', '3418'); +INSERT INTO `base_area` VALUES ('341871', '宣城市经济开发区', '3418'); +INSERT INTO `base_area` VALUES ('341881', '宁国市', '3418'); +INSERT INTO `base_area` VALUES ('341882', '广德市', '3418'); +INSERT INTO `base_area` VALUES ('350102', '鼓楼区', '3501'); +INSERT INTO `base_area` VALUES ('350103', '台江区', '3501'); +INSERT INTO `base_area` VALUES ('350104', '仓山区', '3501'); +INSERT INTO `base_area` VALUES ('350105', '马尾区', '3501'); +INSERT INTO `base_area` VALUES ('350111', '晋安区', '3501'); +INSERT INTO `base_area` VALUES ('350112', '长乐区', '3501'); +INSERT INTO `base_area` VALUES ('350121', '闽侯县', '3501'); +INSERT INTO `base_area` VALUES ('350122', '连江县', '3501'); +INSERT INTO `base_area` VALUES ('350123', '罗源县', '3501'); +INSERT INTO `base_area` VALUES ('350124', '闽清县', '3501'); +INSERT INTO `base_area` VALUES ('350125', '永泰县', '3501'); +INSERT INTO `base_area` VALUES ('350128', '平潭县', '3501'); +INSERT INTO `base_area` VALUES ('350181', '福清市', '3501'); +INSERT INTO `base_area` VALUES ('350203', '思明区', '3502'); +INSERT INTO `base_area` VALUES ('350205', '海沧区', '3502'); +INSERT INTO `base_area` VALUES ('350206', '湖里区', '3502'); +INSERT INTO `base_area` VALUES ('350211', '集美区', '3502'); +INSERT INTO `base_area` VALUES ('350212', '同安区', '3502'); +INSERT INTO `base_area` VALUES ('350213', '翔安区', '3502'); +INSERT INTO `base_area` VALUES ('350302', '城厢区', '3503'); +INSERT INTO `base_area` VALUES ('350303', '涵江区', '3503'); +INSERT INTO `base_area` VALUES ('350304', '荔城区', '3503'); +INSERT INTO `base_area` VALUES ('350305', '秀屿区', '3503'); +INSERT INTO `base_area` VALUES ('350322', '仙游县', '3503'); +INSERT INTO `base_area` VALUES ('350404', '三元区', '3504'); +INSERT INTO `base_area` VALUES ('350405', '沙县区', '3504'); +INSERT INTO `base_area` VALUES ('350421', '明溪县', '3504'); +INSERT INTO `base_area` VALUES ('350423', '清流县', '3504'); +INSERT INTO `base_area` VALUES ('350424', '宁化县', '3504'); +INSERT INTO `base_area` VALUES ('350425', '大田县', '3504'); +INSERT INTO `base_area` VALUES ('350426', '尤溪县', '3504'); +INSERT INTO `base_area` VALUES ('350428', '将乐县', '3504'); +INSERT INTO `base_area` VALUES ('350429', '泰宁县', '3504'); +INSERT INTO `base_area` VALUES ('350430', '建宁县', '3504'); +INSERT INTO `base_area` VALUES ('350481', '永安市', '3504'); +INSERT INTO `base_area` VALUES ('350502', '鲤城区', '3505'); +INSERT INTO `base_area` VALUES ('350503', '丰泽区', '3505'); +INSERT INTO `base_area` VALUES ('350504', '洛江区', '3505'); +INSERT INTO `base_area` VALUES ('350505', '泉港区', '3505'); +INSERT INTO `base_area` VALUES ('350521', '惠安县', '3505'); +INSERT INTO `base_area` VALUES ('350524', '安溪县', '3505'); +INSERT INTO `base_area` VALUES ('350525', '永春县', '3505'); +INSERT INTO `base_area` VALUES ('350526', '德化县', '3505'); +INSERT INTO `base_area` VALUES ('350527', '金门县', '3505'); +INSERT INTO `base_area` VALUES ('350581', '石狮市', '3505'); +INSERT INTO `base_area` VALUES ('350582', '晋江市', '3505'); +INSERT INTO `base_area` VALUES ('350583', '南安市', '3505'); +INSERT INTO `base_area` VALUES ('350602', '芗城区', '3506'); +INSERT INTO `base_area` VALUES ('350603', '龙文区', '3506'); +INSERT INTO `base_area` VALUES ('350604', '龙海区', '3506'); +INSERT INTO `base_area` VALUES ('350605', '长泰区', '3506'); +INSERT INTO `base_area` VALUES ('350622', '云霄县', '3506'); +INSERT INTO `base_area` VALUES ('350623', '漳浦县', '3506'); +INSERT INTO `base_area` VALUES ('350624', '诏安县', '3506'); +INSERT INTO `base_area` VALUES ('350626', '东山县', '3506'); +INSERT INTO `base_area` VALUES ('350627', '南靖县', '3506'); +INSERT INTO `base_area` VALUES ('350628', '平和县', '3506'); +INSERT INTO `base_area` VALUES ('350629', '华安县', '3506'); +INSERT INTO `base_area` VALUES ('350702', '延平区', '3507'); +INSERT INTO `base_area` VALUES ('350703', '建阳区', '3507'); +INSERT INTO `base_area` VALUES ('350721', '顺昌县', '3507'); +INSERT INTO `base_area` VALUES ('350722', '浦城县', '3507'); +INSERT INTO `base_area` VALUES ('350723', '光泽县', '3507'); +INSERT INTO `base_area` VALUES ('350724', '松溪县', '3507'); +INSERT INTO `base_area` VALUES ('350725', '政和县', '3507'); +INSERT INTO `base_area` VALUES ('350781', '邵武市', '3507'); +INSERT INTO `base_area` VALUES ('350782', '武夷山市', '3507'); +INSERT INTO `base_area` VALUES ('350783', '建瓯市', '3507'); +INSERT INTO `base_area` VALUES ('350802', '新罗区', '3508'); +INSERT INTO `base_area` VALUES ('350803', '永定区', '3508'); +INSERT INTO `base_area` VALUES ('350821', '长汀县', '3508'); +INSERT INTO `base_area` VALUES ('350823', '上杭县', '3508'); +INSERT INTO `base_area` VALUES ('350824', '武平县', '3508'); +INSERT INTO `base_area` VALUES ('350825', '连城县', '3508'); +INSERT INTO `base_area` VALUES ('350881', '漳平市', '3508'); +INSERT INTO `base_area` VALUES ('350902', '蕉城区', '3509'); +INSERT INTO `base_area` VALUES ('350921', '霞浦县', '3509'); +INSERT INTO `base_area` VALUES ('350922', '古田县', '3509'); +INSERT INTO `base_area` VALUES ('350923', '屏南县', '3509'); +INSERT INTO `base_area` VALUES ('350924', '寿宁县', '3509'); +INSERT INTO `base_area` VALUES ('350925', '周宁县', '3509'); +INSERT INTO `base_area` VALUES ('350926', '柘荣县', '3509'); +INSERT INTO `base_area` VALUES ('350981', '福安市', '3509'); +INSERT INTO `base_area` VALUES ('350982', '福鼎市', '3509'); +INSERT INTO `base_area` VALUES ('360102', '东湖区', '3601'); +INSERT INTO `base_area` VALUES ('360103', '西湖区', '3601'); +INSERT INTO `base_area` VALUES ('360104', '青云谱区', '3601'); +INSERT INTO `base_area` VALUES ('360111', '青山湖区', '3601'); +INSERT INTO `base_area` VALUES ('360112', '新建区', '3601'); +INSERT INTO `base_area` VALUES ('360113', '红谷滩区', '3601'); +INSERT INTO `base_area` VALUES ('360121', '南昌县', '3601'); +INSERT INTO `base_area` VALUES ('360123', '安义县', '3601'); +INSERT INTO `base_area` VALUES ('360124', '进贤县', '3601'); +INSERT INTO `base_area` VALUES ('360202', '昌江区', '3602'); +INSERT INTO `base_area` VALUES ('360203', '珠山区', '3602'); +INSERT INTO `base_area` VALUES ('360222', '浮梁县', '3602'); +INSERT INTO `base_area` VALUES ('360281', '乐平市', '3602'); +INSERT INTO `base_area` VALUES ('360302', '安源区', '3603'); +INSERT INTO `base_area` VALUES ('360313', '湘东区', '3603'); +INSERT INTO `base_area` VALUES ('360321', '莲花县', '3603'); +INSERT INTO `base_area` VALUES ('360322', '上栗县', '3603'); +INSERT INTO `base_area` VALUES ('360323', '芦溪县', '3603'); +INSERT INTO `base_area` VALUES ('360402', '濂溪区', '3604'); +INSERT INTO `base_area` VALUES ('360403', '浔阳区', '3604'); +INSERT INTO `base_area` VALUES ('360404', '柴桑区', '3604'); +INSERT INTO `base_area` VALUES ('360423', '武宁县', '3604'); +INSERT INTO `base_area` VALUES ('360424', '修水县', '3604'); +INSERT INTO `base_area` VALUES ('360425', '永修县', '3604'); +INSERT INTO `base_area` VALUES ('360426', '德安县', '3604'); +INSERT INTO `base_area` VALUES ('360428', '都昌县', '3604'); +INSERT INTO `base_area` VALUES ('360429', '湖口县', '3604'); +INSERT INTO `base_area` VALUES ('360430', '彭泽县', '3604'); +INSERT INTO `base_area` VALUES ('360481', '瑞昌市', '3604'); +INSERT INTO `base_area` VALUES ('360482', '共青城市', '3604'); +INSERT INTO `base_area` VALUES ('360483', '庐山市', '3604'); +INSERT INTO `base_area` VALUES ('360502', '渝水区', '3605'); +INSERT INTO `base_area` VALUES ('360521', '分宜县', '3605'); +INSERT INTO `base_area` VALUES ('360602', '月湖区', '3606'); +INSERT INTO `base_area` VALUES ('360603', '余江区', '3606'); +INSERT INTO `base_area` VALUES ('360681', '贵溪市', '3606'); +INSERT INTO `base_area` VALUES ('360702', '章贡区', '3607'); +INSERT INTO `base_area` VALUES ('360703', '南康区', '3607'); +INSERT INTO `base_area` VALUES ('360704', '赣县区', '3607'); +INSERT INTO `base_area` VALUES ('360722', '信丰县', '3607'); +INSERT INTO `base_area` VALUES ('360723', '大余县', '3607'); +INSERT INTO `base_area` VALUES ('360724', '上犹县', '3607'); +INSERT INTO `base_area` VALUES ('360725', '崇义县', '3607'); +INSERT INTO `base_area` VALUES ('360726', '安远县', '3607'); +INSERT INTO `base_area` VALUES ('360728', '定南县', '3607'); +INSERT INTO `base_area` VALUES ('360729', '全南县', '3607'); +INSERT INTO `base_area` VALUES ('360730', '宁都县', '3607'); +INSERT INTO `base_area` VALUES ('360731', '于都县', '3607'); +INSERT INTO `base_area` VALUES ('360732', '兴国县', '3607'); +INSERT INTO `base_area` VALUES ('360733', '会昌县', '3607'); +INSERT INTO `base_area` VALUES ('360734', '寻乌县', '3607'); +INSERT INTO `base_area` VALUES ('360735', '石城县', '3607'); +INSERT INTO `base_area` VALUES ('360781', '瑞金市', '3607'); +INSERT INTO `base_area` VALUES ('360783', '龙南市', '3607'); +INSERT INTO `base_area` VALUES ('360802', '吉州区', '3608'); +INSERT INTO `base_area` VALUES ('360803', '青原区', '3608'); +INSERT INTO `base_area` VALUES ('360821', '吉安县', '3608'); +INSERT INTO `base_area` VALUES ('360822', '吉水县', '3608'); +INSERT INTO `base_area` VALUES ('360823', '峡江县', '3608'); +INSERT INTO `base_area` VALUES ('360824', '新干县', '3608'); +INSERT INTO `base_area` VALUES ('360825', '永丰县', '3608'); +INSERT INTO `base_area` VALUES ('360826', '泰和县', '3608'); +INSERT INTO `base_area` VALUES ('360827', '遂川县', '3608'); +INSERT INTO `base_area` VALUES ('360828', '万安县', '3608'); +INSERT INTO `base_area` VALUES ('360829', '安福县', '3608'); +INSERT INTO `base_area` VALUES ('360830', '永新县', '3608'); +INSERT INTO `base_area` VALUES ('360881', '井冈山市', '3608'); +INSERT INTO `base_area` VALUES ('360902', '袁州区', '3609'); +INSERT INTO `base_area` VALUES ('360921', '奉新县', '3609'); +INSERT INTO `base_area` VALUES ('360922', '万载县', '3609'); +INSERT INTO `base_area` VALUES ('360923', '上高县', '3609'); +INSERT INTO `base_area` VALUES ('360924', '宜丰县', '3609'); +INSERT INTO `base_area` VALUES ('360925', '靖安县', '3609'); +INSERT INTO `base_area` VALUES ('360926', '铜鼓县', '3609'); +INSERT INTO `base_area` VALUES ('360981', '丰城市', '3609'); +INSERT INTO `base_area` VALUES ('360982', '樟树市', '3609'); +INSERT INTO `base_area` VALUES ('360983', '高安市', '3609'); +INSERT INTO `base_area` VALUES ('361002', '临川区', '3610'); +INSERT INTO `base_area` VALUES ('361003', '东乡区', '3610'); +INSERT INTO `base_area` VALUES ('361021', '南城县', '3610'); +INSERT INTO `base_area` VALUES ('361022', '黎川县', '3610'); +INSERT INTO `base_area` VALUES ('361023', '南丰县', '3610'); +INSERT INTO `base_area` VALUES ('361024', '崇仁县', '3610'); +INSERT INTO `base_area` VALUES ('361025', '乐安县', '3610'); +INSERT INTO `base_area` VALUES ('361026', '宜黄县', '3610'); +INSERT INTO `base_area` VALUES ('361027', '金溪县', '3610'); +INSERT INTO `base_area` VALUES ('361028', '资溪县', '3610'); +INSERT INTO `base_area` VALUES ('361030', '广昌县', '3610'); +INSERT INTO `base_area` VALUES ('361102', '信州区', '3611'); +INSERT INTO `base_area` VALUES ('361103', '广丰区', '3611'); +INSERT INTO `base_area` VALUES ('361104', '广信区', '3611'); +INSERT INTO `base_area` VALUES ('361123', '玉山县', '3611'); +INSERT INTO `base_area` VALUES ('361124', '铅山县', '3611'); +INSERT INTO `base_area` VALUES ('361125', '横峰县', '3611'); +INSERT INTO `base_area` VALUES ('361126', '弋阳县', '3611'); +INSERT INTO `base_area` VALUES ('361127', '余干县', '3611'); +INSERT INTO `base_area` VALUES ('361128', '鄱阳县', '3611'); +INSERT INTO `base_area` VALUES ('361129', '万年县', '3611'); +INSERT INTO `base_area` VALUES ('361130', '婺源县', '3611'); +INSERT INTO `base_area` VALUES ('361181', '德兴市', '3611'); +INSERT INTO `base_area` VALUES ('370102', '历下区', '3701'); +INSERT INTO `base_area` VALUES ('370103', '市中区', '3701'); +INSERT INTO `base_area` VALUES ('370104', '槐荫区', '3701'); +INSERT INTO `base_area` VALUES ('370105', '天桥区', '3701'); +INSERT INTO `base_area` VALUES ('370112', '历城区', '3701'); +INSERT INTO `base_area` VALUES ('370113', '长清区', '3701'); +INSERT INTO `base_area` VALUES ('370114', '章丘区', '3701'); +INSERT INTO `base_area` VALUES ('370115', '济阳区', '3701'); +INSERT INTO `base_area` VALUES ('370116', '莱芜区', '3701'); +INSERT INTO `base_area` VALUES ('370117', '钢城区', '3701'); +INSERT INTO `base_area` VALUES ('370124', '平阴县', '3701'); +INSERT INTO `base_area` VALUES ('370126', '商河县', '3701'); +INSERT INTO `base_area` VALUES ('370171', '济南高新技术产业开发区', '3701'); +INSERT INTO `base_area` VALUES ('370202', '市南区', '3702'); +INSERT INTO `base_area` VALUES ('370203', '市北区', '3702'); +INSERT INTO `base_area` VALUES ('370211', '黄岛区', '3702'); +INSERT INTO `base_area` VALUES ('370212', '崂山区', '3702'); +INSERT INTO `base_area` VALUES ('370213', '李沧区', '3702'); +INSERT INTO `base_area` VALUES ('370214', '城阳区', '3702'); +INSERT INTO `base_area` VALUES ('370215', '即墨区', '3702'); +INSERT INTO `base_area` VALUES ('370271', '青岛高新技术产业开发区', '3702'); +INSERT INTO `base_area` VALUES ('370281', '胶州市', '3702'); +INSERT INTO `base_area` VALUES ('370283', '平度市', '3702'); +INSERT INTO `base_area` VALUES ('370285', '莱西市', '3702'); +INSERT INTO `base_area` VALUES ('370302', '淄川区', '3703'); +INSERT INTO `base_area` VALUES ('370303', '张店区', '3703'); +INSERT INTO `base_area` VALUES ('370304', '博山区', '3703'); +INSERT INTO `base_area` VALUES ('370305', '临淄区', '3703'); +INSERT INTO `base_area` VALUES ('370306', '周村区', '3703'); +INSERT INTO `base_area` VALUES ('370321', '桓台县', '3703'); +INSERT INTO `base_area` VALUES ('370322', '高青县', '3703'); +INSERT INTO `base_area` VALUES ('370323', '沂源县', '3703'); +INSERT INTO `base_area` VALUES ('370402', '市中区', '3704'); +INSERT INTO `base_area` VALUES ('370403', '薛城区', '3704'); +INSERT INTO `base_area` VALUES ('370404', '峄城区', '3704'); +INSERT INTO `base_area` VALUES ('370405', '台儿庄区', '3704'); +INSERT INTO `base_area` VALUES ('370406', '山亭区', '3704'); +INSERT INTO `base_area` VALUES ('370481', '滕州市', '3704'); +INSERT INTO `base_area` VALUES ('370502', '东营区', '3705'); +INSERT INTO `base_area` VALUES ('370503', '河口区', '3705'); +INSERT INTO `base_area` VALUES ('370505', '垦利区', '3705'); +INSERT INTO `base_area` VALUES ('370522', '利津县', '3705'); +INSERT INTO `base_area` VALUES ('370523', '广饶县', '3705'); +INSERT INTO `base_area` VALUES ('370571', '东营经济技术开发区', '3705'); +INSERT INTO `base_area` VALUES ('370572', '东营港经济开发区', '3705'); +INSERT INTO `base_area` VALUES ('370602', '芝罘区', '3706'); +INSERT INTO `base_area` VALUES ('370611', '福山区', '3706'); +INSERT INTO `base_area` VALUES ('370612', '牟平区', '3706'); +INSERT INTO `base_area` VALUES ('370613', '莱山区', '3706'); +INSERT INTO `base_area` VALUES ('370614', '蓬莱区', '3706'); +INSERT INTO `base_area` VALUES ('370671', '烟台高新技术产业开发区', '3706'); +INSERT INTO `base_area` VALUES ('370672', '烟台经济技术开发区', '3706'); +INSERT INTO `base_area` VALUES ('370681', '龙口市', '3706'); +INSERT INTO `base_area` VALUES ('370682', '莱阳市', '3706'); +INSERT INTO `base_area` VALUES ('370683', '莱州市', '3706'); +INSERT INTO `base_area` VALUES ('370685', '招远市', '3706'); +INSERT INTO `base_area` VALUES ('370686', '栖霞市', '3706'); +INSERT INTO `base_area` VALUES ('370687', '海阳市', '3706'); +INSERT INTO `base_area` VALUES ('370702', '潍城区', '3707'); +INSERT INTO `base_area` VALUES ('370703', '寒亭区', '3707'); +INSERT INTO `base_area` VALUES ('370704', '坊子区', '3707'); +INSERT INTO `base_area` VALUES ('370705', '奎文区', '3707'); +INSERT INTO `base_area` VALUES ('370724', '临朐县', '3707'); +INSERT INTO `base_area` VALUES ('370725', '昌乐县', '3707'); +INSERT INTO `base_area` VALUES ('370772', '潍坊滨海经济技术开发区', '3707'); +INSERT INTO `base_area` VALUES ('370781', '青州市', '3707'); +INSERT INTO `base_area` VALUES ('370782', '诸城市', '3707'); +INSERT INTO `base_area` VALUES ('370783', '寿光市', '3707'); +INSERT INTO `base_area` VALUES ('370784', '安丘市', '3707'); +INSERT INTO `base_area` VALUES ('370785', '高密市', '3707'); +INSERT INTO `base_area` VALUES ('370786', '昌邑市', '3707'); +INSERT INTO `base_area` VALUES ('370811', '任城区', '3708'); +INSERT INTO `base_area` VALUES ('370812', '兖州区', '3708'); +INSERT INTO `base_area` VALUES ('370826', '微山县', '3708'); +INSERT INTO `base_area` VALUES ('370827', '鱼台县', '3708'); +INSERT INTO `base_area` VALUES ('370828', '金乡县', '3708'); +INSERT INTO `base_area` VALUES ('370829', '嘉祥县', '3708'); +INSERT INTO `base_area` VALUES ('370830', '汶上县', '3708'); +INSERT INTO `base_area` VALUES ('370831', '泗水县', '3708'); +INSERT INTO `base_area` VALUES ('370832', '梁山县', '3708'); +INSERT INTO `base_area` VALUES ('370871', '济宁高新技术产业开发区', '3708'); +INSERT INTO `base_area` VALUES ('370881', '曲阜市', '3708'); +INSERT INTO `base_area` VALUES ('370883', '邹城市', '3708'); +INSERT INTO `base_area` VALUES ('370902', '泰山区', '3709'); +INSERT INTO `base_area` VALUES ('370911', '岱岳区', '3709'); +INSERT INTO `base_area` VALUES ('370921', '宁阳县', '3709'); +INSERT INTO `base_area` VALUES ('370923', '东平县', '3709'); +INSERT INTO `base_area` VALUES ('370982', '新泰市', '3709'); +INSERT INTO `base_area` VALUES ('370983', '肥城市', '3709'); +INSERT INTO `base_area` VALUES ('371002', '环翠区', '3710'); +INSERT INTO `base_area` VALUES ('371003', '文登区', '3710'); +INSERT INTO `base_area` VALUES ('371071', '威海火炬高技术产业开发区', '3710'); +INSERT INTO `base_area` VALUES ('371072', '威海经济技术开发区', '3710'); +INSERT INTO `base_area` VALUES ('371073', '威海临港经济技术开发区', '3710'); +INSERT INTO `base_area` VALUES ('371082', '荣成市', '3710'); +INSERT INTO `base_area` VALUES ('371083', '乳山市', '3710'); +INSERT INTO `base_area` VALUES ('371102', '东港区', '3711'); +INSERT INTO `base_area` VALUES ('371103', '岚山区', '3711'); +INSERT INTO `base_area` VALUES ('371121', '五莲县', '3711'); +INSERT INTO `base_area` VALUES ('371122', '莒县', '3711'); +INSERT INTO `base_area` VALUES ('371171', '日照经济技术开发区', '3711'); +INSERT INTO `base_area` VALUES ('371302', '兰山区', '3713'); +INSERT INTO `base_area` VALUES ('371311', '罗庄区', '3713'); +INSERT INTO `base_area` VALUES ('371312', '河东区', '3713'); +INSERT INTO `base_area` VALUES ('371321', '沂南县', '3713'); +INSERT INTO `base_area` VALUES ('371322', '郯城县', '3713'); +INSERT INTO `base_area` VALUES ('371323', '沂水县', '3713'); +INSERT INTO `base_area` VALUES ('371324', '兰陵县', '3713'); +INSERT INTO `base_area` VALUES ('371325', '费县', '3713'); +INSERT INTO `base_area` VALUES ('371326', '平邑县', '3713'); +INSERT INTO `base_area` VALUES ('371327', '莒南县', '3713'); +INSERT INTO `base_area` VALUES ('371328', '蒙阴县', '3713'); +INSERT INTO `base_area` VALUES ('371329', '临沭县', '3713'); +INSERT INTO `base_area` VALUES ('371371', '临沂高新技术产业开发区', '3713'); +INSERT INTO `base_area` VALUES ('371402', '德城区', '3714'); +INSERT INTO `base_area` VALUES ('371403', '陵城区', '3714'); +INSERT INTO `base_area` VALUES ('371422', '宁津县', '3714'); +INSERT INTO `base_area` VALUES ('371423', '庆云县', '3714'); +INSERT INTO `base_area` VALUES ('371424', '临邑县', '3714'); +INSERT INTO `base_area` VALUES ('371425', '齐河县', '3714'); +INSERT INTO `base_area` VALUES ('371426', '平原县', '3714'); +INSERT INTO `base_area` VALUES ('371427', '夏津县', '3714'); +INSERT INTO `base_area` VALUES ('371428', '武城县', '3714'); +INSERT INTO `base_area` VALUES ('371471', '德州天衢新区', '3714'); +INSERT INTO `base_area` VALUES ('371481', '乐陵市', '3714'); +INSERT INTO `base_area` VALUES ('371482', '禹城市', '3714'); +INSERT INTO `base_area` VALUES ('371502', '东昌府区', '3715'); +INSERT INTO `base_area` VALUES ('371503', '茌平区', '3715'); +INSERT INTO `base_area` VALUES ('371521', '阳谷县', '3715'); +INSERT INTO `base_area` VALUES ('371522', '莘县', '3715'); +INSERT INTO `base_area` VALUES ('371524', '东阿县', '3715'); +INSERT INTO `base_area` VALUES ('371525', '冠县', '3715'); +INSERT INTO `base_area` VALUES ('371526', '高唐县', '3715'); +INSERT INTO `base_area` VALUES ('371581', '临清市', '3715'); +INSERT INTO `base_area` VALUES ('371602', '滨城区', '3716'); +INSERT INTO `base_area` VALUES ('371603', '沾化区', '3716'); +INSERT INTO `base_area` VALUES ('371621', '惠民县', '3716'); +INSERT INTO `base_area` VALUES ('371622', '阳信县', '3716'); +INSERT INTO `base_area` VALUES ('371623', '无棣县', '3716'); +INSERT INTO `base_area` VALUES ('371625', '博兴县', '3716'); +INSERT INTO `base_area` VALUES ('371681', '邹平市', '3716'); +INSERT INTO `base_area` VALUES ('371702', '牡丹区', '3717'); +INSERT INTO `base_area` VALUES ('371703', '定陶区', '3717'); +INSERT INTO `base_area` VALUES ('371721', '曹县', '3717'); +INSERT INTO `base_area` VALUES ('371722', '单县', '3717'); +INSERT INTO `base_area` VALUES ('371723', '成武县', '3717'); +INSERT INTO `base_area` VALUES ('371724', '巨野县', '3717'); +INSERT INTO `base_area` VALUES ('371725', '郓城县', '3717'); +INSERT INTO `base_area` VALUES ('371726', '鄄城县', '3717'); +INSERT INTO `base_area` VALUES ('371728', '东明县', '3717'); +INSERT INTO `base_area` VALUES ('371771', '菏泽经济技术开发区', '3717'); +INSERT INTO `base_area` VALUES ('371772', '菏泽高新技术开发区', '3717'); +INSERT INTO `base_area` VALUES ('410102', '中原区', '4101'); +INSERT INTO `base_area` VALUES ('410103', '二七区', '4101'); +INSERT INTO `base_area` VALUES ('410104', '管城回族区', '4101'); +INSERT INTO `base_area` VALUES ('410105', '金水区', '4101'); +INSERT INTO `base_area` VALUES ('410106', '上街区', '4101'); +INSERT INTO `base_area` VALUES ('410108', '惠济区', '4101'); +INSERT INTO `base_area` VALUES ('410122', '中牟县', '4101'); +INSERT INTO `base_area` VALUES ('410171', '郑州经济技术开发区', '4101'); +INSERT INTO `base_area` VALUES ('410172', '郑州高新技术产业开发区', '4101'); +INSERT INTO `base_area` VALUES ('410173', '郑州航空港经济综合实验区', '4101'); +INSERT INTO `base_area` VALUES ('410181', '巩义市', '4101'); +INSERT INTO `base_area` VALUES ('410182', '荥阳市', '4101'); +INSERT INTO `base_area` VALUES ('410183', '新密市', '4101'); +INSERT INTO `base_area` VALUES ('410184', '新郑市', '4101'); +INSERT INTO `base_area` VALUES ('410185', '登封市', '4101'); +INSERT INTO `base_area` VALUES ('410202', '龙亭区', '4102'); +INSERT INTO `base_area` VALUES ('410203', '顺河回族区', '4102'); +INSERT INTO `base_area` VALUES ('410204', '鼓楼区', '4102'); +INSERT INTO `base_area` VALUES ('410205', '禹王台区', '4102'); +INSERT INTO `base_area` VALUES ('410212', '祥符区', '4102'); +INSERT INTO `base_area` VALUES ('410221', '杞县', '4102'); +INSERT INTO `base_area` VALUES ('410222', '通许县', '4102'); +INSERT INTO `base_area` VALUES ('410223', '尉氏县', '4102'); +INSERT INTO `base_area` VALUES ('410225', '兰考县', '4102'); +INSERT INTO `base_area` VALUES ('410302', '老城区', '4103'); +INSERT INTO `base_area` VALUES ('410303', '西工区', '4103'); +INSERT INTO `base_area` VALUES ('410304', '瀍河回族区', '4103'); +INSERT INTO `base_area` VALUES ('410305', '涧西区', '4103'); +INSERT INTO `base_area` VALUES ('410307', '偃师区', '4103'); +INSERT INTO `base_area` VALUES ('410308', '孟津区', '4103'); +INSERT INTO `base_area` VALUES ('410311', '洛龙区', '4103'); +INSERT INTO `base_area` VALUES ('410323', '新安县', '4103'); +INSERT INTO `base_area` VALUES ('410324', '栾川县', '4103'); +INSERT INTO `base_area` VALUES ('410325', '嵩县', '4103'); +INSERT INTO `base_area` VALUES ('410326', '汝阳县', '4103'); +INSERT INTO `base_area` VALUES ('410327', '宜阳县', '4103'); +INSERT INTO `base_area` VALUES ('410328', '洛宁县', '4103'); +INSERT INTO `base_area` VALUES ('410329', '伊川县', '4103'); +INSERT INTO `base_area` VALUES ('410371', '洛阳高新技术产业开发区', '4103'); +INSERT INTO `base_area` VALUES ('410402', '新华区', '4104'); +INSERT INTO `base_area` VALUES ('410403', '卫东区', '4104'); +INSERT INTO `base_area` VALUES ('410404', '石龙区', '4104'); +INSERT INTO `base_area` VALUES ('410411', '湛河区', '4104'); +INSERT INTO `base_area` VALUES ('410421', '宝丰县', '4104'); +INSERT INTO `base_area` VALUES ('410422', '叶县', '4104'); +INSERT INTO `base_area` VALUES ('410423', '鲁山县', '4104'); +INSERT INTO `base_area` VALUES ('410425', '郏县', '4104'); +INSERT INTO `base_area` VALUES ('410471', '平顶山高新技术产业开发区', '4104'); +INSERT INTO `base_area` VALUES ('410472', '平顶山市城乡一体化示范区', '4104'); +INSERT INTO `base_area` VALUES ('410481', '舞钢市', '4104'); +INSERT INTO `base_area` VALUES ('410482', '汝州市', '4104'); +INSERT INTO `base_area` VALUES ('410502', '文峰区', '4105'); +INSERT INTO `base_area` VALUES ('410503', '北关区', '4105'); +INSERT INTO `base_area` VALUES ('410505', '殷都区', '4105'); +INSERT INTO `base_area` VALUES ('410506', '龙安区', '4105'); +INSERT INTO `base_area` VALUES ('410522', '安阳县', '4105'); +INSERT INTO `base_area` VALUES ('410523', '汤阴县', '4105'); +INSERT INTO `base_area` VALUES ('410526', '滑县', '4105'); +INSERT INTO `base_area` VALUES ('410527', '内黄县', '4105'); +INSERT INTO `base_area` VALUES ('410571', '安阳高新技术产业开发区', '4105'); +INSERT INTO `base_area` VALUES ('410581', '林州市', '4105'); +INSERT INTO `base_area` VALUES ('410602', '鹤山区', '4106'); +INSERT INTO `base_area` VALUES ('410603', '山城区', '4106'); +INSERT INTO `base_area` VALUES ('410611', '淇滨区', '4106'); +INSERT INTO `base_area` VALUES ('410621', '浚县', '4106'); +INSERT INTO `base_area` VALUES ('410622', '淇县', '4106'); +INSERT INTO `base_area` VALUES ('410671', '鹤壁经济技术开发区', '4106'); +INSERT INTO `base_area` VALUES ('410702', '红旗区', '4107'); +INSERT INTO `base_area` VALUES ('410703', '卫滨区', '4107'); +INSERT INTO `base_area` VALUES ('410704', '凤泉区', '4107'); +INSERT INTO `base_area` VALUES ('410711', '牧野区', '4107'); +INSERT INTO `base_area` VALUES ('410721', '新乡县', '4107'); +INSERT INTO `base_area` VALUES ('410724', '获嘉县', '4107'); +INSERT INTO `base_area` VALUES ('410725', '原阳县', '4107'); +INSERT INTO `base_area` VALUES ('410726', '延津县', '4107'); +INSERT INTO `base_area` VALUES ('410727', '封丘县', '4107'); +INSERT INTO `base_area` VALUES ('410771', '新乡高新技术产业开发区', '4107'); +INSERT INTO `base_area` VALUES ('410772', '新乡经济技术开发区', '4107'); +INSERT INTO `base_area` VALUES ('410773', '新乡市平原城乡一体化示范区', '4107'); +INSERT INTO `base_area` VALUES ('410781', '卫辉市', '4107'); +INSERT INTO `base_area` VALUES ('410782', '辉县市', '4107'); +INSERT INTO `base_area` VALUES ('410783', '长垣市', '4107'); +INSERT INTO `base_area` VALUES ('410802', '解放区', '4108'); +INSERT INTO `base_area` VALUES ('410803', '中站区', '4108'); +INSERT INTO `base_area` VALUES ('410804', '马村区', '4108'); +INSERT INTO `base_area` VALUES ('410811', '山阳区', '4108'); +INSERT INTO `base_area` VALUES ('410821', '修武县', '4108'); +INSERT INTO `base_area` VALUES ('410822', '博爱县', '4108'); +INSERT INTO `base_area` VALUES ('410823', '武陟县', '4108'); +INSERT INTO `base_area` VALUES ('410825', '温县', '4108'); +INSERT INTO `base_area` VALUES ('410871', '焦作城乡一体化示范区', '4108'); +INSERT INTO `base_area` VALUES ('410882', '沁阳市', '4108'); +INSERT INTO `base_area` VALUES ('410883', '孟州市', '4108'); +INSERT INTO `base_area` VALUES ('410902', '华龙区', '4109'); +INSERT INTO `base_area` VALUES ('410922', '清丰县', '4109'); +INSERT INTO `base_area` VALUES ('410923', '南乐县', '4109'); +INSERT INTO `base_area` VALUES ('410926', '范县', '4109'); +INSERT INTO `base_area` VALUES ('410927', '台前县', '4109'); +INSERT INTO `base_area` VALUES ('410928', '濮阳县', '4109'); +INSERT INTO `base_area` VALUES ('410971', '河南濮阳工业园区', '4109'); +INSERT INTO `base_area` VALUES ('410972', '濮阳经济技术开发区', '4109'); +INSERT INTO `base_area` VALUES ('411002', '魏都区', '4110'); +INSERT INTO `base_area` VALUES ('411003', '建安区', '4110'); +INSERT INTO `base_area` VALUES ('411024', '鄢陵县', '4110'); +INSERT INTO `base_area` VALUES ('411025', '襄城县', '4110'); +INSERT INTO `base_area` VALUES ('411071', '许昌经济技术开发区', '4110'); +INSERT INTO `base_area` VALUES ('411081', '禹州市', '4110'); +INSERT INTO `base_area` VALUES ('411082', '长葛市', '4110'); +INSERT INTO `base_area` VALUES ('411102', '源汇区', '4111'); +INSERT INTO `base_area` VALUES ('411103', '郾城区', '4111'); +INSERT INTO `base_area` VALUES ('411104', '召陵区', '4111'); +INSERT INTO `base_area` VALUES ('411121', '舞阳县', '4111'); +INSERT INTO `base_area` VALUES ('411122', '临颍县', '4111'); +INSERT INTO `base_area` VALUES ('411171', '漯河经济技术开发区', '4111'); +INSERT INTO `base_area` VALUES ('411202', '湖滨区', '4112'); +INSERT INTO `base_area` VALUES ('411203', '陕州区', '4112'); +INSERT INTO `base_area` VALUES ('411221', '渑池县', '4112'); +INSERT INTO `base_area` VALUES ('411224', '卢氏县', '4112'); +INSERT INTO `base_area` VALUES ('411271', '河南三门峡经济开发区', '4112'); +INSERT INTO `base_area` VALUES ('411281', '义马市', '4112'); +INSERT INTO `base_area` VALUES ('411282', '灵宝市', '4112'); +INSERT INTO `base_area` VALUES ('411302', '宛城区', '4113'); +INSERT INTO `base_area` VALUES ('411303', '卧龙区', '4113'); +INSERT INTO `base_area` VALUES ('411321', '南召县', '4113'); +INSERT INTO `base_area` VALUES ('411322', '方城县', '4113'); +INSERT INTO `base_area` VALUES ('411323', '西峡县', '4113'); +INSERT INTO `base_area` VALUES ('411324', '镇平县', '4113'); +INSERT INTO `base_area` VALUES ('411325', '内乡县', '4113'); +INSERT INTO `base_area` VALUES ('411326', '淅川县', '4113'); +INSERT INTO `base_area` VALUES ('411327', '社旗县', '4113'); +INSERT INTO `base_area` VALUES ('411328', '唐河县', '4113'); +INSERT INTO `base_area` VALUES ('411329', '新野县', '4113'); +INSERT INTO `base_area` VALUES ('411330', '桐柏县', '4113'); +INSERT INTO `base_area` VALUES ('411371', '南阳高新技术产业开发区', '4113'); +INSERT INTO `base_area` VALUES ('411372', '南阳市城乡一体化示范区', '4113'); +INSERT INTO `base_area` VALUES ('411381', '邓州市', '4113'); +INSERT INTO `base_area` VALUES ('411402', '梁园区', '4114'); +INSERT INTO `base_area` VALUES ('411403', '睢阳区', '4114'); +INSERT INTO `base_area` VALUES ('411421', '民权县', '4114'); +INSERT INTO `base_area` VALUES ('411422', '睢县', '4114'); +INSERT INTO `base_area` VALUES ('411423', '宁陵县', '4114'); +INSERT INTO `base_area` VALUES ('411424', '柘城县', '4114'); +INSERT INTO `base_area` VALUES ('411425', '虞城县', '4114'); +INSERT INTO `base_area` VALUES ('411426', '夏邑县', '4114'); +INSERT INTO `base_area` VALUES ('411471', '豫东综合物流产业聚集区', '4114'); +INSERT INTO `base_area` VALUES ('411472', '河南商丘经济开发区', '4114'); +INSERT INTO `base_area` VALUES ('411481', '永城市', '4114'); +INSERT INTO `base_area` VALUES ('411502', '浉河区', '4115'); +INSERT INTO `base_area` VALUES ('411503', '平桥区', '4115'); +INSERT INTO `base_area` VALUES ('411521', '罗山县', '4115'); +INSERT INTO `base_area` VALUES ('411522', '光山县', '4115'); +INSERT INTO `base_area` VALUES ('411523', '新县', '4115'); +INSERT INTO `base_area` VALUES ('411524', '商城县', '4115'); +INSERT INTO `base_area` VALUES ('411525', '固始县', '4115'); +INSERT INTO `base_area` VALUES ('411526', '潢川县', '4115'); +INSERT INTO `base_area` VALUES ('411527', '淮滨县', '4115'); +INSERT INTO `base_area` VALUES ('411528', '息县', '4115'); +INSERT INTO `base_area` VALUES ('411571', '信阳高新技术产业开发区', '4115'); +INSERT INTO `base_area` VALUES ('411602', '川汇区', '4116'); +INSERT INTO `base_area` VALUES ('411603', '淮阳区', '4116'); +INSERT INTO `base_area` VALUES ('411621', '扶沟县', '4116'); +INSERT INTO `base_area` VALUES ('411622', '西华县', '4116'); +INSERT INTO `base_area` VALUES ('411623', '商水县', '4116'); +INSERT INTO `base_area` VALUES ('411624', '沈丘县', '4116'); +INSERT INTO `base_area` VALUES ('411625', '郸城县', '4116'); +INSERT INTO `base_area` VALUES ('411627', '太康县', '4116'); +INSERT INTO `base_area` VALUES ('411628', '鹿邑县', '4116'); +INSERT INTO `base_area` VALUES ('411671', '河南周口经济开发区', '4116'); +INSERT INTO `base_area` VALUES ('411681', '项城市', '4116'); +INSERT INTO `base_area` VALUES ('411702', '驿城区', '4117'); +INSERT INTO `base_area` VALUES ('411721', '西平县', '4117'); +INSERT INTO `base_area` VALUES ('411722', '上蔡县', '4117'); +INSERT INTO `base_area` VALUES ('411723', '平舆县', '4117'); +INSERT INTO `base_area` VALUES ('411724', '正阳县', '4117'); +INSERT INTO `base_area` VALUES ('411725', '确山县', '4117'); +INSERT INTO `base_area` VALUES ('411726', '泌阳县', '4117'); +INSERT INTO `base_area` VALUES ('411727', '汝南县', '4117'); +INSERT INTO `base_area` VALUES ('411728', '遂平县', '4117'); +INSERT INTO `base_area` VALUES ('411729', '新蔡县', '4117'); +INSERT INTO `base_area` VALUES ('411771', '河南驻马店经济开发区', '4117'); +INSERT INTO `base_area` VALUES ('419001', '济源市', '4190'); +INSERT INTO `base_area` VALUES ('420102', '江岸区', '4201'); +INSERT INTO `base_area` VALUES ('420103', '江汉区', '4201'); +INSERT INTO `base_area` VALUES ('420104', '硚口区', '4201'); +INSERT INTO `base_area` VALUES ('420105', '汉阳区', '4201'); +INSERT INTO `base_area` VALUES ('420106', '武昌区', '4201'); +INSERT INTO `base_area` VALUES ('420107', '青山区', '4201'); +INSERT INTO `base_area` VALUES ('420111', '洪山区', '4201'); +INSERT INTO `base_area` VALUES ('420112', '东西湖区', '4201'); +INSERT INTO `base_area` VALUES ('420113', '汉南区', '4201'); +INSERT INTO `base_area` VALUES ('420114', '蔡甸区', '4201'); +INSERT INTO `base_area` VALUES ('420115', '江夏区', '4201'); +INSERT INTO `base_area` VALUES ('420116', '黄陂区', '4201'); +INSERT INTO `base_area` VALUES ('420117', '新洲区', '4201'); +INSERT INTO `base_area` VALUES ('420202', '黄石港区', '4202'); +INSERT INTO `base_area` VALUES ('420203', '西塞山区', '4202'); +INSERT INTO `base_area` VALUES ('420204', '下陆区', '4202'); +INSERT INTO `base_area` VALUES ('420205', '铁山区', '4202'); +INSERT INTO `base_area` VALUES ('420222', '阳新县', '4202'); +INSERT INTO `base_area` VALUES ('420281', '大冶市', '4202'); +INSERT INTO `base_area` VALUES ('420302', '茅箭区', '4203'); +INSERT INTO `base_area` VALUES ('420303', '张湾区', '4203'); +INSERT INTO `base_area` VALUES ('420304', '郧阳区', '4203'); +INSERT INTO `base_area` VALUES ('420322', '郧西县', '4203'); +INSERT INTO `base_area` VALUES ('420323', '竹山县', '4203'); +INSERT INTO `base_area` VALUES ('420324', '竹溪县', '4203'); +INSERT INTO `base_area` VALUES ('420325', '房县', '4203'); +INSERT INTO `base_area` VALUES ('420381', '丹江口市', '4203'); +INSERT INTO `base_area` VALUES ('420502', '西陵区', '4205'); +INSERT INTO `base_area` VALUES ('420503', '伍家岗区', '4205'); +INSERT INTO `base_area` VALUES ('420504', '点军区', '4205'); +INSERT INTO `base_area` VALUES ('420505', '猇亭区', '4205'); +INSERT INTO `base_area` VALUES ('420506', '夷陵区', '4205'); +INSERT INTO `base_area` VALUES ('420525', '远安县', '4205'); +INSERT INTO `base_area` VALUES ('420526', '兴山县', '4205'); +INSERT INTO `base_area` VALUES ('420527', '秭归县', '4205'); +INSERT INTO `base_area` VALUES ('420528', '长阳土家族自治县', '4205'); +INSERT INTO `base_area` VALUES ('420529', '五峰土家族自治县', '4205'); +INSERT INTO `base_area` VALUES ('420581', '宜都市', '4205'); +INSERT INTO `base_area` VALUES ('420582', '当阳市', '4205'); +INSERT INTO `base_area` VALUES ('420583', '枝江市', '4205'); +INSERT INTO `base_area` VALUES ('420602', '襄城区', '4206'); +INSERT INTO `base_area` VALUES ('420606', '樊城区', '4206'); +INSERT INTO `base_area` VALUES ('420607', '襄州区', '4206'); +INSERT INTO `base_area` VALUES ('420624', '南漳县', '4206'); +INSERT INTO `base_area` VALUES ('420625', '谷城县', '4206'); +INSERT INTO `base_area` VALUES ('420626', '保康县', '4206'); +INSERT INTO `base_area` VALUES ('420682', '老河口市', '4206'); +INSERT INTO `base_area` VALUES ('420683', '枣阳市', '4206'); +INSERT INTO `base_area` VALUES ('420684', '宜城市', '4206'); +INSERT INTO `base_area` VALUES ('420702', '梁子湖区', '4207'); +INSERT INTO `base_area` VALUES ('420703', '华容区', '4207'); +INSERT INTO `base_area` VALUES ('420704', '鄂城区', '4207'); +INSERT INTO `base_area` VALUES ('420802', '东宝区', '4208'); +INSERT INTO `base_area` VALUES ('420804', '掇刀区', '4208'); +INSERT INTO `base_area` VALUES ('420822', '沙洋县', '4208'); +INSERT INTO `base_area` VALUES ('420881', '钟祥市', '4208'); +INSERT INTO `base_area` VALUES ('420882', '京山市', '4208'); +INSERT INTO `base_area` VALUES ('420902', '孝南区', '4209'); +INSERT INTO `base_area` VALUES ('420921', '孝昌县', '4209'); +INSERT INTO `base_area` VALUES ('420922', '大悟县', '4209'); +INSERT INTO `base_area` VALUES ('420923', '云梦县', '4209'); +INSERT INTO `base_area` VALUES ('420981', '应城市', '4209'); +INSERT INTO `base_area` VALUES ('420982', '安陆市', '4209'); +INSERT INTO `base_area` VALUES ('420984', '汉川市', '4209'); +INSERT INTO `base_area` VALUES ('421002', '沙市区', '4210'); +INSERT INTO `base_area` VALUES ('421003', '荆州区', '4210'); +INSERT INTO `base_area` VALUES ('421022', '公安县', '4210'); +INSERT INTO `base_area` VALUES ('421024', '江陵县', '4210'); +INSERT INTO `base_area` VALUES ('421071', '荆州经济技术开发区', '4210'); +INSERT INTO `base_area` VALUES ('421081', '石首市', '4210'); +INSERT INTO `base_area` VALUES ('421083', '洪湖市', '4210'); +INSERT INTO `base_area` VALUES ('421087', '松滋市', '4210'); +INSERT INTO `base_area` VALUES ('421088', '监利市', '4210'); +INSERT INTO `base_area` VALUES ('421102', '黄州区', '4211'); +INSERT INTO `base_area` VALUES ('421121', '团风县', '4211'); +INSERT INTO `base_area` VALUES ('421122', '红安县', '4211'); +INSERT INTO `base_area` VALUES ('421123', '罗田县', '4211'); +INSERT INTO `base_area` VALUES ('421124', '英山县', '4211'); +INSERT INTO `base_area` VALUES ('421125', '浠水县', '4211'); +INSERT INTO `base_area` VALUES ('421126', '蕲春县', '4211'); +INSERT INTO `base_area` VALUES ('421127', '黄梅县', '4211'); +INSERT INTO `base_area` VALUES ('421171', '龙感湖管理区', '4211'); +INSERT INTO `base_area` VALUES ('421181', '麻城市', '4211'); +INSERT INTO `base_area` VALUES ('421182', '武穴市', '4211'); +INSERT INTO `base_area` VALUES ('421202', '咸安区', '4212'); +INSERT INTO `base_area` VALUES ('421221', '嘉鱼县', '4212'); +INSERT INTO `base_area` VALUES ('421222', '通城县', '4212'); +INSERT INTO `base_area` VALUES ('421223', '崇阳县', '4212'); +INSERT INTO `base_area` VALUES ('421224', '通山县', '4212'); +INSERT INTO `base_area` VALUES ('421281', '赤壁市', '4212'); +INSERT INTO `base_area` VALUES ('421303', '曾都区', '4213'); +INSERT INTO `base_area` VALUES ('421321', '随县', '4213'); +INSERT INTO `base_area` VALUES ('421381', '广水市', '4213'); +INSERT INTO `base_area` VALUES ('422801', '恩施市', '4228'); +INSERT INTO `base_area` VALUES ('422802', '利川市', '4228'); +INSERT INTO `base_area` VALUES ('422822', '建始县', '4228'); +INSERT INTO `base_area` VALUES ('422823', '巴东县', '4228'); +INSERT INTO `base_area` VALUES ('422825', '宣恩县', '4228'); +INSERT INTO `base_area` VALUES ('422826', '咸丰县', '4228'); +INSERT INTO `base_area` VALUES ('422827', '来凤县', '4228'); +INSERT INTO `base_area` VALUES ('422828', '鹤峰县', '4228'); +INSERT INTO `base_area` VALUES ('429004', '仙桃市', '4290'); +INSERT INTO `base_area` VALUES ('429005', '潜江市', '4290'); +INSERT INTO `base_area` VALUES ('429006', '天门市', '4290'); +INSERT INTO `base_area` VALUES ('429021', '神农架林区', '4290'); +INSERT INTO `base_area` VALUES ('430102', '芙蓉区', '4301'); +INSERT INTO `base_area` VALUES ('430103', '天心区', '4301'); +INSERT INTO `base_area` VALUES ('430104', '岳麓区', '4301'); +INSERT INTO `base_area` VALUES ('430105', '开福区', '4301'); +INSERT INTO `base_area` VALUES ('430111', '雨花区', '4301'); +INSERT INTO `base_area` VALUES ('430112', '望城区', '4301'); +INSERT INTO `base_area` VALUES ('430121', '长沙县', '4301'); +INSERT INTO `base_area` VALUES ('430181', '浏阳市', '4301'); +INSERT INTO `base_area` VALUES ('430182', '宁乡市', '4301'); +INSERT INTO `base_area` VALUES ('430202', '荷塘区', '4302'); +INSERT INTO `base_area` VALUES ('430203', '芦淞区', '4302'); +INSERT INTO `base_area` VALUES ('430204', '石峰区', '4302'); +INSERT INTO `base_area` VALUES ('430211', '天元区', '4302'); +INSERT INTO `base_area` VALUES ('430212', '渌口区', '4302'); +INSERT INTO `base_area` VALUES ('430223', '攸县', '4302'); +INSERT INTO `base_area` VALUES ('430224', '茶陵县', '4302'); +INSERT INTO `base_area` VALUES ('430225', '炎陵县', '4302'); +INSERT INTO `base_area` VALUES ('430281', '醴陵市', '4302'); +INSERT INTO `base_area` VALUES ('430302', '雨湖区', '4303'); +INSERT INTO `base_area` VALUES ('430304', '岳塘区', '4303'); +INSERT INTO `base_area` VALUES ('430321', '湘潭县', '4303'); +INSERT INTO `base_area` VALUES ('430371', '湖南湘潭高新技术产业园区', '4303'); +INSERT INTO `base_area` VALUES ('430372', '湘潭昭山示范区', '4303'); +INSERT INTO `base_area` VALUES ('430373', '湘潭九华示范区', '4303'); +INSERT INTO `base_area` VALUES ('430381', '湘乡市', '4303'); +INSERT INTO `base_area` VALUES ('430382', '韶山市', '4303'); +INSERT INTO `base_area` VALUES ('430405', '珠晖区', '4304'); +INSERT INTO `base_area` VALUES ('430406', '雁峰区', '4304'); +INSERT INTO `base_area` VALUES ('430407', '石鼓区', '4304'); +INSERT INTO `base_area` VALUES ('430408', '蒸湘区', '4304'); +INSERT INTO `base_area` VALUES ('430412', '南岳区', '4304'); +INSERT INTO `base_area` VALUES ('430421', '衡阳县', '4304'); +INSERT INTO `base_area` VALUES ('430422', '衡南县', '4304'); +INSERT INTO `base_area` VALUES ('430423', '衡山县', '4304'); +INSERT INTO `base_area` VALUES ('430424', '衡东县', '4304'); +INSERT INTO `base_area` VALUES ('430426', '祁东县', '4304'); +INSERT INTO `base_area` VALUES ('430471', '衡阳综合保税区', '4304'); +INSERT INTO `base_area` VALUES ('430472', '湖南衡阳高新技术产业园区', '4304'); +INSERT INTO `base_area` VALUES ('430473', '湖南衡阳松木经济开发区', '4304'); +INSERT INTO `base_area` VALUES ('430481', '耒阳市', '4304'); +INSERT INTO `base_area` VALUES ('430482', '常宁市', '4304'); +INSERT INTO `base_area` VALUES ('430502', '双清区', '4305'); +INSERT INTO `base_area` VALUES ('430503', '大祥区', '4305'); +INSERT INTO `base_area` VALUES ('430511', '北塔区', '4305'); +INSERT INTO `base_area` VALUES ('430522', '新邵县', '4305'); +INSERT INTO `base_area` VALUES ('430523', '邵阳县', '4305'); +INSERT INTO `base_area` VALUES ('430524', '隆回县', '4305'); +INSERT INTO `base_area` VALUES ('430525', '洞口县', '4305'); +INSERT INTO `base_area` VALUES ('430527', '绥宁县', '4305'); +INSERT INTO `base_area` VALUES ('430528', '新宁县', '4305'); +INSERT INTO `base_area` VALUES ('430529', '城步苗族自治县', '4305'); +INSERT INTO `base_area` VALUES ('430581', '武冈市', '4305'); +INSERT INTO `base_area` VALUES ('430582', '邵东市', '4305'); +INSERT INTO `base_area` VALUES ('430602', '岳阳楼区', '4306'); +INSERT INTO `base_area` VALUES ('430603', '云溪区', '4306'); +INSERT INTO `base_area` VALUES ('430611', '君山区', '4306'); +INSERT INTO `base_area` VALUES ('430621', '岳阳县', '4306'); +INSERT INTO `base_area` VALUES ('430623', '华容县', '4306'); +INSERT INTO `base_area` VALUES ('430624', '湘阴县', '4306'); +INSERT INTO `base_area` VALUES ('430626', '平江县', '4306'); +INSERT INTO `base_area` VALUES ('430671', '岳阳市屈原管理区', '4306'); +INSERT INTO `base_area` VALUES ('430681', '汨罗市', '4306'); +INSERT INTO `base_area` VALUES ('430682', '临湘市', '4306'); +INSERT INTO `base_area` VALUES ('430702', '武陵区', '4307'); +INSERT INTO `base_area` VALUES ('430703', '鼎城区', '4307'); +INSERT INTO `base_area` VALUES ('430721', '安乡县', '4307'); +INSERT INTO `base_area` VALUES ('430722', '汉寿县', '4307'); +INSERT INTO `base_area` VALUES ('430723', '澧县', '4307'); +INSERT INTO `base_area` VALUES ('430724', '临澧县', '4307'); +INSERT INTO `base_area` VALUES ('430725', '桃源县', '4307'); +INSERT INTO `base_area` VALUES ('430726', '石门县', '4307'); +INSERT INTO `base_area` VALUES ('430771', '常德市西洞庭管理区', '4307'); +INSERT INTO `base_area` VALUES ('430781', '津市市', '4307'); +INSERT INTO `base_area` VALUES ('430802', '永定区', '4308'); +INSERT INTO `base_area` VALUES ('430811', '武陵源区', '4308'); +INSERT INTO `base_area` VALUES ('430821', '慈利县', '4308'); +INSERT INTO `base_area` VALUES ('430822', '桑植县', '4308'); +INSERT INTO `base_area` VALUES ('430902', '资阳区', '4309'); +INSERT INTO `base_area` VALUES ('430903', '赫山区', '4309'); +INSERT INTO `base_area` VALUES ('430921', '南县', '4309'); +INSERT INTO `base_area` VALUES ('430922', '桃江县', '4309'); +INSERT INTO `base_area` VALUES ('430923', '安化县', '4309'); +INSERT INTO `base_area` VALUES ('430971', '益阳市大通湖管理区', '4309'); +INSERT INTO `base_area` VALUES ('430972', '湖南益阳高新技术产业园区', '4309'); +INSERT INTO `base_area` VALUES ('430981', '沅江市', '4309'); +INSERT INTO `base_area` VALUES ('431002', '北湖区', '4310'); +INSERT INTO `base_area` VALUES ('431003', '苏仙区', '4310'); +INSERT INTO `base_area` VALUES ('431021', '桂阳县', '4310'); +INSERT INTO `base_area` VALUES ('431022', '宜章县', '4310'); +INSERT INTO `base_area` VALUES ('431023', '永兴县', '4310'); +INSERT INTO `base_area` VALUES ('431024', '嘉禾县', '4310'); +INSERT INTO `base_area` VALUES ('431025', '临武县', '4310'); +INSERT INTO `base_area` VALUES ('431026', '汝城县', '4310'); +INSERT INTO `base_area` VALUES ('431027', '桂东县', '4310'); +INSERT INTO `base_area` VALUES ('431028', '安仁县', '4310'); +INSERT INTO `base_area` VALUES ('431081', '资兴市', '4310'); +INSERT INTO `base_area` VALUES ('431102', '零陵区', '4311'); +INSERT INTO `base_area` VALUES ('431103', '冷水滩区', '4311'); +INSERT INTO `base_area` VALUES ('431122', '东安县', '4311'); +INSERT INTO `base_area` VALUES ('431123', '双牌县', '4311'); +INSERT INTO `base_area` VALUES ('431124', '道县', '4311'); +INSERT INTO `base_area` VALUES ('431125', '江永县', '4311'); +INSERT INTO `base_area` VALUES ('431126', '宁远县', '4311'); +INSERT INTO `base_area` VALUES ('431127', '蓝山县', '4311'); +INSERT INTO `base_area` VALUES ('431128', '新田县', '4311'); +INSERT INTO `base_area` VALUES ('431129', '江华瑶族自治县', '4311'); +INSERT INTO `base_area` VALUES ('431171', '永州经济技术开发区', '4311'); +INSERT INTO `base_area` VALUES ('431173', '永州市回龙圩管理区', '4311'); +INSERT INTO `base_area` VALUES ('431181', '祁阳市', '4311'); +INSERT INTO `base_area` VALUES ('431202', '鹤城区', '4312'); +INSERT INTO `base_area` VALUES ('431221', '中方县', '4312'); +INSERT INTO `base_area` VALUES ('431222', '沅陵县', '4312'); +INSERT INTO `base_area` VALUES ('431223', '辰溪县', '4312'); +INSERT INTO `base_area` VALUES ('431224', '溆浦县', '4312'); +INSERT INTO `base_area` VALUES ('431225', '会同县', '4312'); +INSERT INTO `base_area` VALUES ('431226', '麻阳苗族自治县', '4312'); +INSERT INTO `base_area` VALUES ('431227', '新晃侗族自治县', '4312'); +INSERT INTO `base_area` VALUES ('431228', '芷江侗族自治县', '4312'); +INSERT INTO `base_area` VALUES ('431229', '靖州苗族侗族自治县', '4312'); +INSERT INTO `base_area` VALUES ('431230', '通道侗族自治县', '4312'); +INSERT INTO `base_area` VALUES ('431271', '怀化市洪江管理区', '4312'); +INSERT INTO `base_area` VALUES ('431281', '洪江市', '4312'); +INSERT INTO `base_area` VALUES ('431302', '娄星区', '4313'); +INSERT INTO `base_area` VALUES ('431321', '双峰县', '4313'); +INSERT INTO `base_area` VALUES ('431322', '新化县', '4313'); +INSERT INTO `base_area` VALUES ('431381', '冷水江市', '4313'); +INSERT INTO `base_area` VALUES ('431382', '涟源市', '4313'); +INSERT INTO `base_area` VALUES ('433101', '吉首市', '4331'); +INSERT INTO `base_area` VALUES ('433122', '泸溪县', '4331'); +INSERT INTO `base_area` VALUES ('433123', '凤凰县', '4331'); +INSERT INTO `base_area` VALUES ('433124', '花垣县', '4331'); +INSERT INTO `base_area` VALUES ('433125', '保靖县', '4331'); +INSERT INTO `base_area` VALUES ('433126', '古丈县', '4331'); +INSERT INTO `base_area` VALUES ('433127', '永顺县', '4331'); +INSERT INTO `base_area` VALUES ('433130', '龙山县', '4331'); +INSERT INTO `base_area` VALUES ('440103', '荔湾区', '4401'); +INSERT INTO `base_area` VALUES ('440104', '越秀区', '4401'); +INSERT INTO `base_area` VALUES ('440105', '海珠区', '4401'); +INSERT INTO `base_area` VALUES ('440106', '天河区', '4401'); +INSERT INTO `base_area` VALUES ('440111', '白云区', '4401'); +INSERT INTO `base_area` VALUES ('440112', '黄埔区', '4401'); +INSERT INTO `base_area` VALUES ('440113', '番禺区', '4401'); +INSERT INTO `base_area` VALUES ('440114', '花都区', '4401'); +INSERT INTO `base_area` VALUES ('440115', '南沙区', '4401'); +INSERT INTO `base_area` VALUES ('440117', '从化区', '4401'); +INSERT INTO `base_area` VALUES ('440118', '增城区', '4401'); +INSERT INTO `base_area` VALUES ('440203', '武江区', '4402'); +INSERT INTO `base_area` VALUES ('440204', '浈江区', '4402'); +INSERT INTO `base_area` VALUES ('440205', '曲江区', '4402'); +INSERT INTO `base_area` VALUES ('440222', '始兴县', '4402'); +INSERT INTO `base_area` VALUES ('440224', '仁化县', '4402'); +INSERT INTO `base_area` VALUES ('440229', '翁源县', '4402'); +INSERT INTO `base_area` VALUES ('440232', '乳源瑶族自治县', '4402'); +INSERT INTO `base_area` VALUES ('440233', '新丰县', '4402'); +INSERT INTO `base_area` VALUES ('440281', '乐昌市', '4402'); +INSERT INTO `base_area` VALUES ('440282', '南雄市', '4402'); +INSERT INTO `base_area` VALUES ('440303', '罗湖区', '4403'); +INSERT INTO `base_area` VALUES ('440304', '福田区', '4403'); +INSERT INTO `base_area` VALUES ('440305', '南山区', '4403'); +INSERT INTO `base_area` VALUES ('440306', '宝安区', '4403'); +INSERT INTO `base_area` VALUES ('440307', '龙岗区', '4403'); +INSERT INTO `base_area` VALUES ('440308', '盐田区', '4403'); +INSERT INTO `base_area` VALUES ('440309', '龙华区', '4403'); +INSERT INTO `base_area` VALUES ('440310', '坪山区', '4403'); +INSERT INTO `base_area` VALUES ('440311', '光明区', '4403'); +INSERT INTO `base_area` VALUES ('440402', '香洲区', '4404'); +INSERT INTO `base_area` VALUES ('440403', '斗门区', '4404'); +INSERT INTO `base_area` VALUES ('440404', '金湾区', '4404'); +INSERT INTO `base_area` VALUES ('440507', '龙湖区', '4405'); +INSERT INTO `base_area` VALUES ('440511', '金平区', '4405'); +INSERT INTO `base_area` VALUES ('440512', '濠江区', '4405'); +INSERT INTO `base_area` VALUES ('440513', '潮阳区', '4405'); +INSERT INTO `base_area` VALUES ('440514', '潮南区', '4405'); +INSERT INTO `base_area` VALUES ('440515', '澄海区', '4405'); +INSERT INTO `base_area` VALUES ('440523', '南澳县', '4405'); +INSERT INTO `base_area` VALUES ('440604', '禅城区', '4406'); +INSERT INTO `base_area` VALUES ('440605', '南海区', '4406'); +INSERT INTO `base_area` VALUES ('440606', '顺德区', '4406'); +INSERT INTO `base_area` VALUES ('440607', '三水区', '4406'); +INSERT INTO `base_area` VALUES ('440608', '高明区', '4406'); +INSERT INTO `base_area` VALUES ('440703', '蓬江区', '4407'); +INSERT INTO `base_area` VALUES ('440704', '江海区', '4407'); +INSERT INTO `base_area` VALUES ('440705', '新会区', '4407'); +INSERT INTO `base_area` VALUES ('440781', '台山市', '4407'); +INSERT INTO `base_area` VALUES ('440783', '开平市', '4407'); +INSERT INTO `base_area` VALUES ('440784', '鹤山市', '4407'); +INSERT INTO `base_area` VALUES ('440785', '恩平市', '4407'); +INSERT INTO `base_area` VALUES ('440802', '赤坎区', '4408'); +INSERT INTO `base_area` VALUES ('440803', '霞山区', '4408'); +INSERT INTO `base_area` VALUES ('440804', '坡头区', '4408'); +INSERT INTO `base_area` VALUES ('440811', '麻章区', '4408'); +INSERT INTO `base_area` VALUES ('440823', '遂溪县', '4408'); +INSERT INTO `base_area` VALUES ('440825', '徐闻县', '4408'); +INSERT INTO `base_area` VALUES ('440881', '廉江市', '4408'); +INSERT INTO `base_area` VALUES ('440882', '雷州市', '4408'); +INSERT INTO `base_area` VALUES ('440883', '吴川市', '4408'); +INSERT INTO `base_area` VALUES ('440902', '茂南区', '4409'); +INSERT INTO `base_area` VALUES ('440904', '电白区', '4409'); +INSERT INTO `base_area` VALUES ('440981', '高州市', '4409'); +INSERT INTO `base_area` VALUES ('440982', '化州市', '4409'); +INSERT INTO `base_area` VALUES ('440983', '信宜市', '4409'); +INSERT INTO `base_area` VALUES ('441202', '端州区', '4412'); +INSERT INTO `base_area` VALUES ('441203', '鼎湖区', '4412'); +INSERT INTO `base_area` VALUES ('441204', '高要区', '4412'); +INSERT INTO `base_area` VALUES ('441223', '广宁县', '4412'); +INSERT INTO `base_area` VALUES ('441224', '怀集县', '4412'); +INSERT INTO `base_area` VALUES ('441225', '封开县', '4412'); +INSERT INTO `base_area` VALUES ('441226', '德庆县', '4412'); +INSERT INTO `base_area` VALUES ('441284', '四会市', '4412'); +INSERT INTO `base_area` VALUES ('441302', '惠城区', '4413'); +INSERT INTO `base_area` VALUES ('441303', '惠阳区', '4413'); +INSERT INTO `base_area` VALUES ('441322', '博罗县', '4413'); +INSERT INTO `base_area` VALUES ('441323', '惠东县', '4413'); +INSERT INTO `base_area` VALUES ('441324', '龙门县', '4413'); +INSERT INTO `base_area` VALUES ('441402', '梅江区', '4414'); +INSERT INTO `base_area` VALUES ('441403', '梅县区', '4414'); +INSERT INTO `base_area` VALUES ('441422', '大埔县', '4414'); +INSERT INTO `base_area` VALUES ('441423', '丰顺县', '4414'); +INSERT INTO `base_area` VALUES ('441424', '五华县', '4414'); +INSERT INTO `base_area` VALUES ('441426', '平远县', '4414'); +INSERT INTO `base_area` VALUES ('441427', '蕉岭县', '4414'); +INSERT INTO `base_area` VALUES ('441481', '兴宁市', '4414'); +INSERT INTO `base_area` VALUES ('441502', '城区', '4415'); +INSERT INTO `base_area` VALUES ('441521', '海丰县', '4415'); +INSERT INTO `base_area` VALUES ('441523', '陆河县', '4415'); +INSERT INTO `base_area` VALUES ('441581', '陆丰市', '4415'); +INSERT INTO `base_area` VALUES ('441602', '源城区', '4416'); +INSERT INTO `base_area` VALUES ('441621', '紫金县', '4416'); +INSERT INTO `base_area` VALUES ('441622', '龙川县', '4416'); +INSERT INTO `base_area` VALUES ('441623', '连平县', '4416'); +INSERT INTO `base_area` VALUES ('441624', '和平县', '4416'); +INSERT INTO `base_area` VALUES ('441625', '东源县', '4416'); +INSERT INTO `base_area` VALUES ('441702', '江城区', '4417'); +INSERT INTO `base_area` VALUES ('441704', '阳东区', '4417'); +INSERT INTO `base_area` VALUES ('441721', '阳西县', '4417'); +INSERT INTO `base_area` VALUES ('441781', '阳春市', '4417'); +INSERT INTO `base_area` VALUES ('441802', '清城区', '4418'); +INSERT INTO `base_area` VALUES ('441803', '清新区', '4418'); +INSERT INTO `base_area` VALUES ('441821', '佛冈县', '4418'); +INSERT INTO `base_area` VALUES ('441823', '阳山县', '4418'); +INSERT INTO `base_area` VALUES ('441825', '连山壮族瑶族自治县', '4418'); +INSERT INTO `base_area` VALUES ('441826', '连南瑶族自治县', '4418'); +INSERT INTO `base_area` VALUES ('441881', '英德市', '4418'); +INSERT INTO `base_area` VALUES ('441882', '连州市', '4418'); +INSERT INTO `base_area` VALUES ('441900', '东莞市', '4419'); +INSERT INTO `base_area` VALUES ('442000', '中山市', '4420'); +INSERT INTO `base_area` VALUES ('445102', '湘桥区', '4451'); +INSERT INTO `base_area` VALUES ('445103', '潮安区', '4451'); +INSERT INTO `base_area` VALUES ('445122', '饶平县', '4451'); +INSERT INTO `base_area` VALUES ('445202', '榕城区', '4452'); +INSERT INTO `base_area` VALUES ('445203', '揭东区', '4452'); +INSERT INTO `base_area` VALUES ('445222', '揭西县', '4452'); +INSERT INTO `base_area` VALUES ('445224', '惠来县', '4452'); +INSERT INTO `base_area` VALUES ('445281', '普宁市', '4452'); +INSERT INTO `base_area` VALUES ('445302', '云城区', '4453'); +INSERT INTO `base_area` VALUES ('445303', '云安区', '4453'); +INSERT INTO `base_area` VALUES ('445321', '新兴县', '4453'); +INSERT INTO `base_area` VALUES ('445322', '郁南县', '4453'); +INSERT INTO `base_area` VALUES ('445381', '罗定市', '4453'); +INSERT INTO `base_area` VALUES ('450102', '兴宁区', '4501'); +INSERT INTO `base_area` VALUES ('450103', '青秀区', '4501'); +INSERT INTO `base_area` VALUES ('450105', '江南区', '4501'); +INSERT INTO `base_area` VALUES ('450107', '西乡塘区', '4501'); +INSERT INTO `base_area` VALUES ('450108', '良庆区', '4501'); +INSERT INTO `base_area` VALUES ('450109', '邕宁区', '4501'); +INSERT INTO `base_area` VALUES ('450110', '武鸣区', '4501'); +INSERT INTO `base_area` VALUES ('450123', '隆安县', '4501'); +INSERT INTO `base_area` VALUES ('450124', '马山县', '4501'); +INSERT INTO `base_area` VALUES ('450125', '上林县', '4501'); +INSERT INTO `base_area` VALUES ('450126', '宾阳县', '4501'); +INSERT INTO `base_area` VALUES ('450181', '横州市', '4501'); +INSERT INTO `base_area` VALUES ('450202', '城中区', '4502'); +INSERT INTO `base_area` VALUES ('450203', '鱼峰区', '4502'); +INSERT INTO `base_area` VALUES ('450204', '柳南区', '4502'); +INSERT INTO `base_area` VALUES ('450205', '柳北区', '4502'); +INSERT INTO `base_area` VALUES ('450206', '柳江区', '4502'); +INSERT INTO `base_area` VALUES ('450222', '柳城县', '4502'); +INSERT INTO `base_area` VALUES ('450223', '鹿寨县', '4502'); +INSERT INTO `base_area` VALUES ('450224', '融安县', '4502'); +INSERT INTO `base_area` VALUES ('450225', '融水苗族自治县', '4502'); +INSERT INTO `base_area` VALUES ('450226', '三江侗族自治县', '4502'); +INSERT INTO `base_area` VALUES ('450302', '秀峰区', '4503'); +INSERT INTO `base_area` VALUES ('450303', '叠彩区', '4503'); +INSERT INTO `base_area` VALUES ('450304', '象山区', '4503'); +INSERT INTO `base_area` VALUES ('450305', '七星区', '4503'); +INSERT INTO `base_area` VALUES ('450311', '雁山区', '4503'); +INSERT INTO `base_area` VALUES ('450312', '临桂区', '4503'); +INSERT INTO `base_area` VALUES ('450321', '阳朔县', '4503'); +INSERT INTO `base_area` VALUES ('450323', '灵川县', '4503'); +INSERT INTO `base_area` VALUES ('450324', '全州县', '4503'); +INSERT INTO `base_area` VALUES ('450325', '兴安县', '4503'); +INSERT INTO `base_area` VALUES ('450326', '永福县', '4503'); +INSERT INTO `base_area` VALUES ('450327', '灌阳县', '4503'); +INSERT INTO `base_area` VALUES ('450328', '龙胜各族自治县', '4503'); +INSERT INTO `base_area` VALUES ('450329', '资源县', '4503'); +INSERT INTO `base_area` VALUES ('450330', '平乐县', '4503'); +INSERT INTO `base_area` VALUES ('450332', '恭城瑶族自治县', '4503'); +INSERT INTO `base_area` VALUES ('450381', '荔浦市', '4503'); +INSERT INTO `base_area` VALUES ('450403', '万秀区', '4504'); +INSERT INTO `base_area` VALUES ('450405', '长洲区', '4504'); +INSERT INTO `base_area` VALUES ('450406', '龙圩区', '4504'); +INSERT INTO `base_area` VALUES ('450421', '苍梧县', '4504'); +INSERT INTO `base_area` VALUES ('450422', '藤县', '4504'); +INSERT INTO `base_area` VALUES ('450423', '蒙山县', '4504'); +INSERT INTO `base_area` VALUES ('450481', '岑溪市', '4504'); +INSERT INTO `base_area` VALUES ('450502', '海城区', '4505'); +INSERT INTO `base_area` VALUES ('450503', '银海区', '4505'); +INSERT INTO `base_area` VALUES ('450512', '铁山港区', '4505'); +INSERT INTO `base_area` VALUES ('450521', '合浦县', '4505'); +INSERT INTO `base_area` VALUES ('450602', '港口区', '4506'); +INSERT INTO `base_area` VALUES ('450603', '防城区', '4506'); +INSERT INTO `base_area` VALUES ('450621', '上思县', '4506'); +INSERT INTO `base_area` VALUES ('450681', '东兴市', '4506'); +INSERT INTO `base_area` VALUES ('450702', '钦南区', '4507'); +INSERT INTO `base_area` VALUES ('450703', '钦北区', '4507'); +INSERT INTO `base_area` VALUES ('450721', '灵山县', '4507'); +INSERT INTO `base_area` VALUES ('450722', '浦北县', '4507'); +INSERT INTO `base_area` VALUES ('450802', '港北区', '4508'); +INSERT INTO `base_area` VALUES ('450803', '港南区', '4508'); +INSERT INTO `base_area` VALUES ('450804', '覃塘区', '4508'); +INSERT INTO `base_area` VALUES ('450821', '平南县', '4508'); +INSERT INTO `base_area` VALUES ('450881', '桂平市', '4508'); +INSERT INTO `base_area` VALUES ('450902', '玉州区', '4509'); +INSERT INTO `base_area` VALUES ('450903', '福绵区', '4509'); +INSERT INTO `base_area` VALUES ('450921', '容县', '4509'); +INSERT INTO `base_area` VALUES ('450922', '陆川县', '4509'); +INSERT INTO `base_area` VALUES ('450923', '博白县', '4509'); +INSERT INTO `base_area` VALUES ('450924', '兴业县', '4509'); +INSERT INTO `base_area` VALUES ('450981', '北流市', '4509'); +INSERT INTO `base_area` VALUES ('451002', '右江区', '4510'); +INSERT INTO `base_area` VALUES ('451003', '田阳区', '4510'); +INSERT INTO `base_area` VALUES ('451022', '田东县', '4510'); +INSERT INTO `base_area` VALUES ('451024', '德保县', '4510'); +INSERT INTO `base_area` VALUES ('451026', '那坡县', '4510'); +INSERT INTO `base_area` VALUES ('451027', '凌云县', '4510'); +INSERT INTO `base_area` VALUES ('451028', '乐业县', '4510'); +INSERT INTO `base_area` VALUES ('451029', '田林县', '4510'); +INSERT INTO `base_area` VALUES ('451030', '西林县', '4510'); +INSERT INTO `base_area` VALUES ('451031', '隆林各族自治县', '4510'); +INSERT INTO `base_area` VALUES ('451081', '靖西市', '4510'); +INSERT INTO `base_area` VALUES ('451082', '平果市', '4510'); +INSERT INTO `base_area` VALUES ('451102', '八步区', '4511'); +INSERT INTO `base_area` VALUES ('451103', '平桂区', '4511'); +INSERT INTO `base_area` VALUES ('451121', '昭平县', '4511'); +INSERT INTO `base_area` VALUES ('451122', '钟山县', '4511'); +INSERT INTO `base_area` VALUES ('451123', '富川瑶族自治县', '4511'); +INSERT INTO `base_area` VALUES ('451202', '金城江区', '4512'); +INSERT INTO `base_area` VALUES ('451203', '宜州区', '4512'); +INSERT INTO `base_area` VALUES ('451221', '南丹县', '4512'); +INSERT INTO `base_area` VALUES ('451222', '天峨县', '4512'); +INSERT INTO `base_area` VALUES ('451223', '凤山县', '4512'); +INSERT INTO `base_area` VALUES ('451224', '东兰县', '4512'); +INSERT INTO `base_area` VALUES ('451225', '罗城仫佬族自治县', '4512'); +INSERT INTO `base_area` VALUES ('451226', '环江毛南族自治县', '4512'); +INSERT INTO `base_area` VALUES ('451227', '巴马瑶族自治县', '4512'); +INSERT INTO `base_area` VALUES ('451228', '都安瑶族自治县', '4512'); +INSERT INTO `base_area` VALUES ('451229', '大化瑶族自治县', '4512'); +INSERT INTO `base_area` VALUES ('451302', '兴宾区', '4513'); +INSERT INTO `base_area` VALUES ('451321', '忻城县', '4513'); +INSERT INTO `base_area` VALUES ('451322', '象州县', '4513'); +INSERT INTO `base_area` VALUES ('451323', '武宣县', '4513'); +INSERT INTO `base_area` VALUES ('451324', '金秀瑶族自治县', '4513'); +INSERT INTO `base_area` VALUES ('451381', '合山市', '4513'); +INSERT INTO `base_area` VALUES ('451402', '江州区', '4514'); +INSERT INTO `base_area` VALUES ('451421', '扶绥县', '4514'); +INSERT INTO `base_area` VALUES ('451422', '宁明县', '4514'); +INSERT INTO `base_area` VALUES ('451423', '龙州县', '4514'); +INSERT INTO `base_area` VALUES ('451424', '大新县', '4514'); +INSERT INTO `base_area` VALUES ('451425', '天等县', '4514'); +INSERT INTO `base_area` VALUES ('451481', '凭祥市', '4514'); +INSERT INTO `base_area` VALUES ('460105', '秀英区', '4601'); +INSERT INTO `base_area` VALUES ('460106', '龙华区', '4601'); +INSERT INTO `base_area` VALUES ('460107', '琼山区', '4601'); +INSERT INTO `base_area` VALUES ('460108', '美兰区', '4601'); +INSERT INTO `base_area` VALUES ('460202', '海棠区', '4602'); +INSERT INTO `base_area` VALUES ('460203', '吉阳区', '4602'); +INSERT INTO `base_area` VALUES ('460204', '天涯区', '4602'); +INSERT INTO `base_area` VALUES ('460205', '崖州区', '4602'); +INSERT INTO `base_area` VALUES ('460321', '西沙群岛', '4603'); +INSERT INTO `base_area` VALUES ('460322', '南沙群岛', '4603'); +INSERT INTO `base_area` VALUES ('460323', '中沙群岛的岛礁及其海域', '4603'); +INSERT INTO `base_area` VALUES ('460400', '儋州市', '4604'); +INSERT INTO `base_area` VALUES ('469001', '五指山市', '4690'); +INSERT INTO `base_area` VALUES ('469002', '琼海市', '4690'); +INSERT INTO `base_area` VALUES ('469005', '文昌市', '4690'); +INSERT INTO `base_area` VALUES ('469006', '万宁市', '4690'); +INSERT INTO `base_area` VALUES ('469007', '东方市', '4690'); +INSERT INTO `base_area` VALUES ('469021', '定安县', '4690'); +INSERT INTO `base_area` VALUES ('469022', '屯昌县', '4690'); +INSERT INTO `base_area` VALUES ('469023', '澄迈县', '4690'); +INSERT INTO `base_area` VALUES ('469024', '临高县', '4690'); +INSERT INTO `base_area` VALUES ('469025', '白沙黎族自治县', '4690'); +INSERT INTO `base_area` VALUES ('469026', '昌江黎族自治县', '4690'); +INSERT INTO `base_area` VALUES ('469027', '乐东黎族自治县', '4690'); +INSERT INTO `base_area` VALUES ('469028', '陵水黎族自治县', '4690'); +INSERT INTO `base_area` VALUES ('469029', '保亭黎族苗族自治县', '4690'); +INSERT INTO `base_area` VALUES ('469030', '琼中黎族苗族自治县', '4690'); +INSERT INTO `base_area` VALUES ('500101', '万州区', '5001'); +INSERT INTO `base_area` VALUES ('500102', '涪陵区', '5001'); +INSERT INTO `base_area` VALUES ('500103', '渝中区', '5001'); +INSERT INTO `base_area` VALUES ('500104', '大渡口区', '5001'); +INSERT INTO `base_area` VALUES ('500105', '江北区', '5001'); +INSERT INTO `base_area` VALUES ('500106', '沙坪坝区', '5001'); +INSERT INTO `base_area` VALUES ('500107', '九龙坡区', '5001'); +INSERT INTO `base_area` VALUES ('500108', '南岸区', '5001'); +INSERT INTO `base_area` VALUES ('500109', '北碚区', '5001'); +INSERT INTO `base_area` VALUES ('500110', '綦江区', '5001'); +INSERT INTO `base_area` VALUES ('500111', '大足区', '5001'); +INSERT INTO `base_area` VALUES ('500112', '渝北区', '5001'); +INSERT INTO `base_area` VALUES ('500113', '巴南区', '5001'); +INSERT INTO `base_area` VALUES ('500114', '黔江区', '5001'); +INSERT INTO `base_area` VALUES ('500115', '长寿区', '5001'); +INSERT INTO `base_area` VALUES ('500116', '江津区', '5001'); +INSERT INTO `base_area` VALUES ('500117', '合川区', '5001'); +INSERT INTO `base_area` VALUES ('500118', '永川区', '5001'); +INSERT INTO `base_area` VALUES ('500119', '南川区', '5001'); +INSERT INTO `base_area` VALUES ('500120', '璧山区', '5001'); +INSERT INTO `base_area` VALUES ('500151', '铜梁区', '5001'); +INSERT INTO `base_area` VALUES ('500152', '潼南区', '5001'); +INSERT INTO `base_area` VALUES ('500153', '荣昌区', '5001'); +INSERT INTO `base_area` VALUES ('500154', '开州区', '5001'); +INSERT INTO `base_area` VALUES ('500155', '梁平区', '5001'); +INSERT INTO `base_area` VALUES ('500156', '武隆区', '5001'); +INSERT INTO `base_area` VALUES ('500229', '城口县', '5002'); +INSERT INTO `base_area` VALUES ('500230', '丰都县', '5002'); +INSERT INTO `base_area` VALUES ('500231', '垫江县', '5002'); +INSERT INTO `base_area` VALUES ('500233', '忠县', '5002'); +INSERT INTO `base_area` VALUES ('500235', '云阳县', '5002'); +INSERT INTO `base_area` VALUES ('500236', '奉节县', '5002'); +INSERT INTO `base_area` VALUES ('500237', '巫山县', '5002'); +INSERT INTO `base_area` VALUES ('500238', '巫溪县', '5002'); +INSERT INTO `base_area` VALUES ('500240', '石柱土家族自治县', '5002'); +INSERT INTO `base_area` VALUES ('500241', '秀山土家族苗族自治县', '5002'); +INSERT INTO `base_area` VALUES ('500242', '酉阳土家族苗族自治县', '5002'); +INSERT INTO `base_area` VALUES ('500243', '彭水苗族土家族自治县', '5002'); +INSERT INTO `base_area` VALUES ('510104', '锦江区', '5101'); +INSERT INTO `base_area` VALUES ('510105', '青羊区', '5101'); +INSERT INTO `base_area` VALUES ('510106', '金牛区', '5101'); +INSERT INTO `base_area` VALUES ('510107', '武侯区', '5101'); +INSERT INTO `base_area` VALUES ('510108', '成华区', '5101'); +INSERT INTO `base_area` VALUES ('510112', '龙泉驿区', '5101'); +INSERT INTO `base_area` VALUES ('510113', '青白江区', '5101'); +INSERT INTO `base_area` VALUES ('510114', '新都区', '5101'); +INSERT INTO `base_area` VALUES ('510115', '温江区', '5101'); +INSERT INTO `base_area` VALUES ('510116', '双流区', '5101'); +INSERT INTO `base_area` VALUES ('510117', '郫都区', '5101'); +INSERT INTO `base_area` VALUES ('510118', '新津区', '5101'); +INSERT INTO `base_area` VALUES ('510121', '金堂县', '5101'); +INSERT INTO `base_area` VALUES ('510129', '大邑县', '5101'); +INSERT INTO `base_area` VALUES ('510131', '蒲江县', '5101'); +INSERT INTO `base_area` VALUES ('510181', '都江堰市', '5101'); +INSERT INTO `base_area` VALUES ('510182', '彭州市', '5101'); +INSERT INTO `base_area` VALUES ('510183', '邛崃市', '5101'); +INSERT INTO `base_area` VALUES ('510184', '崇州市', '5101'); +INSERT INTO `base_area` VALUES ('510185', '简阳市', '5101'); +INSERT INTO `base_area` VALUES ('510302', '自流井区', '5103'); +INSERT INTO `base_area` VALUES ('510303', '贡井区', '5103'); +INSERT INTO `base_area` VALUES ('510304', '大安区', '5103'); +INSERT INTO `base_area` VALUES ('510311', '沿滩区', '5103'); +INSERT INTO `base_area` VALUES ('510321', '荣县', '5103'); +INSERT INTO `base_area` VALUES ('510322', '富顺县', '5103'); +INSERT INTO `base_area` VALUES ('510402', '东区', '5104'); +INSERT INTO `base_area` VALUES ('510403', '西区', '5104'); +INSERT INTO `base_area` VALUES ('510411', '仁和区', '5104'); +INSERT INTO `base_area` VALUES ('510421', '米易县', '5104'); +INSERT INTO `base_area` VALUES ('510422', '盐边县', '5104'); +INSERT INTO `base_area` VALUES ('510502', '江阳区', '5105'); +INSERT INTO `base_area` VALUES ('510503', '纳溪区', '5105'); +INSERT INTO `base_area` VALUES ('510504', '龙马潭区', '5105'); +INSERT INTO `base_area` VALUES ('510521', '泸县', '5105'); +INSERT INTO `base_area` VALUES ('510522', '合江县', '5105'); +INSERT INTO `base_area` VALUES ('510524', '叙永县', '5105'); +INSERT INTO `base_area` VALUES ('510525', '古蔺县', '5105'); +INSERT INTO `base_area` VALUES ('510603', '旌阳区', '5106'); +INSERT INTO `base_area` VALUES ('510604', '罗江区', '5106'); +INSERT INTO `base_area` VALUES ('510623', '中江县', '5106'); +INSERT INTO `base_area` VALUES ('510681', '广汉市', '5106'); +INSERT INTO `base_area` VALUES ('510682', '什邡市', '5106'); +INSERT INTO `base_area` VALUES ('510683', '绵竹市', '5106'); +INSERT INTO `base_area` VALUES ('510703', '涪城区', '5107'); +INSERT INTO `base_area` VALUES ('510704', '游仙区', '5107'); +INSERT INTO `base_area` VALUES ('510705', '安州区', '5107'); +INSERT INTO `base_area` VALUES ('510722', '三台县', '5107'); +INSERT INTO `base_area` VALUES ('510723', '盐亭县', '5107'); +INSERT INTO `base_area` VALUES ('510725', '梓潼县', '5107'); +INSERT INTO `base_area` VALUES ('510726', '北川羌族自治县', '5107'); +INSERT INTO `base_area` VALUES ('510727', '平武县', '5107'); +INSERT INTO `base_area` VALUES ('510781', '江油市', '5107'); +INSERT INTO `base_area` VALUES ('510802', '利州区', '5108'); +INSERT INTO `base_area` VALUES ('510811', '昭化区', '5108'); +INSERT INTO `base_area` VALUES ('510812', '朝天区', '5108'); +INSERT INTO `base_area` VALUES ('510821', '旺苍县', '5108'); +INSERT INTO `base_area` VALUES ('510822', '青川县', '5108'); +INSERT INTO `base_area` VALUES ('510823', '剑阁县', '5108'); +INSERT INTO `base_area` VALUES ('510824', '苍溪县', '5108'); +INSERT INTO `base_area` VALUES ('510903', '船山区', '5109'); +INSERT INTO `base_area` VALUES ('510904', '安居区', '5109'); +INSERT INTO `base_area` VALUES ('510921', '蓬溪县', '5109'); +INSERT INTO `base_area` VALUES ('510923', '大英县', '5109'); +INSERT INTO `base_area` VALUES ('510981', '射洪市', '5109'); +INSERT INTO `base_area` VALUES ('511002', '市中区', '5110'); +INSERT INTO `base_area` VALUES ('511011', '东兴区', '5110'); +INSERT INTO `base_area` VALUES ('511024', '威远县', '5110'); +INSERT INTO `base_area` VALUES ('511025', '资中县', '5110'); +INSERT INTO `base_area` VALUES ('511083', '隆昌市', '5110'); +INSERT INTO `base_area` VALUES ('511102', '市中区', '5111'); +INSERT INTO `base_area` VALUES ('511111', '沙湾区', '5111'); +INSERT INTO `base_area` VALUES ('511112', '五通桥区', '5111'); +INSERT INTO `base_area` VALUES ('511113', '金口河区', '5111'); +INSERT INTO `base_area` VALUES ('511123', '犍为县', '5111'); +INSERT INTO `base_area` VALUES ('511124', '井研县', '5111'); +INSERT INTO `base_area` VALUES ('511126', '夹江县', '5111'); +INSERT INTO `base_area` VALUES ('511129', '沐川县', '5111'); +INSERT INTO `base_area` VALUES ('511132', '峨边彝族自治县', '5111'); +INSERT INTO `base_area` VALUES ('511133', '马边彝族自治县', '5111'); +INSERT INTO `base_area` VALUES ('511181', '峨眉山市', '5111'); +INSERT INTO `base_area` VALUES ('511302', '顺庆区', '5113'); +INSERT INTO `base_area` VALUES ('511303', '高坪区', '5113'); +INSERT INTO `base_area` VALUES ('511304', '嘉陵区', '5113'); +INSERT INTO `base_area` VALUES ('511321', '南部县', '5113'); +INSERT INTO `base_area` VALUES ('511322', '营山县', '5113'); +INSERT INTO `base_area` VALUES ('511323', '蓬安县', '5113'); +INSERT INTO `base_area` VALUES ('511324', '仪陇县', '5113'); +INSERT INTO `base_area` VALUES ('511325', '西充县', '5113'); +INSERT INTO `base_area` VALUES ('511381', '阆中市', '5113'); +INSERT INTO `base_area` VALUES ('511402', '东坡区', '5114'); +INSERT INTO `base_area` VALUES ('511403', '彭山区', '5114'); +INSERT INTO `base_area` VALUES ('511421', '仁寿县', '5114'); +INSERT INTO `base_area` VALUES ('511423', '洪雅县', '5114'); +INSERT INTO `base_area` VALUES ('511424', '丹棱县', '5114'); +INSERT INTO `base_area` VALUES ('511425', '青神县', '5114'); +INSERT INTO `base_area` VALUES ('511502', '翠屏区', '5115'); +INSERT INTO `base_area` VALUES ('511503', '南溪区', '5115'); +INSERT INTO `base_area` VALUES ('511504', '叙州区', '5115'); +INSERT INTO `base_area` VALUES ('511523', '江安县', '5115'); +INSERT INTO `base_area` VALUES ('511524', '长宁县', '5115'); +INSERT INTO `base_area` VALUES ('511525', '高县', '5115'); +INSERT INTO `base_area` VALUES ('511526', '珙县', '5115'); +INSERT INTO `base_area` VALUES ('511527', '筠连县', '5115'); +INSERT INTO `base_area` VALUES ('511528', '兴文县', '5115'); +INSERT INTO `base_area` VALUES ('511529', '屏山县', '5115'); +INSERT INTO `base_area` VALUES ('511602', '广安区', '5116'); +INSERT INTO `base_area` VALUES ('511603', '前锋区', '5116'); +INSERT INTO `base_area` VALUES ('511621', '岳池县', '5116'); +INSERT INTO `base_area` VALUES ('511622', '武胜县', '5116'); +INSERT INTO `base_area` VALUES ('511623', '邻水县', '5116'); +INSERT INTO `base_area` VALUES ('511681', '华蓥市', '5116'); +INSERT INTO `base_area` VALUES ('511702', '通川区', '5117'); +INSERT INTO `base_area` VALUES ('511703', '达川区', '5117'); +INSERT INTO `base_area` VALUES ('511722', '宣汉县', '5117'); +INSERT INTO `base_area` VALUES ('511723', '开江县', '5117'); +INSERT INTO `base_area` VALUES ('511724', '大竹县', '5117'); +INSERT INTO `base_area` VALUES ('511725', '渠县', '5117'); +INSERT INTO `base_area` VALUES ('511781', '万源市', '5117'); +INSERT INTO `base_area` VALUES ('511802', '雨城区', '5118'); +INSERT INTO `base_area` VALUES ('511803', '名山区', '5118'); +INSERT INTO `base_area` VALUES ('511822', '荥经县', '5118'); +INSERT INTO `base_area` VALUES ('511823', '汉源县', '5118'); +INSERT INTO `base_area` VALUES ('511824', '石棉县', '5118'); +INSERT INTO `base_area` VALUES ('511825', '天全县', '5118'); +INSERT INTO `base_area` VALUES ('511826', '芦山县', '5118'); +INSERT INTO `base_area` VALUES ('511827', '宝兴县', '5118'); +INSERT INTO `base_area` VALUES ('511902', '巴州区', '5119'); +INSERT INTO `base_area` VALUES ('511903', '恩阳区', '5119'); +INSERT INTO `base_area` VALUES ('511921', '通江县', '5119'); +INSERT INTO `base_area` VALUES ('511922', '南江县', '5119'); +INSERT INTO `base_area` VALUES ('511923', '平昌县', '5119'); +INSERT INTO `base_area` VALUES ('512002', '雁江区', '5120'); +INSERT INTO `base_area` VALUES ('512021', '安岳县', '5120'); +INSERT INTO `base_area` VALUES ('512022', '乐至县', '5120'); +INSERT INTO `base_area` VALUES ('513201', '马尔康市', '5132'); +INSERT INTO `base_area` VALUES ('513221', '汶川县', '5132'); +INSERT INTO `base_area` VALUES ('513222', '理县', '5132'); +INSERT INTO `base_area` VALUES ('513223', '茂县', '5132'); +INSERT INTO `base_area` VALUES ('513224', '松潘县', '5132'); +INSERT INTO `base_area` VALUES ('513225', '九寨沟县', '5132'); +INSERT INTO `base_area` VALUES ('513226', '金川县', '5132'); +INSERT INTO `base_area` VALUES ('513227', '小金县', '5132'); +INSERT INTO `base_area` VALUES ('513228', '黑水县', '5132'); +INSERT INTO `base_area` VALUES ('513230', '壤塘县', '5132'); +INSERT INTO `base_area` VALUES ('513231', '阿坝县', '5132'); +INSERT INTO `base_area` VALUES ('513232', '若尔盖县', '5132'); +INSERT INTO `base_area` VALUES ('513233', '红原县', '5132'); +INSERT INTO `base_area` VALUES ('513301', '康定市', '5133'); +INSERT INTO `base_area` VALUES ('513322', '泸定县', '5133'); +INSERT INTO `base_area` VALUES ('513323', '丹巴县', '5133'); +INSERT INTO `base_area` VALUES ('513324', '九龙县', '5133'); +INSERT INTO `base_area` VALUES ('513325', '雅江县', '5133'); +INSERT INTO `base_area` VALUES ('513326', '道孚县', '5133'); +INSERT INTO `base_area` VALUES ('513327', '炉霍县', '5133'); +INSERT INTO `base_area` VALUES ('513328', '甘孜县', '5133'); +INSERT INTO `base_area` VALUES ('513329', '新龙县', '5133'); +INSERT INTO `base_area` VALUES ('513330', '德格县', '5133'); +INSERT INTO `base_area` VALUES ('513331', '白玉县', '5133'); +INSERT INTO `base_area` VALUES ('513332', '石渠县', '5133'); +INSERT INTO `base_area` VALUES ('513333', '色达县', '5133'); +INSERT INTO `base_area` VALUES ('513334', '理塘县', '5133'); +INSERT INTO `base_area` VALUES ('513335', '巴塘县', '5133'); +INSERT INTO `base_area` VALUES ('513336', '乡城县', '5133'); +INSERT INTO `base_area` VALUES ('513337', '稻城县', '5133'); +INSERT INTO `base_area` VALUES ('513338', '得荣县', '5133'); +INSERT INTO `base_area` VALUES ('513401', '西昌市', '5134'); +INSERT INTO `base_area` VALUES ('513402', '会理市', '5134'); +INSERT INTO `base_area` VALUES ('513422', '木里藏族自治县', '5134'); +INSERT INTO `base_area` VALUES ('513423', '盐源县', '5134'); +INSERT INTO `base_area` VALUES ('513424', '德昌县', '5134'); +INSERT INTO `base_area` VALUES ('513426', '会东县', '5134'); +INSERT INTO `base_area` VALUES ('513427', '宁南县', '5134'); +INSERT INTO `base_area` VALUES ('513428', '普格县', '5134'); +INSERT INTO `base_area` VALUES ('513429', '布拖县', '5134'); +INSERT INTO `base_area` VALUES ('513430', '金阳县', '5134'); +INSERT INTO `base_area` VALUES ('513431', '昭觉县', '5134'); +INSERT INTO `base_area` VALUES ('513432', '喜德县', '5134'); +INSERT INTO `base_area` VALUES ('513433', '冕宁县', '5134'); +INSERT INTO `base_area` VALUES ('513434', '越西县', '5134'); +INSERT INTO `base_area` VALUES ('513435', '甘洛县', '5134'); +INSERT INTO `base_area` VALUES ('513436', '美姑县', '5134'); +INSERT INTO `base_area` VALUES ('513437', '雷波县', '5134'); +INSERT INTO `base_area` VALUES ('520102', '南明区', '5201'); +INSERT INTO `base_area` VALUES ('520103', '云岩区', '5201'); +INSERT INTO `base_area` VALUES ('520111', '花溪区', '5201'); +INSERT INTO `base_area` VALUES ('520112', '乌当区', '5201'); +INSERT INTO `base_area` VALUES ('520113', '白云区', '5201'); +INSERT INTO `base_area` VALUES ('520115', '观山湖区', '5201'); +INSERT INTO `base_area` VALUES ('520121', '开阳县', '5201'); +INSERT INTO `base_area` VALUES ('520122', '息烽县', '5201'); +INSERT INTO `base_area` VALUES ('520123', '修文县', '5201'); +INSERT INTO `base_area` VALUES ('520181', '清镇市', '5201'); +INSERT INTO `base_area` VALUES ('520201', '钟山区', '5202'); +INSERT INTO `base_area` VALUES ('520203', '六枝特区', '5202'); +INSERT INTO `base_area` VALUES ('520204', '水城区', '5202'); +INSERT INTO `base_area` VALUES ('520281', '盘州市', '5202'); +INSERT INTO `base_area` VALUES ('520302', '红花岗区', '5203'); +INSERT INTO `base_area` VALUES ('520303', '汇川区', '5203'); +INSERT INTO `base_area` VALUES ('520304', '播州区', '5203'); +INSERT INTO `base_area` VALUES ('520322', '桐梓县', '5203'); +INSERT INTO `base_area` VALUES ('520323', '绥阳县', '5203'); +INSERT INTO `base_area` VALUES ('520324', '正安县', '5203'); +INSERT INTO `base_area` VALUES ('520325', '道真仡佬族苗族自治县', '5203'); +INSERT INTO `base_area` VALUES ('520326', '务川仡佬族苗族自治县', '5203'); +INSERT INTO `base_area` VALUES ('520327', '凤冈县', '5203'); +INSERT INTO `base_area` VALUES ('520328', '湄潭县', '5203'); +INSERT INTO `base_area` VALUES ('520329', '余庆县', '5203'); +INSERT INTO `base_area` VALUES ('520330', '习水县', '5203'); +INSERT INTO `base_area` VALUES ('520381', '赤水市', '5203'); +INSERT INTO `base_area` VALUES ('520382', '仁怀市', '5203'); +INSERT INTO `base_area` VALUES ('520402', '西秀区', '5204'); +INSERT INTO `base_area` VALUES ('520403', '平坝区', '5204'); +INSERT INTO `base_area` VALUES ('520422', '普定县', '5204'); +INSERT INTO `base_area` VALUES ('520423', '镇宁布依族苗族自治县', '5204'); +INSERT INTO `base_area` VALUES ('520424', '关岭布依族苗族自治县', '5204'); +INSERT INTO `base_area` VALUES ('520425', '紫云苗族布依族自治县', '5204'); +INSERT INTO `base_area` VALUES ('520502', '七星关区', '5205'); +INSERT INTO `base_area` VALUES ('520521', '大方县', '5205'); +INSERT INTO `base_area` VALUES ('520523', '金沙县', '5205'); +INSERT INTO `base_area` VALUES ('520524', '织金县', '5205'); +INSERT INTO `base_area` VALUES ('520525', '纳雍县', '5205'); +INSERT INTO `base_area` VALUES ('520526', '威宁彝族回族苗族自治县', '5205'); +INSERT INTO `base_area` VALUES ('520527', '赫章县', '5205'); +INSERT INTO `base_area` VALUES ('520581', '黔西市', '5205'); +INSERT INTO `base_area` VALUES ('520602', '碧江区', '5206'); +INSERT INTO `base_area` VALUES ('520603', '万山区', '5206'); +INSERT INTO `base_area` VALUES ('520621', '江口县', '5206'); +INSERT INTO `base_area` VALUES ('520622', '玉屏侗族自治县', '5206'); +INSERT INTO `base_area` VALUES ('520623', '石阡县', '5206'); +INSERT INTO `base_area` VALUES ('520624', '思南县', '5206'); +INSERT INTO `base_area` VALUES ('520625', '印江土家族苗族自治县', '5206'); +INSERT INTO `base_area` VALUES ('520626', '德江县', '5206'); +INSERT INTO `base_area` VALUES ('520627', '沿河土家族自治县', '5206'); +INSERT INTO `base_area` VALUES ('520628', '松桃苗族自治县', '5206'); +INSERT INTO `base_area` VALUES ('522301', '兴义市', '5223'); +INSERT INTO `base_area` VALUES ('522302', '兴仁市', '5223'); +INSERT INTO `base_area` VALUES ('522323', '普安县', '5223'); +INSERT INTO `base_area` VALUES ('522324', '晴隆县', '5223'); +INSERT INTO `base_area` VALUES ('522325', '贞丰县', '5223'); +INSERT INTO `base_area` VALUES ('522326', '望谟县', '5223'); +INSERT INTO `base_area` VALUES ('522327', '册亨县', '5223'); +INSERT INTO `base_area` VALUES ('522328', '安龙县', '5223'); +INSERT INTO `base_area` VALUES ('522601', '凯里市', '5226'); +INSERT INTO `base_area` VALUES ('522622', '黄平县', '5226'); +INSERT INTO `base_area` VALUES ('522623', '施秉县', '5226'); +INSERT INTO `base_area` VALUES ('522624', '三穗县', '5226'); +INSERT INTO `base_area` VALUES ('522625', '镇远县', '5226'); +INSERT INTO `base_area` VALUES ('522626', '岑巩县', '5226'); +INSERT INTO `base_area` VALUES ('522627', '天柱县', '5226'); +INSERT INTO `base_area` VALUES ('522628', '锦屏县', '5226'); +INSERT INTO `base_area` VALUES ('522629', '剑河县', '5226'); +INSERT INTO `base_area` VALUES ('522630', '台江县', '5226'); +INSERT INTO `base_area` VALUES ('522631', '黎平县', '5226'); +INSERT INTO `base_area` VALUES ('522632', '榕江县', '5226'); +INSERT INTO `base_area` VALUES ('522633', '从江县', '5226'); +INSERT INTO `base_area` VALUES ('522634', '雷山县', '5226'); +INSERT INTO `base_area` VALUES ('522635', '麻江县', '5226'); +INSERT INTO `base_area` VALUES ('522636', '丹寨县', '5226'); +INSERT INTO `base_area` VALUES ('522701', '都匀市', '5227'); +INSERT INTO `base_area` VALUES ('522702', '福泉市', '5227'); +INSERT INTO `base_area` VALUES ('522722', '荔波县', '5227'); +INSERT INTO `base_area` VALUES ('522723', '贵定县', '5227'); +INSERT INTO `base_area` VALUES ('522725', '瓮安县', '5227'); +INSERT INTO `base_area` VALUES ('522726', '独山县', '5227'); +INSERT INTO `base_area` VALUES ('522727', '平塘县', '5227'); +INSERT INTO `base_area` VALUES ('522728', '罗甸县', '5227'); +INSERT INTO `base_area` VALUES ('522729', '长顺县', '5227'); +INSERT INTO `base_area` VALUES ('522730', '龙里县', '5227'); +INSERT INTO `base_area` VALUES ('522731', '惠水县', '5227'); +INSERT INTO `base_area` VALUES ('522732', '三都水族自治县', '5227'); +INSERT INTO `base_area` VALUES ('530102', '五华区', '5301'); +INSERT INTO `base_area` VALUES ('530103', '盘龙区', '5301'); +INSERT INTO `base_area` VALUES ('530111', '官渡区', '5301'); +INSERT INTO `base_area` VALUES ('530112', '西山区', '5301'); +INSERT INTO `base_area` VALUES ('530113', '东川区', '5301'); +INSERT INTO `base_area` VALUES ('530114', '呈贡区', '5301'); +INSERT INTO `base_area` VALUES ('530115', '晋宁区', '5301'); +INSERT INTO `base_area` VALUES ('530124', '富民县', '5301'); +INSERT INTO `base_area` VALUES ('530125', '宜良县', '5301'); +INSERT INTO `base_area` VALUES ('530126', '石林彝族自治县', '5301'); +INSERT INTO `base_area` VALUES ('530127', '嵩明县', '5301'); +INSERT INTO `base_area` VALUES ('530128', '禄劝彝族苗族自治县', '5301'); +INSERT INTO `base_area` VALUES ('530129', '寻甸回族彝族自治县', '5301'); +INSERT INTO `base_area` VALUES ('530181', '安宁市', '5301'); +INSERT INTO `base_area` VALUES ('530302', '麒麟区', '5303'); +INSERT INTO `base_area` VALUES ('530303', '沾益区', '5303'); +INSERT INTO `base_area` VALUES ('530304', '马龙区', '5303'); +INSERT INTO `base_area` VALUES ('530322', '陆良县', '5303'); +INSERT INTO `base_area` VALUES ('530323', '师宗县', '5303'); +INSERT INTO `base_area` VALUES ('530324', '罗平县', '5303'); +INSERT INTO `base_area` VALUES ('530325', '富源县', '5303'); +INSERT INTO `base_area` VALUES ('530326', '会泽县', '5303'); +INSERT INTO `base_area` VALUES ('530381', '宣威市', '5303'); +INSERT INTO `base_area` VALUES ('530402', '红塔区', '5304'); +INSERT INTO `base_area` VALUES ('530403', '江川区', '5304'); +INSERT INTO `base_area` VALUES ('530423', '通海县', '5304'); +INSERT INTO `base_area` VALUES ('530424', '华宁县', '5304'); +INSERT INTO `base_area` VALUES ('530425', '易门县', '5304'); +INSERT INTO `base_area` VALUES ('530426', '峨山彝族自治县', '5304'); +INSERT INTO `base_area` VALUES ('530427', '新平彝族傣族自治县', '5304'); +INSERT INTO `base_area` VALUES ('530428', '元江哈尼族彝族傣族自治县', '5304'); +INSERT INTO `base_area` VALUES ('530481', '澄江市', '5304'); +INSERT INTO `base_area` VALUES ('530502', '隆阳区', '5305'); +INSERT INTO `base_area` VALUES ('530521', '施甸县', '5305'); +INSERT INTO `base_area` VALUES ('530523', '龙陵县', '5305'); +INSERT INTO `base_area` VALUES ('530524', '昌宁县', '5305'); +INSERT INTO `base_area` VALUES ('530581', '腾冲市', '5305'); +INSERT INTO `base_area` VALUES ('530602', '昭阳区', '5306'); +INSERT INTO `base_area` VALUES ('530621', '鲁甸县', '5306'); +INSERT INTO `base_area` VALUES ('530622', '巧家县', '5306'); +INSERT INTO `base_area` VALUES ('530623', '盐津县', '5306'); +INSERT INTO `base_area` VALUES ('530624', '大关县', '5306'); +INSERT INTO `base_area` VALUES ('530625', '永善县', '5306'); +INSERT INTO `base_area` VALUES ('530626', '绥江县', '5306'); +INSERT INTO `base_area` VALUES ('530627', '镇雄县', '5306'); +INSERT INTO `base_area` VALUES ('530628', '彝良县', '5306'); +INSERT INTO `base_area` VALUES ('530629', '威信县', '5306'); +INSERT INTO `base_area` VALUES ('530681', '水富市', '5306'); +INSERT INTO `base_area` VALUES ('530702', '古城区', '5307'); +INSERT INTO `base_area` VALUES ('530721', '玉龙纳西族自治县', '5307'); +INSERT INTO `base_area` VALUES ('530722', '永胜县', '5307'); +INSERT INTO `base_area` VALUES ('530723', '华坪县', '5307'); +INSERT INTO `base_area` VALUES ('530724', '宁蒗彝族自治县', '5307'); +INSERT INTO `base_area` VALUES ('530802', '思茅区', '5308'); +INSERT INTO `base_area` VALUES ('530821', '宁洱哈尼族彝族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530822', '墨江哈尼族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530823', '景东彝族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530824', '景谷傣族彝族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530825', '镇沅彝族哈尼族拉祜族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530826', '江城哈尼族彝族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530827', '孟连傣族拉祜族佤族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530828', '澜沧拉祜族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530829', '西盟佤族自治县', '5308'); +INSERT INTO `base_area` VALUES ('530902', '临翔区', '5309'); +INSERT INTO `base_area` VALUES ('530921', '凤庆县', '5309'); +INSERT INTO `base_area` VALUES ('530922', '云县', '5309'); +INSERT INTO `base_area` VALUES ('530923', '永德县', '5309'); +INSERT INTO `base_area` VALUES ('530924', '镇康县', '5309'); +INSERT INTO `base_area` VALUES ('530925', '双江拉祜族佤族布朗族傣族自治县', '5309'); +INSERT INTO `base_area` VALUES ('530926', '耿马傣族佤族自治县', '5309'); +INSERT INTO `base_area` VALUES ('530927', '沧源佤族自治县', '5309'); +INSERT INTO `base_area` VALUES ('532301', '楚雄市', '5323'); +INSERT INTO `base_area` VALUES ('532302', '禄丰市', '5323'); +INSERT INTO `base_area` VALUES ('532322', '双柏县', '5323'); +INSERT INTO `base_area` VALUES ('532323', '牟定县', '5323'); +INSERT INTO `base_area` VALUES ('532324', '南华县', '5323'); +INSERT INTO `base_area` VALUES ('532325', '姚安县', '5323'); +INSERT INTO `base_area` VALUES ('532326', '大姚县', '5323'); +INSERT INTO `base_area` VALUES ('532327', '永仁县', '5323'); +INSERT INTO `base_area` VALUES ('532328', '元谋县', '5323'); +INSERT INTO `base_area` VALUES ('532329', '武定县', '5323'); +INSERT INTO `base_area` VALUES ('532501', '个旧市', '5325'); +INSERT INTO `base_area` VALUES ('532502', '开远市', '5325'); +INSERT INTO `base_area` VALUES ('532503', '蒙自市', '5325'); +INSERT INTO `base_area` VALUES ('532504', '弥勒市', '5325'); +INSERT INTO `base_area` VALUES ('532523', '屏边苗族自治县', '5325'); +INSERT INTO `base_area` VALUES ('532524', '建水县', '5325'); +INSERT INTO `base_area` VALUES ('532525', '石屏县', '5325'); +INSERT INTO `base_area` VALUES ('532527', '泸西县', '5325'); +INSERT INTO `base_area` VALUES ('532528', '元阳县', '5325'); +INSERT INTO `base_area` VALUES ('532529', '红河县', '5325'); +INSERT INTO `base_area` VALUES ('532530', '金平苗族瑶族傣族自治县', '5325'); +INSERT INTO `base_area` VALUES ('532531', '绿春县', '5325'); +INSERT INTO `base_area` VALUES ('532532', '河口瑶族自治县', '5325'); +INSERT INTO `base_area` VALUES ('532601', '文山市', '5326'); +INSERT INTO `base_area` VALUES ('532622', '砚山县', '5326'); +INSERT INTO `base_area` VALUES ('532623', '西畴县', '5326'); +INSERT INTO `base_area` VALUES ('532624', '麻栗坡县', '5326'); +INSERT INTO `base_area` VALUES ('532625', '马关县', '5326'); +INSERT INTO `base_area` VALUES ('532626', '丘北县', '5326'); +INSERT INTO `base_area` VALUES ('532627', '广南县', '5326'); +INSERT INTO `base_area` VALUES ('532628', '富宁县', '5326'); +INSERT INTO `base_area` VALUES ('532801', '景洪市', '5328'); +INSERT INTO `base_area` VALUES ('532822', '勐海县', '5328'); +INSERT INTO `base_area` VALUES ('532823', '勐腊县', '5328'); +INSERT INTO `base_area` VALUES ('532901', '大理市', '5329'); +INSERT INTO `base_area` VALUES ('532922', '漾濞彝族自治县', '5329'); +INSERT INTO `base_area` VALUES ('532923', '祥云县', '5329'); +INSERT INTO `base_area` VALUES ('532924', '宾川县', '5329'); +INSERT INTO `base_area` VALUES ('532925', '弥渡县', '5329'); +INSERT INTO `base_area` VALUES ('532926', '南涧彝族自治县', '5329'); +INSERT INTO `base_area` VALUES ('532927', '巍山彝族回族自治县', '5329'); +INSERT INTO `base_area` VALUES ('532928', '永平县', '5329'); +INSERT INTO `base_area` VALUES ('532929', '云龙县', '5329'); +INSERT INTO `base_area` VALUES ('532930', '洱源县', '5329'); +INSERT INTO `base_area` VALUES ('532931', '剑川县', '5329'); +INSERT INTO `base_area` VALUES ('532932', '鹤庆县', '5329'); +INSERT INTO `base_area` VALUES ('533102', '瑞丽市', '5331'); +INSERT INTO `base_area` VALUES ('533103', '芒市', '5331'); +INSERT INTO `base_area` VALUES ('533122', '梁河县', '5331'); +INSERT INTO `base_area` VALUES ('533123', '盈江县', '5331'); +INSERT INTO `base_area` VALUES ('533124', '陇川县', '5331'); +INSERT INTO `base_area` VALUES ('533301', '泸水市', '5333'); +INSERT INTO `base_area` VALUES ('533323', '福贡县', '5333'); +INSERT INTO `base_area` VALUES ('533324', '贡山独龙族怒族自治县', '5333'); +INSERT INTO `base_area` VALUES ('533325', '兰坪白族普米族自治县', '5333'); +INSERT INTO `base_area` VALUES ('533401', '香格里拉市', '5334'); +INSERT INTO `base_area` VALUES ('533422', '德钦县', '5334'); +INSERT INTO `base_area` VALUES ('533423', '维西傈僳族自治县', '5334'); +INSERT INTO `base_area` VALUES ('540102', '城关区', '5401'); +INSERT INTO `base_area` VALUES ('540103', '堆龙德庆区', '5401'); +INSERT INTO `base_area` VALUES ('540104', '达孜区', '5401'); +INSERT INTO `base_area` VALUES ('540121', '林周县', '5401'); +INSERT INTO `base_area` VALUES ('540122', '当雄县', '5401'); +INSERT INTO `base_area` VALUES ('540123', '尼木县', '5401'); +INSERT INTO `base_area` VALUES ('540124', '曲水县', '5401'); +INSERT INTO `base_area` VALUES ('540127', '墨竹工卡县', '5401'); +INSERT INTO `base_area` VALUES ('540171', '格尔木藏青工业园区', '5401'); +INSERT INTO `base_area` VALUES ('540172', '拉萨经济技术开发区', '5401'); +INSERT INTO `base_area` VALUES ('540173', '西藏文化旅游创意园区', '5401'); +INSERT INTO `base_area` VALUES ('540174', '达孜工业园区', '5401'); +INSERT INTO `base_area` VALUES ('540202', '桑珠孜区', '5402'); +INSERT INTO `base_area` VALUES ('540221', '南木林县', '5402'); +INSERT INTO `base_area` VALUES ('540222', '江孜县', '5402'); +INSERT INTO `base_area` VALUES ('540223', '定日县', '5402'); +INSERT INTO `base_area` VALUES ('540224', '萨迦县', '5402'); +INSERT INTO `base_area` VALUES ('540225', '拉孜县', '5402'); +INSERT INTO `base_area` VALUES ('540226', '昂仁县', '5402'); +INSERT INTO `base_area` VALUES ('540227', '谢通门县', '5402'); +INSERT INTO `base_area` VALUES ('540228', '白朗县', '5402'); +INSERT INTO `base_area` VALUES ('540229', '仁布县', '5402'); +INSERT INTO `base_area` VALUES ('540230', '康马县', '5402'); +INSERT INTO `base_area` VALUES ('540231', '定结县', '5402'); +INSERT INTO `base_area` VALUES ('540232', '仲巴县', '5402'); +INSERT INTO `base_area` VALUES ('540233', '亚东县', '5402'); +INSERT INTO `base_area` VALUES ('540234', '吉隆县', '5402'); +INSERT INTO `base_area` VALUES ('540235', '聂拉木县', '5402'); +INSERT INTO `base_area` VALUES ('540236', '萨嘎县', '5402'); +INSERT INTO `base_area` VALUES ('540237', '岗巴县', '5402'); +INSERT INTO `base_area` VALUES ('540302', '卡若区', '5403'); +INSERT INTO `base_area` VALUES ('540321', '江达县', '5403'); +INSERT INTO `base_area` VALUES ('540322', '贡觉县', '5403'); +INSERT INTO `base_area` VALUES ('540323', '类乌齐县', '5403'); +INSERT INTO `base_area` VALUES ('540324', '丁青县', '5403'); +INSERT INTO `base_area` VALUES ('540325', '察雅县', '5403'); +INSERT INTO `base_area` VALUES ('540326', '八宿县', '5403'); +INSERT INTO `base_area` VALUES ('540327', '左贡县', '5403'); +INSERT INTO `base_area` VALUES ('540328', '芒康县', '5403'); +INSERT INTO `base_area` VALUES ('540329', '洛隆县', '5403'); +INSERT INTO `base_area` VALUES ('540330', '边坝县', '5403'); +INSERT INTO `base_area` VALUES ('540402', '巴宜区', '5404'); +INSERT INTO `base_area` VALUES ('540421', '工布江达县', '5404'); +INSERT INTO `base_area` VALUES ('540422', '米林县', '5404'); +INSERT INTO `base_area` VALUES ('540423', '墨脱县', '5404'); +INSERT INTO `base_area` VALUES ('540424', '波密县', '5404'); +INSERT INTO `base_area` VALUES ('540425', '察隅县', '5404'); +INSERT INTO `base_area` VALUES ('540426', '朗县', '5404'); +INSERT INTO `base_area` VALUES ('540502', '乃东区', '5405'); +INSERT INTO `base_area` VALUES ('540521', '扎囊县', '5405'); +INSERT INTO `base_area` VALUES ('540522', '贡嘎县', '5405'); +INSERT INTO `base_area` VALUES ('540523', '桑日县', '5405'); +INSERT INTO `base_area` VALUES ('540524', '琼结县', '5405'); +INSERT INTO `base_area` VALUES ('540525', '曲松县', '5405'); +INSERT INTO `base_area` VALUES ('540526', '措美县', '5405'); +INSERT INTO `base_area` VALUES ('540527', '洛扎县', '5405'); +INSERT INTO `base_area` VALUES ('540528', '加查县', '5405'); +INSERT INTO `base_area` VALUES ('540529', '隆子县', '5405'); +INSERT INTO `base_area` VALUES ('540530', '错那县', '5405'); +INSERT INTO `base_area` VALUES ('540531', '浪卡子县', '5405'); +INSERT INTO `base_area` VALUES ('540602', '色尼区', '5406'); +INSERT INTO `base_area` VALUES ('540621', '嘉黎县', '5406'); +INSERT INTO `base_area` VALUES ('540622', '比如县', '5406'); +INSERT INTO `base_area` VALUES ('540623', '聂荣县', '5406'); +INSERT INTO `base_area` VALUES ('540624', '安多县', '5406'); +INSERT INTO `base_area` VALUES ('540625', '申扎县', '5406'); +INSERT INTO `base_area` VALUES ('540626', '索县', '5406'); +INSERT INTO `base_area` VALUES ('540627', '班戈县', '5406'); +INSERT INTO `base_area` VALUES ('540628', '巴青县', '5406'); +INSERT INTO `base_area` VALUES ('540629', '尼玛县', '5406'); +INSERT INTO `base_area` VALUES ('540630', '双湖县', '5406'); +INSERT INTO `base_area` VALUES ('542521', '普兰县', '5425'); +INSERT INTO `base_area` VALUES ('542522', '札达县', '5425'); +INSERT INTO `base_area` VALUES ('542523', '噶尔县', '5425'); +INSERT INTO `base_area` VALUES ('542524', '日土县', '5425'); +INSERT INTO `base_area` VALUES ('542525', '革吉县', '5425'); +INSERT INTO `base_area` VALUES ('542526', '改则县', '5425'); +INSERT INTO `base_area` VALUES ('542527', '措勤县', '5425'); +INSERT INTO `base_area` VALUES ('610102', '新城区', '6101'); +INSERT INTO `base_area` VALUES ('610103', '碑林区', '6101'); +INSERT INTO `base_area` VALUES ('610104', '莲湖区', '6101'); +INSERT INTO `base_area` VALUES ('610111', '灞桥区', '6101'); +INSERT INTO `base_area` VALUES ('610112', '未央区', '6101'); +INSERT INTO `base_area` VALUES ('610113', '雁塔区', '6101'); +INSERT INTO `base_area` VALUES ('610114', '阎良区', '6101'); +INSERT INTO `base_area` VALUES ('610115', '临潼区', '6101'); +INSERT INTO `base_area` VALUES ('610116', '长安区', '6101'); +INSERT INTO `base_area` VALUES ('610117', '高陵区', '6101'); +INSERT INTO `base_area` VALUES ('610118', '鄠邑区', '6101'); +INSERT INTO `base_area` VALUES ('610122', '蓝田县', '6101'); +INSERT INTO `base_area` VALUES ('610124', '周至县', '6101'); +INSERT INTO `base_area` VALUES ('610202', '王益区', '6102'); +INSERT INTO `base_area` VALUES ('610203', '印台区', '6102'); +INSERT INTO `base_area` VALUES ('610204', '耀州区', '6102'); +INSERT INTO `base_area` VALUES ('610222', '宜君县', '6102'); +INSERT INTO `base_area` VALUES ('610302', '渭滨区', '6103'); +INSERT INTO `base_area` VALUES ('610303', '金台区', '6103'); +INSERT INTO `base_area` VALUES ('610304', '陈仓区', '6103'); +INSERT INTO `base_area` VALUES ('610305', '凤翔区', '6103'); +INSERT INTO `base_area` VALUES ('610323', '岐山县', '6103'); +INSERT INTO `base_area` VALUES ('610324', '扶风县', '6103'); +INSERT INTO `base_area` VALUES ('610326', '眉县', '6103'); +INSERT INTO `base_area` VALUES ('610327', '陇县', '6103'); +INSERT INTO `base_area` VALUES ('610328', '千阳县', '6103'); +INSERT INTO `base_area` VALUES ('610329', '麟游县', '6103'); +INSERT INTO `base_area` VALUES ('610330', '凤县', '6103'); +INSERT INTO `base_area` VALUES ('610331', '太白县', '6103'); +INSERT INTO `base_area` VALUES ('610402', '秦都区', '6104'); +INSERT INTO `base_area` VALUES ('610403', '杨陵区', '6104'); +INSERT INTO `base_area` VALUES ('610404', '渭城区', '6104'); +INSERT INTO `base_area` VALUES ('610422', '三原县', '6104'); +INSERT INTO `base_area` VALUES ('610423', '泾阳县', '6104'); +INSERT INTO `base_area` VALUES ('610424', '乾县', '6104'); +INSERT INTO `base_area` VALUES ('610425', '礼泉县', '6104'); +INSERT INTO `base_area` VALUES ('610426', '永寿县', '6104'); +INSERT INTO `base_area` VALUES ('610428', '长武县', '6104'); +INSERT INTO `base_area` VALUES ('610429', '旬邑县', '6104'); +INSERT INTO `base_area` VALUES ('610430', '淳化县', '6104'); +INSERT INTO `base_area` VALUES ('610431', '武功县', '6104'); +INSERT INTO `base_area` VALUES ('610481', '兴平市', '6104'); +INSERT INTO `base_area` VALUES ('610482', '彬州市', '6104'); +INSERT INTO `base_area` VALUES ('610502', '临渭区', '6105'); +INSERT INTO `base_area` VALUES ('610503', '华州区', '6105'); +INSERT INTO `base_area` VALUES ('610522', '潼关县', '6105'); +INSERT INTO `base_area` VALUES ('610523', '大荔县', '6105'); +INSERT INTO `base_area` VALUES ('610524', '合阳县', '6105'); +INSERT INTO `base_area` VALUES ('610525', '澄城县', '6105'); +INSERT INTO `base_area` VALUES ('610526', '蒲城县', '6105'); +INSERT INTO `base_area` VALUES ('610527', '白水县', '6105'); +INSERT INTO `base_area` VALUES ('610528', '富平县', '6105'); +INSERT INTO `base_area` VALUES ('610581', '韩城市', '6105'); +INSERT INTO `base_area` VALUES ('610582', '华阴市', '6105'); +INSERT INTO `base_area` VALUES ('610602', '宝塔区', '6106'); +INSERT INTO `base_area` VALUES ('610603', '安塞区', '6106'); +INSERT INTO `base_area` VALUES ('610621', '延长县', '6106'); +INSERT INTO `base_area` VALUES ('610622', '延川县', '6106'); +INSERT INTO `base_area` VALUES ('610625', '志丹县', '6106'); +INSERT INTO `base_area` VALUES ('610626', '吴起县', '6106'); +INSERT INTO `base_area` VALUES ('610627', '甘泉县', '6106'); +INSERT INTO `base_area` VALUES ('610628', '富县', '6106'); +INSERT INTO `base_area` VALUES ('610629', '洛川县', '6106'); +INSERT INTO `base_area` VALUES ('610630', '宜川县', '6106'); +INSERT INTO `base_area` VALUES ('610631', '黄龙县', '6106'); +INSERT INTO `base_area` VALUES ('610632', '黄陵县', '6106'); +INSERT INTO `base_area` VALUES ('610681', '子长市', '6106'); +INSERT INTO `base_area` VALUES ('610702', '汉台区', '6107'); +INSERT INTO `base_area` VALUES ('610703', '南郑区', '6107'); +INSERT INTO `base_area` VALUES ('610722', '城固县', '6107'); +INSERT INTO `base_area` VALUES ('610723', '洋县', '6107'); +INSERT INTO `base_area` VALUES ('610724', '西乡县', '6107'); +INSERT INTO `base_area` VALUES ('610725', '勉县', '6107'); +INSERT INTO `base_area` VALUES ('610726', '宁强县', '6107'); +INSERT INTO `base_area` VALUES ('610727', '略阳县', '6107'); +INSERT INTO `base_area` VALUES ('610728', '镇巴县', '6107'); +INSERT INTO `base_area` VALUES ('610729', '留坝县', '6107'); +INSERT INTO `base_area` VALUES ('610730', '佛坪县', '6107'); +INSERT INTO `base_area` VALUES ('610802', '榆阳区', '6108'); +INSERT INTO `base_area` VALUES ('610803', '横山区', '6108'); +INSERT INTO `base_area` VALUES ('610822', '府谷县', '6108'); +INSERT INTO `base_area` VALUES ('610824', '靖边县', '6108'); +INSERT INTO `base_area` VALUES ('610825', '定边县', '6108'); +INSERT INTO `base_area` VALUES ('610826', '绥德县', '6108'); +INSERT INTO `base_area` VALUES ('610827', '米脂县', '6108'); +INSERT INTO `base_area` VALUES ('610828', '佳县', '6108'); +INSERT INTO `base_area` VALUES ('610829', '吴堡县', '6108'); +INSERT INTO `base_area` VALUES ('610830', '清涧县', '6108'); +INSERT INTO `base_area` VALUES ('610831', '子洲县', '6108'); +INSERT INTO `base_area` VALUES ('610881', '神木市', '6108'); +INSERT INTO `base_area` VALUES ('610902', '汉滨区', '6109'); +INSERT INTO `base_area` VALUES ('610921', '汉阴县', '6109'); +INSERT INTO `base_area` VALUES ('610922', '石泉县', '6109'); +INSERT INTO `base_area` VALUES ('610923', '宁陕县', '6109'); +INSERT INTO `base_area` VALUES ('610924', '紫阳县', '6109'); +INSERT INTO `base_area` VALUES ('610925', '岚皋县', '6109'); +INSERT INTO `base_area` VALUES ('610926', '平利县', '6109'); +INSERT INTO `base_area` VALUES ('610927', '镇坪县', '6109'); +INSERT INTO `base_area` VALUES ('610929', '白河县', '6109'); +INSERT INTO `base_area` VALUES ('610981', '旬阳市', '6109'); +INSERT INTO `base_area` VALUES ('611002', '商州区', '6110'); +INSERT INTO `base_area` VALUES ('611021', '洛南县', '6110'); +INSERT INTO `base_area` VALUES ('611022', '丹凤县', '6110'); +INSERT INTO `base_area` VALUES ('611023', '商南县', '6110'); +INSERT INTO `base_area` VALUES ('611024', '山阳县', '6110'); +INSERT INTO `base_area` VALUES ('611025', '镇安县', '6110'); +INSERT INTO `base_area` VALUES ('611026', '柞水县', '6110'); +INSERT INTO `base_area` VALUES ('620102', '城关区', '6201'); +INSERT INTO `base_area` VALUES ('620103', '七里河区', '6201'); +INSERT INTO `base_area` VALUES ('620104', '西固区', '6201'); +INSERT INTO `base_area` VALUES ('620105', '安宁区', '6201'); +INSERT INTO `base_area` VALUES ('620111', '红古区', '6201'); +INSERT INTO `base_area` VALUES ('620121', '永登县', '6201'); +INSERT INTO `base_area` VALUES ('620122', '皋兰县', '6201'); +INSERT INTO `base_area` VALUES ('620123', '榆中县', '6201'); +INSERT INTO `base_area` VALUES ('620171', '兰州新区', '6201'); +INSERT INTO `base_area` VALUES ('620201', '嘉峪关市', '6202'); +INSERT INTO `base_area` VALUES ('620302', '金川区', '6203'); +INSERT INTO `base_area` VALUES ('620321', '永昌县', '6203'); +INSERT INTO `base_area` VALUES ('620402', '白银区', '6204'); +INSERT INTO `base_area` VALUES ('620403', '平川区', '6204'); +INSERT INTO `base_area` VALUES ('620421', '靖远县', '6204'); +INSERT INTO `base_area` VALUES ('620422', '会宁县', '6204'); +INSERT INTO `base_area` VALUES ('620423', '景泰县', '6204'); +INSERT INTO `base_area` VALUES ('620502', '秦州区', '6205'); +INSERT INTO `base_area` VALUES ('620503', '麦积区', '6205'); +INSERT INTO `base_area` VALUES ('620521', '清水县', '6205'); +INSERT INTO `base_area` VALUES ('620522', '秦安县', '6205'); +INSERT INTO `base_area` VALUES ('620523', '甘谷县', '6205'); +INSERT INTO `base_area` VALUES ('620524', '武山县', '6205'); +INSERT INTO `base_area` VALUES ('620525', '张家川回族自治县', '6205'); +INSERT INTO `base_area` VALUES ('620602', '凉州区', '6206'); +INSERT INTO `base_area` VALUES ('620621', '民勤县', '6206'); +INSERT INTO `base_area` VALUES ('620622', '古浪县', '6206'); +INSERT INTO `base_area` VALUES ('620623', '天祝藏族自治县', '6206'); +INSERT INTO `base_area` VALUES ('620702', '甘州区', '6207'); +INSERT INTO `base_area` VALUES ('620721', '肃南裕固族自治县', '6207'); +INSERT INTO `base_area` VALUES ('620722', '民乐县', '6207'); +INSERT INTO `base_area` VALUES ('620723', '临泽县', '6207'); +INSERT INTO `base_area` VALUES ('620724', '高台县', '6207'); +INSERT INTO `base_area` VALUES ('620725', '山丹县', '6207'); +INSERT INTO `base_area` VALUES ('620802', '崆峒区', '6208'); +INSERT INTO `base_area` VALUES ('620821', '泾川县', '6208'); +INSERT INTO `base_area` VALUES ('620822', '灵台县', '6208'); +INSERT INTO `base_area` VALUES ('620823', '崇信县', '6208'); +INSERT INTO `base_area` VALUES ('620825', '庄浪县', '6208'); +INSERT INTO `base_area` VALUES ('620826', '静宁县', '6208'); +INSERT INTO `base_area` VALUES ('620881', '华亭市', '6208'); +INSERT INTO `base_area` VALUES ('620902', '肃州区', '6209'); +INSERT INTO `base_area` VALUES ('620921', '金塔县', '6209'); +INSERT INTO `base_area` VALUES ('620922', '瓜州县', '6209'); +INSERT INTO `base_area` VALUES ('620923', '肃北蒙古族自治县', '6209'); +INSERT INTO `base_area` VALUES ('620924', '阿克塞哈萨克族自治县', '6209'); +INSERT INTO `base_area` VALUES ('620981', '玉门市', '6209'); +INSERT INTO `base_area` VALUES ('620982', '敦煌市', '6209'); +INSERT INTO `base_area` VALUES ('621002', '西峰区', '6210'); +INSERT INTO `base_area` VALUES ('621021', '庆城县', '6210'); +INSERT INTO `base_area` VALUES ('621022', '环县', '6210'); +INSERT INTO `base_area` VALUES ('621023', '华池县', '6210'); +INSERT INTO `base_area` VALUES ('621024', '合水县', '6210'); +INSERT INTO `base_area` VALUES ('621025', '正宁县', '6210'); +INSERT INTO `base_area` VALUES ('621026', '宁县', '6210'); +INSERT INTO `base_area` VALUES ('621027', '镇原县', '6210'); +INSERT INTO `base_area` VALUES ('621102', '安定区', '6211'); +INSERT INTO `base_area` VALUES ('621121', '通渭县', '6211'); +INSERT INTO `base_area` VALUES ('621122', '陇西县', '6211'); +INSERT INTO `base_area` VALUES ('621123', '渭源县', '6211'); +INSERT INTO `base_area` VALUES ('621124', '临洮县', '6211'); +INSERT INTO `base_area` VALUES ('621125', '漳县', '6211'); +INSERT INTO `base_area` VALUES ('621126', '岷县', '6211'); +INSERT INTO `base_area` VALUES ('621202', '武都区', '6212'); +INSERT INTO `base_area` VALUES ('621221', '成县', '6212'); +INSERT INTO `base_area` VALUES ('621222', '文县', '6212'); +INSERT INTO `base_area` VALUES ('621223', '宕昌县', '6212'); +INSERT INTO `base_area` VALUES ('621224', '康县', '6212'); +INSERT INTO `base_area` VALUES ('621225', '西和县', '6212'); +INSERT INTO `base_area` VALUES ('621226', '礼县', '6212'); +INSERT INTO `base_area` VALUES ('621227', '徽县', '6212'); +INSERT INTO `base_area` VALUES ('621228', '两当县', '6212'); +INSERT INTO `base_area` VALUES ('622901', '临夏市', '6229'); +INSERT INTO `base_area` VALUES ('622921', '临夏县', '6229'); +INSERT INTO `base_area` VALUES ('622922', '康乐县', '6229'); +INSERT INTO `base_area` VALUES ('622923', '永靖县', '6229'); +INSERT INTO `base_area` VALUES ('622924', '广河县', '6229'); +INSERT INTO `base_area` VALUES ('622925', '和政县', '6229'); +INSERT INTO `base_area` VALUES ('622926', '东乡族自治县', '6229'); +INSERT INTO `base_area` VALUES ('622927', '积石山保安族东乡族撒拉族自治县', '6229'); +INSERT INTO `base_area` VALUES ('623001', '合作市', '6230'); +INSERT INTO `base_area` VALUES ('623021', '临潭县', '6230'); +INSERT INTO `base_area` VALUES ('623022', '卓尼县', '6230'); +INSERT INTO `base_area` VALUES ('623023', '舟曲县', '6230'); +INSERT INTO `base_area` VALUES ('623024', '迭部县', '6230'); +INSERT INTO `base_area` VALUES ('623025', '玛曲县', '6230'); +INSERT INTO `base_area` VALUES ('623026', '碌曲县', '6230'); +INSERT INTO `base_area` VALUES ('623027', '夏河县', '6230'); +INSERT INTO `base_area` VALUES ('630102', '城东区', '6301'); +INSERT INTO `base_area` VALUES ('630103', '城中区', '6301'); +INSERT INTO `base_area` VALUES ('630104', '城西区', '6301'); +INSERT INTO `base_area` VALUES ('630105', '城北区', '6301'); +INSERT INTO `base_area` VALUES ('630106', '湟中区', '6301'); +INSERT INTO `base_area` VALUES ('630121', '大通回族土族自治县', '6301'); +INSERT INTO `base_area` VALUES ('630123', '湟源县', '6301'); +INSERT INTO `base_area` VALUES ('630202', '乐都区', '6302'); +INSERT INTO `base_area` VALUES ('630203', '平安区', '6302'); +INSERT INTO `base_area` VALUES ('630222', '民和回族土族自治县', '6302'); +INSERT INTO `base_area` VALUES ('630223', '互助土族自治县', '6302'); +INSERT INTO `base_area` VALUES ('630224', '化隆回族自治县', '6302'); +INSERT INTO `base_area` VALUES ('630225', '循化撒拉族自治县', '6302'); +INSERT INTO `base_area` VALUES ('632221', '门源回族自治县', '6322'); +INSERT INTO `base_area` VALUES ('632222', '祁连县', '6322'); +INSERT INTO `base_area` VALUES ('632223', '海晏县', '6322'); +INSERT INTO `base_area` VALUES ('632224', '刚察县', '6322'); +INSERT INTO `base_area` VALUES ('632301', '同仁市', '6323'); +INSERT INTO `base_area` VALUES ('632322', '尖扎县', '6323'); +INSERT INTO `base_area` VALUES ('632323', '泽库县', '6323'); +INSERT INTO `base_area` VALUES ('632324', '河南蒙古族自治县', '6323'); +INSERT INTO `base_area` VALUES ('632521', '共和县', '6325'); +INSERT INTO `base_area` VALUES ('632522', '同德县', '6325'); +INSERT INTO `base_area` VALUES ('632523', '贵德县', '6325'); +INSERT INTO `base_area` VALUES ('632524', '兴海县', '6325'); +INSERT INTO `base_area` VALUES ('632525', '贵南县', '6325'); +INSERT INTO `base_area` VALUES ('632621', '玛沁县', '6326'); +INSERT INTO `base_area` VALUES ('632622', '班玛县', '6326'); +INSERT INTO `base_area` VALUES ('632623', '甘德县', '6326'); +INSERT INTO `base_area` VALUES ('632624', '达日县', '6326'); +INSERT INTO `base_area` VALUES ('632625', '久治县', '6326'); +INSERT INTO `base_area` VALUES ('632626', '玛多县', '6326'); +INSERT INTO `base_area` VALUES ('632701', '玉树市', '6327'); +INSERT INTO `base_area` VALUES ('632722', '杂多县', '6327'); +INSERT INTO `base_area` VALUES ('632723', '称多县', '6327'); +INSERT INTO `base_area` VALUES ('632724', '治多县', '6327'); +INSERT INTO `base_area` VALUES ('632725', '囊谦县', '6327'); +INSERT INTO `base_area` VALUES ('632726', '曲麻莱县', '6327'); +INSERT INTO `base_area` VALUES ('632801', '格尔木市', '6328'); +INSERT INTO `base_area` VALUES ('632802', '德令哈市', '6328'); +INSERT INTO `base_area` VALUES ('632803', '茫崖市', '6328'); +INSERT INTO `base_area` VALUES ('632821', '乌兰县', '6328'); +INSERT INTO `base_area` VALUES ('632822', '都兰县', '6328'); +INSERT INTO `base_area` VALUES ('632823', '天峻县', '6328'); +INSERT INTO `base_area` VALUES ('632857', '大柴旦行政委员会', '6328'); +INSERT INTO `base_area` VALUES ('640104', '兴庆区', '6401'); +INSERT INTO `base_area` VALUES ('640105', '西夏区', '6401'); +INSERT INTO `base_area` VALUES ('640106', '金凤区', '6401'); +INSERT INTO `base_area` VALUES ('640121', '永宁县', '6401'); +INSERT INTO `base_area` VALUES ('640122', '贺兰县', '6401'); +INSERT INTO `base_area` VALUES ('640181', '灵武市', '6401'); +INSERT INTO `base_area` VALUES ('640202', '大武口区', '6402'); +INSERT INTO `base_area` VALUES ('640205', '惠农区', '6402'); +INSERT INTO `base_area` VALUES ('640221', '平罗县', '6402'); +INSERT INTO `base_area` VALUES ('640302', '利通区', '6403'); +INSERT INTO `base_area` VALUES ('640303', '红寺堡区', '6403'); +INSERT INTO `base_area` VALUES ('640323', '盐池县', '6403'); +INSERT INTO `base_area` VALUES ('640324', '同心县', '6403'); +INSERT INTO `base_area` VALUES ('640381', '青铜峡市', '6403'); +INSERT INTO `base_area` VALUES ('640402', '原州区', '6404'); +INSERT INTO `base_area` VALUES ('640422', '西吉县', '6404'); +INSERT INTO `base_area` VALUES ('640423', '隆德县', '6404'); +INSERT INTO `base_area` VALUES ('640424', '泾源县', '6404'); +INSERT INTO `base_area` VALUES ('640425', '彭阳县', '6404'); +INSERT INTO `base_area` VALUES ('640502', '沙坡头区', '6405'); +INSERT INTO `base_area` VALUES ('640521', '中宁县', '6405'); +INSERT INTO `base_area` VALUES ('640522', '海原县', '6405'); +INSERT INTO `base_area` VALUES ('650102', '天山区', '6501'); +INSERT INTO `base_area` VALUES ('650103', '沙依巴克区', '6501'); +INSERT INTO `base_area` VALUES ('650104', '新市区', '6501'); +INSERT INTO `base_area` VALUES ('650105', '水磨沟区', '6501'); +INSERT INTO `base_area` VALUES ('650106', '头屯河区', '6501'); +INSERT INTO `base_area` VALUES ('650107', '达坂城区', '6501'); +INSERT INTO `base_area` VALUES ('650109', '米东区', '6501'); +INSERT INTO `base_area` VALUES ('650121', '乌鲁木齐县', '6501'); +INSERT INTO `base_area` VALUES ('650202', '独山子区', '6502'); +INSERT INTO `base_area` VALUES ('650203', '克拉玛依区', '6502'); +INSERT INTO `base_area` VALUES ('650204', '白碱滩区', '6502'); +INSERT INTO `base_area` VALUES ('650205', '乌尔禾区', '6502'); +INSERT INTO `base_area` VALUES ('650402', '高昌区', '6504'); +INSERT INTO `base_area` VALUES ('650421', '鄯善县', '6504'); +INSERT INTO `base_area` VALUES ('650422', '托克逊县', '6504'); +INSERT INTO `base_area` VALUES ('650502', '伊州区', '6505'); +INSERT INTO `base_area` VALUES ('650521', '巴里坤哈萨克自治县', '6505'); +INSERT INTO `base_area` VALUES ('650522', '伊吾县', '6505'); +INSERT INTO `base_area` VALUES ('652301', '昌吉市', '6523'); +INSERT INTO `base_area` VALUES ('652302', '阜康市', '6523'); +INSERT INTO `base_area` VALUES ('652323', '呼图壁县', '6523'); +INSERT INTO `base_area` VALUES ('652324', '玛纳斯县', '6523'); +INSERT INTO `base_area` VALUES ('652325', '奇台县', '6523'); +INSERT INTO `base_area` VALUES ('652327', '吉木萨尔县', '6523'); +INSERT INTO `base_area` VALUES ('652328', '木垒哈萨克自治县', '6523'); +INSERT INTO `base_area` VALUES ('652701', '博乐市', '6527'); +INSERT INTO `base_area` VALUES ('652702', '阿拉山口市', '6527'); +INSERT INTO `base_area` VALUES ('652722', '精河县', '6527'); +INSERT INTO `base_area` VALUES ('652723', '温泉县', '6527'); +INSERT INTO `base_area` VALUES ('652801', '库尔勒市', '6528'); +INSERT INTO `base_area` VALUES ('652822', '轮台县', '6528'); +INSERT INTO `base_area` VALUES ('652823', '尉犁县', '6528'); +INSERT INTO `base_area` VALUES ('652824', '若羌县', '6528'); +INSERT INTO `base_area` VALUES ('652825', '且末县', '6528'); +INSERT INTO `base_area` VALUES ('652826', '焉耆回族自治县', '6528'); +INSERT INTO `base_area` VALUES ('652827', '和静县', '6528'); +INSERT INTO `base_area` VALUES ('652828', '和硕县', '6528'); +INSERT INTO `base_area` VALUES ('652829', '博湖县', '6528'); +INSERT INTO `base_area` VALUES ('652871', '库尔勒经济技术开发区', '6528'); +INSERT INTO `base_area` VALUES ('652901', '阿克苏市', '6529'); +INSERT INTO `base_area` VALUES ('652902', '库车市', '6529'); +INSERT INTO `base_area` VALUES ('652922', '温宿县', '6529'); +INSERT INTO `base_area` VALUES ('652924', '沙雅县', '6529'); +INSERT INTO `base_area` VALUES ('652925', '新和县', '6529'); +INSERT INTO `base_area` VALUES ('652926', '拜城县', '6529'); +INSERT INTO `base_area` VALUES ('652927', '乌什县', '6529'); +INSERT INTO `base_area` VALUES ('652928', '阿瓦提县', '6529'); +INSERT INTO `base_area` VALUES ('652929', '柯坪县', '6529'); +INSERT INTO `base_area` VALUES ('653001', '阿图什市', '6530'); +INSERT INTO `base_area` VALUES ('653022', '阿克陶县', '6530'); +INSERT INTO `base_area` VALUES ('653023', '阿合奇县', '6530'); +INSERT INTO `base_area` VALUES ('653024', '乌恰县', '6530'); +INSERT INTO `base_area` VALUES ('653101', '喀什市', '6531'); +INSERT INTO `base_area` VALUES ('653121', '疏附县', '6531'); +INSERT INTO `base_area` VALUES ('653122', '疏勒县', '6531'); +INSERT INTO `base_area` VALUES ('653123', '英吉沙县', '6531'); +INSERT INTO `base_area` VALUES ('653124', '泽普县', '6531'); +INSERT INTO `base_area` VALUES ('653125', '莎车县', '6531'); +INSERT INTO `base_area` VALUES ('653126', '叶城县', '6531'); +INSERT INTO `base_area` VALUES ('653127', '麦盖提县', '6531'); +INSERT INTO `base_area` VALUES ('653128', '岳普湖县', '6531'); +INSERT INTO `base_area` VALUES ('653129', '伽师县', '6531'); +INSERT INTO `base_area` VALUES ('653130', '巴楚县', '6531'); +INSERT INTO `base_area` VALUES ('653131', '塔什库尔干塔吉克自治县', '6531'); +INSERT INTO `base_area` VALUES ('653201', '和田市', '6532'); +INSERT INTO `base_area` VALUES ('653221', '和田县', '6532'); +INSERT INTO `base_area` VALUES ('653222', '墨玉县', '6532'); +INSERT INTO `base_area` VALUES ('653223', '皮山县', '6532'); +INSERT INTO `base_area` VALUES ('653224', '洛浦县', '6532'); +INSERT INTO `base_area` VALUES ('653225', '策勒县', '6532'); +INSERT INTO `base_area` VALUES ('653226', '于田县', '6532'); +INSERT INTO `base_area` VALUES ('653227', '民丰县', '6532'); +INSERT INTO `base_area` VALUES ('654002', '伊宁市', '6540'); +INSERT INTO `base_area` VALUES ('654003', '奎屯市', '6540'); +INSERT INTO `base_area` VALUES ('654004', '霍尔果斯市', '6540'); +INSERT INTO `base_area` VALUES ('654021', '伊宁县', '6540'); +INSERT INTO `base_area` VALUES ('654022', '察布查尔锡伯自治县', '6540'); +INSERT INTO `base_area` VALUES ('654023', '霍城县', '6540'); +INSERT INTO `base_area` VALUES ('654024', '巩留县', '6540'); +INSERT INTO `base_area` VALUES ('654025', '新源县', '6540'); +INSERT INTO `base_area` VALUES ('654026', '昭苏县', '6540'); +INSERT INTO `base_area` VALUES ('654027', '特克斯县', '6540'); +INSERT INTO `base_area` VALUES ('654028', '尼勒克县', '6540'); +INSERT INTO `base_area` VALUES ('654201', '塔城市', '6542'); +INSERT INTO `base_area` VALUES ('654202', '乌苏市', '6542'); +INSERT INTO `base_area` VALUES ('654203', '沙湾市', '6542'); +INSERT INTO `base_area` VALUES ('654221', '额敏县', '6542'); +INSERT INTO `base_area` VALUES ('654224', '托里县', '6542'); +INSERT INTO `base_area` VALUES ('654225', '裕民县', '6542'); +INSERT INTO `base_area` VALUES ('654226', '和布克赛尔蒙古自治县', '6542'); +INSERT INTO `base_area` VALUES ('654301', '阿勒泰市', '6543'); +INSERT INTO `base_area` VALUES ('654321', '布尔津县', '6543'); +INSERT INTO `base_area` VALUES ('654322', '富蕴县', '6543'); +INSERT INTO `base_area` VALUES ('654323', '福海县', '6543'); +INSERT INTO `base_area` VALUES ('654324', '哈巴河县', '6543'); +INSERT INTO `base_area` VALUES ('654325', '青河县', '6543'); +INSERT INTO `base_area` VALUES ('654326', '吉木乃县', '6543'); +INSERT INTO `base_area` VALUES ('659001', '石河子市', '6590'); +INSERT INTO `base_area` VALUES ('659002', '阿拉尔市', '6590'); +INSERT INTO `base_area` VALUES ('659003', '图木舒克市', '6590'); +INSERT INTO `base_area` VALUES ('659004', '五家渠市', '6590'); +INSERT INTO `base_area` VALUES ('659005', '北屯市', '6590'); +INSERT INTO `base_area` VALUES ('659006', '铁门关市', '6590'); +INSERT INTO `base_area` VALUES ('659007', '双河市', '6590'); +INSERT INTO `base_area` VALUES ('659008', '可克达拉市', '6590'); +INSERT INTO `base_area` VALUES ('659009', '昆玉市', '6590'); +INSERT INTO `base_area` VALUES ('659010', '胡杨河市', '6590'); +INSERT INTO `base_area` VALUES ('659011', '新星市', '6590'); + +-- ---------------------------- +-- Table structure for base_china_word +-- ---------------------------- +DROP TABLE IF EXISTS `base_china_word`; +CREATE TABLE `base_china_word` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '敏感词', + `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分类', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '描述', + `enable` bit(1) NULL DEFAULT NULL COMMENT '是否启用', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `white` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '敏感词' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_china_word +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_city +-- ---------------------------- +DROP TABLE IF EXISTS `base_city`; +CREATE TABLE `base_city` ( + `code` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '城市编码', + `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '城市名称', + `province_code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '省份编码', + PRIMARY KEY (`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '城市表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_city +-- ---------------------------- +INSERT INTO `base_city` VALUES ('1101', '市辖区', '11'); +INSERT INTO `base_city` VALUES ('1201', '市辖区', '12'); +INSERT INTO `base_city` VALUES ('1301', '石家庄市', '13'); +INSERT INTO `base_city` VALUES ('1302', '唐山市', '13'); +INSERT INTO `base_city` VALUES ('1303', '秦皇岛市', '13'); +INSERT INTO `base_city` VALUES ('1304', '邯郸市', '13'); +INSERT INTO `base_city` VALUES ('1305', '邢台市', '13'); +INSERT INTO `base_city` VALUES ('1306', '保定市', '13'); +INSERT INTO `base_city` VALUES ('1307', '张家口市', '13'); +INSERT INTO `base_city` VALUES ('1308', '承德市', '13'); +INSERT INTO `base_city` VALUES ('1309', '沧州市', '13'); +INSERT INTO `base_city` VALUES ('1310', '廊坊市', '13'); +INSERT INTO `base_city` VALUES ('1311', '衡水市', '13'); +INSERT INTO `base_city` VALUES ('1401', '太原市', '14'); +INSERT INTO `base_city` VALUES ('1402', '大同市', '14'); +INSERT INTO `base_city` VALUES ('1403', '阳泉市', '14'); +INSERT INTO `base_city` VALUES ('1404', '长治市', '14'); +INSERT INTO `base_city` VALUES ('1405', '晋城市', '14'); +INSERT INTO `base_city` VALUES ('1406', '朔州市', '14'); +INSERT INTO `base_city` VALUES ('1407', '晋中市', '14'); +INSERT INTO `base_city` VALUES ('1408', '运城市', '14'); +INSERT INTO `base_city` VALUES ('1409', '忻州市', '14'); +INSERT INTO `base_city` VALUES ('1410', '临汾市', '14'); +INSERT INTO `base_city` VALUES ('1411', '吕梁市', '14'); +INSERT INTO `base_city` VALUES ('1501', '呼和浩特市', '15'); +INSERT INTO `base_city` VALUES ('1502', '包头市', '15'); +INSERT INTO `base_city` VALUES ('1503', '乌海市', '15'); +INSERT INTO `base_city` VALUES ('1504', '赤峰市', '15'); +INSERT INTO `base_city` VALUES ('1505', '通辽市', '15'); +INSERT INTO `base_city` VALUES ('1506', '鄂尔多斯市', '15'); +INSERT INTO `base_city` VALUES ('1507', '呼伦贝尔市', '15'); +INSERT INTO `base_city` VALUES ('1508', '巴彦淖尔市', '15'); +INSERT INTO `base_city` VALUES ('1509', '乌兰察布市', '15'); +INSERT INTO `base_city` VALUES ('1522', '兴安盟', '15'); +INSERT INTO `base_city` VALUES ('1525', '锡林郭勒盟', '15'); +INSERT INTO `base_city` VALUES ('1529', '阿拉善盟', '15'); +INSERT INTO `base_city` VALUES ('2101', '沈阳市', '21'); +INSERT INTO `base_city` VALUES ('2102', '大连市', '21'); +INSERT INTO `base_city` VALUES ('2103', '鞍山市', '21'); +INSERT INTO `base_city` VALUES ('2104', '抚顺市', '21'); +INSERT INTO `base_city` VALUES ('2105', '本溪市', '21'); +INSERT INTO `base_city` VALUES ('2106', '丹东市', '21'); +INSERT INTO `base_city` VALUES ('2107', '锦州市', '21'); +INSERT INTO `base_city` VALUES ('2108', '营口市', '21'); +INSERT INTO `base_city` VALUES ('2109', '阜新市', '21'); +INSERT INTO `base_city` VALUES ('2110', '辽阳市', '21'); +INSERT INTO `base_city` VALUES ('2111', '盘锦市', '21'); +INSERT INTO `base_city` VALUES ('2112', '铁岭市', '21'); +INSERT INTO `base_city` VALUES ('2113', '朝阳市', '21'); +INSERT INTO `base_city` VALUES ('2114', '葫芦岛市', '21'); +INSERT INTO `base_city` VALUES ('2201', '长春市', '22'); +INSERT INTO `base_city` VALUES ('2202', '吉林市', '22'); +INSERT INTO `base_city` VALUES ('2203', '四平市', '22'); +INSERT INTO `base_city` VALUES ('2204', '辽源市', '22'); +INSERT INTO `base_city` VALUES ('2205', '通化市', '22'); +INSERT INTO `base_city` VALUES ('2206', '白山市', '22'); +INSERT INTO `base_city` VALUES ('2207', '松原市', '22'); +INSERT INTO `base_city` VALUES ('2208', '白城市', '22'); +INSERT INTO `base_city` VALUES ('2224', '延边朝鲜族自治州', '22'); +INSERT INTO `base_city` VALUES ('2301', '哈尔滨市', '23'); +INSERT INTO `base_city` VALUES ('2302', '齐齐哈尔市', '23'); +INSERT INTO `base_city` VALUES ('2303', '鸡西市', '23'); +INSERT INTO `base_city` VALUES ('2304', '鹤岗市', '23'); +INSERT INTO `base_city` VALUES ('2305', '双鸭山市', '23'); +INSERT INTO `base_city` VALUES ('2306', '大庆市', '23'); +INSERT INTO `base_city` VALUES ('2307', '伊春市', '23'); +INSERT INTO `base_city` VALUES ('2308', '佳木斯市', '23'); +INSERT INTO `base_city` VALUES ('2309', '七台河市', '23'); +INSERT INTO `base_city` VALUES ('2310', '牡丹江市', '23'); +INSERT INTO `base_city` VALUES ('2311', '黑河市', '23'); +INSERT INTO `base_city` VALUES ('2312', '绥化市', '23'); +INSERT INTO `base_city` VALUES ('2327', '大兴安岭地区', '23'); +INSERT INTO `base_city` VALUES ('3101', '市辖区', '31'); +INSERT INTO `base_city` VALUES ('3201', '南京市', '32'); +INSERT INTO `base_city` VALUES ('3202', '无锡市', '32'); +INSERT INTO `base_city` VALUES ('3203', '徐州市', '32'); +INSERT INTO `base_city` VALUES ('3204', '常州市', '32'); +INSERT INTO `base_city` VALUES ('3205', '苏州市', '32'); +INSERT INTO `base_city` VALUES ('3206', '南通市', '32'); +INSERT INTO `base_city` VALUES ('3207', '连云港市', '32'); +INSERT INTO `base_city` VALUES ('3208', '淮安市', '32'); +INSERT INTO `base_city` VALUES ('3209', '盐城市', '32'); +INSERT INTO `base_city` VALUES ('3210', '扬州市', '32'); +INSERT INTO `base_city` VALUES ('3211', '镇江市', '32'); +INSERT INTO `base_city` VALUES ('3212', '泰州市', '32'); +INSERT INTO `base_city` VALUES ('3213', '宿迁市', '32'); +INSERT INTO `base_city` VALUES ('3301', '杭州市', '33'); +INSERT INTO `base_city` VALUES ('3302', '宁波市', '33'); +INSERT INTO `base_city` VALUES ('3303', '温州市', '33'); +INSERT INTO `base_city` VALUES ('3304', '嘉兴市', '33'); +INSERT INTO `base_city` VALUES ('3305', '湖州市', '33'); +INSERT INTO `base_city` VALUES ('3306', '绍兴市', '33'); +INSERT INTO `base_city` VALUES ('3307', '金华市', '33'); +INSERT INTO `base_city` VALUES ('3308', '衢州市', '33'); +INSERT INTO `base_city` VALUES ('3309', '舟山市', '33'); +INSERT INTO `base_city` VALUES ('3310', '台州市', '33'); +INSERT INTO `base_city` VALUES ('3311', '丽水市', '33'); +INSERT INTO `base_city` VALUES ('3401', '合肥市', '34'); +INSERT INTO `base_city` VALUES ('3402', '芜湖市', '34'); +INSERT INTO `base_city` VALUES ('3403', '蚌埠市', '34'); +INSERT INTO `base_city` VALUES ('3404', '淮南市', '34'); +INSERT INTO `base_city` VALUES ('3405', '马鞍山市', '34'); +INSERT INTO `base_city` VALUES ('3406', '淮北市', '34'); +INSERT INTO `base_city` VALUES ('3407', '铜陵市', '34'); +INSERT INTO `base_city` VALUES ('3408', '安庆市', '34'); +INSERT INTO `base_city` VALUES ('3410', '黄山市', '34'); +INSERT INTO `base_city` VALUES ('3411', '滁州市', '34'); +INSERT INTO `base_city` VALUES ('3412', '阜阳市', '34'); +INSERT INTO `base_city` VALUES ('3413', '宿州市', '34'); +INSERT INTO `base_city` VALUES ('3415', '六安市', '34'); +INSERT INTO `base_city` VALUES ('3416', '亳州市', '34'); +INSERT INTO `base_city` VALUES ('3417', '池州市', '34'); +INSERT INTO `base_city` VALUES ('3418', '宣城市', '34'); +INSERT INTO `base_city` VALUES ('3501', '福州市', '35'); +INSERT INTO `base_city` VALUES ('3502', '厦门市', '35'); +INSERT INTO `base_city` VALUES ('3503', '莆田市', '35'); +INSERT INTO `base_city` VALUES ('3504', '三明市', '35'); +INSERT INTO `base_city` VALUES ('3505', '泉州市', '35'); +INSERT INTO `base_city` VALUES ('3506', '漳州市', '35'); +INSERT INTO `base_city` VALUES ('3507', '南平市', '35'); +INSERT INTO `base_city` VALUES ('3508', '龙岩市', '35'); +INSERT INTO `base_city` VALUES ('3509', '宁德市', '35'); +INSERT INTO `base_city` VALUES ('3601', '南昌市', '36'); +INSERT INTO `base_city` VALUES ('3602', '景德镇市', '36'); +INSERT INTO `base_city` VALUES ('3603', '萍乡市', '36'); +INSERT INTO `base_city` VALUES ('3604', '九江市', '36'); +INSERT INTO `base_city` VALUES ('3605', '新余市', '36'); +INSERT INTO `base_city` VALUES ('3606', '鹰潭市', '36'); +INSERT INTO `base_city` VALUES ('3607', '赣州市', '36'); +INSERT INTO `base_city` VALUES ('3608', '吉安市', '36'); +INSERT INTO `base_city` VALUES ('3609', '宜春市', '36'); +INSERT INTO `base_city` VALUES ('3610', '抚州市', '36'); +INSERT INTO `base_city` VALUES ('3611', '上饶市', '36'); +INSERT INTO `base_city` VALUES ('3701', '济南市', '37'); +INSERT INTO `base_city` VALUES ('3702', '青岛市', '37'); +INSERT INTO `base_city` VALUES ('3703', '淄博市', '37'); +INSERT INTO `base_city` VALUES ('3704', '枣庄市', '37'); +INSERT INTO `base_city` VALUES ('3705', '东营市', '37'); +INSERT INTO `base_city` VALUES ('3706', '烟台市', '37'); +INSERT INTO `base_city` VALUES ('3707', '潍坊市', '37'); +INSERT INTO `base_city` VALUES ('3708', '济宁市', '37'); +INSERT INTO `base_city` VALUES ('3709', '泰安市', '37'); +INSERT INTO `base_city` VALUES ('3710', '威海市', '37'); +INSERT INTO `base_city` VALUES ('3711', '日照市', '37'); +INSERT INTO `base_city` VALUES ('3713', '临沂市', '37'); +INSERT INTO `base_city` VALUES ('3714', '德州市', '37'); +INSERT INTO `base_city` VALUES ('3715', '聊城市', '37'); +INSERT INTO `base_city` VALUES ('3716', '滨州市', '37'); +INSERT INTO `base_city` VALUES ('3717', '菏泽市', '37'); +INSERT INTO `base_city` VALUES ('4101', '郑州市', '41'); +INSERT INTO `base_city` VALUES ('4102', '开封市', '41'); +INSERT INTO `base_city` VALUES ('4103', '洛阳市', '41'); +INSERT INTO `base_city` VALUES ('4104', '平顶山市', '41'); +INSERT INTO `base_city` VALUES ('4105', '安阳市', '41'); +INSERT INTO `base_city` VALUES ('4106', '鹤壁市', '41'); +INSERT INTO `base_city` VALUES ('4107', '新乡市', '41'); +INSERT INTO `base_city` VALUES ('4108', '焦作市', '41'); +INSERT INTO `base_city` VALUES ('4109', '濮阳市', '41'); +INSERT INTO `base_city` VALUES ('4110', '许昌市', '41'); +INSERT INTO `base_city` VALUES ('4111', '漯河市', '41'); +INSERT INTO `base_city` VALUES ('4112', '三门峡市', '41'); +INSERT INTO `base_city` VALUES ('4113', '南阳市', '41'); +INSERT INTO `base_city` VALUES ('4114', '商丘市', '41'); +INSERT INTO `base_city` VALUES ('4115', '信阳市', '41'); +INSERT INTO `base_city` VALUES ('4116', '周口市', '41'); +INSERT INTO `base_city` VALUES ('4117', '驻马店市', '41'); +INSERT INTO `base_city` VALUES ('4190', '省直辖县级行政区划', '41'); +INSERT INTO `base_city` VALUES ('4201', '武汉市', '42'); +INSERT INTO `base_city` VALUES ('4202', '黄石市', '42'); +INSERT INTO `base_city` VALUES ('4203', '十堰市', '42'); +INSERT INTO `base_city` VALUES ('4205', '宜昌市', '42'); +INSERT INTO `base_city` VALUES ('4206', '襄阳市', '42'); +INSERT INTO `base_city` VALUES ('4207', '鄂州市', '42'); +INSERT INTO `base_city` VALUES ('4208', '荆门市', '42'); +INSERT INTO `base_city` VALUES ('4209', '孝感市', '42'); +INSERT INTO `base_city` VALUES ('4210', '荆州市', '42'); +INSERT INTO `base_city` VALUES ('4211', '黄冈市', '42'); +INSERT INTO `base_city` VALUES ('4212', '咸宁市', '42'); +INSERT INTO `base_city` VALUES ('4213', '随州市', '42'); +INSERT INTO `base_city` VALUES ('4228', '恩施土家族苗族自治州', '42'); +INSERT INTO `base_city` VALUES ('4290', '省直辖县级行政区划', '42'); +INSERT INTO `base_city` VALUES ('4301', '长沙市', '43'); +INSERT INTO `base_city` VALUES ('4302', '株洲市', '43'); +INSERT INTO `base_city` VALUES ('4303', '湘潭市', '43'); +INSERT INTO `base_city` VALUES ('4304', '衡阳市', '43'); +INSERT INTO `base_city` VALUES ('4305', '邵阳市', '43'); +INSERT INTO `base_city` VALUES ('4306', '岳阳市', '43'); +INSERT INTO `base_city` VALUES ('4307', '常德市', '43'); +INSERT INTO `base_city` VALUES ('4308', '张家界市', '43'); +INSERT INTO `base_city` VALUES ('4309', '益阳市', '43'); +INSERT INTO `base_city` VALUES ('4310', '郴州市', '43'); +INSERT INTO `base_city` VALUES ('4311', '永州市', '43'); +INSERT INTO `base_city` VALUES ('4312', '怀化市', '43'); +INSERT INTO `base_city` VALUES ('4313', '娄底市', '43'); +INSERT INTO `base_city` VALUES ('4331', '湘西土家族苗族自治州', '43'); +INSERT INTO `base_city` VALUES ('4401', '广州市', '44'); +INSERT INTO `base_city` VALUES ('4402', '韶关市', '44'); +INSERT INTO `base_city` VALUES ('4403', '深圳市', '44'); +INSERT INTO `base_city` VALUES ('4404', '珠海市', '44'); +INSERT INTO `base_city` VALUES ('4405', '汕头市', '44'); +INSERT INTO `base_city` VALUES ('4406', '佛山市', '44'); +INSERT INTO `base_city` VALUES ('4407', '江门市', '44'); +INSERT INTO `base_city` VALUES ('4408', '湛江市', '44'); +INSERT INTO `base_city` VALUES ('4409', '茂名市', '44'); +INSERT INTO `base_city` VALUES ('4412', '肇庆市', '44'); +INSERT INTO `base_city` VALUES ('4413', '惠州市', '44'); +INSERT INTO `base_city` VALUES ('4414', '梅州市', '44'); +INSERT INTO `base_city` VALUES ('4415', '汕尾市', '44'); +INSERT INTO `base_city` VALUES ('4416', '河源市', '44'); +INSERT INTO `base_city` VALUES ('4417', '阳江市', '44'); +INSERT INTO `base_city` VALUES ('4418', '清远市', '44'); +INSERT INTO `base_city` VALUES ('4419', '东莞市', '44'); +INSERT INTO `base_city` VALUES ('4420', '中山市', '44'); +INSERT INTO `base_city` VALUES ('4451', '潮州市', '44'); +INSERT INTO `base_city` VALUES ('4452', '揭阳市', '44'); +INSERT INTO `base_city` VALUES ('4453', '云浮市', '44'); +INSERT INTO `base_city` VALUES ('4501', '南宁市', '45'); +INSERT INTO `base_city` VALUES ('4502', '柳州市', '45'); +INSERT INTO `base_city` VALUES ('4503', '桂林市', '45'); +INSERT INTO `base_city` VALUES ('4504', '梧州市', '45'); +INSERT INTO `base_city` VALUES ('4505', '北海市', '45'); +INSERT INTO `base_city` VALUES ('4506', '防城港市', '45'); +INSERT INTO `base_city` VALUES ('4507', '钦州市', '45'); +INSERT INTO `base_city` VALUES ('4508', '贵港市', '45'); +INSERT INTO `base_city` VALUES ('4509', '玉林市', '45'); +INSERT INTO `base_city` VALUES ('4510', '百色市', '45'); +INSERT INTO `base_city` VALUES ('4511', '贺州市', '45'); +INSERT INTO `base_city` VALUES ('4512', '河池市', '45'); +INSERT INTO `base_city` VALUES ('4513', '来宾市', '45'); +INSERT INTO `base_city` VALUES ('4514', '崇左市', '45'); +INSERT INTO `base_city` VALUES ('4601', '海口市', '46'); +INSERT INTO `base_city` VALUES ('4602', '三亚市', '46'); +INSERT INTO `base_city` VALUES ('4603', '三沙市', '46'); +INSERT INTO `base_city` VALUES ('4604', '儋州市', '46'); +INSERT INTO `base_city` VALUES ('4690', '省直辖县级行政区划', '46'); +INSERT INTO `base_city` VALUES ('5001', '市辖区', '50'); +INSERT INTO `base_city` VALUES ('5002', '县', '50'); +INSERT INTO `base_city` VALUES ('5101', '成都市', '51'); +INSERT INTO `base_city` VALUES ('5103', '自贡市', '51'); +INSERT INTO `base_city` VALUES ('5104', '攀枝花市', '51'); +INSERT INTO `base_city` VALUES ('5105', '泸州市', '51'); +INSERT INTO `base_city` VALUES ('5106', '德阳市', '51'); +INSERT INTO `base_city` VALUES ('5107', '绵阳市', '51'); +INSERT INTO `base_city` VALUES ('5108', '广元市', '51'); +INSERT INTO `base_city` VALUES ('5109', '遂宁市', '51'); +INSERT INTO `base_city` VALUES ('5110', '内江市', '51'); +INSERT INTO `base_city` VALUES ('5111', '乐山市', '51'); +INSERT INTO `base_city` VALUES ('5113', '南充市', '51'); +INSERT INTO `base_city` VALUES ('5114', '眉山市', '51'); +INSERT INTO `base_city` VALUES ('5115', '宜宾市', '51'); +INSERT INTO `base_city` VALUES ('5116', '广安市', '51'); +INSERT INTO `base_city` VALUES ('5117', '达州市', '51'); +INSERT INTO `base_city` VALUES ('5118', '雅安市', '51'); +INSERT INTO `base_city` VALUES ('5119', '巴中市', '51'); +INSERT INTO `base_city` VALUES ('5120', '资阳市', '51'); +INSERT INTO `base_city` VALUES ('5132', '阿坝藏族羌族自治州', '51'); +INSERT INTO `base_city` VALUES ('5133', '甘孜藏族自治州', '51'); +INSERT INTO `base_city` VALUES ('5134', '凉山彝族自治州', '51'); +INSERT INTO `base_city` VALUES ('5201', '贵阳市', '52'); +INSERT INTO `base_city` VALUES ('5202', '六盘水市', '52'); +INSERT INTO `base_city` VALUES ('5203', '遵义市', '52'); +INSERT INTO `base_city` VALUES ('5204', '安顺市', '52'); +INSERT INTO `base_city` VALUES ('5205', '毕节市', '52'); +INSERT INTO `base_city` VALUES ('5206', '铜仁市', '52'); +INSERT INTO `base_city` VALUES ('5223', '黔西南布依族苗族自治州', '52'); +INSERT INTO `base_city` VALUES ('5226', '黔东南苗族侗族自治州', '52'); +INSERT INTO `base_city` VALUES ('5227', '黔南布依族苗族自治州', '52'); +INSERT INTO `base_city` VALUES ('5301', '昆明市', '53'); +INSERT INTO `base_city` VALUES ('5303', '曲靖市', '53'); +INSERT INTO `base_city` VALUES ('5304', '玉溪市', '53'); +INSERT INTO `base_city` VALUES ('5305', '保山市', '53'); +INSERT INTO `base_city` VALUES ('5306', '昭通市', '53'); +INSERT INTO `base_city` VALUES ('5307', '丽江市', '53'); +INSERT INTO `base_city` VALUES ('5308', '普洱市', '53'); +INSERT INTO `base_city` VALUES ('5309', '临沧市', '53'); +INSERT INTO `base_city` VALUES ('5323', '楚雄彝族自治州', '53'); +INSERT INTO `base_city` VALUES ('5325', '红河哈尼族彝族自治州', '53'); +INSERT INTO `base_city` VALUES ('5326', '文山壮族苗族自治州', '53'); +INSERT INTO `base_city` VALUES ('5328', '西双版纳傣族自治州', '53'); +INSERT INTO `base_city` VALUES ('5329', '大理白族自治州', '53'); +INSERT INTO `base_city` VALUES ('5331', '德宏傣族景颇族自治州', '53'); +INSERT INTO `base_city` VALUES ('5333', '怒江傈僳族自治州', '53'); +INSERT INTO `base_city` VALUES ('5334', '迪庆藏族自治州', '53'); +INSERT INTO `base_city` VALUES ('5401', '拉萨市', '54'); +INSERT INTO `base_city` VALUES ('5402', '日喀则市', '54'); +INSERT INTO `base_city` VALUES ('5403', '昌都市', '54'); +INSERT INTO `base_city` VALUES ('5404', '林芝市', '54'); +INSERT INTO `base_city` VALUES ('5405', '山南市', '54'); +INSERT INTO `base_city` VALUES ('5406', '那曲市', '54'); +INSERT INTO `base_city` VALUES ('5425', '阿里地区', '54'); +INSERT INTO `base_city` VALUES ('6101', '西安市', '61'); +INSERT INTO `base_city` VALUES ('6102', '铜川市', '61'); +INSERT INTO `base_city` VALUES ('6103', '宝鸡市', '61'); +INSERT INTO `base_city` VALUES ('6104', '咸阳市', '61'); +INSERT INTO `base_city` VALUES ('6105', '渭南市', '61'); +INSERT INTO `base_city` VALUES ('6106', '延安市', '61'); +INSERT INTO `base_city` VALUES ('6107', '汉中市', '61'); +INSERT INTO `base_city` VALUES ('6108', '榆林市', '61'); +INSERT INTO `base_city` VALUES ('6109', '安康市', '61'); +INSERT INTO `base_city` VALUES ('6110', '商洛市', '61'); +INSERT INTO `base_city` VALUES ('6201', '兰州市', '62'); +INSERT INTO `base_city` VALUES ('6202', '嘉峪关市', '62'); +INSERT INTO `base_city` VALUES ('6203', '金昌市', '62'); +INSERT INTO `base_city` VALUES ('6204', '白银市', '62'); +INSERT INTO `base_city` VALUES ('6205', '天水市', '62'); +INSERT INTO `base_city` VALUES ('6206', '武威市', '62'); +INSERT INTO `base_city` VALUES ('6207', '张掖市', '62'); +INSERT INTO `base_city` VALUES ('6208', '平凉市', '62'); +INSERT INTO `base_city` VALUES ('6209', '酒泉市', '62'); +INSERT INTO `base_city` VALUES ('6210', '庆阳市', '62'); +INSERT INTO `base_city` VALUES ('6211', '定西市', '62'); +INSERT INTO `base_city` VALUES ('6212', '陇南市', '62'); +INSERT INTO `base_city` VALUES ('6229', '临夏回族自治州', '62'); +INSERT INTO `base_city` VALUES ('6230', '甘南藏族自治州', '62'); +INSERT INTO `base_city` VALUES ('6301', '西宁市', '63'); +INSERT INTO `base_city` VALUES ('6302', '海东市', '63'); +INSERT INTO `base_city` VALUES ('6322', '海北藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6323', '黄南藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6325', '海南藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6326', '果洛藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6327', '玉树藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6328', '海西蒙古族藏族自治州', '63'); +INSERT INTO `base_city` VALUES ('6401', '银川市', '64'); +INSERT INTO `base_city` VALUES ('6402', '石嘴山市', '64'); +INSERT INTO `base_city` VALUES ('6403', '吴忠市', '64'); +INSERT INTO `base_city` VALUES ('6404', '固原市', '64'); +INSERT INTO `base_city` VALUES ('6405', '中卫市', '64'); +INSERT INTO `base_city` VALUES ('6501', '乌鲁木齐市', '65'); +INSERT INTO `base_city` VALUES ('6502', '克拉玛依市', '65'); +INSERT INTO `base_city` VALUES ('6504', '吐鲁番市', '65'); +INSERT INTO `base_city` VALUES ('6505', '哈密市', '65'); +INSERT INTO `base_city` VALUES ('6523', '昌吉回族自治州', '65'); +INSERT INTO `base_city` VALUES ('6527', '博尔塔拉蒙古自治州', '65'); +INSERT INTO `base_city` VALUES ('6528', '巴音郭楞蒙古自治州', '65'); +INSERT INTO `base_city` VALUES ('6529', '阿克苏地区', '65'); +INSERT INTO `base_city` VALUES ('6530', '克孜勒苏柯尔克孜自治州', '65'); +INSERT INTO `base_city` VALUES ('6531', '喀什地区', '65'); +INSERT INTO `base_city` VALUES ('6532', '和田地区', '65'); +INSERT INTO `base_city` VALUES ('6540', '伊犁哈萨克自治州', '65'); +INSERT INTO `base_city` VALUES ('6542', '塔城地区', '65'); +INSERT INTO `base_city` VALUES ('6543', '阿勒泰地区', '65'); +INSERT INTO `base_city` VALUES ('6590', '自治区直辖县级行政区划', '65'); + +-- ---------------------------- +-- Table structure for base_data_result_sql +-- ---------------------------- +DROP TABLE IF EXISTS `base_data_result_sql`; +CREATE TABLE `base_data_result_sql` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `database_id` bigint(20) NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `is_list` bit(1) NULL DEFAULT NULL, + `sql` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `fields` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '数据集SQL语句' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_data_result_sql +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_dict +-- ---------------------------- +DROP TABLE IF EXISTS `base_dict`; +CREATE TABLE `base_dict` ( + `id` bigint(20) NOT NULL, + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编码', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', + `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', + `group_tag` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '分类标签', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NULL DEFAULT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_dict +-- ---------------------------- +INSERT INTO `base_dict` VALUES (1422929378374828033, 'Sex', '性别', b'1', '基础属性', '性别', 0, '2021-08-04 22:36:15', 1399985191002447872, '2022-05-11 19:48:40', 0, 6); +INSERT INTO `base_dict` VALUES (1425744045414772737, 'MenuType', '菜单类型', b'1', '系统属性', '菜单类型', 0, '2021-08-12 17:00:44', 1399985191002447872, '2022-05-11 19:48:44', 0, 4); +INSERT INTO `base_dict` VALUES (1430063572491411456, 'loginType', '字典类型', b'1', '基础属性', '字典类型', 1399985191002447872, '2021-08-24 15:05:00', 1399985191002447872, '2021-08-24 15:05:00', 1, 2); +INSERT INTO `base_dict` VALUES (1435829999592759296, 'UserStatusCode', '用户状态码', b'1', '系统属性', '用户状态码', 1399985191002447872, '2021-09-09 12:58:43', 1399985191002447872, '2022-05-11 19:48:56', 0, 2); +INSERT INTO `base_dict` VALUES (1435838066191458304, 'LogBusinessType', '业务操作类型', b'1', '系统属性', '操作日志记录的业务操作类型', 1399985191002447872, '2021-09-09 13:30:46', 1399985191002447872, '2022-05-11 19:49:00', 0, 2); +INSERT INTO `base_dict` VALUES (1438078864509317120, 'MailSecurityCode', '邮箱安全方式编码', b'1', '消息服务', '邮箱安全方式编码', 1399985191002447872, '2021-09-15 17:54:54', 1399985191002447872, '2022-05-11 19:49:06', 0, 2); +INSERT INTO `base_dict` VALUES (1439961232651034624, 'MessageTemplateCode', '消息模板类型', b'1', '消息服务', '消息模板类型', 1399985191002447872, '2021-09-20 22:34:46', 1399985191002447872, '2022-05-11 19:48:34', 0, 1); +INSERT INTO `base_dict` VALUES (1452836604783845376, 'SocialType', '三方系统类型', b'1', '系统属性', '三方系统类型', 1399985191002447872, '2021-10-26 11:16:54', 1399985191002447872, '2022-05-11 19:48:28', 0, 3); +INSERT INTO `base_dict` VALUES (1452843488735621120, 'ParamType', '参数类型', b'1', '系统属性', '参数类型', 1399985191002447872, '2021-10-26 11:44:15', 1399985191002447872, '2022-05-11 19:48:21', 0, 2); +INSERT INTO `base_dict` VALUES (1496024933900169216, 'Political', '政治面貌', b'1', '基础数据', '政治面貌', 1399985191002447872, '2022-02-22 15:31:54', 1399985191002447872, '2022-05-11 19:48:04', 0, 1); +INSERT INTO `base_dict` VALUES (1556996322223968256, 'WeChatMediaType', '微信媒体类型', b'1', '微信', '微信媒体类型', 1399985191002447872, '2022-08-09 21:30:25', 1399985191002447872, '2022-08-09 21:30:26', 0, 0); +INSERT INTO `base_dict` VALUES (1561003021674987520, 'SiteMessageReceive', '消息接收类型', b'1', '站内信', '站内信接收类型', 1399985191002447872, '2022-08-20 22:51:37', 1399985191002447872, '2022-08-20 22:51:37', 0, 0); +INSERT INTO `base_dict` VALUES (1561003189111603200, 'SiteMessageState', '消息发布状态', b'1', '站内信', '站内信消息发布状态', 1399985191002447872, '2022-08-20 22:52:17', 1399985191002447872, '2022-08-20 22:52:17', 0, 0); +INSERT INTO `base_dict` VALUES (1589527951317389312, 'DataScopePerm', '数据权限类型', b'1', '系统属性', '数据权限类型', 1414143554414059520, '2022-11-07 15:59:30', 1399985191002447872, '2023-11-28 23:14:24', 0, 4); +INSERT INTO `base_dict` VALUES (1633393287952257024, 'DatabaseType', '数据库类型', b'1', '开发', '数据库类型', 1414143554414059520, '2023-03-08 17:04:41', 1414143554414059520, '2023-03-08 17:04:41', 0, 0); +INSERT INTO `base_dict` VALUES (1688742690398617600, 'SmsChannel', '短信渠道商', b'1', '消息服务', '短信渠道商', 1414143554414059520, '2023-08-08 10:43:27', 1414143554414059520, '2023-08-12 20:24:03', 0, 1); +INSERT INTO `base_dict` VALUES (1690338321769918464, 'GeneralTemplateUseType', '通用模板类型', b'1', '系统属性', '通用模板类型', 1414143554414059520, '2023-08-12 20:23:56', 1414143554414059520, '2023-08-12 20:24:22', 0, 1); +INSERT INTO `base_dict` VALUES (1690338545284378624, 'GeneralTemplateState', '通用模板状态', b'1', '系统属性', '通用模板状态', 1414143554414059520, '2023-08-12 20:24:49', 1414143554414059520, '2023-08-12 20:24:49', 0, 0); + +-- ---------------------------- +-- Table structure for base_dict_item +-- ---------------------------- +DROP TABLE IF EXISTS `base_dict_item`; +CREATE TABLE `base_dict_item` ( + `id` bigint(20) NOT NULL, + `dict_id` bigint(20) NOT NULL COMMENT '字典id', + `dict_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典code', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项code', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典项名称', + `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', + `sort_no` double(8, 2) NOT NULL COMMENT '排序', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_dictionary_id`(`dict_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典项' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_dict_item +-- ---------------------------- +INSERT INTO `base_dict_item` VALUES (1422931375807242241, 1422929378374828033, 'Sex', '1', '男', b'1', 0.00, '男性', 0, '2021-08-04 22:44:11', 0, '2021-08-04 22:44:11', 0, 2); +INSERT INTO `base_dict_item` VALUES (1425729455402401794, 1422929378374828033, 'Sex', '2', '女', b'1', 0.00, '女性', 0, '2021-08-12 16:02:46', 0, '2021-08-12 16:02:46', 0, 1); +INSERT INTO `base_dict_item` VALUES (1425744258544136194, 1425744045414772737, 'MenuType', '0', '顶级菜单', b'1', 0.00, '顶级菜单', 0, '2021-08-12 17:01:35', 0, '2021-08-12 17:01:35', 0, 0); +INSERT INTO `base_dict_item` VALUES (1425744436592340993, 1425744045414772737, 'MenuType', '1', '子菜单', b'1', 0.00, '子菜单', 0, '2021-08-12 17:02:17', 0, '2021-08-12 17:02:17', 0, 0); +INSERT INTO `base_dict_item` VALUES (1425744470582980610, 1425744045414772737, 'MenuType', '2', '按钮权限', b'1', 0.00, '按钮权限', 0, '2021-08-12 17:02:26', 0, '2021-08-12 17:02:26', 0, 0); +INSERT INTO `base_dict_item` VALUES (1430094707250413568, 1422929378374828033, 'Sex', '0', '未知', b'1', 0.00, '不确定性别', 1399985191002447872, '2021-08-24 17:08:43', 1399985191002447872, '2021-08-24 17:08:43', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435830086406463488, 1435829999592759296, 'UserStatusCode', 'normal', '正常', b'1', 0.00, 'NORMAL', 1399985191002447872, '2021-09-09 12:59:04', 1399985191002447872, '2023-11-25 15:32:04', 0, 1); +INSERT INTO `base_dict_item` VALUES (1435830141855162368, 1435829999592759296, 'UserStatusCode', 'lock', '锁定', b'1', 0.00, 'LOCK, 多次登录失败被锁定', 1399985191002447872, '2021-09-09 12:59:17', 1399985191002447872, '2023-11-25 15:32:14', 0, 2); +INSERT INTO `base_dict_item` VALUES (1435830260503633920, 1435829999592759296, 'UserStatusCode', 'ban', '封禁', b'1', 0.00, 'BAN', 1399985191002447872, '2021-09-09 12:59:45', 1399985191002447872, '2023-11-25 15:32:20', 0, 1); +INSERT INTO `base_dict_item` VALUES (1435838374749626368, 1435838066191458304, 'LogBusinessType', 'other', '其它', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:00', 1399985191002447872, '2021-09-09 13:32:00', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838414436130816, 1435838066191458304, 'LogBusinessType', 'insert', '新增', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:09', 1399985191002447872, '2021-09-09 13:32:09', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838467624099840, 1435838066191458304, 'LogBusinessType', 'update', '修改', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:22', 1399985191002447872, '2021-09-09 13:32:22', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838502755590144, 1435838066191458304, 'LogBusinessType', 'delete', '删除', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:30', 1399985191002447872, '2021-09-09 13:32:30', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838546934194176, 1435838066191458304, 'LogBusinessType', 'grant', '授权', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:41', 1399985191002447872, '2021-09-09 13:32:41', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838605537009664, 1435838066191458304, 'LogBusinessType', 'export', '导出', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:32:55', 1399985191002447872, '2021-09-09 13:32:55', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838705457913856, 1435838066191458304, 'LogBusinessType', 'import', '导入', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:19', 1399985191002447872, '2021-09-09 13:33:19', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838745861644288, 1435838066191458304, 'LogBusinessType', 'force', '强退', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:28', 1399985191002447872, '2021-09-09 13:33:28', 0, 0); +INSERT INTO `base_dict_item` VALUES (1435838786273763328, 1435838066191458304, 'LogBusinessType', 'clean', '清空数据', b'1', 0.00, '', 1399985191002447872, '2021-09-09 13:33:38', 1399985191002447872, '2021-09-09 13:33:38', 0, 0); +INSERT INTO `base_dict_item` VALUES (1438079113630003200, 1438078864509317120, 'MailSecurityCode', '1', '普通方式', b'1', 0.00, 'SECURITY_TYPE_PLAIN', 1399985191002447872, '2021-09-15 17:55:54', 1399985191002447872, '2021-09-15 17:55:54', 0, 0); +INSERT INTO `base_dict_item` VALUES (1438080323061755904, 1438078864509317120, 'MailSecurityCode', '2', 'TLS方式', b'1', 0.00, 'SECURITY_TYPE_TLS', 1399985191002447872, '2021-09-15 18:00:42', 1399985191002447872, '2021-09-15 18:00:42', 0, 0); +INSERT INTO `base_dict_item` VALUES (1438080372231581696, 1438078864509317120, 'MailSecurityCode', '3', 'SSL方式', b'1', 0.00, 'SECURITY_TYPE_SSL', 1399985191002447872, '2021-09-15 18:00:54', 1399985191002447872, '2021-09-15 18:00:54', 0, 0); +INSERT INTO `base_dict_item` VALUES (1439961603914047488, 1439961232651034624, 'MessageTemplateCode', '5', '微信', b'1', -10.00, 'WECHAT', 1399985191002447872, '2021-09-20 22:36:14', 1399985191002447872, '2021-09-20 22:36:14', 0, 1); +INSERT INTO `base_dict_item` VALUES (1439961704321490944, 1439961232651034624, 'MessageTemplateCode', '4', 'Email', b'1', 0.00, 'EMAIL', 1399985191002447872, '2021-09-20 22:36:38', 1399985191002447872, '2021-09-20 22:36:38', 0, 0); +INSERT INTO `base_dict_item` VALUES (1439962132744478720, 1439961232651034624, 'MessageTemplateCode', '3', '短信', b'1', 0.00, 'SMS', 1399985191002447872, '2021-09-20 22:38:20', 1399985191002447872, '2021-09-20 22:38:20', 0, 0); +INSERT INTO `base_dict_item` VALUES (1439962205578567680, 1439961232651034624, 'MessageTemplateCode', '2', '钉钉机器人', b'1', 0.00, 'DING_TALK_ROBOT', 1399985191002447872, '2021-09-20 22:38:38', 1399985191002447872, '2021-09-20 22:38:38', 0, 0); +INSERT INTO `base_dict_item` VALUES (1439962267511660544, 1439961232651034624, 'MessageTemplateCode', '1', '钉钉', b'1', 0.00, 'DING_TALK', 1399985191002447872, '2021-09-20 22:38:52', 1399985191002447872, '2021-09-20 22:38:52', 0, 0); +INSERT INTO `base_dict_item` VALUES (1452836696873984000, 1452836604783845376, 'SocialType', 'WeChat', '微信', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:17:16', 1399985191002447872, '2021-10-26 11:17:16', 0, 0); +INSERT INTO `base_dict_item` VALUES (1452837435482529792, 1452836604783845376, 'SocialType', 'QQ', 'QQ', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:20:12', 1399985191002447872, '2021-10-26 11:20:12', 0, 0); +INSERT INTO `base_dict_item` VALUES (1452837523030237184, 1452836604783845376, 'SocialType', 'DingTalk', '钉钉', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:20:33', 1399985191002447872, '2021-10-26 11:20:33', 0, 0); +INSERT INTO `base_dict_item` VALUES (1452844537911406592, 1452843488735621120, 'ParamType', '1', '系统参数', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:48:25', 1399985191002447872, '2021-10-26 11:48:25', 0, 0); +INSERT INTO `base_dict_item` VALUES (1452844565031776256, 1452843488735621120, 'ParamType', '2', '用户参数', b'1', 0.00, '', 1399985191002447872, '2021-10-26 11:48:32', 1399985191002447872, '2021-10-26 11:48:32', 0, 2); +INSERT INTO `base_dict_item` VALUES (1496026946344005632, 1496024933900169216, 'Political', '1', '中共党员', b'1', 1.00, '', 1399985191002447872, '2022-02-22 15:39:54', 1399985191002447872, '2022-02-22 15:39:54', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027004560945152, 1496024933900169216, 'Political', '2', '中共预备党员', b'1', 2.00, '', 1399985191002447872, '2022-02-22 15:40:07', 1399985191002447872, '2022-02-22 15:40:07', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027039264616448, 1496024933900169216, 'Political', '3', '共青团员', b'1', 3.00, '', 1399985191002447872, '2022-02-22 15:40:16', 1399985191002447872, '2022-02-22 15:40:16', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027077550223360, 1496024933900169216, 'Political', '4', '民革党员', b'1', 4.00, '', 1399985191002447872, '2022-02-22 15:40:25', 1399985191002447872, '2022-02-22 15:40:25', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027123461074944, 1496024933900169216, 'Political', '5', '民盟盟员', b'1', 5.00, '', 1399985191002447872, '2022-02-22 15:40:36', 1399985191002447872, '2022-02-22 15:40:36', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027197566038016, 1496024933900169216, 'Political', '6', '民建会员', b'1', 6.00, '', 1399985191002447872, '2022-02-22 15:40:53', 1399985191002447872, '2022-02-22 15:40:53', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027234803068928, 1496024933900169216, 'Political', '7', '民进会员', b'1', 7.00, '', 1399985191002447872, '2022-02-22 15:41:02', 1399985191002447872, '2022-02-22 15:41:02', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027272941875200, 1496024933900169216, 'Political', '8', '农工党党员', b'1', 8.00, '', 1399985191002447872, '2022-02-22 15:41:11', 1399985191002447872, '2022-02-22 15:41:11', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027306634719232, 1496024933900169216, 'Political', '9', '致公党党员', b'1', 9.00, '', 1399985191002447872, '2022-02-22 15:41:19', 1399985191002447872, '2022-02-22 15:41:19', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027369796743168, 1496024933900169216, 'Political', '10', '九三学社社员', b'1', 10.00, '', 1399985191002447872, '2022-02-22 15:41:34', 1399985191002447872, '2022-02-22 15:41:35', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027408141070336, 1496024933900169216, 'Political', '11', '台盟盟员', b'1', 11.00, '', 1399985191002447872, '2022-02-22 15:41:44', 1399985191002447872, '2022-02-22 15:41:44', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027456849522688, 1496024933900169216, 'Political', '12', '无党派人士', b'1', 12.00, '', 1399985191002447872, '2022-02-22 15:41:55', 1399985191002447872, '2022-02-22 15:41:55', 0, 0); +INSERT INTO `base_dict_item` VALUES (1496027516639326208, 1496024933900169216, 'Political', '13', '群众', b'1', 13.00, '', 1399985191002447872, '2022-02-22 15:42:09', 1399985191002447872, '2022-02-22 15:42:10', 0, 0); +INSERT INTO `base_dict_item` VALUES (1561003368762032128, 1561003021674987520, 'SiteMessageReceive', 'user', '指定用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:00', 1399985191002447872, '2022-08-20 22:53:00', 0, 0); +INSERT INTO `base_dict_item` VALUES (1561003399778910208, 1561003021674987520, 'SiteMessageReceive', 'all', '全部用户', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:07', 1399985191002447872, '2022-08-20 22:53:24', 0, 1); +INSERT INTO `base_dict_item` VALUES (1561003539772194816, 1561003189111603200, 'SiteMessageState', 'sent', '已发送', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:41', 1399985191002447872, '2022-08-20 22:53:41', 0, 0); +INSERT INTO `base_dict_item` VALUES (1561003575608328192, 1561003189111603200, 'SiteMessageState', 'cancel', '撤销', b'1', 0.00, '', 1399985191002447872, '2022-08-20 22:53:49', 1399985191002447872, '2022-08-20 22:53:49', 0, 0); +INSERT INTO `base_dict_item` VALUES (1561245469535080448, 1561003189111603200, 'SiteMessageState', 'draft', '草稿', b'1', 0.00, '', 1399985191002447872, '2022-08-21 14:55:01', 1399985191002447872, '2022-08-21 14:55:01', 0, 0); +INSERT INTO `base_dict_item` VALUES (1573665422392098816, 1439961232651034624, 'MessageTemplateCode', '0', '站内信', b'1', -11.00, 'SITE', 1399985191002447872, '2022-09-24 21:27:29', 1399985191002447872, '2022-09-24 21:27:39', 0, 1); +INSERT INTO `base_dict_item` VALUES (1589528254477488128, 1589527951317389312, 'DataScopePerm', 'self_dept_sub', '所在及下级部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:43', 1399985191002447872, '2023-11-28 23:16:02', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528283539820544, 1589527951317389312, 'DataScopePerm', 'self_dept', '所在部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:49', 1399985191002447872, '2023-11-28 23:15:52', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528315672383488, 1589527951317389312, 'DataScopePerm', 'all', '全部数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:00:57', 1399985191002447872, '2023-11-25 22:51:28', 0, 1); +INSERT INTO `base_dict_item` VALUES (1589528340267782144, 1589527951317389312, 'DataScopePerm', 'dept_and_user', '自定义部门和用户', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:03', 1399985191002447872, '2023-11-29 15:25:01', 0, 3); +INSERT INTO `base_dict_item` VALUES (1589528367228768256, 1589527951317389312, 'DataScopePerm', 'dept', '自定义部门', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:09', 1399985191002447872, '2023-11-29 15:24:47', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528393292173312, 1589527951317389312, 'DataScopePerm', 'user', '指定用户', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:16', 1399985191002447872, '2023-11-29 15:25:16', 0, 2); +INSERT INTO `base_dict_item` VALUES (1589528423956729856, 1589527951317389312, 'DataScopePerm', 'self', '自身数据', b'1', 0.00, '', 1414143554414059520, '2022-11-07 16:01:23', 1399985191002447872, '2023-11-25 22:50:41', 0, 1); +INSERT INTO `base_dict_item` VALUES (1633403429028536320, 1633393287952257024, 'DatabaseType', 'mysql', 'MySQL', b'1', 1.00, '', 1414143554414059520, '2023-03-08 17:44:59', 1414143554414059520, '2023-03-08 17:44:59', 0, 0); +INSERT INTO `base_dict_item` VALUES (1633403459470794752, 1633393287952257024, 'DatabaseType', 'oracle', 'Oracle', b'1', 2.00, '', 1414143554414059520, '2023-03-08 17:45:07', 1414143554414059520, '2023-03-08 17:45:07', 0, 0); +INSERT INTO `base_dict_item` VALUES (1633403498695925760, 1633393287952257024, 'DatabaseType', 'mssql', 'SQLServer', b'1', 3.00, '', 1414143554414059520, '2023-03-08 17:45:16', 1414143554414059520, '2023-03-08 17:45:16', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742732891111424, 1688742690398617600, 'SmsChannel', 'alibaba', '阿里云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:38', 1414143554414059520, '2023-08-08 10:43:38', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742768479780864, 1688742690398617600, 'SmsChannel', 'huawei', '华为云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:46', 1414143554414059520, '2023-08-08 10:43:46', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742808027873280, 1688742690398617600, 'SmsChannel', 'yunpian', '云片', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:43:55', 1414143554414059520, '2023-08-08 10:43:56', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742840626003968, 1688742690398617600, 'SmsChannel', 'tencent', '腾讯云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:03', 1414143554414059520, '2023-08-08 10:44:03', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742872506908672, 1688742690398617600, 'SmsChannel', 'uni_sms', '合一短信', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:11', 1414143554414059520, '2023-08-08 10:44:11', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742905553829888, 1688742690398617600, 'SmsChannel', 'jd_cloud', '京东云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:19', 1414143554414059520, '2023-08-08 10:44:19', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742954715267072, 1688742690398617600, 'SmsChannel', 'cloopen', '容联云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:30', 1414143554414059520, '2023-08-08 10:44:30', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688742990446542848, 1688742690398617600, 'SmsChannel', 'emay', '亿美软通', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:39', 1414143554414059520, '2023-08-08 10:44:39', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688743032297308160, 1688742690398617600, 'SmsChannel', 'ctyun', '天翼云', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:49', 1414143554414059520, '2023-08-08 10:44:49', 0, 0); +INSERT INTO `base_dict_item` VALUES (1688743065205817344, 1688742690398617600, 'SmsChannel', 'netease', '网易云信', b'1', 0.00, '', 1414143554414059520, '2023-08-08 10:44:57', 1414143554414059520, '2023-08-08 10:44:57', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338619024437248, 1690338321769918464, 'GeneralTemplateUseType', 'import', '导入', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:06', 1414143554414059520, '2023-08-12 20:25:06', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338653442895872, 1690338321769918464, 'GeneralTemplateUseType', 'export', '导出', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:15', 1414143554414059520, '2023-08-12 20:25:15', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338707129987072, 1690338545284378624, 'GeneralTemplateState', 'enable', '启用', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:27', 1414143554414059520, '2023-08-12 20:25:27', 0, 0); +INSERT INTO `base_dict_item` VALUES (1690338748032839680, 1690338545284378624, 'GeneralTemplateState', 'disable', '停用', b'1', 0.00, '', 1414143554414059520, '2023-08-12 20:25:37', 1414143554414059520, '2023-08-12 20:25:37', 0, 0); +INSERT INTO `base_dict_item` VALUES (1729519341702086656, 1589527951317389312, 'DataScopePerm', 'dept_sub', '指定部门及下级部门', b'1', 0.00, '', 1399985191002447872, '2023-11-28 23:15:19', 1399985191002447872, '2023-11-28 23:15:19', 0, 0); + +-- ---------------------------- +-- Table structure for base_dynamic_data_source +-- ---------------------------- +DROP TABLE IF EXISTS `base_dynamic_data_source`; +CREATE TABLE `base_dynamic_data_source` ( + `id` bigint(20) NOT NULL, + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源编码', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据源名称', + `database_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库类型', + `auto_load` bit(1) NULL DEFAULT NULL COMMENT '是否启动自动加载', + `db_driver` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '驱动类', + `db_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库地址', + `db_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '数据库名称', + `db_username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', + `db_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态数据源管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_dynamic_data_source +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_dynamic_form +-- ---------------------------- +DROP TABLE IF EXISTS `base_dynamic_form`; +CREATE TABLE `base_dynamic_form` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单名称', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单键名', + `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '表单内容', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '动态表单' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_dynamic_form +-- ---------------------------- +INSERT INTO `base_dynamic_form` VALUES (1552656018381422592, '测试表单', 'test', '{\"list\":[{\"type\":\"input\",\"label\":\"输入框\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"aa\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"文本框\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"bb\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}],\"config\":{\"layout\":\"horizontal\",\"labelCol\":{\"xs\":4,\"sm\":4,\"md\":4,\"lg\":4,\"xl\":4,\"xxl\":4},\"labelWidth\":100,\"labelLayout\":\"flex\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1399985191002447872, '2022-07-29 09:55:22', 0, 7); +INSERT INTO `base_dynamic_form` VALUES (1552656018381422593, '测试表单1', 'test1', '{\"list\":[{\"type\":\"input\",\"label\":\"申请人\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":true,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"apply_by\",\"key\":\"input_1659059676533\",\"help\":\"测试\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"input\",\"label\":\"请假天数\",\"options\":{\"type\":\"text\",\"width\":\"100%\",\"defaultValue\":\"\",\"placeholder\":\"请输入\",\"clearable\":false,\"maxLength\":null,\"addonBefore\":\"\",\"addonAfter\":\"\",\"hidden\":false,\"disabled\":false},\"model\":\"leave_days\",\"key\":\"input_1662106166142\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"textarea\",\"label\":\"备注\",\"options\":{\"width\":\"100%\",\"minRows\":4,\"maxRows\":6,\"maxLength\":null,\"defaultValue\":\"\",\"clearable\":true,\"hidden\":false,\"disabled\":false,\"placeholder\":\"请输入\"},\"model\":\"remark\",\"key\":\"textarea_1659020414125\",\"help\":\"\",\"rules\":[{\"required\":true,\"message\":\"必填项\"}]},{\"type\":\"switch\",\"label\":\"开关\",\"options\":{\"defaultValue\":false,\"hidden\":false,\"disabled\":false},\"model\":\"switch_1662108221389\",\"key\":\"switch_1662108221389\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"slider\",\"label\":\"滑动输入条\",\"options\":{\"width\":\"100%\",\"defaultValue\":34,\"disabled\":false,\"hidden\":false,\"min\":0,\"max\":100,\"step\":1,\"showInput\":false},\"model\":\"cc\",\"key\":\"slider_1659020433092\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]},{\"type\":\"table\",\"label\":\"表格布局\",\"trs\":[{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]},{\"tds\":[{\"colspan\":1,\"rowspan\":1,\"list\":[{\"type\":\"editor\",\"label\":\"富文本\",\"icon\":\"icon-LC_icon_edit_line_1\",\"list\":[],\"options\":{\"height\":300,\"placeholder\":\"请输入\",\"defaultValue\":\"\",\"chinesization\":true,\"hidden\":false,\"disabled\":false,\"showLabel\":false,\"width\":\"100%\"},\"model\":\"editor_1662106288134\",\"key\":\"editor_1662106288134\",\"help\":\"\",\"rules\":[{\"required\":false,\"message\":\"必填项\"}]}]},{\"colspan\":1,\"rowspan\":1,\"list\":[]}]}],\"options\":{\"width\":\"100%\",\"bordered\":true,\"bright\":false,\"small\":true,\"customStyle\":\"\"},\"key\":\"table_1662106283652\"}],\"config\":{\"layout\":\"vertical\",\"labelCol\":{\"xs\":6,\"sm\":6,\"md\":6,\"lg\":6,\"xl\":6,\"xxl\":6},\"labelWidth\":100,\"labelLayout\":\"Grid\",\"wrapperCol\":{\"xs\":18,\"sm\":18,\"md\":18,\"lg\":18,\"xl\":18,\"xxl\":18},\"hideRequiredMark\":false,\"customStyle\":\"\"}}', '测试动态表单', 1399985191002447872, '2022-07-28 22:03:36', 1414143554414059520, '2022-09-02 16:44:01', 0, 12); + +-- ---------------------------- +-- Table structure for base_general_template +-- ---------------------------- +DROP TABLE IF EXISTS `base_general_template`; +CREATE TABLE `base_general_template` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板名称', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板代码', + `use_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '使用类型(导入/导出)', + `file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板类型', + `file_suffix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '模板后缀名', + `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '状态', + `file_id` bigint(20) NULL DEFAULT NULL COMMENT '文件ID', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '通用模板管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_general_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_key_value +-- ---------------------------- +DROP TABLE IF EXISTS `base_key_value`; +CREATE TABLE `base_key_value` ( + `id` bigint(20) NOT NULL, + `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', + `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'kv存储' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_key_value +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_param +-- ---------------------------- +DROP TABLE IF EXISTS `base_param`; +CREATE TABLE `base_param` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数名称', + `param_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数键名', + `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数值', + `type` int(4) NULL DEFAULT NULL COMMENT '参数类型', + `enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '启用状态', + `internal` bit(1) NOT NULL COMMENT '内置参数', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统参数配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_param +-- ---------------------------- +INSERT INTO `base_param` VALUES (1452842684284891136, '测试', 'test.v1', '123', 1, b'1', b'0', NULL, 1399985191002447872, '2021-10-26 11:41:03', 1399985191002447872, '2021-10-26 11:41:03', 0, 0); +INSERT INTO `base_param` VALUES (1520668030248361984, '文件服务器地址', 'FileServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-01 15:34:46', 1399985191002447872, '2022-05-19 12:53:21', 0, 5); +INSERT INTO `base_param` VALUES (1529281530059161600, 'websocket服务器地址', 'WebsocketServerUrl', 'ws://127.0.0.1:9999', 1, b'1', b'1', '', 1399985191002447872, '2022-05-25 10:01:44', 1399985191002447872, '2023-10-21 22:31:38', 0, 2); +INSERT INTO `base_param` VALUES (1545765299880448000, '服务器地址', 'ServerUrl', 'http://127.0.0.1:9999', 1, b'1', b'1', '优先级高于配置文件内进行的配置', 1399985191002447872, '2022-07-09 21:42:21', 1414143554414059520, '2023-08-05 16:40:05', 0, 1); + +-- ---------------------------- +-- Table structure for base_province +-- ---------------------------- +DROP TABLE IF EXISTS `base_province`; +CREATE TABLE `base_province` ( + `code` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省份编码', + `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '省份名称', + PRIMARY KEY (`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '省份表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_province +-- ---------------------------- +INSERT INTO `base_province` VALUES ('11', '北京市'); +INSERT INTO `base_province` VALUES ('12', '天津市'); +INSERT INTO `base_province` VALUES ('13', '河北省'); +INSERT INTO `base_province` VALUES ('14', '山西省'); +INSERT INTO `base_province` VALUES ('15', '内蒙古自治区'); +INSERT INTO `base_province` VALUES ('21', '辽宁省'); +INSERT INTO `base_province` VALUES ('22', '吉林省'); +INSERT INTO `base_province` VALUES ('23', '黑龙江省'); +INSERT INTO `base_province` VALUES ('31', '上海市'); +INSERT INTO `base_province` VALUES ('32', '江苏省'); +INSERT INTO `base_province` VALUES ('33', '浙江省'); +INSERT INTO `base_province` VALUES ('34', '安徽省'); +INSERT INTO `base_province` VALUES ('35', '福建省'); +INSERT INTO `base_province` VALUES ('36', '江西省'); +INSERT INTO `base_province` VALUES ('37', '山东省'); +INSERT INTO `base_province` VALUES ('41', '河南省'); +INSERT INTO `base_province` VALUES ('42', '湖北省'); +INSERT INTO `base_province` VALUES ('43', '湖南省'); +INSERT INTO `base_province` VALUES ('44', '广东省'); +INSERT INTO `base_province` VALUES ('45', '广西壮族自治区'); +INSERT INTO `base_province` VALUES ('46', '海南省'); +INSERT INTO `base_province` VALUES ('50', '重庆市'); +INSERT INTO `base_province` VALUES ('51', '四川省'); +INSERT INTO `base_province` VALUES ('52', '贵州省'); +INSERT INTO `base_province` VALUES ('53', '云南省'); +INSERT INTO `base_province` VALUES ('54', '西藏自治区'); +INSERT INTO `base_province` VALUES ('61', '陕西省'); +INSERT INTO `base_province` VALUES ('62', '甘肃省'); +INSERT INTO `base_province` VALUES ('63', '青海省'); +INSERT INTO `base_province` VALUES ('64', '宁夏回族自治区'); +INSERT INTO `base_province` VALUES ('65', '新疆维吾尔自治区'); + +-- ---------------------------- +-- Table structure for base_query_sql +-- ---------------------------- +DROP TABLE IF EXISTS `base_query_sql`; +CREATE TABLE `base_query_sql` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `database_id` bigint(20) NULL DEFAULT NULL COMMENT '数据源ID', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称', + `is_list` bit(1) NULL DEFAULT NULL COMMENT '是否集合', + `sql` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'sql语句', + `params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'SQL查询参数', + `fields` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'SQL查询结果字段', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'SQL查询语句' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_query_sql +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_street +-- ---------------------------- +DROP TABLE IF EXISTS `base_street`; +CREATE TABLE `base_street` ( + `code` char(9) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码', + `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '街道名称', + `area_code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '县区编码', + PRIMARY KEY (`code`) USING BTREE, + INDEX `inx_area_code`(`area_code`) USING BTREE COMMENT '县区' +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '街道表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_street +-- ---------------------------- + +-- ---------------------------- +-- Table structure for base_village +-- ---------------------------- +DROP TABLE IF EXISTS `base_village`; +CREATE TABLE `base_village` ( + `code` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '编码', + `name` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名称', + `street_code` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '社区/乡镇编码', + PRIMARY KEY (`code`) USING BTREE, + INDEX `inx_street_code`(`street_code`) USING BTREE COMMENT '所属街道索引' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '村庄/社区' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of base_village +-- ---------------------------- + +-- ---------------------------- +-- Table structure for common_sequence_range +-- ---------------------------- +DROP TABLE IF EXISTS `common_sequence_range`; +CREATE TABLE `common_sequence_range` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `range_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '区间key', + `range_value` bigint(20) NOT NULL COMMENT '区间开始值', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '序列生成器队列区间管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of common_sequence_range +-- ---------------------------- +INSERT INTO `common_sequence_range` VALUES (1470679520373862400, 'Sequence:cs', 2006, 0, '2021-12-14 16:58:16', 0, '2021-12-14 16:58:16', 6, 0); +INSERT INTO `common_sequence_range` VALUES (1470679955230908416, 'cs', 2020, 0, '2021-12-14 17:00:00', 0, '2021-12-14 17:00:00', 13, 0); + +-- ---------------------------- +-- Table structure for demo_data_encrypt +-- ---------------------------- +DROP TABLE IF EXISTS `demo_data_encrypt`; +CREATE TABLE `demo_data_encrypt` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据加密解密演示' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of demo_data_encrypt +-- ---------------------------- +INSERT INTO `demo_data_encrypt` VALUES (1506922411881103360, '测试加密效果', 'eI2RIrRLG+QUna3jMK+kejyJTTKdPFhaYWP4EhktJ2lkGTEsIxZesetNTzcqUA934ZN/OUdw4aj4t5Q+u1sH7A==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); +INSERT INTO `demo_data_encrypt` VALUES (1506943412354408448, '测试下', 'Dgv5OSNiXuknceoZzeOUOQ==', 1399985191002447872, '2022-03-24 17:14:35', 1399985191002447872, '2022-03-24 17:23:41', 1, 0); + +-- ---------------------------- +-- Table structure for demo_data_perm +-- ---------------------------- +DROP TABLE IF EXISTS `demo_data_perm`; +CREATE TABLE `demo_data_perm` ( + `id` bigint(20) NOT NULL COMMENT '角色ID', + `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', + `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者名称', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据权限演示' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of demo_data_perm +-- ---------------------------- +INSERT INTO `demo_data_perm` VALUES (1495969849707220992, '33', 'xxm', '444', 1399985191002447872, '2022-02-22 11:53:01', 1399985191002447872, '2022-02-22 11:53:01', 0, 0); +INSERT INTO `demo_data_perm` VALUES (1506921683460521984, '测试', '小小明', NULL, 1399985191002447872, '2022-03-24 17:11:41', 1399985191002447872, '2022-03-24 17:11:41', 0, 0); +INSERT INTO `demo_data_perm` VALUES (1531547191561072640, '测试', '测试', '123', 1435967884114194432, '2022-05-31 16:04:40', 1435967884114194432, '2022-05-31 16:04:40', 0, 0); + +-- ---------------------------- +-- Table structure for demo_data_sensitive +-- ---------------------------- +DROP TABLE IF EXISTS `demo_data_sensitive`; +CREATE TABLE `demo_data_sensitive` ( + `id` bigint(20) NOT NULL COMMENT '角色ID', + `chinese_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '中文名字', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', + `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号', + `mobile_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', + `car_license` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '车牌号', + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮件', + `other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其他', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据脱敏演示' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of demo_data_sensitive +-- ---------------------------- +INSERT INTO `demo_data_sensitive` VALUES (1506942377435037696, '刘向东', '123456', '372921199302021125', '13324591123', '鲁A8S8866', 'bootx123@outlook.com', '测试测试测试测试测试测试测试问题', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:36:09', 2, 0); +INSERT INTO `demo_data_sensitive` VALUES (1506943326094352384, '成是非', '99885511', '101278112512107721', '18855446622', '汉S123456', 'chengshifei@foxmail.com', '这个就是就是就是就是就是就是这样的', 1399985191002447872, '2022-03-24 18:33:55', 1399985191002447872, '2022-03-24 18:35:00', 1, 0); + +-- ---------------------------- +-- Table structure for demo_super_query +-- ---------------------------- +DROP TABLE IF EXISTS `demo_super_query`; +CREATE TABLE `demo_super_query` ( + `id` bigint(20) NOT NULL COMMENT '角色ID', + `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', + `age` int(5) NULL DEFAULT NULL COMMENT '年龄', + `vip` bit(1) NULL DEFAULT NULL COMMENT '是否vip', + `birthday` date NULL DEFAULT NULL COMMENT '生日', + `work_time` time NULL DEFAULT NULL COMMENT '上班时间', + `registration_time` datetime NULL DEFAULT NULL COMMENT '注册时间', + `political` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '政治面貌', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '超级查询演示' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of demo_super_query +-- ---------------------------- +INSERT INTO `demo_super_query` VALUES (1496046463434567680, '小小明', 18, b'1', '1998-01-23', '08:30:00', '2022-02-22 16:57:27', '13', '这是备注', 1399985191002447872, '2022-02-22 16:57:27', 1399985191002447872, '2022-02-22 17:03:34', 1, 0); +INSERT INTO `demo_super_query` VALUES (1496372341213433856, '关羽', 52, b'1', '2000-02-23', '14:31:36', '2022-02-23 14:32:22', '1', '', 1399985191002447872, '2022-02-23 14:32:22', 1399985191002447872, '2022-02-23 14:32:22', 0, 0); +INSERT INTO `demo_super_query` VALUES (1496372489909899264, '张飞', 54, b'0', '1996-02-11', '08:00:00', '2022-02-23 14:32:58', '7', '备注', 1399985191002447872, '2022-02-23 14:32:58', 1399985191002447872, '2022-02-23 14:32:58', 0, 0); +INSERT INTO `demo_super_query` VALUES (1496372766427779072, '梁冀', 38, b'1', '1958-02-08', '08:30:00', '2022-02-23 14:34:03', '1', '', 1399985191002447872, '2022-02-23 14:34:03', 1399985191002447872, '2022-02-23 14:34:03', 0, 0); +INSERT INTO `demo_super_query` VALUES (1496373512871284736, '刘备', 108, b'0', '1993-11-12', '09:30:10', '2022-02-23 14:37:01', '2', '刘羽禅的粑粑', 1399985191002447872, '2022-02-23 14:37:01', 1399985191002447872, '2022-02-23 14:37:01', 0, 0); + +-- ---------------------------- +-- Table structure for iam_client +-- ---------------------------- +DROP TABLE IF EXISTS `iam_client`; +CREATE TABLE `iam_client` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `internal` bit(1) NOT NULL COMMENT '是否系统内置', + `enable` bit(1) NOT NULL COMMENT '是否可用', + `default_endow` bit(1) NULL DEFAULT NULL COMMENT '新注册的用户是否默认赋予该终端', + `login_type_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联登录方式\r\n', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '认证终端' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_client +-- ---------------------------- +INSERT INTO `iam_client` VALUES (1430430071299207168, 'admin', 'pc管理端', b'1', b'1', b'1', '1430430071299207168,1435138582839009280,1430478946919653376,1542091599907115008,1542804450312122368,1543126042909016064', 'pc浏览器', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2023-10-19 19:58:31', 5, b'0'); +INSERT INTO `iam_client` VALUES (1430430071299207169, 'h5', 'h5端', b'1', b'1', b'1', '1430430071299207168,1435138582839009280', '手机wap', 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2023-10-19 19:58:27', 2, b'0'); +INSERT INTO `iam_client` VALUES (1580487061605175296, 'adminv3', 'pc管理端(vue3版)', b'0', b'1', b'1', '1430430071299207168,1430478946919653376,1435138582839009280,1542091599907115008,1542804450312122368,1543126042909016064', 'vue3版本', 1399985191002447872, '2022-10-13 17:14:14', 1399985191002447872, '2023-10-19 19:58:21', 3, b'0'); +INSERT INTO `iam_client` VALUES (1626840094767714304, 'GoView', '可视化平台', b'0', b'1', b'1', '1430430071299207168', '', 1414143554414059520, '2023-02-18 15:04:38', 1399985191002447872, '2023-10-19 19:58:34', 1, b'0'); + +-- ---------------------------- +-- Table structure for iam_data_role +-- ---------------------------- +DROP TABLE IF EXISTS `iam_data_role`; +CREATE TABLE `iam_data_role` ( + `id` bigint(20) NOT NULL COMMENT '角色ID', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', + `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', + `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据范围权限' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_data_role +-- ---------------------------- +INSERT INTO `iam_data_role` VALUES (1474706893178871808, 'self', '自身数据', 'self', '只能查看自身范围的数据', 1399985191002447872, '2021-12-25 19:41:37', 1399985191002447872, '2021-12-25 19:41:37', 0, 0); +INSERT INTO `iam_data_role` VALUES (1474717084985270272, 'user', '用户(测试)', 'user', '用户数据权限', 1399985191002447872, '2021-12-25 20:22:07', 1399985191002447872, '2023-11-29 10:34:24', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717160671485952, 'dept', '部门(测试)', 'dept', '', 1399985191002447872, '2021-12-25 20:22:25', 1399985191002447872, '2023-11-29 10:34:04', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717276908232704, 'userAndDept', '用户和部门(测试)', 'dept_and_user', '', 1399985191002447872, '2021-12-25 20:22:52', 1399985191002447872, '2023-11-29 10:34:13', 1, 0); +INSERT INTO `iam_data_role` VALUES (1474717344562356224, 'all', '全部数据', 'all', '', 1399985191002447872, '2021-12-25 20:23:09', 1399985191002447872, '2023-11-29 10:28:40', 1, 0); +INSERT INTO `iam_data_role` VALUES (1477990268903804928, 'self_dept', '所在部门', 'self_dept', '', 1399985191002447872, '2022-01-03 21:08:34', 1399985191002447872, '2023-11-29 10:33:38', 5, 0); +INSERT INTO `iam_data_role` VALUES (1477990439800721408, 'self_dept_and_sub', '当前加下级部门', 'self_dept_sub', '', 1399985191002447872, '2022-01-03 21:09:15', 1399985191002447872, '2023-11-29 13:55:12', 9, 0); + +-- ---------------------------- +-- Table structure for iam_data_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS `iam_data_role_dept`; +CREATE TABLE `iam_data_role_dept` ( + `id` bigint(20) NOT NULL, + `role_id` bigint(20) NOT NULL COMMENT '数据角色id', + `dept_id` bigint(20) NOT NULL COMMENT '部门id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围部门关联配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_data_role_dept +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_data_role_user +-- ---------------------------- +DROP TABLE IF EXISTS `iam_data_role_user`; +CREATE TABLE `iam_data_role_user` ( + `id` bigint(20) NOT NULL, + `role_id` bigint(20) NOT NULL COMMENT '数据角色id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据范围用户关联配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_data_role_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_dept +-- ---------------------------- +DROP TABLE IF EXISTS `iam_dept`; +CREATE TABLE `iam_dept` ( + `id` bigint(20) NOT NULL COMMENT 'ID', + `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父机构ID', + `dept_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构/部门名称', + `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', + `org_category` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '机构类别 1公司 2部门 3岗位', + `org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构编码', + `mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', + `fax` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '传真', + `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', + `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门组织机构表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_dept +-- ---------------------------- +INSERT INTO `iam_dept` VALUES (1259382878857957377, NULL, 'Bootx Platform总公司', 0, '1', '1', '', NULL, '济南市高新区齐鲁软件园', NULL, -1, '2020-05-10 15:20:51', -1, '2020-05-10 17:52:15', 4, 0); +INSERT INTO `iam_dept` VALUES (1477976804995026944, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:15:04', 1399985191002447872, '2022-01-03 20:15:05', 0, 1); +INSERT INTO `iam_dept` VALUES (1477977184768282624, NULL, 'Bootx Cloud公司', 0, '1', '1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:16:35', 1399985191002447872, '2022-01-03 20:16:35', 0, 1); +INSERT INTO `iam_dept` VALUES (1477977301365739520, NULL, 'Bootx Cloud总公司', 0, '1', '2', '', NULL, '济南市高新区汉峪金谷', '', 1399985191002447872, '2022-01-03 20:17:03', 1399985191002447872, '2022-01-03 20:17:03', 1, 0); +INSERT INTO `iam_dept` VALUES (1477977592291053568, 1259382878857957377, 'bp济南分公司', 0, '1', '1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:12', 1399985191002447872, '2022-01-03 20:18:12', 1, 0); +INSERT INTO `iam_dept` VALUES (1477977690928500736, 1259382878857957377, '历城分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:18:36', 1399985191002447872, '2022-01-03 20:18:36', 0, 1); +INSERT INTO `iam_dept` VALUES (1477977827897692160, 1259382878857957377, 'bp潍坊分公司', 0, '1', '1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:08', 1399985191002447872, '2022-01-03 20:19:08', 0, 0); +INSERT INTO `iam_dept` VALUES (1477977880947249152, 1477977301365739520, 'bc菏泽分公司', 0, '1', '2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:21', 1399985191002447872, '2022-01-03 20:19:21', 0, 0); +INSERT INTO `iam_dept` VALUES (1477977930175795200, 1477977301365739520, 'bc日照分公司', 0, '1', '2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:19:33', 1399985191002447872, '2022-01-03 20:19:33', 0, 0); +INSERT INTO `iam_dept` VALUES (1477978464559484928, 1477977592291053568, '历城办事部', 0, '2', '1_1_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:40', 1399985191002447872, '2022-01-03 20:21:40', 1, 0); +INSERT INTO `iam_dept` VALUES (1477978512177418240, 1477977592291053568, '历下办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:21:51', 1399985191002447872, '2022-01-03 20:21:52', 0, 0); +INSERT INTO `iam_dept` VALUES (1477978610865197056, 1477977592291053568, '高新办事部', 0, '2', '1_1_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:22:15', 1399985191002447872, '2022-01-03 20:22:15', 0, 0); +INSERT INTO `iam_dept` VALUES (1477978810526650368, 1477977827897692160, '奎文办事部', 0, '2', '1_2_1', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:03', 1399985191002447872, '2022-01-03 20:23:03', 0, 0); +INSERT INTO `iam_dept` VALUES (1477978883247493120, 1477977827897692160, '潍城办事部', 0, '2', '1_2_2', '', NULL, '', '', 1399985191002447872, '2022-01-03 20:23:20', 1399985191002447872, '2022-01-03 20:23:20', 0, 0); + +-- ---------------------------- +-- Table structure for iam_login_security_config +-- ---------------------------- +DROP TABLE IF EXISTS `iam_login_security_config`; +CREATE TABLE `iam_login_security_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `client_id` bigint(20) NULL DEFAULT NULL COMMENT '关联终端ID', + `require_login_change_pwd` bit(1) NULL DEFAULT NULL COMMENT '修改密码是否需要重新登录', + `captcha_enable` bit(1) NULL DEFAULT NULL COMMENT '默认启用验证码', + `max_captcha_error_count` int(11) NULL DEFAULT NULL COMMENT '出现验证码的错误次数', + `allow_multi_login` bit(1) NULL DEFAULT NULL COMMENT '同端是否允许同时登录', + `allow_multi_terminal_login` bit(1) NULL DEFAULT NULL COMMENT '多终端是否允许同时登录', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '登录安全策略' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_login_security_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_login_type +-- ---------------------------- +DROP TABLE IF EXISTS `iam_login_type`; +CREATE TABLE `iam_login_type` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `code` varchar(21) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', + `internal` bit(1) NOT NULL COMMENT '是否系统内置', + `timeout` bigint(11) NULL DEFAULT NULL COMMENT '在线时长(秒)', + `captcha_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '验证码类型', + `captcha` bit(1) NOT NULL COMMENT '启用验证码', + `enable` bit(1) NOT NULL COMMENT '是否可用', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录方式' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_login_type +-- ---------------------------- +INSERT INTO `iam_login_type` VALUES (1430430071299207168, 'password', '账号密码登陆', 'password', b'1', 3600, '-1', b'0', b'1', NULL, 1399985191002447872, '2021-08-25 15:21:20', 1399985191002447872, '2022-11-03 22:24:53', 20, b'0'); +INSERT INTO `iam_login_type` VALUES (1430478946919653376, 'miniApp', '微信小程序', 'openId', b'0', 99999, '0', b'0', b'1', NULL, 1399985191002447872, '2021-08-25 18:35:33', 1399985191002447872, '2022-07-16 12:32:26', 3, b'0'); +INSERT INTO `iam_login_type` VALUES (1435138582839009280, 'phone', '手机短信登录', 'openId', b'0', 3600, '0', b'0', b'1', NULL, 1399985191002447872, '2021-09-07 15:11:16', 1399985191002447872, '2022-07-16 12:32:19', 5, b'0'); +INSERT INTO `iam_login_type` VALUES (1542091599907115008, 'dingTalk', '钉钉', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-06-29 18:24:23', 1399985191002447872, '2022-07-02 14:55:01', 5, b'0'); +INSERT INTO `iam_login_type` VALUES (1542804450312122368, 'weCom', '企业微信', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-07-01 17:37:00', 1399985191002447872, '2022-07-01 17:37:00', 0, b'0'); +INSERT INTO `iam_login_type` VALUES (1543126042909016064, 'weChat', '微信登录', 'openId', b'0', 5, '-1', b'0', b'1', '', 1399985191002447872, '2022-07-02 14:54:53', 0, '2022-10-12 22:15:05', 2, b'0'); +INSERT INTO `iam_login_type` VALUES (1626845524617203712, 'passwordGoView', '可视化平台登录', 'password', b'0', 3600, '-1', b'0', b'1', '', 1414143554414059520, '2023-02-18 15:26:13', 1414143554414059520, '2023-02-18 15:26:13', 0, b'0'); + +-- ---------------------------- +-- Table structure for iam_password_change_history +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_change_history`; +CREATE TABLE `iam_password_change_history` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户Id', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码更改历史' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_change_history +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_password_login_fail_record +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_login_fail_record`; +CREATE TABLE `iam_password_login_fail_record` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', + `fail_count` int(11) NULL DEFAULT NULL COMMENT '登录失败次数', + `fail_time` datetime NULL DEFAULT NULL COMMENT '登录失败时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码登录失败记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_login_fail_record +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_password_security_config +-- ---------------------------- +DROP TABLE IF EXISTS `iam_password_security_config`; +CREATE TABLE `iam_password_security_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `max_pwd_error_count` int(11) NULL DEFAULT NULL COMMENT '最大密码错误数', + `error_lock_time` int(11) NULL DEFAULT NULL COMMENT '密码错误锁定时间(分钟)', + `require_change_pwd` bit(1) NULL DEFAULT NULL COMMENT '强制修改初始密码', + `update_frequency` int(11) NULL DEFAULT NULL COMMENT '更新频率', + `expire_remind` int(11) NULL DEFAULT NULL COMMENT '到期提醒(天数)', + `same_as_login_name` bit(1) NULL DEFAULT NULL COMMENT '与登录名相同', + `recent_password` int(11) NULL DEFAULT NULL COMMENT '不能与近期多少次密码相同', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '密码安全策略' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_password_security_config +-- ---------------------------- +INSERT INTO `iam_password_security_config` VALUES (1714844168393515008, 5, 10, b'1', 90, 14, b'0', 5, 1399985191002447872, '2023-10-19 11:21:25', 1399985191002447872, '2023-10-19 11:21:25', 0, b'0'); + +-- ---------------------------- +-- Table structure for iam_perm_menu +-- ---------------------------- +DROP TABLE IF EXISTS `iam_perm_menu`; +CREATE TABLE `iam_perm_menu` ( + `id` bigint(20) NOT NULL, + `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '终端code', + `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父id', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由名称', + `perm_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单权限编码', + `effect` bit(1) NULL DEFAULT NULL COMMENT '是否有效', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', + `hidden` bit(1) NOT NULL COMMENT '是否隐藏', + `hide_children_in_menu` bit(1) NOT NULL COMMENT '是否隐藏子菜单', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件', + `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件名字', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路径', + `redirect` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单跳转地址(重定向)', + `sort_no` double NOT NULL COMMENT '菜单排序', + `menu_type` int(5) NOT NULL COMMENT '类型(0:一级菜单;1:子菜单 ;2:按钮权限)', + `leaf` bit(1) NULL DEFAULT NULL COMMENT '是否叶子节点', + `keep_alive` bit(1) NULL DEFAULT NULL COMMENT '是否缓存页面', + `target_outside` bit(1) NULL DEFAULT NULL COMMENT '是否外部打开方式', + `hidden_header_content` bit(1) NULL DEFAULT NULL COMMENT '隐藏的标题内容', + `admin` bit(1) NOT NULL COMMENT '系统菜单', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_菜单' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_perm_menu +-- ---------------------------- +INSERT INTO `iam_perm_menu` VALUES (1580740450633101312, 'adminv3', NULL, '系统管理', 'System', NULL, b'0', 'ant-design:setting-outlined', b'0', b'0', 'Layout', NULL, '/system', '/system1/client', -99999, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:07', 1414143554414059520, '2022-10-18 15:32:09', 4, 0); +INSERT INTO `iam_perm_menu` VALUES (1580740637841666048, 'adminv3', 1582253306356649984, '终端管理', 'ClientList', NULL, b'0', '', b'0', b'0', '/modules/system/client/ClientList.vue', NULL, '/system/client', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:01:51', 1414143554414059520, '2022-10-18 14:13:27', 5, 0); +INSERT INTO `iam_perm_menu` VALUES (1580740758629232640, 'adminv3', 1582253306356649984, '登录方式', 'LoginTypeList', NULL, b'0', '', b'0', b'0', '/modules/system/loginType/LoginTypeList.vue', NULL, '/system/loginType', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 10:02:20', 1414143554414059520, '2022-10-18 14:13:40', 5, 0); +INSERT INTO `iam_perm_menu` VALUES (1580858583654051840, 'adminv3', 1580740450633101312, '测试Iframe', 'Iframe', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/system/Iframe', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 17:50:32', 1414143554414059520, '2022-10-17 17:46:19', 5, 1); +INSERT INTO `iam_perm_menu` VALUES (1580917438227075072, 'adminv3', 1580740450633101312, '三极目录', 'hello', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system1/a', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:24', 1399985191002447872, '2022-10-14 23:38:16', 2, 1); +INSERT INTO `iam_perm_menu` VALUES (1580917571069071360, 'adminv3', 1580917438227075072, '百度', 'baidu', NULL, b'0', '', b'0', b'0', '', NULL, 'https://www.baidu.com/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 21:44:56', 1399985191002447872, '2022-10-14 23:37:44', 3, 1); +INSERT INTO `iam_perm_menu` VALUES (1580928436300337152, 'adminv3', 1580740450633101312, '菜单管理', 'MenuList', NULL, b'0', '', b'0', b'0', '/modules/system/menu/MenuList.vue', NULL, '/system/menu', '', -99, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2022-10-14 22:28:06', 1399985191002447872, '2022-10-14 22:28:32', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582249924602580992, 'adminv3', 1580740450633101312, '权限管理', 'Permission', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/permission', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 13:59:13', 1414143554414059520, '2022-10-18 13:59:13', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582253011803262976, 'adminv3', 1580740450633101312, '用户信息', 'UserAuth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/user', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:11:30', 1414143554414059520, '2022-10-18 14:11:30', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582253152903843840, 'adminv3', 1580740450633101312, '系统配置', 'SystemConfig', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:03', 1414143554414059520, '2022-10-18 14:12:03', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582253306356649984, 'adminv3', 1580740450633101312, '认证管理', 'Auth', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/system/auth', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 14:12:40', 1414143554414059520, '2022-10-18 14:13:13', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582275875424129024, 'adminv3', NULL, '系统监控', 'Monitor', NULL, b'0', 'ant-design:monitor-outlined', b'0', b'0', 'Layout', NULL, '/monitor', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:21', 1414143554414059520, '2022-10-19 17:29:29', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582275984849326080, 'adminv3', NULL, '通知管理', 'Notice', NULL, b'0', 'ant-design:message-outlined', b'0', b'0', 'Layout', NULL, '/notice', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:42:47', 1414143554414059520, '2022-10-19 17:30:06', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582276092038959104, 'adminv3', NULL, '第三方对接', 'Third', NULL, b'0', 'ant-design:api-twotone', b'0', b'0', 'Layout', NULL, '/third', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:43:12', 1414143554414059520, '2022-10-19 17:32:04', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582276341792985088, 'adminv3', NULL, '开发管理', 'Develop', NULL, b'0', 'ant-design:apartment-outlined', b'0', b'0', 'Layout', NULL, '/develop', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:12', 1414143554414059520, '2022-10-19 15:24:22', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582276516905177088, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', 'ant-design:appstore-twotone', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:44:54', 1414143554414059520, '2022-10-19 17:34:26', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582277076421136384, 'adminv3', 1582249924602580992, '角色管理', 'RoleList', NULL, b'0', '', b'0', b'0', '/modules/system/role/RoleList.vue', NULL, '/system/permission/role', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 15:47:07', 1414143554414059520, '2022-10-18 15:59:37', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582301940364308480, 'adminv3', 1582249924602580992, '请求权限', 'PermPathList', NULL, b'0', '', b'0', b'0', '/modules/system/path/PermPathList.vue', NULL, '/system/permission/path', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:25:55', 1399985191002447872, '2023-11-29 13:57:56', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1582302180999917568, 'adminv3', 1582249924602580992, '数据角色', 'DataRoleList', NULL, b'0', '', b'0', b'0', '/modules/system/scope/DataRoleList.vue', NULL, '/system/permission/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:26:52', 1399985191002447872, '2023-11-28 21:02:57', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1582302542955769856, 'adminv3', 1582253011803262976, '用户管理', 'UserList', NULL, b'0', '', b'0', b'0', '/modules/system/user/UserList.vue', NULL, '/system/user/info', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:28:19', 1414143554414059520, '2022-10-18 17:28:19', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582302764129808384, 'adminv3', 1582253011803262976, '部门管理', 'DeptList', NULL, b'0', '', b'0', b'0', '/modules/system/dept/DeptList.vue', NULL, '/system/user/dept', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:29:11', 1414143554414059520, '2022-10-18 17:32:26', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582303143110340608, 'adminv3', 1582253152903843840, '数据字典', 'DictList', NULL, b'0', '', b'0', b'0', '/modules/system/dict/DictList.vue', NULL, '/system/config/dict', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:30:42', 1414143554414059520, '2022-10-18 17:30:42', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582303290070364160, 'adminv3', 1582253152903843840, '定时任务', 'QuartzJobList', NULL, b'0', '', b'0', b'0', '/modules/baseapi/quartz/QuartzJobList.vue', NULL, '/system/config/quartz', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:17', 1414143554414059520, '2023-08-09 15:50:46', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1582303447428067328, 'adminv3', 1582253152903843840, '系统参数', 'SystemParamList', NULL, b'0', '', b'0', b'0', '/modules/system/param/SystemParamList.vue', NULL, '/system/config/param', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-18 17:31:54', 1414143554414059520, '2022-10-19 23:14:16', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582632873244172288, 'adminv3', 1582276341792985088, '文件管理', 'FileUploadList', NULL, b'0', '', b'0', b'0', '/modules/develop/file/FileUploadList.vue', NULL, '/develop/file', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:20:56', 1414143554414059520, '2022-10-19 15:20:56', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582633196587261952, 'adminv3', 1582276341792985088, '代码生成', 'CodeGenList', NULL, b'0', '', b'0', b'0', '/modules/develop/codegen/CodeGenList.vue', NULL, '/develop/codegen', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:13', 1414143554414059520, '2022-10-19 15:23:17', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1582633307786649600, 'adminv3', 1582276341792985088, '动态表单', 'DynamicFormList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicform/DynamicFormList.vue', NULL, '/develop/form', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:22:39', 1414143554414059520, '2022-10-19 15:22:39', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1582633620321017856, 'adminv3', 1582276341792985088, '动态数据源', 'DynamicDataSourceList', NULL, b'0', '', b'0', b'0', '/modules/develop/dynamicsource/DynamicDataSourceList.vue', NULL, '/develop/source', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-19 15:23:54', 1414143554414059520, '2022-10-19 15:23:54', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1583074308040925184, 'adminv3', 1582275875424129024, '接口文档', 'ApiSwagger', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/doc.html', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:35:02', 1414143554414059520, '2022-11-23 13:59:09', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1583075229563068416, 'adminv3', 1582275875424129024, '审计日志', 'AuditLog', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/monitor/log', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:38:42', 1414143554414059520, '2022-10-20 20:41:38', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1583076217481043968, 'adminv3', 1583075229563068416, '登录日志', 'LoginLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/login/LoginLogList.vue', NULL, '/monitor/log/login', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:42:37', 1414143554414059520, '2022-10-20 20:43:36', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1583076424935514112, 'adminv3', 1583075229563068416, '操作日志', 'OperateLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/operate/OperateLogList.vue', NULL, '/monitor/log/operate', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:43:26', 1414143554414059520, '2022-10-20 20:43:26', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1583076670881112064, 'adminv3', 1583075229563068416, '数据版本日志', 'DataVersionLogList', NULL, b'0', '', b'0', b'0', '/modules/monitor/data/DataVersionLogList.vue', NULL, '/monitor/log/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:44:25', 1414143554414059520, '2022-10-20 20:44:25', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1583076878956339200, 'adminv3', 1582275875424129024, 'ELK日志', 'ELK', NULL, b'0', '', b'1', b'0', '', NULL, 'http://elk.dev.bootx.cn:5601/app/discover', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:15', 1414143554414059520, '2023-08-12 19:26:12', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1583077015434797056, 'adminv3', 1582275875424129024, 'PlumeLog日志', 'PlumeLog', NULL, b'0', '', b'0', b'0', '', NULL, 'http://127.0.0.1:9999/plumelog/#/', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:45:47', 1414143554414059520, '2022-10-20 20:45:47', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1583077198772019200, 'adminv3', 1582275875424129024, '系统信息', 'SystemInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/system/SystemInfoMonitor.vue', NULL, '/monitor/sysinfo', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:46:31', 1414143554414059520, '2022-10-20 20:46:31', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1583077360827342848, 'adminv3', 1582275875424129024, 'Redis监控', 'RedisInfoMonitor', NULL, b'0', '', b'0', b'0', '/modules/monitor/redis/RedisInfoMonitor.vue', NULL, '/monitor/redis', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-20 20:47:10', 1414143554414059520, '2022-10-20 20:47:10', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1584378294652051456, 'adminv3', 1582275984849326080, '邮件配置', 'MailConfigList', NULL, b'0', '', b'0', b'0', '/modules/notice/mail/MailConfigList.vue', NULL, '/notice/notice', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:56:36', 1414143554414059520, '2022-10-24 16:14:34', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1584378497824137216, 'adminv3', 1582275984849326080, '消息模板', 'MessageTemplateList', NULL, b'0', '', b'0', b'0', '/modules/notice/template/MessageTemplateList.vue', NULL, '/notice/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:57:25', 1414143554414059520, '2022-10-25 22:14:14', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1584378671266996224, 'adminv3', 1582275984849326080, '站内信', 'SiteMessageList', NULL, b'0', '', b'0', b'0', '/modules/notice/site/sender/SiteMessageList.vue', NULL, '/notice/siteMessage', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 10:58:06', 1414143554414059520, '2022-10-24 10:58:06', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1584379602188574720, 'adminv3', 1582276092038959104, '微信', 'WeChat', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wechat', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:01:48', 1414143554414059520, '2022-10-24 11:01:48', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1584379704122744832, 'adminv3', 1582276092038959104, '企业微信', 'WeCom', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/wecom', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:02:12', 1414143554414059520, '2022-10-24 11:02:12', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1584380087805091840, 'adminv3', 1582276092038959104, '钉钉', 'DingTalk', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/third/dingtalk', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:03:44', 1414143554414059520, '2022-10-24 11:03:44', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1584380527829524480, 'adminv3', 1584379602188574720, '消息模板', 'WechatTemplateList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/template/WechatTemplateList.vue', NULL, '/third/wechat/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:05:29', 1414143554414059520, '2022-10-26 15:58:56', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1584380679478779904, 'adminv3', 1584379602188574720, '自定义菜单', 'WechatMenuList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/menu/WechatMenuList.vue', NULL, '/third/wechat/menu', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:05', 1414143554414059520, '2022-10-27 10:15:24', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1584380824308097024, 'adminv3', 1584379602188574720, '素材管理', 'WechatMediaList', NULL, b'0', '', b'0', b'0', '/modules/third/wechat/media/WechatMediaList.vue', NULL, '/third/wechat/media', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:06:40', 1414143554414059520, '2022-10-27 16:38:47', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1584381134950834176, 'adminv3', 1584379704122744832, '企微机器人', 'WeComRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/wecom/robot/WecomRobotConfigList.vue', NULL, '/third/wecom/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:07:54', 1414143554414059520, '2022-11-12 20:58:25', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1584381322184564736, 'adminv3', 1584380087805091840, '钉钉机器人', 'DingRobotConfigList', NULL, b'0', '', b'0', b'0', '/modules/third/dingtalk/robot/DingRobotConfigList.vue', NULL, '/third/dingTalk/robot', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:08:38', 1414143554414059520, '2022-11-12 20:58:37', 6, 0); +INSERT INTO `iam_perm_menu` VALUES (1584381477986181120, 'adminv3', 1584380087805091840, '钉钉配置', 'DingRobotConfigList', NULL, b'0', '', b'1', b'0', '/modules/third/dingtalk/config/DingTalkConfigList.vue', NULL, '/third/dingtalk/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-10-24 11:09:15', 1414143554414059520, '2022-11-11 16:04:47', 1, 1); +INSERT INTO `iam_perm_menu` VALUES (1597044371008516096, 'adminv3', NULL, '功能演示', 'Demo', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo', '', 0, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 09:47:04', 1414143554414059520, '2022-11-28 09:47:04', 0, 1); +INSERT INTO `iam_perm_menu` VALUES (1597102799370317824, 'adminv3', 1582276516905177088, '数据相关', 'DemoData', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/demo/data', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 13:39:15', 1414143554414059520, '2022-11-28 13:39:15', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1597210969883275264, 'adminv3', 1582276516905177088, '超级查询', 'SuperQueryDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/query/SuperQueryDemoList.vue', NULL, '/demo/query/super', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-11-28 20:49:05', 1414143554414059520, '2022-11-28 21:00:14', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1599337250200440832, 'adminv3', NULL, '关于', '', NULL, b'0', 'simple-icons:about-dot-me', b'0', b'0', '', NULL, '/about/index', '', 99, 0, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 17:38:09', 1414143554414059520, '2022-12-04 17:43:32', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1599378494880436224, 'adminv3', 1582276516905177088, 'WS演示', 'WebsocketDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/ws/WebsocketDemo', NULL, '/demo/ws', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:03', 1414143554414059520, '2023-02-08 12:17:58', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1599378579513102336, 'adminv3', 1582276516905177088, '幂等请求演示', 'IdempotentDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/idempotent/IdempotentDemo', NULL, '/demo/idempotent', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:23', 1414143554414059520, '2023-02-08 11:46:00', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1599378728490586112, 'adminv3', 1582276516905177088, '消息中间件演示', 'MqDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/mq/MqDemo', NULL, '/demo/mq', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:22:59', 1414143554414059520, '2023-02-08 22:09:04', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1599378838519762944, 'adminv3', 1582276516905177088, '富文本编辑', 'WangEditorDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/wangeditor/WangEditorDemo.vue', NULL, '/demo/wangEditor', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2022-12-04 20:23:25', 1414143554414059520, '2023-02-10 09:05:16', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1617847577158324224, 'adminv3', 1597102799370317824, '数据权限', 'DataPermDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/perm/DataPermDemoList.vue', NULL, '/demo/data/perm', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:35', 1414143554414059520, '2023-01-24 20:06:04', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1617847653746315264, 'adminv3', 1597102799370317824, '加密解密', 'DataEncryptDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/encrypt/DataEncryptDemoList.vue', NULL, '/demo/data/encrypt', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:31:53', 1414143554414059520, '2023-01-24 20:05:45', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1617847747375763456, 'adminv3', 1597102799370317824, '数据脱敏', 'DataSensitiveDemoList', NULL, b'0', '', b'0', b'0', '/modules/demo/data/sensitive/DataSensitiveDemoList.vue', NULL, '/demo/data/sensitive', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-01-24 19:32:16', 1414143554414059520, '2023-01-24 20:06:58', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1621150743447965696, 'admin', 1495968302034210816, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', 'demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-02 22:17:11', 1399985191002447872, '2023-02-08 09:43:39', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1623156857846034432, 'adminv3', 1582276516905177088, '省市区联动', 'ChinaRegionDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/chinaregion/ChinaRegionDemo', NULL, '/demo/chinaregion', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 11:08:46', 1414143554414059520, '2023-02-08 11:08:46', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1623325795944439808, 'adminv3', 1599378992811429888, '邮件通知', 'EmailSenderDemo', NULL, b'0', '', b'0', b'0', '/modules/demo/notice/email/EmailSenderDemo.vue', NULL, '/demo/notice/email', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-08 22:20:04', 1414143554414059520, '2023-02-20 10:38:55', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1623494586215579648, 'admin', 1552207982510706688, '行政区划', 'ChinaRegion', NULL, b'0', '', b'1', b'0', 'develop/region/ChinaRegionList', NULL, '/develop/region', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-02-09 09:30:47', 1399985191002447872, '2023-02-09 17:50:05', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1629039360928075776, 'adminv3', 1582276341792985088, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', '/modules/develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-02-24 16:43:44', 1414143554414059520, '2023-02-24 16:44:17', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1631946120891707392, 'admin', 1552207982510706688, '可视化大屏', 'ProjectInfoList', NULL, b'0', '', b'0', b'0', 'develop/report/ProjectInfoList', NULL, '/develop/report', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-03-04 17:14:10', 1399985191002447872, '2023-03-04 17:14:10', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1635274568758435840, 'adminv3', 1582276341792985088, '数据集管理', 'DataResultSqlList', NULL, b'0', '', b'0', b'0', '/modules/develop/dataresult/DataResultSqlList', NULL, '/develop/dataresult', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-03-13 21:40:14', 1414143554414059520, '2023-09-18 14:26:51', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1687369862646558720, 'adminv3', 1582275984849326080, '短信管理', 'Sms', NULL, b'0', '', b'0', b'0', 'Layout', NULL, '/notice/sms', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:48:20', 1414143554414059520, '2023-08-04 15:48:32', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1687370142234669056, 'adminv3', 1687369862646558720, '短信配置', 'SmsChannelConfigList', NULL, b'0', '', b'0', b'0', '/modules/notice/sms/config/SmsChannelConfigList', NULL, '/notice/sms/config', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:49:26', 1414143554414059520, '2023-08-04 15:49:26', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1687370277496778752, 'adminv3', 1687369862646558720, '短信模板', 'SmsTemplateList', NULL, b'0', '', b'0', b'0', '/modules/notice/sms/template/SmsTemplateList', NULL, '/notice/sms/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-04 15:49:59', 1414143554414059520, '2023-08-04 15:50:38', 1, 0); +INSERT INTO `iam_perm_menu` VALUES (1689181991598997504, 'adminv3', 1582253152903843840, '敏感词管理', 'ChinaWord', NULL, b'0', '', b'0', b'0', '/modules/baseapi/chianword/ChinaWordList.vue', NULL, '/system/config/chinaword', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-09 15:49:05', 1414143554414059520, '2023-08-09 15:49:05', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1690324070514782208, 'adminv3', 1582276341792985088, '通用模板', 'GeneralTemplateList', NULL, b'0', '', b'0', b'0', '/modules/develop/template/GeneralTemplateList', NULL, '/develop/template', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-08-12 19:27:18', 1414143554414059520, '2023-08-12 19:31:26', 3, 0); +INSERT INTO `iam_perm_menu` VALUES (1703665090038800384, 'adminv3', 1582276341792985088, '在线SQL', 'SqlQueryInfo', NULL, b'0', '', b'0', b'0', '/modules/develop/query/SqlQueryInfo', NULL, '/develop/sqlquery', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1414143554414059520, '2023-09-18 14:59:45', 1414143554414059520, '2023-09-18 14:59:45', 0, 0); +INSERT INTO `iam_perm_menu` VALUES (1713931084759293952, 'adminv3', 1582253306356649984, '密码安全', 'PassowrdSecurity', NULL, b'0', '', b'0', b'0', '/modules/system/security/password/PasswordSecurityConfig.vue', NULL, '/system/config/passowrd', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-10-16 22:53:09', 1399985191002447872, '2023-10-16 22:58:59', 2, 0); +INSERT INTO `iam_perm_menu` VALUES (1719311626751950848, 'adminv3', 1582276516905177088, '大屏', '', NULL, b'0', '', b'0', b'0', 'Iframe', NULL, '/demo/big', 'http://localhost:8112/#/index', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-10-31 19:13:30', 1399985191002447872, '2023-11-15 11:11:26', 0, 1); +INSERT INTO `iam_perm_menu` VALUES (1733829906427682816, 'adminv3', 1582275875424129024, '在线用户', 'OnlineUserList', NULL, b'0', '', b'0', b'0', '/modules/monitor/user/online/OnlineUserList', NULL, '/monitor/user/online', '', 0, 1, NULL, b'1', b'0', b'0', b'0', NULL, 1399985191002447872, '2023-12-10 20:43:57', 1399985191002447872, '2023-12-10 20:43:57', 0, 0); + +-- ---------------------------- +-- Table structure for iam_perm_path +-- ---------------------------- +DROP TABLE IF EXISTS `iam_perm_path`; +CREATE TABLE `iam_perm_path` ( + `id` bigint(20) NOT NULL, + `code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限标识', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限名称', + `request_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求类型', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '请求路径', + `group_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组名称', + `enable` bit(1) NOT NULL COMMENT '启用状态', + `generate` bit(1) NOT NULL COMMENT '是否通过系统生成的权限', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', + `creator` bigint(20) NULL DEFAULT NULL, + `create_time` datetime(6) NULL DEFAULT NULL, + `last_modifier` bigint(20) NULL DEFAULT NULL, + `last_modified_time` datetime(6) NULL DEFAULT NULL, + `deleted` bit(1) NOT NULL, + `version` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限_请求' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_perm_path +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_role +-- ---------------------------- +DROP TABLE IF EXISTS `iam_role`; +CREATE TABLE `iam_role` ( + `id` bigint(20) NOT NULL COMMENT '角色ID', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编码', + `pid` bigint(20) NULL DEFAULT NULL COMMENT '父ID', + `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', + `internal` bit(1) NOT NULL COMMENT '是否系统内置', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '说明', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_role +-- ---------------------------- +INSERT INTO `iam_role` VALUES (1405414804771971072, 'admin', NULL, '管理员', b'1', '管理员', 1, '2021-06-17 14:39:35', 1399985191002447872, '2021-07-18 22:31:02', 6, 0); +INSERT INTO `iam_role` VALUES (1416730722714144768, 'test', NULL, '测试', b'0', '测试角色', 1399985191002447872, '2021-07-18 20:05:01', 1399985191002447872, '2021-07-18 20:16:15', 1, 0); +INSERT INTO `iam_role` VALUES (1422832797731778562, 'user', NULL, '用户', b'0', '用户角色', 0, '2021-08-04 16:12:29', 1399985191002447872, '2021-08-04 16:15:03', 7, 0); +INSERT INTO `iam_role` VALUES (1428891259564445696, 'manager', NULL, '管理者', b'0', 'manager管理者', 1399985191002447872, '2021-08-21 09:26:38', 1399985191002447872, '2021-08-21 09:26:39', 0, 0); + +-- ---------------------------- +-- Table structure for iam_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `iam_role_menu`; +CREATE TABLE `iam_role_menu` ( + `id` bigint(20) NOT NULL, + `role_id` bigint(20) NOT NULL COMMENT '角色id', + `client_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '终端code', + `permission_id` bigint(20) NOT NULL COMMENT '菜单权限id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色菜单权限表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_role_menu +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_role_path +-- ---------------------------- +DROP TABLE IF EXISTS `iam_role_path`; +CREATE TABLE `iam_role_path` ( + `id` bigint(20) NOT NULL, + `role_id` bigint(20) NOT NULL COMMENT '角色id', + `permission_id` bigint(20) NOT NULL COMMENT '请求权限id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色请求权限表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_role_path +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_user_data_role +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_data_role`; +CREATE TABLE `iam_user_data_role` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NOT NULL COMMENT '用户ID', + `role_id` bigint(20) NOT NULL COMMENT '数据角色ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户数据范围关系\r\n' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_data_role +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_user_dept +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_dept`; +CREATE TABLE `iam_user_dept` ( + `id` bigint(20) NOT NULL, + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `dept_id` bigint(20) NOT NULL COMMENT '部门id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户部门关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_dept +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_user_expand_info +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_expand_info`; +CREATE TABLE `iam_user_expand_info` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `sex` int(4) NULL DEFAULT NULL COMMENT '性别', + `birthday` date NULL DEFAULT NULL COMMENT '生日', + `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', + `last_login_time` datetime NULL DEFAULT NULL COMMENT '上次登录时间', + `current_login_time` datetime NULL DEFAULT NULL COMMENT '本次登录时间', + `initial_password` bit(1) NOT NULL COMMENT '是否初始密码', + `expire_password` bit(1) NOT NULL COMMENT '密码是否过期', + `last_change_password_time` datetime NULL DEFAULT NULL COMMENT '上次修改密码时间', + `register_time` datetime NOT NULL COMMENT '注册时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户扩展信息' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_expand_info +-- ---------------------------- +INSERT INTO `iam_user_expand_info` VALUES (1399985191002447872, 1, '1996-12-01', NULL, '2023-10-19 19:21:46', '2023-10-20 09:31:26', b'0', b'0', '2023-10-19 14:14:08', '2021-08-01 18:52:37', 1, '2021-06-02 15:04:15', 1, '2023-10-20 09:31:26', 382, b'0'); + +-- ---------------------------- +-- Table structure for iam_user_info +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_info`; +CREATE TABLE `iam_user_info` ( + `id` bigint(20) NOT NULL, + `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称', + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', + `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手机号', + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱', + `client_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '关联终端ds', + `administrator` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否超级管理员', + `status` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号状态', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_info +-- ---------------------------- +INSERT INTO `iam_user_info` VALUES (1399985191002447872, 'Bootx', 'bootx', 'f52020dca765fd3943ed40a615dc2c5c', '13333333333', 'bootx@bootx.com', '1430430071299207168,1430430071299207169,1626840094767714304,1580487061605175296', b'1', 'norm', 1, '2021-06-02 15:04:15', 1399985191002447872, '2023-10-19 14:14:46', 58, 0); + +-- ---------------------------- +-- Table structure for iam_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_role`; +CREATE TABLE `iam_user_role` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NOT NULL COMMENT '用户ID', + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户角色关系\r\n' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_role +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_user_third +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_third`; +CREATE TABLE `iam_user_third` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id', + `we_chat_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信openId', + `we_chat_open_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微信开放平台id', + `qq_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'qqId', + `weibo_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '微博Id', + `gitee_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '码云唯一标识', + `ding_talk_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉唯一标识', + `we_com_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业微信唯一标识', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE, + INDEX `pk_user_index`(`user_id`) USING BTREE COMMENT '用户id索引' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户三方登录绑定' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_third +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iam_user_third_info +-- ---------------------------- +DROP TABLE IF EXISTS `iam_user_third_info`; +CREATE TABLE `iam_user_third_info` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `client_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '第三方终端类型', + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', + `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户昵称', + `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户头像', + `third_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '关联第三方平台的用户id', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE, + INDEX `pk_user_client`(`user_id`, `client_code`) USING BTREE COMMENT '用户id和终端code' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户三方登录绑定详情' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iam_user_third_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_mail_config +-- ---------------------------- +DROP TABLE IF EXISTS `notice_mail_config`; +CREATE TABLE `notice_mail_config` ( + `id` bigint(20) NOT NULL, + `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '编号', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '名称', + `host` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器host', + `port` int(5) NOT NULL COMMENT '邮箱服务器 port', + `username` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 username', + `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱服务器 password', + `sender` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 sender', + `from_` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱服务器 from', + `activity` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', + `security_type` int(2) NULL DEFAULT NULL COMMENT '安全传输方式 1:plain 2:tls 3:ssl', + `creator` bigint(18) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(18) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(8) NULL DEFAULT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_mail_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_message_template +-- ---------------------------- +DROP TABLE IF EXISTS `notice_message_template`; +CREATE TABLE `notice_message_template` ( + `id` bigint(20) NOT NULL, + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '模板数据', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板类型', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息模板' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_message_template +-- ---------------------------- +INSERT INTO `notice_message_template` VALUES (1424936204932169730, 'cs', '测试', 'hello ${msg}6666666666666666666666666666', '1', '测试模板', 0, '2021-08-10 11:30:40', 0, '2021-08-10 11:30:40', 0, 0); + +-- ---------------------------- +-- Table structure for notice_site_message +-- ---------------------------- +DROP TABLE IF EXISTS `notice_site_message`; +CREATE TABLE `notice_site_message` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息标题', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '消息内容', + `sender_id` bigint(20) NULL DEFAULT NULL COMMENT '发送者id', + `sender_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发送者姓名', + `sender_time` datetime NULL DEFAULT NULL COMMENT '发送时间', + `receive_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息类型', + `send_state` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布状态', + `efficient_time` datetime NULL DEFAULT NULL COMMENT '截至有效期', + `cancel_time` datetime NULL DEFAULT NULL COMMENT '撤回时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '站内信' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_site_message +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_site_message_user +-- ---------------------------- +DROP TABLE IF EXISTS `notice_site_message_user`; +CREATE TABLE `notice_site_message_user` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `message_id` bigint(20) NOT NULL COMMENT '消息id', + `receive_id` bigint(20) NOT NULL COMMENT '接收者id', + `have_read` bit(1) NOT NULL COMMENT '已读/未读', + `read_time` datetime NULL DEFAULT NULL COMMENT '已读时间', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uni_receive_message`(`receive_id`, `message_id`) USING BTREE COMMENT '接收人和消息联合索引', + INDEX `inx_message`(`message_id`) USING BTREE COMMENT '消息索引' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '消息用户关联' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_site_message_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_sms_channel_config +-- ---------------------------- +DROP TABLE IF EXISTS `notice_sms_channel_config`; +CREATE TABLE `notice_sms_channel_config` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '渠道类型编码', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '渠道类型名称', + `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态', + `access_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'AccessKey', + `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '配置字符串', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `access_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'AccessSecret', + `image` bigint(20) NULL DEFAULT NULL COMMENT '图片', + `sort_no` double(10, 0) NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '短信渠道配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_sms_channel_config +-- ---------------------------- +INSERT INTO `notice_sms_channel_config` VALUES (1688432603289337856, 'alibaba', '阿里云短信', 'normal', '1', '{\"accessKeyId\":\"1231231231232111\",\"accessKeySecret\":\"12312312321111\",\"signature\":\"1231\",\"templateId\":\"2312313\",\"templateName\":\"123\",\"requestUrl\":\"五千二无二\",\"action\":\"SendSms\",\"version\":\"11\",\"regionId\":\"cn-hangzhou\"}', NULL, '1', 1688450284000247808, 0, 1414143554414059520, '2023-08-07 14:11:17', 1414143554414059520, '2023-08-07 15:35:34', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688456604610953216, 'huawei', '华为云短信', 'normal', '1', '{\"appKey\":\"1231231231232\",\"appSecret\":\"1111\",\"signature\":\"1\",\"sender\":\"1\",\"templateId\":\"12\",\"statusCallBack\":\"1\",\"url\":\"1\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-07 15:46:39', 1414143554414059520, '2023-08-07 15:46:49', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688461302302732288, 'yunpian', '云片短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"callbackUrl\":null,\"templateName\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-07 16:05:19', 1414143554414059520, '2023-08-08 14:12:23', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788784751001600, 'tencent', '腾讯短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"sdkAppId\":null,\"territory\":\"ap-guangzhou\",\"connTimeout\":60,\"requestUrl\":\"sms.tencentcloudapi.com\",\"action\":\"SendSms\",\"version\":\"2021-01-11\",\"service\":\"sms\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:37', 1414143554414059520, '2023-08-08 13:46:37', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788807228276736, 'uni_sms', '合一短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"isSimple\":true,\"templateName\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:42', 1414143554414059520, '2023-08-08 13:46:43', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788823900635136, 'netease', '网易云短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"templateName\":null,\"templateUrl\":\"https://api.netease.im/sms/sendtemplate.action\",\"codeUrl\":\"https://api.netease.im/sms/sendcode.action\",\"verifyUrl\":\"https://api.netease.im/sms/verifycode.action\",\"needUp\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:46', 1414143554414059520, '2023-08-08 13:46:47', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788846944141312, 'ctyun', '天翼云短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"templateName\":null,\"requestUrl\":\"https://sms-global.ctapi.ctyun.cn/sms/api/v1\",\"action\":\"SendSms\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:46:52', 1414143554414059520, '2023-08-08 13:46:52', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788862987354112, 'emay', '亿美短信', 'normal', '1', '{\"appId\":\"1\",\"secretKey\":\"1\",\"requestUrl\":null}', NULL, '1', 1688792913003102208, 0, 1414143554414059520, '2023-08-08 13:46:56', 1414143554414059520, '2023-08-08 14:03:04', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788885141667840, 'cloopen', '容联短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"appId\":null,\"baseUrl\":\"https://app.cloopen.com:8883/2013-12-26\",\"serverIp\":null,\"serverPort\":null}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:47:01', 1414143554414059520, '2023-08-08 13:47:01', 0, b'0'); +INSERT INTO `notice_sms_channel_config` VALUES (1688788904481603584, 'jd_cloud', '京东短信', 'normal', '1', '{\"accessKeyId\":\"1\",\"accessKeySecret\":\"1\",\"signature\":null,\"templateId\":null,\"region\":\"cn-north-1\"}', NULL, '1', NULL, 0, 1414143554414059520, '2023-08-08 13:47:06', 1414143554414059520, '2023-08-08 13:47:06', 0, b'0'); + +-- ---------------------------- +-- Table structure for notice_sms_config +-- ---------------------------- +DROP TABLE IF EXISTS `notice_sms_config`; +CREATE TABLE `notice_sms_config` ( + `id` bigint(18) NOT NULL, + `tid` bigint(18) NOT NULL COMMENT '租户id', + `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `account_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `path_sid` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送号码的唯一标识(基于twillio的命名风格)', + `auth_token` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `from_num` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', + `creator` bigint(18) NULL DEFAULT NULL, + `create_time` datetime NULL DEFAULT NULL, + `last_modifier` bigint(18) NULL DEFAULT NULL, + `last_modified_time` datetime NULL DEFAULT NULL, + `version` int(10) NULL DEFAULT NULL, + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `isp` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `reply_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_sms_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS `notice_sms_template`; +CREATE TABLE `notice_sms_template` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `supplier_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信渠道商类型', + `template_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信渠道商类型', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信模板名称', + `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '短信模板内容', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '短信模板配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_sms_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notice_wechat_config +-- ---------------------------- +DROP TABLE IF EXISTS `notice_wechat_config`; +CREATE TABLE `notice_wechat_config` ( + `id` bigint(18) NOT NULL, + `tid` bigint(18) NOT NULL COMMENT '租户id', + `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `corp_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `corp_secret` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认配置,0:否。1:是', + `creator` bigint(18) NULL DEFAULT NULL, + `create_time` datetime NULL DEFAULT NULL, + `last_modifier` bigint(18) NULL DEFAULT NULL, + `last_modified_time` datetime NULL DEFAULT NULL, + `version` int(10) NULL DEFAULT NULL, + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '微信消息配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notice_wechat_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_blob_triggers`; +CREATE TABLE `qrtz_blob_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `BLOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_blob_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_calendars`; +CREATE TABLE `qrtz_calendars` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_calendars +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_cron_triggers`; +CREATE TABLE `qrtz_cron_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_cron_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_fired_triggers`; +CREATE TABLE `qrtz_fired_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FIRED_TIME` bigint(13) NOT NULL, + `SCHED_TIME` bigint(13) NOT NULL, + `PRIORITY` int(11) NOT NULL, + `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, + INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, + INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, + INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_fired_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_job_details`; +CREATE TABLE `qrtz_job_details` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_job_details +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_locks`; +CREATE TABLE `qrtz_locks` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_locks +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; +CREATE TABLE `qrtz_paused_trigger_grps` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_paused_trigger_grps +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_scheduler_state`; +CREATE TABLE `qrtz_scheduler_state` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `LAST_CHECKIN_TIME` bigint(13) NOT NULL, + `CHECKIN_INTERVAL` bigint(13) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_scheduler_state +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simple_triggers`; +CREATE TABLE `qrtz_simple_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REPEAT_COUNT` bigint(7) NOT NULL, + `REPEAT_INTERVAL` bigint(12) NOT NULL, + `TIMES_TRIGGERED` bigint(10) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_simple_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simprop_triggers`; +CREATE TABLE `qrtz_simprop_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `INT_PROP_1` int(11) NULL DEFAULT NULL, + `INT_PROP_2` int(11) NULL DEFAULT NULL, + `LONG_PROP_1` bigint(20) NULL DEFAULT NULL, + `LONG_PROP_2` bigint(20) NULL DEFAULT NULL, + `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, + `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_simprop_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_triggers`; +CREATE TABLE `qrtz_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL, + `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL, + `PRIORITY` int(11) NULL DEFAULT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `START_TIME` bigint(13) NOT NULL, + `END_TIME` bigint(13) NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, + INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, + CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for report_project_info +-- ---------------------------- +DROP TABLE IF EXISTS `report_project_info`; +CREATE TABLE `report_project_info` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目名称', + `state` int(11) NULL DEFAULT NULL COMMENT '发布状态', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + `index_image` bigint(20) NULL DEFAULT NULL COMMENT '预览图片id', + `edit` bit(1) NULL DEFAULT NULL COMMENT '是否在编辑中', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏信息' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of report_project_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for report_project_info_publish +-- ---------------------------- +DROP TABLE IF EXISTS `report_project_info_publish`; +CREATE TABLE `report_project_info_publish` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '报表内容', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者ID', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修者ID', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '乐观锁', + `deleted` bit(1) NOT NULL COMMENT '删除标志', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义大屏发布信息' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of report_project_info_publish +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_audit_data_version +-- ---------------------------- +DROP TABLE IF EXISTS `starter_audit_data_version`; +CREATE TABLE `starter_audit_data_version` ( + `id` bigint(20) NOT NULL, + `table_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据表名称', + `data_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据名称', + `data_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据主键', + `data_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据内容', + `change_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '数据更新内容', + `version` int(10) NOT NULL COMMENT '版本', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据版本日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_audit_data_version +-- ---------------------------- +INSERT INTO `starter_audit_data_version` VALUES (1480550993828446208, '', 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:43:58\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', NULL, 1, 0, '2022-01-10 22:43:59'); +INSERT INTO `starter_audit_data_version` VALUES (1480551021779288064, '', 'client', '1', '{\"dataName\":\"client\",\"dataId\":\"1\",\"dataContent\":{\"id\":\"1\",\"creator\":null,\"createTime\":\"2022-01-10 22:44:05\",\"lastModifier\":null,\"lastModifiedTime\":null,\"deleted\":false,\"version\":0,\"code\":null,\"name\":null,\"timeout\":null,\"captcha\":false,\"enable\":false,\"description\":null}}', NULL, 2, 0, '2022-01-10 22:44:06'); + +-- ---------------------------- +-- Table structure for starter_audit_login_log +-- ---------------------------- +DROP TABLE IF EXISTS `starter_audit_login_log`; +CREATE TABLE `starter_audit_login_log` ( + `id` bigint(20) NOT NULL, + `user_id` bigint(11) NULL DEFAULT NULL COMMENT '用户id', + `account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名称', + `login` bit(1) NULL DEFAULT NULL COMMENT '登录成功状态', + `client` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '终端', + `login_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录方式', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录IP地址', + `login_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录地点', + `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作系统', + `browser` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '浏览器类型', + `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示消息', + `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登陆日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_audit_login_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_audit_operate_log +-- ---------------------------- +DROP TABLE IF EXISTS `starter_audit_operate_log`; +CREATE TABLE `starter_audit_operate_log` ( + `id` bigint(20) NOT NULL, + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作模块', + `operate_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人员id', + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作人员账号', + `business_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务类型', + `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方法', + `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', + `operate_url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求url', + `operate_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作ip', + `operate_location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作地点', + `operate_param` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求参数', + `operate_return` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '返回参数', + `success` bit(1) NULL DEFAULT NULL COMMENT '是否成功', + `error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误提示', + `operate_time` datetime NULL DEFAULT NULL COMMENT '操作时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_audit_operate_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_ding_media_md5 +-- ---------------------------- +DROP TABLE IF EXISTS `starter_ding_media_md5`; +CREATE TABLE `starter_ding_media_md5` ( + `id` bigint(20) NOT NULL, + `media_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '媒体id', + `md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'md5值', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉媒体文件MD5值关联关系' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_ding_media_md5 +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_ding_robot_config +-- ---------------------------- +DROP TABLE IF EXISTS `starter_ding_robot_config`; +CREATE TABLE `starter_ding_robot_config` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', + `access_token` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人访问token', + `enable_signature_check` bit(1) NOT NULL COMMENT '是否开启验签', + `sign_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '钉钉机器人私钥', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '钉钉机器人配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_ding_robot_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_file_data +-- ---------------------------- +DROP TABLE IF EXISTS `starter_file_data`; +CREATE TABLE `starter_file_data` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `base64` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'base64方式存储', + `data` longblob NULL COMMENT '数据方式存储', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '上传文件数据' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_file_data +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_file_upload_info +-- ---------------------------- +DROP TABLE IF EXISTS `starter_file_upload_info`; +CREATE TABLE `starter_file_upload_info` ( + `id` bigint(20) NOT NULL COMMENT '文件id', + `url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件访问地址', + `size` bigint(20) NULL DEFAULT NULL COMMENT '文件大小,单位字节', + `filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名称', + `original_filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '原始文件名', + `base_path` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '基础存储路径', + `path` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '存储路径', + `ext` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件扩展名', + `content_type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'MIME类型', + `platform` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '存储平台', + `th_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图访问路径', + `th_filename` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图名称', + `th_size` bigint(20) NULL DEFAULT NULL COMMENT '缩略图大小,单位字节', + `th_content_type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图MIME类型', + `object_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属对象id', + `object_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件所属对象类型,例如用户头像,评价图片', + `metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '文件元数据', + `user_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '文件用户元数据', + `th_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '缩略图元数据', + `th_user_metadata` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '缩略图用户元数据', + `attr` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '附加属性', + `file_acl` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件ACL', + `th_file_acl` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩略图文件ACL', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '文件记录表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_file_upload_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_quartz_job +-- ---------------------------- +DROP TABLE IF EXISTS `starter_quartz_job`; +CREATE TABLE `starter_quartz_job` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称', + `job_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务类名', + `cron` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'cron表达式', + `parameter` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数', + `state` int(4) NULL DEFAULT NULL COMMENT '状态', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_quartz_job +-- ---------------------------- +INSERT INTO `starter_quartz_job` VALUES (1456579473573867520, '测试任务', 'cn.bootx.starter.quartz.task.TestTask', '50 0 * * * ? *', '{\"aaa\":\"5255\"}', 0, '测试任务', 1399985191002447872, '2021-11-05 19:09:43', 1399985191002447872, '2022-06-22 00:37:48', 25, 0); +INSERT INTO `starter_quartz_job` VALUES (1546857070483939328, '支付单超时检测', 'cn.bootx.payment.task.PayExpiredTimeTask', '0/5 * * * * ? *', NULL, 1, '检测超时的支付单, 超时后发送超时事件', 1399985191002447872, '2022-07-12 22:00:39', 1399985191002447872, '2022-07-12 22:00:45', 1, 0); + +-- ---------------------------- +-- Table structure for starter_quartz_job_log +-- ---------------------------- +DROP TABLE IF EXISTS `starter_quartz_job_log`; +CREATE TABLE `starter_quartz_job_log` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `handler_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器名称', + `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理器全限定名', + `success` bit(1) NOT NULL COMMENT '是否执行成功', + `error_message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '错误信息', + `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `duration` bigint(255) NULL DEFAULT NULL COMMENT '执行时长', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务执行日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_quartz_job_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_wecom_robot_config +-- ---------------------------- +DROP TABLE IF EXISTS `starter_wecom_robot_config`; +CREATE TABLE `starter_wecom_robot_config` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', + `webhook_key` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'webhook地址的key值', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(6) NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime(6) NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + `deleted` bit(1) NOT NULL COMMENT '0:未删除。1:已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信机器人配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_wecom_robot_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_wx_fans +-- ---------------------------- +DROP TABLE IF EXISTS `starter_wx_fans`; +CREATE TABLE `starter_wx_fans` ( + `id` bigint(20) NOT NULL, + `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联OpenId', + `subscribe_status` bit(1) NULL DEFAULT NULL COMMENT '订阅状态', + `subscribe_time` datetime NULL DEFAULT NULL COMMENT '订阅时间', + `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '昵称', + `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别', + `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '语言', + `country` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家', + `province` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省份', + `city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市', + `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像地址', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号粉丝' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_wx_fans +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_wx_menu +-- ---------------------------- +DROP TABLE IF EXISTS `starter_wx_menu`; +CREATE TABLE `starter_wx_menu` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称', + `menu_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '菜单信息', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + `publish` bit(1) NOT NULL COMMENT '是否发布', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除。1:已删除', + `version` int(11) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '微信自定义菜单' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_wx_menu +-- ---------------------------- + +-- ---------------------------- +-- Table structure for starter_wx_template +-- ---------------------------- +DROP TABLE IF EXISTS `starter_wx_template`; +CREATE TABLE `starter_wx_template` ( + `id` bigint(20) NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', + `enable` bit(1) NOT NULL COMMENT '是否启用', + `template_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板ID', + `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板标题', + `primary_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的一级行业', + `deputy_industry` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板所属行业的二级行业', + `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模板内容', + `example` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '示例', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_modifier` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间', + `version` int(11) NOT NULL COMMENT '版本', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `inx_`(`template_id`) USING BTREE COMMENT '模板id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信消息模板' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of starter_wx_template +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/bootx-start/src/main/resources/logback-spring.xml b/bootx-start/src/main/resources/logback-spring.xml index 5d81cbd34..b1b678047 100644 --- a/bootx-start/src/main/resources/logback-spring.xml +++ b/bootx-start/src/main/resources/logback-spring.xml @@ -1,5 +1,10 @@ + + @@ -7,17 +12,22 @@ - - - - - + + + + + + + + ${appname} + 127.0.0.1 + - - + + diff --git a/docker-compose.yml b/docker-compose.yml index f6c09044c..a55aa8e6a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,13 @@ services: image: bootx-platform:latest restart: always ports: - - "8080:8080" + - "9999:9999" + environment: + - JAVA_OPTS= -Xms256m -Xmx1G -Dlogging.config=./logback-spring.xml volumes: - # 宿主机目录:容器目录 日志映射 - - /data/logs/bootx-platform:/logs - # 外部化配置文件 - - ./application.yml:/application.yml + # 读取外部化配置文件(根据实际服务器环境做修改), 宿主机目录:容器目录 + - ./logs/:/logs # 日志 + - ./files/:/data/files # 上传文件目录 + - ./application-dev.yml:/application-dev.yml # 配置 + - ./logback-spring.xml:/logback-spring.xml # 日志框架 + - ./ip2region/ip2region.xdb :/data/ip2region/ip2region.xdb # ip归属地数据库 diff --git a/pom.xml b/pom.xml index ffc90fd9b..5be78482f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,81 +6,128 @@ org.springframework.boot spring-boot-starter-parent - 2.7.10 + 2.7.18 4.0.0 cn.bootx.platform - bootx-platform + bootx-platform-parent pom - 1.2.3 + 1.3.6.2 + + + bootx-platform + bootx-platform 基于Spring Boot框架打造,针对单体式应用进行专门设计,提供整套服务模块,努力为打造全方位企业级开发解决方案 + https://gitee.com/bootx/bootx-platform + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + + bootx + xxm1995@outlook.com + bootx + https://gitee.com/bootx/bootx-platform + + + + + scm:git:git@gitee.com:bootx/bootx-platform.git + scm:git:git@gitee.com:bootx/bootx-platform.git + https://gitee.com/bootx/bootx-platform + bootx-common-core bootx-common-starters bootx-commons bootx-services - bootx-start - bootx-demo + + + + noDeploy + + bootx-start + bootx-demo + + + true + + + + + UTF-8 UTF-8 1.8 - 1.2.3 + 1.3.6.2 - 5.8.15 - 6.4.0 + 5.8.24 + 6.4.4 2.12.3 3.11 4.4 1.10.0 2.11.0 - 31.1-jre + 32.1.1-jre 4.0.1 0.0.38 1.7.30 - 2.14.2 + 2.14.3 7.15.0 1.4.01 - 6.8.0 - 1.2.4 - - 3.5.2 - 3.2.1 - 2.3.1 + 1.2.12 + + 3.5.3 + 3.3.2 + 2.4.0 2.9.7 - 1.34.0 - 1.16.5 - 8.5.2 - 3.5.3.1 + 1.36.0 + 1.16.6 + 8.5.4 + 5.6.155 + 3.1.0 + 2.0.0 + 3.5.4 3.6.1 - 1.6.15 - 3.20.0 - 4.0.0 - 1.5.3.Final + 1.7.0 + 3.23.0 + 4.4.0 + 1.5.5.Final 0.2.0 1.6.2 - 7.3 + 7.4 1.2.83_noneautotype 0.41 V1.4-SNAPSHOT 2.3 - 4.4.9.B + 4.5.2.B 1.3.81 - 2.2.4 + 2.2.5 + 2.7.0 + 2.2.0 + 1.5.4 - @@ -96,13 +143,6 @@ ${logback-classic.version} - - - com.plumelog - plumelog-lite-spring-boot-starter - ${plumelog.version} - - com.alibaba @@ -122,6 +162,7 @@ org.projectlombok lombok-mapstruct-binding ${lombok-mapstruct.version} + provided @@ -129,6 +170,7 @@ org.mapstruct mapstruct-processor ${mapstruct.version} + provided @@ -138,6 +180,27 @@ ${mapstruct.version} + + + org.springdoc + springdoc-openapi-ui + ${springdoc.version} + + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + org.apache.velocity @@ -145,6 +208,13 @@ ${velocity.version} + + + cn.bootx + table-modify-mysql-boot-starter + ${table-modify.version} + + @@ -183,6 +253,12 @@ common-mybatis-plus ${bootx-platform.version} + + + cn.bootx.platform + common-super-query + ${bootx-platform.version} + cn.bootx.platform @@ -207,6 +283,12 @@ common-sequence ${bootx-platform.version} + + + cn.bootx.platform + common-super-query + ${bootx-platform.version} + cn.bootx.platform @@ -244,18 +326,6 @@ common-rabbitmq ${bootx-platform.version} - - - cn.bootx.platform - common-lock - ${bootx-platform.version} - - - - cn.bootx.platform - common-actable - ${bootx-platform.version} - cn.bootx.platform @@ -324,13 +394,13 @@ common-starter-wecom ${bootx-platform.version} - - + - cn.bootx.platform - common-starter-flowable - ${bootx-platform.version} + org.dromara.sms4j + sms4j-spring-boot-starter + ${sms4j.version} + @@ -356,19 +426,10 @@ true - - - - - + - - - org.codehaus.mojo - versions-maven-plugin - io.spring.javaformat @@ -389,6 +450,79 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.0 + + false + none + + + + attach-javadocs + + jar + + package + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + + sonatype + + https://s01.oss.sonatype.org/ + + false + + @@ -416,4 +550,17 @@ + + + sonatype + OSS Snapshots Repository + https://s01.oss.sonatype.org/content/repositories/snapshots/ + + + sonatype + OSS Staging Repository + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + +