Commit 75d21928a41ab0773153b62152fbaa6c9294622a
Merge branch 'master' into unit_logger_system
# Conflicts: # src/test/resources/sql/clean.sql # src/test/resources/sql/create_tables.sql
Showing
59 changed files
with
1952 additions
and
635 deletions
README.md
| 1 | ## 平台简介 | 1 | ## 平台简介 |
| 2 | 2 | ||
| 3 | -**芋道** 是基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) **重构**,一套**全部开源**的**企业级**的快速开发平台,毫无保留给个人及企业免费使用。 | 3 | +**芋道**,一套**全部开源**的**企业级**的快速开发平台,毫无保留给个人及企业免费使用。 |
| 4 | 4 | ||
| 5 | > 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 | 5 | > 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 |
| 6 | 6 | ||
| @@ -17,40 +17,63 @@ | @@ -17,40 +17,63 @@ | ||
| 17 | * 基础设施 | 17 | * 基础设施 |
| 18 | * 研发工具 | 18 | * 研发工具 |
| 19 | 19 | ||
| 20 | +> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 | ||
| 21 | +> | ||
| 22 | +> 额外新增的功能,我们使用 🚀 标记。 | ||
| 23 | + | ||
| 24 | +🙂 所有功能,都通过 **单元测试** 保证高质量。 | ||
| 25 | + | ||
| 20 | ### 系统功能 | 26 | ### 系统功能 |
| 21 | 27 | ||
| 22 | -1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置 | ||
| 23 | -1. 在线用户:当前系统中活跃用户状态监控 | ||
| 24 | -1. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分 | ||
| 25 | -1. 菜单管理:配置系统菜单,操作权限,按钮权限标识等 | ||
| 26 | -1. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | ||
| 27 | -1. 岗位管理:配置系统用户所属担任职务 | ||
| 28 | -1. 字典管理:对系统中经常使用的一些较为固定的数据进行维护 | ||
| 29 | -1. 通知公告:系统通知公告信息发布维护 | ||
| 30 | -1. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询 | ||
| 31 | -1. 登录日志:系统登录日志记录查询包含登录异常 | 28 | + |
| 29 | +| | 功能 | 描述 | | ||
| 30 | +| --- | --- | --- | | ||
| 31 | +| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | | ||
| 32 | +| | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | | ||
| 33 | +| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | | ||
| 34 | +| | 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等 | | ||
| 35 | +| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | | ||
| 36 | +| | 岗位管理 | 配置系统用户所属担任职务 | | ||
| 37 | +| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | | ||
| 38 | +| | 通知公告 | 系统通知公告信息发布维护 | | ||
| 39 | +| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | | ||
| 40 | +| | 登录日志 | 系统登录日志记录查询包含登录异常 | | ||
| 41 | + | ||
| 42 | +计划新增功能: | ||
| 43 | +* 短信 | ||
| 44 | +* 邮件 | ||
| 45 | +* 钉钉、飞书等通知 | ||
| 32 | 46 | ||
| 33 | ### 基础设施 | 47 | ### 基础设施 |
| 34 | 48 | ||
| 35 | -1. 配置管理:对系统动态配置常用参数 | ||
| 36 | -1. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志 | ||
| 37 | -1. API 日志:包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | ||
| 38 | -1. MySQL 监控:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | ||
| 39 | -1. Redis 监控:监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | ||
| 40 | -1. Java 监控:基于 Spring Boot Admin 实现 Java 应用的监控 | ||
| 41 | -1. 链路追踪:基于 SkyWalking 实现性能监控,特别是链路的追踪 | ||
| 42 | -1. 分布式锁:基于 Redis 实现分布式锁,满足并发场景 | ||
| 43 | -1. 幂等组件:基于 Redis 实现幂等组件,解决重复请求问题 | ||
| 44 | -1. 服务保障:基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 | ||
| 45 | -1. 日志服务:轻量级日志中心,查看远程服务器的日志 | ||
| 46 | -1. 单元测试:基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | 49 | +| | 功能 | 描述 | |
| 50 | +| --- | --- | --- | | ||
| 51 | +| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | | ||
| 52 | +| | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | | ||
| 53 | +| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | | ||
| 54 | +| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | | ||
| 55 | +| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | | ||
| 56 | +| 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | | ||
| 57 | +| 🚀 | 链路追踪 | 基于 SkyWalking 实现性能监控,特别是链路的追踪 | | ||
| 58 | +| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | | ||
| 59 | +| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 | | ||
| 60 | +| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 | | ||
| 61 | +| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | | ||
| 62 | +| 🚀 | 单元测试 |基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | | ||
| 63 | + | ||
| 64 | +计划新增: | ||
| 65 | +* 工作流 | ||
| 66 | +* 错误码 | ||
| 67 | +* 文件服务 | ||
| 47 | 68 | ||
| 48 | ### 研发工具 | 69 | ### 研发工具 |
| 49 | 70 | ||
| 50 | -1. 表单构建:拖动表单元素生成相应的 HTML 代码 | ||
| 51 | -1. 代码生成:前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | ||
| 52 | -1. 系统接口:基于 Swagger 自动生成相关的 RESTful API 接口文档 | ||
| 53 | -1. 数据库文档:基于 Screw 自动生成数据库文档 | 71 | +| | 功能 | 描述 | |
| 72 | +| --- | --- | --- | | ||
| 73 | +| 🚀 | 代码生成 |前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | | ||
| 74 | +| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | | ||
| 75 | +| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | | ||
| 76 | +| | 表单构建 | 拖动表单元素生成相应的 HTML 代码 | | ||
| 54 | 77 | ||
| 55 | ## 在线体验 | 78 | ## 在线体验 |
| 56 | 79 | ||
| @@ -86,7 +109,7 @@ | @@ -86,7 +109,7 @@ | ||
| 86 | | [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | | 109 | | [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | |
| 87 | | [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | | 110 | | [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | |
| 88 | | [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.0 | - | | 111 | | [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.0 | - | |
| 89 | -| [Mockito](https://junit.org/junit5/) | Java Mock 框架 | 3.6.28 | - | | 112 | +| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.6.28 | - | |
| 90 | 113 | ||
| 91 | **前端** | 114 | **前端** |
| 92 | 115 |
pom.xml
| @@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
| 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" | 2 | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| 3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 4 | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 4 | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| 5 | - <modelVersion>4.0.0</modelVersion> | 5 | + <modelVersion>4.0.0</modelVersion> |
| 6 | 6 | ||
| 7 | <groupId>cn.iocoder</groupId> | 7 | <groupId>cn.iocoder</groupId> |
| 8 | <artifactId>dashboard</artifactId> | 8 | <artifactId>dashboard</artifactId> |
| @@ -25,6 +25,7 @@ | @@ -25,6 +25,7 @@ | ||
| 25 | <spring.boot.version>2.4.2</spring.boot.version> | 25 | <spring.boot.version>2.4.2</spring.boot.version> |
| 26 | <!-- Web 相关 --> | 26 | <!-- Web 相关 --> |
| 27 | <knife4j.version>3.0.2</knife4j.version> | 27 | <knife4j.version>3.0.2</knife4j.version> |
| 28 | + <swagger-annotations.version>1.5.22</swagger-annotations.version> | ||
| 28 | <!-- DB 相关 --> | 29 | <!-- DB 相关 --> |
| 29 | <mysql-connector-java.version>5.1.46</mysql-connector-java.version> | 30 | <mysql-connector-java.version>5.1.46</mysql-connector-java.version> |
| 30 | <druid.version>1.2.4</druid.version> | 31 | <druid.version>1.2.4</druid.version> |
| @@ -104,8 +105,17 @@ | @@ -104,8 +105,17 @@ | ||
| 104 | <artifactId>guava</artifactId> | 105 | <artifactId>guava</artifactId> |
| 105 | <groupId>com.google.guava</groupId> | 106 | <groupId>com.google.guava</groupId> |
| 106 | </exclusion> | 107 | </exclusion> |
| 108 | + <exclusion> | ||
| 109 | + <artifactId>swagger-annotations</artifactId> | ||
| 110 | + <groupId>io.swagger</groupId> | ||
| 111 | + </exclusion> | ||
| 107 | </exclusions> | 112 | </exclusions> |
| 108 | </dependency> | 113 | </dependency> |
| 114 | + <dependency> | ||
| 115 | + <groupId>io.swagger</groupId> | ||
| 116 | + <artifactId>swagger-annotations</artifactId> | ||
| 117 | + <version>${swagger-annotations.version}</version> | ||
| 118 | + </dependency> | ||
| 109 | 119 | ||
| 110 | <!-- DB 相关 --> | 120 | <!-- DB 相关 --> |
| 111 | <dependency> | 121 | <dependency> |
ruoyi-ui/src/views/infra/config/index.vue
| @@ -2,24 +2,12 @@ | @@ -2,24 +2,12 @@ | ||
| 2 | <div class="app-container"> | 2 | <div class="app-container"> |
| 3 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> | 3 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |
| 4 | <el-form-item label="参数名称" prop="name"> | 4 | <el-form-item label="参数名称" prop="name"> |
| 5 | - <el-input | ||
| 6 | - v-model="queryParams.name" | ||
| 7 | - placeholder="请输入参数名称" | ||
| 8 | - clearable | ||
| 9 | - size="small" | ||
| 10 | - style="width: 240px" | ||
| 11 | - @keyup.enter.native="handleQuery" | ||
| 12 | - /> | 5 | + <el-input v-model="queryParams.name" placeholder="请输入参数名称" clearable size="small" style="width: 240px" |
| 6 | + @keyup.enter.native="handleQuery"/> | ||
| 13 | </el-form-item> | 7 | </el-form-item> |
| 14 | <el-form-item label="参数键名" prop="key"> | 8 | <el-form-item label="参数键名" prop="key"> |
| 15 | - <el-input | ||
| 16 | - v-model="queryParams.key" | ||
| 17 | - placeholder="请输入参数键名" | ||
| 18 | - clearable | ||
| 19 | - size="small" | ||
| 20 | - style="width: 240px" | ||
| 21 | - @keyup.enter.native="handleQuery" | ||
| 22 | - /> | 9 | + <el-input v-model="queryParams.key" placeholder="请输入参数键名" clearable size="small" style="width: 240px" |
| 10 | + @keyup.enter.native="handleQuery"/> | ||
| 23 | </el-form-item> | 11 | </el-form-item> |
| 24 | <el-form-item label="系统内置" prop="type"> | 12 | <el-form-item label="系统内置" prop="type"> |
| 25 | <el-select v-model="queryParams.type" placeholder="系统内置" clearable size="small"> | 13 | <el-select v-model="queryParams.type" placeholder="系统内置" clearable size="small"> |
| @@ -56,7 +44,7 @@ | @@ -56,7 +44,7 @@ | ||
| 56 | icon="el-icon-plus" | 44 | icon="el-icon-plus" |
| 57 | size="mini" | 45 | size="mini" |
| 58 | @click="handleAdd" | 46 | @click="handleAdd" |
| 59 | - v-hasPermi="['infra:config:add']" | 47 | + v-hasPermi="['infra:config:create']" |
| 60 | >新增</el-button> | 48 | >新增</el-button> |
| 61 | </el-col> | 49 | </el-col> |
| 62 | <el-col :span="1.5"> | 50 | <el-col :span="1.5"> |
| @@ -95,31 +83,15 @@ | @@ -95,31 +83,15 @@ | ||
| 95 | </el-table-column> | 83 | </el-table-column> |
| 96 | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | 84 | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| 97 | <template slot-scope="scope"> | 85 | <template slot-scope="scope"> |
| 98 | - <el-button | ||
| 99 | - size="mini" | ||
| 100 | - type="text" | ||
| 101 | - icon="el-icon-edit" | ||
| 102 | - @click="handleUpdate(scope.row)" | ||
| 103 | - v-hasPermi="['infra:config:edit']" | ||
| 104 | - >修改</el-button> | ||
| 105 | - <el-button | ||
| 106 | - size="mini" | ||
| 107 | - type="text" | ||
| 108 | - icon="el-icon-delete" | ||
| 109 | - @click="handleDelete(scope.row)" | ||
| 110 | - v-hasPermi="['infra:config:remove']" | ||
| 111 | - >删除</el-button> | 86 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" |
| 87 | + v-hasPermi="['infra:config:update']">修改</el-button> | ||
| 88 | + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" | ||
| 89 | + v-hasPermi="['infra:config:delete']">删除</el-button> | ||
| 112 | </template> | 90 | </template> |
| 113 | </el-table-column> | 91 | </el-table-column> |
| 114 | </el-table> | 92 | </el-table> |
| 115 | 93 | ||
| 116 | - <pagination | ||
| 117 | - v-show="total>0" | ||
| 118 | - :total="total" | ||
| 119 | - :page.sync="queryParams.pageNo" | ||
| 120 | - :limit.sync="queryParams.pageSize" | ||
| 121 | - @pagination="getList" | ||
| 122 | - /> | 94 | + <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList"/> |
| 123 | 95 | ||
| 124 | <!-- 添加或修改参数配置对话框 --> | 96 | <!-- 添加或修改参数配置对话框 --> |
| 125 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | 97 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
sql/ruoyi-vue-pro.sql
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | Target Server Version : 50718 | 11 | Target Server Version : 50718 |
| 12 | File Encoding : 65001 | 12 | File Encoding : 65001 |
| 13 | 13 | ||
| 14 | - Date: 07/03/2021 00:43:34 | 14 | + Date: 10/03/2021 01:31:28 |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | SET NAMES utf8mb4; | 17 | SET NAMES utf8mb4; |
| @@ -37,18 +37,93 @@ CREATE TABLE `inf_api_access_log` ( | @@ -37,18 +37,93 @@ CREATE TABLE `inf_api_access_log` ( | ||
| 37 | `duration` int(11) NOT NULL COMMENT '执行时长', | 37 | `duration` int(11) NOT NULL COMMENT '执行时长', |
| 38 | `result_code` int(11) NOT NULL DEFAULT '0' COMMENT '结果ç ', | 38 | `result_code` int(11) NOT NULL DEFAULT '0' COMMENT '结果ç ', |
| 39 | `result_msg` varchar(512) DEFAULT '' COMMENT '结果æç¤º', | 39 | `result_msg` varchar(512) DEFAULT '' COMMENT '结果æç¤º', |
| 40 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 40 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 41 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 41 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 42 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 42 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 43 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 43 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 44 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 44 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 45 | PRIMARY KEY (`id`) USING BTREE | 45 | PRIMARY KEY (`id`) USING BTREE |
| 46 | -) ENGINE=InnoDB AUTO_INCREMENT=1822 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; | 46 | +) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; |
| 47 | 47 | ||
| 48 | -- ---------------------------- | 48 | -- ---------------------------- |
| 49 | -- Records of inf_api_access_log | 49 | -- Records of inf_api_access_log |
| 50 | -- ---------------------------- | 50 | -- ---------------------------- |
| 51 | BEGIN; | 51 | BEGIN; |
| 52 | +INSERT INTO `inf_api_access_log` VALUES (1, 'd8909966-2abb-43b1-998f-850779178463', 0, 2, 'dashboard', 'GET', '/api/get-permission-info', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:46', '2021-03-10 01:11:47', 127, 0, '', NULL, '2021-03-10 01:11:47', NULL, '2021-03-10 01:11:47', b'0'); | ||
| 53 | +INSERT INTO `inf_api_access_log` VALUES (2, 'f40ee1af-4b8e-4351-ba77-c0ca41865d01', 0, 2, 'dashboard', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:46', '2021-03-10 01:11:47', 127, 0, '', NULL, '2021-03-10 01:11:47', NULL, '2021-03-10 01:11:47', b'0'); | ||
| 54 | +INSERT INTO `inf_api_access_log` VALUES (3, '38657f93-449b-4c92-a412-d76c32c3ba74', 0, 2, 'dashboard', 'POST', '/api/logout', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:47', '2021-03-10 01:11:47', 3, 0, '', NULL, '2021-03-10 01:11:47', NULL, '2021-03-10 01:11:47', b'0'); | ||
| 55 | +INSERT INTO `inf_api_access_log` VALUES (4, '24303cdb-dae9-4f09-b316-e9eb38023ddf', 0, 2, 'dashboard', 'POST', '/api/logout', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:48', '2021-03-10 01:11:48', 2, 0, '', NULL, '2021-03-10 01:11:48', NULL, '2021-03-10 01:11:48', b'0'); | ||
| 56 | +INSERT INTO `inf_api_access_log` VALUES (5, 'fe324978-a665-4e25-8e16-ee78750de461', 0, 2, 'dashboard', 'GET', '/api/system/captcha/get-image', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:47', '2021-03-10 01:11:50', 2698, 0, '', NULL, '2021-03-10 01:11:50', NULL, '2021-03-10 01:11:50', b'0'); | ||
| 57 | +INSERT INTO `inf_api_access_log` VALUES (6, '205b39bd-471c-4e0c-bbeb-f9ad836d47c7', 0, 2, 'dashboard', 'GET', '/api/system/captcha/get-image', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:49', '2021-03-10 01:11:50', 1157, 0, '', NULL, '2021-03-10 01:11:50', NULL, '2021-03-10 01:11:50', b'0'); | ||
| 58 | +INSERT INTO `inf_api_access_log` VALUES (7, 'aff42e1b-73d9-431d-95b9-7a7d18595a5b', 0, 2, 'dashboard', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"1nfjj\\\",\\\"uuid\\\":\\\"8466085c41534a948632f82140e8d9e1\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 35, 1002000003, '验è¯ç ä¸å˜åœ¨', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 59 | +INSERT INTO `inf_api_access_log` VALUES (8, '25f0e932-cf92-4b95-b3fb-5a4896bd9241', 0, 2, 'dashboard', 'GET', '/api/system/captcha/get-image', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 13, 0, '', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 60 | +INSERT INTO `inf_api_access_log` VALUES (9, 'ad750e4c-5310-4e42-9e41-0871033ca55d', 0, 2, 'dashboard', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"1nfjj\\\",\\\"uuid\\\":\\\"8466085c41534a948632f82140e8d9e1\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 273, 0, '', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 61 | +INSERT INTO `inf_api_access_log` VALUES (10, '0e1a7560-d447-4e95-935a-e3f6cf4a222d', 1, 2, 'dashboard', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 31, 0, '', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 62 | +INSERT INTO `inf_api_access_log` VALUES (11, '0bf76082-8584-4725-ad8e-d23b44f1a886', 1, 2, 'dashboard', 'GET', '/api/get-permission-info', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 34, 0, '', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 63 | +INSERT INTO `inf_api_access_log` VALUES (12, 'f9aed1f8-5a1d-4175-946a-e58e2772e4a3', 1, 2, 'dashboard', 'GET', '/api/list-menus', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:53', '2021-03-10 01:11:53', 12, 0, '', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 64 | +INSERT INTO `inf_api_access_log` VALUES (13, '2feeb4ff-e8a6-48a9-8370-9a1b8b1dea5e', 0, 2, 'dashboard', 'GET', '/api/system/file/get/add5ec1891a7d97d2cc1d60847e16294.jpg', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:11:54', '2021-03-10 01:11:54', 26, 0, '', NULL, '2021-03-10 01:11:54', NULL, '2021-03-10 01:11:54', b'0'); | ||
| 65 | +INSERT INTO `inf_api_access_log` VALUES (14, '36b77d6f-30d3-483e-ad79-196975d8fe0b', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:02', '2021-03-10 01:12:02', 31, 0, '', NULL, '2021-03-10 01:12:02', NULL, '2021-03-10 01:12:02', b'0'); | ||
| 66 | +INSERT INTO `inf_api_access_log` VALUES (15, 'e50a5433-90b7-4e8f-9d1a-59f15c1a4e0a', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:07', '2021-03-10 01:12:07', 16, 0, '', NULL, '2021-03-10 01:12:07', NULL, '2021-03-10 01:12:07', b'0'); | ||
| 67 | +INSERT INTO `inf_api_access_log` VALUES (16, 'b1ef7809-57f1-4aad-99cb-f53d1c85ae8a', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"106\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:07', '2021-03-10 01:12:07', 11, 0, '', NULL, '2021-03-10 01:12:07', NULL, '2021-03-10 01:12:07', b'0'); | ||
| 68 | +INSERT INTO `inf_api_access_log` VALUES (17, '18c41274-8fc2-4012-8d63-14fe72a0cc64', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":106,\\\"status\\\":0,\\\"createTime\\\":1609837428000,\\\"name\\\":\\\"é…置管ç†\\\",\\\"permission\\\":\\\"\\\",\\\"type\\\":2,\\\"sort\\\":1,\\\"parentId\\\":2,\\\"path\\\":\\\"config\\\",\\\"icon\\\":\\\"edit\\\",\\\"component\\\":\\\"infra/config/index\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:09', '2021-03-10 01:12:10', 54, 0, '', NULL, '2021-03-10 01:12:10', NULL, '2021-03-10 01:12:10', b'0'); | ||
| 69 | +INSERT INTO `inf_api_access_log` VALUES (18, '3ec30780-7d9e-40fd-b9e1-df0758530bc9', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:10', '2021-03-10 01:12:10', 15, 0, '', NULL, '2021-03-10 01:12:10', NULL, '2021-03-10 01:12:10', b'0'); | ||
| 70 | +INSERT INTO `inf_api_access_log` VALUES (19, '3a0dd3e6-60e8-43cc-82aa-d63d332dcd74', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1032\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:12', '2021-03-10 01:12:12', 7, 0, '', NULL, '2021-03-10 01:12:12', NULL, '2021-03-10 01:12:12', b'0'); | ||
| 71 | +INSERT INTO `inf_api_access_log` VALUES (20, '3dc6e855-0aff-48f2-a236-a5255385de82', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:12', '2021-03-10 01:12:12', 15, 0, '', NULL, '2021-03-10 01:12:12', NULL, '2021-03-10 01:12:12', b'0'); | ||
| 72 | +INSERT INTO `inf_api_access_log` VALUES (21, '0eab1e77-e039-4924-b6f5-cdcd73ad9897', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1032,\\\"status\\\":0,\\\"createTime\\\":1609837428000,\\\"name\\\":\\\"é…置新增\\\",\\\"permission\\\":\\\"infra:config:create\\\",\\\"type\\\":3,\\\"sort\\\":2,\\\"parentId\\\":106,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:18', '2021-03-10 01:12:18', 18, 0, '', NULL, '2021-03-10 01:12:18', NULL, '2021-03-10 01:12:18', b'0'); | ||
| 73 | +INSERT INTO `inf_api_access_log` VALUES (22, '5d309b5e-76be-4776-be3c-e961e3144269', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:18', '2021-03-10 01:12:18', 14, 0, '', NULL, '2021-03-10 01:12:18', NULL, '2021-03-10 01:12:18', b'0'); | ||
| 74 | +INSERT INTO `inf_api_access_log` VALUES (23, '359ddde9-67d2-427c-8738-17fb0773f3ca', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:25', '2021-03-10 01:12:25', 13, 0, '', NULL, '2021-03-10 01:12:25', NULL, '2021-03-10 01:12:25', b'0'); | ||
| 75 | +INSERT INTO `inf_api_access_log` VALUES (24, 'cab05ea8-98e4-4b81-a629-696e6c47c680', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1033\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:25', '2021-03-10 01:12:25', 5, 0, '', NULL, '2021-03-10 01:12:25', NULL, '2021-03-10 01:12:25', b'0'); | ||
| 76 | +INSERT INTO `inf_api_access_log` VALUES (25, '291cb66f-21d9-4798-a3c1-d3b0270d3850', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1033,\\\"status\\\":0,\\\"createTime\\\":1609837428000,\\\"name\\\":\\\"é…置修改\\\",\\\"permission\\\":\\\"infra:config:update\\\",\\\"type\\\":3,\\\"sort\\\":3,\\\"parentId\\\":106,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:30', '2021-03-10 01:12:30', 19, 0, '', NULL, '2021-03-10 01:12:30', NULL, '2021-03-10 01:12:30', b'0'); | ||
| 77 | +INSERT INTO `inf_api_access_log` VALUES (26, '5cf67e7f-8b32-4b17-96a6-325dfcba865f', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:30', '2021-03-10 01:12:30', 14, 0, '', NULL, '2021-03-10 01:12:30', NULL, '2021-03-10 01:12:30', b'0'); | ||
| 78 | +INSERT INTO `inf_api_access_log` VALUES (27, '869bcc0c-2d7c-4a80-9fda-11b412162c0d', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1034\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:31', '2021-03-10 01:12:31', 7, 0, '', NULL, '2021-03-10 01:12:31', NULL, '2021-03-10 01:12:31', b'0'); | ||
| 79 | +INSERT INTO `inf_api_access_log` VALUES (28, '5c110575-2d45-4353-a653-50796f3ffc36', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:31', '2021-03-10 01:12:31', 14, 0, '', NULL, '2021-03-10 01:12:31', NULL, '2021-03-10 01:12:31', b'0'); | ||
| 80 | +INSERT INTO `inf_api_access_log` VALUES (29, '4bd68903-d159-4728-aaa0-cfcc810bf65d', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1034,\\\"status\\\":0,\\\"createTime\\\":1609837428000,\\\"name\\\":\\\"é…ç½®åˆ é™¤\\\",\\\"permission\\\":\\\"infra:config:delete\\\",\\\"type\\\":3,\\\"sort\\\":4,\\\"parentId\\\":106,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:36', '2021-03-10 01:12:36', 18, 0, '', NULL, '2021-03-10 01:12:36', NULL, '2021-03-10 01:12:36', b'0'); | ||
| 81 | +INSERT INTO `inf_api_access_log` VALUES (30, 'f42d28d1-1442-44f6-aaa9-b200307e0755', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:36', '2021-03-10 01:12:36', 13, 0, '', NULL, '2021-03-10 01:12:36', NULL, '2021-03-10 01:12:36', b'0'); | ||
| 82 | +INSERT INTO `inf_api_access_log` VALUES (31, 'c2ad9fea-1e4f-4f19-8ad3-8ffac3a2ad6a', 1, 2, 'dashboard', 'GET', '/api/infra/config/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:12:40', '2021-03-10 01:12:40', 119, 0, '', NULL, '2021-03-10 01:12:40', NULL, '2021-03-10 01:12:40', b'0'); | ||
| 83 | +INSERT INTO `inf_api_access_log` VALUES (32, 'a3ce04b6-103e-4567-9f3a-22a516957122', 1, 2, 'dashboard', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:41', '2021-03-10 01:25:41', 225, 0, '', NULL, '2021-03-10 01:25:41', NULL, '2021-03-10 01:25:41', b'0'); | ||
| 84 | +INSERT INTO `inf_api_access_log` VALUES (33, '82f37563-862a-4f50-9e5b-1c15b3b672d5', 1, 2, 'dashboard', 'GET', '/api/get-permission-info', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:41', '2021-03-10 01:25:41', 225, 0, '', NULL, '2021-03-10 01:25:41', NULL, '2021-03-10 01:25:41', b'0'); | ||
| 85 | +INSERT INTO `inf_api_access_log` VALUES (34, '8469ee76-cdf6-4cf2-ae6b-91573e06d0c9', 1, 2, 'dashboard', 'GET', '/api/list-menus', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:41', '2021-03-10 01:25:41', 16, 0, '', NULL, '2021-03-10 01:25:41', NULL, '2021-03-10 01:25:41', b'0'); | ||
| 86 | +INSERT INTO `inf_api_access_log` VALUES (35, '27f7ffa8-7ce3-42d4-8e65-1a6996dde9d4', 0, 2, 'dashboard', 'GET', '/api/system/file/get/add5ec1891a7d97d2cc1d60847e16294.jpg', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:42', '2021-03-10 01:25:42', 28, 0, '', NULL, '2021-03-10 01:25:42', NULL, '2021-03-10 01:25:42', b'0'); | ||
| 87 | +INSERT INTO `inf_api_access_log` VALUES (36, '23254cf0-c51f-4a52-8838-fc7ebbce3042', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:42', '2021-03-10 01:25:42', 47, 0, '', NULL, '2021-03-10 01:25:42', NULL, '2021-03-10 01:25:42', b'0'); | ||
| 88 | +INSERT INTO `inf_api_access_log` VALUES (37, '215c6c13-12e7-442a-805f-3efc0bf646e4', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"110\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:49', '2021-03-10 01:25:49', 13, 0, '', NULL, '2021-03-10 01:25:49', NULL, '2021-03-10 01:25:49', b'0'); | ||
| 89 | +INSERT INTO `inf_api_access_log` VALUES (38, '56ee2e75-5775-4a26-a9e7-972876ed891e', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:49', '2021-03-10 01:25:49', 20, 0, '', NULL, '2021-03-10 01:25:49', NULL, '2021-03-10 01:25:49', b'0'); | ||
| 90 | +INSERT INTO `inf_api_access_log` VALUES (39, '680c28fa-764e-4de5-8dc0-909ab842eb43', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":110,\\\"status\\\":0,\\\"createTime\\\":1609837428000,\\\"name\\\":\\\"定时任务\\\",\\\"permission\\\":\\\"\\\",\\\"type\\\":2,\\\"sort\\\":2,\\\"parentId\\\":2,\\\"path\\\":\\\"job\\\",\\\"icon\\\":\\\"job\\\",\\\"component\\\":\\\"infra/job/index\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:51', '2021-03-10 01:25:51', 56, 0, '', NULL, '2021-03-10 01:25:51', NULL, '2021-03-10 01:25:51', b'0'); | ||
| 91 | +INSERT INTO `inf_api_access_log` VALUES (40, '74a051a8-4150-442c-8986-6b22ae166ae6', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:25:51', '2021-03-10 01:25:51', 22, 0, '', NULL, '2021-03-10 01:25:51', NULL, '2021-03-10 01:25:51', b'0'); | ||
| 92 | +INSERT INTO `inf_api_access_log` VALUES (41, '5228cabc-3ff5-4c3a-a9d0-a7c14a9e92a5', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:26:02', '2021-03-10 01:26:02', 17, 0, '', NULL, '2021-03-10 01:26:02', NULL, '2021-03-10 01:26:02', b'0'); | ||
| 93 | +INSERT INTO `inf_api_access_log` VALUES (42, 'c659072d-1d29-469b-b84b-b6ed4b6c964e', 1, 2, 'dashboard', 'POST', '/api/system/menu/create', '{\"query\":{},\"body\":\"{\\\"parentId\\\":110,\\\"name\\\":\\\"任务查询\\\",\\\"type\\\":3,\\\"sort\\\":1,\\\"status\\\":0,\\\"permission\\\":\\\"infra:job:query\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:26:19', '2021-03-10 01:26:19', 29, 0, '', NULL, '2021-03-10 01:26:19', NULL, '2021-03-10 01:26:19', b'0'); | ||
| 94 | +INSERT INTO `inf_api_access_log` VALUES (43, '1627b483-95b0-4ddc-b4f8-c27f931fde1a', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:26:19', '2021-03-10 01:26:19', 17, 0, '', NULL, '2021-03-10 01:26:19', NULL, '2021-03-10 01:26:19', b'0'); | ||
| 95 | +INSERT INTO `inf_api_access_log` VALUES (44, '6c497f1e-da23-4ca6-bb04-1a5c0bb768ad', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1078\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:27:42', '2021-03-10 01:27:43', 188, 0, '', NULL, '2021-03-10 01:27:43', NULL, '2021-03-10 01:27:43', b'0'); | ||
| 96 | +INSERT INTO `inf_api_access_log` VALUES (45, 'ba231b78-1b76-4116-b54d-a42abc10ac9b', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:27:42', '2021-03-10 01:27:43', 188, 0, '', NULL, '2021-03-10 01:27:43', NULL, '2021-03-10 01:27:43', b'0'); | ||
| 97 | +INSERT INTO `inf_api_access_log` VALUES (46, '1440ae67-0972-4d04-9efe-9080acc615bb', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:27:45', '2021-03-10 01:27:46', 20, 0, '', NULL, '2021-03-10 01:27:46', NULL, '2021-03-10 01:27:46', b'0'); | ||
| 98 | +INSERT INTO `inf_api_access_log` VALUES (47, '391845d4-1e42-492d-bc44-4ef878be4b41', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:27:50', '2021-03-10 01:27:50', 21, 0, '', NULL, '2021-03-10 01:27:50', NULL, '2021-03-10 01:27:50', b'0'); | ||
| 99 | +INSERT INTO `inf_api_access_log` VALUES (48, 'dd2b9b7e-df39-497c-bd1a-456a5af54799', 1, 2, 'dashboard', 'POST', '/api/system/menu/create', '{\"query\":{},\"body\":\"{\\\"parentId\\\":1078,\\\"name\\\":\\\"日志查询\\\",\\\"type\\\":3,\\\"sort\\\":1,\\\"status\\\":0,\\\"permission\\\":\\\"infra:api-error-log:query\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:04', '2021-03-10 01:28:04', 45, 0, '', NULL, '2021-03-10 01:28:04', NULL, '2021-03-10 01:28:04', b'0'); | ||
| 100 | +INSERT INTO `inf_api_access_log` VALUES (49, '292da48c-21a0-4066-8a3a-40ddd0e9c759', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:04', '2021-03-10 01:28:04', 23, 0, '', NULL, '2021-03-10 01:28:04', NULL, '2021-03-10 01:28:04', b'0'); | ||
| 101 | +INSERT INTO `inf_api_access_log` VALUES (50, '13432c7e-35c4-451f-9aa7-438f7f5c646a', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1078\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:07', '2021-03-10 01:28:07', 13, 0, '', NULL, '2021-03-10 01:28:07', NULL, '2021-03-10 01:28:07', b'0'); | ||
| 102 | +INSERT INTO `inf_api_access_log` VALUES (51, 'f06ad98f-7136-4157-83d6-9ff18b76c701', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:07', '2021-03-10 01:28:07', 20, 0, '', NULL, '2021-03-10 01:28:07', NULL, '2021-03-10 01:28:07', b'0'); | ||
| 103 | +INSERT INTO `inf_api_access_log` VALUES (52, '255cc516-6b95-404c-ae2c-38d713ca3a59', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1078,\\\"status\\\":0,\\\"createTime\\\":1614274379000,\\\"name\\\":\\\"访问日志\\\",\\\"permission\\\":\\\"\\\",\\\"type\\\":2,\\\"sort\\\":1,\\\"parentId\\\":1083,\\\"path\\\":\\\"api-access-log\\\",\\\"icon\\\":\\\"log\\\",\\\"component\\\":\\\"infra/apiAccessLog/index\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:09', '2021-03-10 01:28:09', 33, 0, '', NULL, '2021-03-10 01:28:09', NULL, '2021-03-10 01:28:09', b'0'); | ||
| 104 | +INSERT INTO `inf_api_access_log` VALUES (53, '0b75788a-e1cb-43f7-959e-4f8cbb40b3cc', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:09', '2021-03-10 01:28:09', 18, 0, '', NULL, '2021-03-10 01:28:09', NULL, '2021-03-10 01:28:09', b'0'); | ||
| 105 | +INSERT INTO `inf_api_access_log` VALUES (54, 'aebfea9a-ae91-4746-bf71-d315da4f5d49', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1082\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:11', '2021-03-10 01:28:11', 8, 0, '', NULL, '2021-03-10 01:28:11', NULL, '2021-03-10 01:28:11', b'0'); | ||
| 106 | +INSERT INTO `inf_api_access_log` VALUES (55, '149f2f74-9d4b-491f-b016-19c5b381fcc7', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:11', '2021-03-10 01:28:11', 15, 0, '', NULL, '2021-03-10 01:28:11', NULL, '2021-03-10 01:28:11', b'0'); | ||
| 107 | +INSERT INTO `inf_api_access_log` VALUES (56, 'aeec1ebf-5aeb-4888-a2dd-60c473ae6b78', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1082,\\\"status\\\":0,\\\"createTime\\\":1614274379000,\\\"name\\\":\\\"日志导出\\\",\\\"permission\\\":\\\"infra:api-access-log:export\\\",\\\"type\\\":3,\\\"sort\\\":2,\\\"parentId\\\":1078,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:13', '2021-03-10 01:28:13', 23, 0, '', NULL, '2021-03-10 01:28:13', NULL, '2021-03-10 01:28:13', b'0'); | ||
| 108 | +INSERT INTO `inf_api_access_log` VALUES (57, 'd2cc4ee9-d289-4886-be34-0f93edb52bc0', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:13', '2021-03-10 01:28:13', 16, 0, '', NULL, '2021-03-10 01:28:13', NULL, '2021-03-10 01:28:13', b'0'); | ||
| 109 | +INSERT INTO `inf_api_access_log` VALUES (58, '73efd4a2-fe8b-4819-a657-6aca7425e7c0', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1085\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:15', '2021-03-10 01:28:15', 9, 0, '', NULL, '2021-03-10 01:28:15', NULL, '2021-03-10 01:28:15', b'0'); | ||
| 110 | +INSERT INTO `inf_api_access_log` VALUES (59, 'f222df67-e4c0-419f-a022-4bc304319f4d', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:15', '2021-03-10 01:28:15', 17, 0, '', NULL, '2021-03-10 01:28:15', NULL, '2021-03-10 01:28:15', b'0'); | ||
| 111 | +INSERT INTO `inf_api_access_log` VALUES (60, 'd304f696-6bd3-4218-b73a-7cff04565b54', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1085,\\\"status\\\":0,\\\"createTime\\\":1614297200000,\\\"name\\\":\\\"日志处ç†\\\",\\\"permission\\\":\\\"infra:api-error-log:update-status\\\",\\\"type\\\":3,\\\"sort\\\":2,\\\"parentId\\\":1084,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:18', '2021-03-10 01:28:18', 23, 0, '', NULL, '2021-03-10 01:28:18', NULL, '2021-03-10 01:28:18', b'0'); | ||
| 112 | +INSERT INTO `inf_api_access_log` VALUES (61, '224f263e-0e4f-49a8-8205-2de44ba8e045', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:18', '2021-03-10 01:28:18', 16, 0, '', NULL, '2021-03-10 01:28:18', NULL, '2021-03-10 01:28:18', b'0'); | ||
| 113 | +INSERT INTO `inf_api_access_log` VALUES (62, '9fd2373f-a641-4865-ae3f-259b4386d816', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1086\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:19', '2021-03-10 01:28:19', 7, 0, '', NULL, '2021-03-10 01:28:19', NULL, '2021-03-10 01:28:19', b'0'); | ||
| 114 | +INSERT INTO `inf_api_access_log` VALUES (63, 'a97c2b96-9486-4bde-a532-bbb8f077a393', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:19', '2021-03-10 01:28:19', 15, 0, '', NULL, '2021-03-10 01:28:19', NULL, '2021-03-10 01:28:19', b'0'); | ||
| 115 | +INSERT INTO `inf_api_access_log` VALUES (64, '1cbb3fa8-9a84-4568-8089-c74c2ff38d80', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1086,\\\"status\\\":0,\\\"createTime\\\":1614297200000,\\\"name\\\":\\\"日志导出\\\",\\\"permission\\\":\\\"infra:api-error-log:export\\\",\\\"type\\\":3,\\\"sort\\\":3,\\\"parentId\\\":1084,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:21', '2021-03-10 01:28:21', 21, 0, '', NULL, '2021-03-10 01:28:21', NULL, '2021-03-10 01:28:21', b'0'); | ||
| 116 | +INSERT INTO `inf_api_access_log` VALUES (65, '7f913e0c-0dfd-45cc-bb7d-eb55e7eb653d', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:21', '2021-03-10 01:28:21', 16, 0, '', NULL, '2021-03-10 01:28:21', NULL, '2021-03-10 01:28:21', b'0'); | ||
| 117 | +INSERT INTO `inf_api_access_log` VALUES (66, '6b39ec06-2bf5-4d92-9245-18223625251f', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:34', '2021-03-10 01:28:34', 13, 0, '', NULL, '2021-03-10 01:28:34', NULL, '2021-03-10 01:28:34', b'0'); | ||
| 118 | +INSERT INTO `inf_api_access_log` VALUES (67, '74045997-4753-48b6-98ee-1de5106d8633', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:28:47', '2021-03-10 01:28:47', 14, 0, '', NULL, '2021-03-10 01:28:47', NULL, '2021-03-10 01:28:47', b'0'); | ||
| 119 | +INSERT INTO `inf_api_access_log` VALUES (68, '14dcf39c-9b29-4cd0-8c08-9a17cd0234f6', 1, 2, 'dashboard', 'POST', '/api/system/menu/create', '{\"query\":{},\"body\":\"{\\\"parentId\\\":1084,\\\"name\\\":\\\"日志查询\\\",\\\"type\\\":3,\\\"sort\\\":1,\\\"status\\\":0,\\\"permission\\\":\\\"infra:api-error-log:query\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:09', '2021-03-10 01:29:09', 19, 0, '', NULL, '2021-03-10 01:29:09', NULL, '2021-03-10 01:29:09', b'0'); | ||
| 120 | +INSERT INTO `inf_api_access_log` VALUES (69, '6ed66070-c685-4871-9321-372161cb71f7', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:09', '2021-03-10 01:29:09', 15, 0, '', NULL, '2021-03-10 01:29:09', NULL, '2021-03-10 01:29:09', b'0'); | ||
| 121 | +INSERT INTO `inf_api_access_log` VALUES (70, 'f47ae56b-6de3-40b2-9da8-b86f38491645', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1088\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:24', '2021-03-10 01:29:24', 8, 0, '', NULL, '2021-03-10 01:29:24', NULL, '2021-03-10 01:29:24', b'0'); | ||
| 122 | +INSERT INTO `inf_api_access_log` VALUES (71, 'c498e660-4608-4051-bda3-3d980e6873f0', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:24', '2021-03-10 01:29:24', 18, 0, '', NULL, '2021-03-10 01:29:24', NULL, '2021-03-10 01:29:24', b'0'); | ||
| 123 | +INSERT INTO `inf_api_access_log` VALUES (72, '7a9be5f0-16b7-4924-9352-c8c6bdb36f6d', 1, 2, 'dashboard', 'GET', '/api/system/menu/get', '{\"query\":{\"id\":\"1088\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:32', '2021-03-10 01:29:32', 7, 0, '', NULL, '2021-03-10 01:29:32', NULL, '2021-03-10 01:29:32', b'0'); | ||
| 124 | +INSERT INTO `inf_api_access_log` VALUES (73, '7dcc44ce-63f0-4013-b4ee-332de28e473d', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:32', '2021-03-10 01:29:32', 16, 0, '', NULL, '2021-03-10 01:29:32', NULL, '2021-03-10 01:29:32', b'0'); | ||
| 125 | +INSERT INTO `inf_api_access_log` VALUES (74, 'a7541572-c68d-443e-95f6-69d1f6f55fab', 1, 2, 'dashboard', 'POST', '/api/system/menu/update', '{\"query\":{},\"body\":\"{\\\"id\\\":1088,\\\"status\\\":0,\\\"createTime\\\":1615310884000,\\\"name\\\":\\\"日志查询\\\",\\\"permission\\\":\\\"infra:api-access-log:query\\\",\\\"type\\\":3,\\\"sort\\\":1,\\\"parentId\\\":1078,\\\"path\\\":\\\"\\\",\\\"icon\\\":\\\"\\\",\\\"component\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:38', '2021-03-10 01:29:38', 22, 0, '', NULL, '2021-03-10 01:29:38', NULL, '2021-03-10 01:29:38', b'0'); | ||
| 126 | +INSERT INTO `inf_api_access_log` VALUES (75, '822a488f-fc4a-4981-924c-40deba7b8a25', 1, 2, 'dashboard', 'GET', '/api/system/menu/list', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '2021-03-10 01:29:38', '2021-03-10 01:29:38', 14, 0, '', NULL, '2021-03-10 01:29:38', NULL, '2021-03-10 01:29:38', b'0'); | ||
| 52 | COMMIT; | 127 | COMMIT; |
| 53 | 128 | ||
| 54 | -- ---------------------------- | 129 | -- ---------------------------- |
| @@ -78,13 +153,13 @@ CREATE TABLE `inf_api_error_log` ( | @@ -78,13 +153,13 @@ CREATE TABLE `inf_api_error_log` ( | ||
| 78 | `process_status` tinyint(4) NOT NULL COMMENT '处ç†çжæ€', | 153 | `process_status` tinyint(4) NOT NULL COMMENT '处ç†çжæ€', |
| 79 | `process_time` datetime DEFAULT NULL COMMENT 'å¤„ç†æ—¶é—´', | 154 | `process_time` datetime DEFAULT NULL COMMENT 'å¤„ç†æ—¶é—´', |
| 80 | `process_user_id` int(11) DEFAULT '0' COMMENT '处ç†ç”¨æˆ·ç¼–å·', | 155 | `process_user_id` int(11) DEFAULT '0' COMMENT '处ç†ç”¨æˆ·ç¼–å·', |
| 81 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 156 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 82 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 157 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 83 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 158 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 84 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 159 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 85 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 160 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 86 | PRIMARY KEY (`id`) USING BTREE | 161 | PRIMARY KEY (`id`) USING BTREE |
| 87 | -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; | 162 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; |
| 88 | 163 | ||
| 89 | -- ---------------------------- | 164 | -- ---------------------------- |
| 90 | -- Records of inf_api_error_log | 165 | -- Records of inf_api_error_log |
| @@ -105,9 +180,9 @@ CREATE TABLE `inf_config` ( | @@ -105,9 +180,9 @@ CREATE TABLE `inf_config` ( | ||
| 105 | `value` varchar(500) NOT NULL DEFAULT '' COMMENT '傿•°é”®å€¼', | 180 | `value` varchar(500) NOT NULL DEFAULT '' COMMENT '傿•°é”®å€¼', |
| 106 | `sensitive` bit(1) NOT NULL COMMENT 'æ˜¯å¦æ•感', | 181 | `sensitive` bit(1) NOT NULL COMMENT 'æ˜¯å¦æ•感', |
| 107 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 182 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 108 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 183 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 109 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 184 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 110 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 185 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 111 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 186 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 112 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 187 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 113 | PRIMARY KEY (`id`) USING BTREE | 188 | PRIMARY KEY (`id`) USING BTREE |
| @@ -138,9 +213,9 @@ CREATE TABLE `inf_job` ( | @@ -138,9 +213,9 @@ CREATE TABLE `inf_job` ( | ||
| 138 | `retry_count` int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', | 213 | `retry_count` int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•次数', |
| 139 | `retry_interval` int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', | 214 | `retry_interval` int(11) NOT NULL DEFAULT '0' COMMENT 'é‡è¯•é—´éš”', |
| 140 | `monitor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', | 215 | `monitor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '监控超时时间', |
| 141 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 216 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 142 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 217 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 143 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 218 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 144 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 219 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 145 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 220 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 146 | PRIMARY KEY (`id`) USING BTREE | 221 | PRIMARY KEY (`id`) USING BTREE |
| @@ -169,18 +244,69 @@ CREATE TABLE `inf_job_log` ( | @@ -169,18 +244,69 @@ CREATE TABLE `inf_job_log` ( | ||
| 169 | `duration` int(11) DEFAULT NULL COMMENT '执行时长', | 244 | `duration` int(11) DEFAULT NULL COMMENT '执行时长', |
| 170 | `status` tinyint(4) NOT NULL COMMENT '任务状æ€', | 245 | `status` tinyint(4) NOT NULL COMMENT '任务状æ€', |
| 171 | `result` varchar(4000) DEFAULT '' COMMENT '结果数æ®', | 246 | `result` varchar(4000) DEFAULT '' COMMENT '结果数æ®', |
| 172 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 247 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 173 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 248 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 174 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 249 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 175 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 250 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 176 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 251 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 177 | PRIMARY KEY (`id`) USING BTREE | 252 | PRIMARY KEY (`id`) USING BTREE |
| 178 | -) ENGINE=InnoDB AUTO_INCREMENT=4458 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; | 253 | +) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; |
| 179 | 254 | ||
| 180 | -- ---------------------------- | 255 | -- ---------------------------- |
| 181 | -- Records of inf_job_log | 256 | -- Records of inf_job_log |
| 182 | -- ---------------------------- | 257 | -- ---------------------------- |
| 183 | BEGIN; | 258 | BEGIN; |
| 259 | +INSERT INTO `inf_job_log` VALUES (1, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:17:51', '2021-03-09 21:17:51', 61, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:17:51', NULL, '2021-03-09 21:17:51', b'0'); | ||
| 260 | +INSERT INTO `inf_job_log` VALUES (2, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:18:00', '2021-03-09 21:18:00', 16, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:18:00', NULL, '2021-03-09 21:18:00', b'0'); | ||
| 261 | +INSERT INTO `inf_job_log` VALUES (3, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:19:00', '2021-03-09 21:19:00', 10, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:19:00', NULL, '2021-03-09 21:19:00', b'0'); | ||
| 262 | +INSERT INTO `inf_job_log` VALUES (4, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:20:00', '2021-03-09 21:20:00', 12, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:20:00', NULL, '2021-03-09 21:20:00', b'0'); | ||
| 263 | +INSERT INTO `inf_job_log` VALUES (5, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:21:00', '2021-03-09 21:21:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:21:00', NULL, '2021-03-09 21:21:00', b'0'); | ||
| 264 | +INSERT INTO `inf_job_log` VALUES (6, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:22:00', '2021-03-09 21:22:00', 9, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:22:00', NULL, '2021-03-09 21:22:00', b'0'); | ||
| 265 | +INSERT INTO `inf_job_log` VALUES (7, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:23:00', '2021-03-09 21:23:00', 10, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:23:00', NULL, '2021-03-09 21:23:00', b'0'); | ||
| 266 | +INSERT INTO `inf_job_log` VALUES (8, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:24:00', '2021-03-09 21:24:00', 11, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:24:00', NULL, '2021-03-09 21:24:00', b'0'); | ||
| 267 | +INSERT INTO `inf_job_log` VALUES (9, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:25:00', '2021-03-09 21:25:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:25:00', NULL, '2021-03-09 21:25:00', b'0'); | ||
| 268 | +INSERT INTO `inf_job_log` VALUES (10, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:26:00', '2021-03-09 21:26:00', 11, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:26:00', NULL, '2021-03-09 21:26:00', b'0'); | ||
| 269 | +INSERT INTO `inf_job_log` VALUES (11, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:27:00', '2021-03-09 21:27:00', 12, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:27:00', NULL, '2021-03-09 21:27:00', b'0'); | ||
| 270 | +INSERT INTO `inf_job_log` VALUES (12, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:28:00', '2021-03-09 21:28:00', 6, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:28:00', NULL, '2021-03-09 21:28:00', b'0'); | ||
| 271 | +INSERT INTO `inf_job_log` VALUES (13, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:29:00', '2021-03-09 21:29:00', 9, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:29:00', NULL, '2021-03-09 21:29:00', b'0'); | ||
| 272 | +INSERT INTO `inf_job_log` VALUES (14, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:30:00', '2021-03-09 21:30:00', 6, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:30:00', NULL, '2021-03-09 21:30:00', b'0'); | ||
| 273 | +INSERT INTO `inf_job_log` VALUES (15, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:31:00', '2021-03-09 21:31:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:31:00', NULL, '2021-03-09 21:31:00', b'0'); | ||
| 274 | +INSERT INTO `inf_job_log` VALUES (16, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:32:00', '2021-03-09 21:32:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:32:00', NULL, '2021-03-09 21:32:00', b'0'); | ||
| 275 | +INSERT INTO `inf_job_log` VALUES (17, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-09 21:49:02', '2021-03-09 21:49:02', 87, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-09 21:49:02', NULL, '2021-03-09 21:49:02', b'0'); | ||
| 276 | +INSERT INTO `inf_job_log` VALUES (18, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 00:55:34', '2021-03-10 00:55:34', 60, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 00:55:34', NULL, '2021-03-10 00:55:34', b'0'); | ||
| 277 | +INSERT INTO `inf_job_log` VALUES (19, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 00:56:00', '2021-03-10 00:56:00', 16, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 00:56:00', NULL, '2021-03-10 00:56:00', b'0'); | ||
| 278 | +INSERT INTO `inf_job_log` VALUES (20, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 00:57:00', '2021-03-10 00:57:00', 9, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 00:57:00', NULL, '2021-03-10 00:57:00', b'0'); | ||
| 279 | +INSERT INTO `inf_job_log` VALUES (21, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 00:58:00', '2021-03-10 00:58:00', 17, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 00:58:00', NULL, '2021-03-10 00:58:00', b'0'); | ||
| 280 | +INSERT INTO `inf_job_log` VALUES (22, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 00:59:00', '2021-03-10 00:59:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 00:59:00', NULL, '2021-03-10 00:59:00', b'0'); | ||
| 281 | +INSERT INTO `inf_job_log` VALUES (23, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:00:00', '2021-03-10 01:00:00', 10, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:00:00', NULL, '2021-03-10 01:00:00', b'0'); | ||
| 282 | +INSERT INTO `inf_job_log` VALUES (24, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:01:00', '2021-03-10 01:01:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:01:00', NULL, '2021-03-10 01:01:00', b'0'); | ||
| 283 | +INSERT INTO `inf_job_log` VALUES (25, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:02:00', '2021-03-10 01:02:00', 9, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:02:00', NULL, '2021-03-10 01:02:00', b'0'); | ||
| 284 | +INSERT INTO `inf_job_log` VALUES (26, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:03:00', '2021-03-10 01:03:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:03:00', NULL, '2021-03-10 01:03:00', b'0'); | ||
| 285 | +INSERT INTO `inf_job_log` VALUES (27, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:04:00', '2021-03-10 01:04:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:04:00', NULL, '2021-03-10 01:04:00', b'0'); | ||
| 286 | +INSERT INTO `inf_job_log` VALUES (28, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:05:00', '2021-03-10 01:05:00', 16, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:05:00', NULL, '2021-03-10 01:05:00', b'0'); | ||
| 287 | +INSERT INTO `inf_job_log` VALUES (29, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:06:00', '2021-03-10 01:06:00', 15, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:06:00', NULL, '2021-03-10 01:06:00', b'0'); | ||
| 288 | +INSERT INTO `inf_job_log` VALUES (30, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:07:00', '2021-03-10 01:07:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:07:00', NULL, '2021-03-10 01:07:00', b'0'); | ||
| 289 | +INSERT INTO `inf_job_log` VALUES (31, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:08:00', '2021-03-10 01:08:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:08:00', NULL, '2021-03-10 01:08:00', b'0'); | ||
| 290 | +INSERT INTO `inf_job_log` VALUES (32, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:09:00', '2021-03-10 01:09:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:09:00', NULL, '2021-03-10 01:09:00', b'0'); | ||
| 291 | +INSERT INTO `inf_job_log` VALUES (33, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:10:00', '2021-03-10 01:10:00', 16, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:10:00', NULL, '2021-03-10 01:10:00', b'0'); | ||
| 292 | +INSERT INTO `inf_job_log` VALUES (34, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:11:00', '2021-03-10 01:11:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:11:00', NULL, '2021-03-10 01:11:00', b'0'); | ||
| 293 | +INSERT INTO `inf_job_log` VALUES (35, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:12:00', '2021-03-10 01:12:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:12:00', NULL, '2021-03-10 01:12:00', b'0'); | ||
| 294 | +INSERT INTO `inf_job_log` VALUES (36, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:13:00', '2021-03-10 01:13:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:13:00', NULL, '2021-03-10 01:13:00', b'0'); | ||
| 295 | +INSERT INTO `inf_job_log` VALUES (37, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:14:00', '2021-03-10 01:14:00', 6, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:14:00', NULL, '2021-03-10 01:14:00', b'0'); | ||
| 296 | +INSERT INTO `inf_job_log` VALUES (38, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:15:00', '2021-03-10 01:15:00', 5, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:15:00', NULL, '2021-03-10 01:15:00', b'0'); | ||
| 297 | +INSERT INTO `inf_job_log` VALUES (39, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:16:00', '2021-03-10 01:16:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:16:00', NULL, '2021-03-10 01:16:00', b'0'); | ||
| 298 | +INSERT INTO `inf_job_log` VALUES (40, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:17:00', '2021-03-10 01:17:00', 9, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:17:00', NULL, '2021-03-10 01:17:00', b'0'); | ||
| 299 | +INSERT INTO `inf_job_log` VALUES (41, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:18:00', '2021-03-10 01:18:00', 6, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:18:00', NULL, '2021-03-10 01:18:00', b'0'); | ||
| 300 | +INSERT INTO `inf_job_log` VALUES (42, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:19:00', '2021-03-10 01:19:00', 6, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:19:00', NULL, '2021-03-10 01:19:00', b'0'); | ||
| 301 | +INSERT INTO `inf_job_log` VALUES (43, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:20:00', '2021-03-10 01:20:00', 7, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:20:00', NULL, '2021-03-10 01:20:00', b'0'); | ||
| 302 | +INSERT INTO `inf_job_log` VALUES (44, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:21:00', '2021-03-10 01:21:00', 5, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:21:00', NULL, '2021-03-10 01:21:00', b'0'); | ||
| 303 | +INSERT INTO `inf_job_log` VALUES (45, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:23:09', '2021-03-10 01:23:09', 60, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:23:09', NULL, '2021-03-10 01:23:09', b'0'); | ||
| 304 | +INSERT INTO `inf_job_log` VALUES (46, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:25:41', '2021-03-10 01:25:41', 92, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:25:41', NULL, '2021-03-10 01:25:41', b'0'); | ||
| 305 | +INSERT INTO `inf_job_log` VALUES (47, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:26:00', '2021-03-10 01:26:00', 10, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:26:00', NULL, '2021-03-10 01:26:00', b'0'); | ||
| 306 | +INSERT INTO `inf_job_log` VALUES (48, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:27:42', '2021-03-10 01:27:42', 61, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:27:42', NULL, '2021-03-10 01:27:42', b'0'); | ||
| 307 | +INSERT INTO `inf_job_log` VALUES (49, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:28:00', '2021-03-10 01:28:00', 14, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:28:00', NULL, '2021-03-10 01:28:00', b'0'); | ||
| 308 | +INSERT INTO `inf_job_log` VALUES (50, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:29:00', '2021-03-10 01:29:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:29:00', NULL, '2021-03-10 01:29:00', b'0'); | ||
| 309 | +INSERT INTO `inf_job_log` VALUES (51, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-03-10 01:30:00', '2021-03-10 01:30:00', 8, 1, 'ç§»é™¤åœ¨çº¿ä¼šè¯æ•°é‡ä¸º 0 个', NULL, '2021-03-10 01:30:00', NULL, '2021-03-10 01:30:00', b'0'); | ||
| 184 | COMMIT; | 310 | COMMIT; |
| 185 | 311 | ||
| 186 | -- ---------------------------- | 312 | -- ---------------------------- |
| @@ -196,9 +322,9 @@ CREATE TABLE `sys_dept` ( | @@ -196,9 +322,9 @@ CREATE TABLE `sys_dept` ( | ||
| 196 | `phone` varchar(11) DEFAULT NULL COMMENT 'è”系电è¯', | 322 | `phone` varchar(11) DEFAULT NULL COMMENT 'è”系电è¯', |
| 197 | `email` varchar(50) DEFAULT NULL COMMENT '邮箱', | 323 | `email` varchar(50) DEFAULT NULL COMMENT '邮箱', |
| 198 | `status` tinyint(4) NOT NULL COMMENT '部门状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 324 | `status` tinyint(4) NOT NULL COMMENT '部门状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 199 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 325 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 200 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 326 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 201 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 327 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 202 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 328 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 203 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 329 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 204 | PRIMARY KEY (`id`) USING BTREE | 330 | PRIMARY KEY (`id`) USING BTREE |
| @@ -232,9 +358,9 @@ CREATE TABLE `sys_dict_data` ( | @@ -232,9 +358,9 @@ CREATE TABLE `sys_dict_data` ( | ||
| 232 | `dict_type` varchar(100) NOT NULL DEFAULT '' COMMENT 'å—典类型', | 358 | `dict_type` varchar(100) NOT NULL DEFAULT '' COMMENT 'å—典类型', |
| 233 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 359 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 234 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 360 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 235 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 361 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 236 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 362 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 237 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 363 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 238 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 364 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 239 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 365 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 240 | PRIMARY KEY (`id`) USING BTREE | 366 | PRIMARY KEY (`id`) USING BTREE |
| @@ -310,9 +436,9 @@ CREATE TABLE `sys_dict_type` ( | @@ -310,9 +436,9 @@ CREATE TABLE `sys_dict_type` ( | ||
| 310 | `type` varchar(100) NOT NULL DEFAULT '' COMMENT 'å—典类型', | 436 | `type` varchar(100) NOT NULL DEFAULT '' COMMENT 'å—典类型', |
| 311 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 437 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 312 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 438 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 313 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 439 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 314 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 440 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 315 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 441 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 316 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 442 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 317 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 443 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 318 | PRIMARY KEY (`id`) USING BTREE, | 444 | PRIMARY KEY (`id`) USING BTREE, |
| @@ -349,9 +475,9 @@ DROP TABLE IF EXISTS `sys_file`; | @@ -349,9 +475,9 @@ DROP TABLE IF EXISTS `sys_file`; | ||
| 349 | CREATE TABLE `sys_file` ( | 475 | CREATE TABLE `sys_file` ( |
| 350 | `id` varchar(188) NOT NULL COMMENT '文件路径', | 476 | `id` varchar(188) NOT NULL COMMENT '文件路径', |
| 351 | `content` blob NOT NULL COMMENT '文件内容', | 477 | `content` blob NOT NULL COMMENT '文件内容', |
| 352 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 478 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 353 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 479 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 354 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 480 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 355 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 481 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 356 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 482 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 357 | PRIMARY KEY (`id`) USING BTREE | 483 | PRIMARY KEY (`id`) USING BTREE |
| @@ -376,18 +502,20 @@ CREATE TABLE `sys_login_log` ( | @@ -376,18 +502,20 @@ CREATE TABLE `sys_login_log` ( | ||
| 376 | `result` tinyint(4) NOT NULL COMMENT '登陆结果', | 502 | `result` tinyint(4) NOT NULL COMMENT '登陆结果', |
| 377 | `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', | 503 | `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', |
| 378 | `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', | 504 | `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', |
| 379 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 505 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 380 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 506 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 381 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 507 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 382 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 508 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 383 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 509 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 384 | PRIMARY KEY (`id`) USING BTREE | 510 | PRIMARY KEY (`id`) USING BTREE |
| 385 | -) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; | 511 | +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; |
| 386 | 512 | ||
| 387 | -- ---------------------------- | 513 | -- ---------------------------- |
| 388 | -- Records of sys_login_log | 514 | -- Records of sys_login_log |
| 389 | -- ---------------------------- | 515 | -- ---------------------------- |
| 390 | BEGIN; | 516 | BEGIN; |
| 517 | +INSERT INTO `sys_login_log` VALUES (1, 100, '4143cdab-ff1d-46ec-8333-bc48483c4c4b', 'admin', 30, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 518 | +INSERT INTO `sys_login_log` VALUES (2, 100, '783e9c51-4a58-46aa-85f1-66cac5512465', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:11:53', b'0'); | ||
| 391 | COMMIT; | 519 | COMMIT; |
| 392 | 520 | ||
| 393 | -- ---------------------------- | 521 | -- ---------------------------- |
| @@ -405,13 +533,13 @@ CREATE TABLE `sys_menu` ( | @@ -405,13 +533,13 @@ CREATE TABLE `sys_menu` ( | ||
| 405 | `icon` varchar(100) DEFAULT '#' COMMENT 'èœå•å›¾æ ‡', | 533 | `icon` varchar(100) DEFAULT '#' COMMENT 'èœå•å›¾æ ‡', |
| 406 | `component` varchar(255) DEFAULT NULL COMMENT '组件路径', | 534 | `component` varchar(255) DEFAULT NULL COMMENT '组件路径', |
| 407 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'èœå•状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 535 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'èœå•状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 408 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 536 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 409 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 537 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 410 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 538 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 411 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 539 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 412 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 540 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 413 | PRIMARY KEY (`id`) USING BTREE | 541 | PRIMARY KEY (`id`) USING BTREE |
| 414 | -) ENGINE=InnoDB AUTO_INCREMENT=1087 DEFAULT CHARSET=utf8mb4 COMMENT='èœå•æƒé™è¡¨'; | 542 | +) ENGINE=InnoDB AUTO_INCREMENT=1090 DEFAULT CHARSET=utf8mb4 COMMENT='èœå•æƒé™è¡¨'; |
| 415 | 543 | ||
| 416 | -- ---------------------------- | 544 | -- ---------------------------- |
| 417 | -- Records of sys_menu | 545 | -- Records of sys_menu |
| @@ -427,11 +555,11 @@ INSERT INTO `sys_menu` VALUES (102, 'èœå•管ç†', 'system:menu:list', 2, 3, 1, | @@ -427,11 +555,11 @@ INSERT INTO `sys_menu` VALUES (102, 'èœå•管ç†', 'system:menu:list', 2, 3, 1, | ||
| 427 | INSERT INTO `sys_menu` VALUES (103, '部门管ç†', 'system:dept:list', 2, 4, 1, 'dept', 'tree', 'system/dept/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); | 555 | INSERT INTO `sys_menu` VALUES (103, '部门管ç†', 'system:dept:list', 2, 4, 1, 'dept', 'tree', 'system/dept/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); |
| 428 | INSERT INTO `sys_menu` VALUES (104, 'å²—ä½ç®¡ç†', 'system:post:list', 2, 5, 1, 'post', 'post', 'system/post/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); | 556 | INSERT INTO `sys_menu` VALUES (104, 'å²—ä½ç®¡ç†', 'system:post:list', 2, 5, 1, 'post', 'post', 'system/post/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); |
| 429 | INSERT INTO `sys_menu` VALUES (105, 'å—典管ç†', 'system:dict:list', 2, 6, 1, 'dict', 'dict', 'system/dict/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); | 557 | INSERT INTO `sys_menu` VALUES (105, 'å—典管ç†', 'system:dict:list', 2, 6, 1, 'dict', 'dict', 'system/dict/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); |
| 430 | -INSERT INTO `sys_menu` VALUES (106, 'é…置管ç†', 'infra:config:list', 2, 1, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-08 20:03:57', b'0'); | 558 | +INSERT INTO `sys_menu` VALUES (106, 'é…置管ç†', '', 2, 1, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:10', b'0'); |
| 431 | INSERT INTO `sys_menu` VALUES (107, '通知公告', 'system:notice:list', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); | 559 | INSERT INTO `sys_menu` VALUES (107, '通知公告', 'system:notice:list', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); |
| 432 | INSERT INTO `sys_menu` VALUES (108, '日志管ç†', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:34:28', b'0'); | 560 | INSERT INTO `sys_menu` VALUES (108, '日志管ç†', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:34:28', b'0'); |
| 433 | INSERT INTO `sys_menu` VALUES (109, '在线用户', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0'); | 561 | INSERT INTO `sys_menu` VALUES (109, '在线用户', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0'); |
| 434 | -INSERT INTO `sys_menu` VALUES (110, '定时任务', 'infra:job:query', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:36', b'0'); | 562 | +INSERT INTO `sys_menu` VALUES (110, '定时任务', '', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:25:51', b'0'); |
| 435 | INSERT INTO `sys_menu` VALUES (111, 'MySQL 监控', '', 2, 4, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:32', b'0'); | 563 | INSERT INTO `sys_menu` VALUES (111, 'MySQL 监控', '', 2, 4, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:32', b'0'); |
| 436 | INSERT INTO `sys_menu` VALUES (112, 'Java 监控', '', 2, 6, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:41', b'0'); | 564 | INSERT INTO `sys_menu` VALUES (112, 'Java 监控', '', 2, 6, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:41', b'0'); |
| 437 | INSERT INTO `sys_menu` VALUES (113, 'Redis 监控', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:37', b'0'); | 565 | INSERT INTO `sys_menu` VALUES (113, 'Redis 监控', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:37', b'0'); |
| @@ -471,9 +599,9 @@ INSERT INTO `sys_menu` VALUES (1028, 'å—典修改', 'system:dict:edit', 3, 3, 1 | @@ -471,9 +599,9 @@ INSERT INTO `sys_menu` VALUES (1028, 'å—典修改', 'system:dict:edit', 3, 3, 1 | ||
| 471 | INSERT INTO `sys_menu` VALUES (1029, 'å—å…¸åˆ é™¤', 'system:dict:remove', 3, 4, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); | 599 | INSERT INTO `sys_menu` VALUES (1029, 'å—å…¸åˆ é™¤', 'system:dict:remove', 3, 4, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); |
| 472 | INSERT INTO `sys_menu` VALUES (1030, 'å—典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); | 600 | INSERT INTO `sys_menu` VALUES (1030, 'å—典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); |
| 473 | INSERT INTO `sys_menu` VALUES (1031, 'é…置查询', 'infra:config:query', 3, 1, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:00', b'0'); | 601 | INSERT INTO `sys_menu` VALUES (1031, 'é…置查询', 'infra:config:query', 3, 1, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:00', b'0'); |
| 474 | -INSERT INTO `sys_menu` VALUES (1032, 'é…置新增', 'infra:config:add', 3, 2, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:05', b'0'); | ||
| 475 | -INSERT INTO `sys_menu` VALUES (1033, 'é…置修改', 'infra:config:edit', 3, 3, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:33:52', b'0'); | ||
| 476 | -INSERT INTO `sys_menu` VALUES (1034, 'é…ç½®åˆ é™¤', 'infra:config:remove', 3, 4, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:12', b'0'); | 602 | +INSERT INTO `sys_menu` VALUES (1032, 'é…置新增', 'infra:config:create', 3, 2, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:18', b'0'); |
| 603 | +INSERT INTO `sys_menu` VALUES (1033, 'é…置修改', 'infra:config:update', 3, 3, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:30', b'0'); | ||
| 604 | +INSERT INTO `sys_menu` VALUES (1034, 'é…ç½®åˆ é™¤', 'infra:config:delete', 3, 4, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:36', b'0'); | ||
| 477 | INSERT INTO `sys_menu` VALUES (1035, 'é…置导出', 'infra:config:export', 3, 5, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:19', b'0'); | 605 | INSERT INTO `sys_menu` VALUES (1035, 'é…置导出', 'infra:config:export', 3, 5, 106, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 14:34:19', b'0'); |
| 478 | INSERT INTO `sys_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); | 606 | INSERT INTO `sys_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); |
| 479 | INSERT INTO `sys_menu` VALUES (1037, '公告新增', 'system:notice:add', 3, 2, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); | 607 | INSERT INTO `sys_menu` VALUES (1037, '公告新增', 'system:notice:add', 3, 2, 107, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); |
| @@ -511,15 +639,18 @@ INSERT INTO `sys_menu` VALUES (1074, '测试示例表导出', 'tool:test-demo:ex | @@ -511,15 +639,18 @@ INSERT INTO `sys_menu` VALUES (1074, '测试示例表导出', 'tool:test-demo:ex | ||
| 511 | INSERT INTO `sys_menu` VALUES (1075, '任务触å‘', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0'); | 639 | INSERT INTO `sys_menu` VALUES (1075, '任务触å‘', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0'); |
| 512 | INSERT INTO `sys_menu` VALUES (1076, 'æ•°æ®åº“文档', '', 2, 5, 3, 'db-doc', 'table', 'tool/dbDoc/index', 0, '', '2021-02-08 01:41:47', '', '2021-02-08 01:49:00', b'0'); | 640 | INSERT INTO `sys_menu` VALUES (1076, 'æ•°æ®åº“文档', '', 2, 5, 3, 'db-doc', 'table', 'tool/dbDoc/index', 0, '', '2021-02-08 01:41:47', '', '2021-02-08 01:49:00', b'0'); |
| 513 | INSERT INTO `sys_menu` VALUES (1077, '链路追踪', '', 2, 7, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '', '2021-02-26 02:18:45', b'0'); | 641 | INSERT INTO `sys_menu` VALUES (1077, '链路追踪', '', 2, 7, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '', '2021-02-26 02:18:45', b'0'); |
| 514 | -INSERT INTO `sys_menu` VALUES (1078, '访问日志', 'infra:api-access-log:query', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, '', '2021-02-26 01:32:59', '', '2021-02-26 07:53:46', b'0'); | 642 | +INSERT INTO `sys_menu` VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:09', b'0'); |
| 515 | INSERT INTO `sys_menu` VALUES (1079, 'API 访问日志表创建', 'system:api-access-log:create', 3, 1, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:00', b'1'); | 643 | INSERT INTO `sys_menu` VALUES (1079, 'API 访问日志表创建', 'system:api-access-log:create', 3, 1, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:00', b'1'); |
| 516 | INSERT INTO `sys_menu` VALUES (1080, 'API 访问日志表更新', 'system:api-access-log:update', 3, 2, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:08', b'1'); | 644 | INSERT INTO `sys_menu` VALUES (1080, 'API 访问日志表更新', 'system:api-access-log:update', 3, 2, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:08', b'1'); |
| 517 | INSERT INTO `sys_menu` VALUES (1081, 'API è®¿é—®æ—¥å¿—è¡¨åˆ é™¤', 'system:api-access-log:delete', 3, 3, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:27', b'1'); | 645 | INSERT INTO `sys_menu` VALUES (1081, 'API è®¿é—®æ—¥å¿—è¡¨åˆ é™¤', 'system:api-access-log:delete', 3, 3, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:27', b'1'); |
| 518 | -INSERT INTO `sys_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 4, 1078, '', '', '', 0, '', '2021-02-26 01:32:59', '', '2021-02-26 02:23:22', b'0'); | 646 | +INSERT INTO `sys_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:13', b'0'); |
| 519 | INSERT INTO `sys_menu` VALUES (1083, 'API 日志', '', 2, 3, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '', '2021-02-26 02:20:17', b'0'); | 647 | INSERT INTO `sys_menu` VALUES (1083, 'API 日志', '', 2, 3, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '', '2021-02-26 02:20:17', b'0'); |
| 520 | INSERT INTO `sys_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:54:40', b'0'); | 648 | INSERT INTO `sys_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:54:40', b'0'); |
| 521 | -INSERT INTO `sys_menu` VALUES (1085, '日志处ç†', 'infra:api-error-log:update-status', 3, 1, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:53:20', b'0'); | ||
| 522 | -INSERT INTO `sys_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 4, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:53:20', b'0'); | 649 | +INSERT INTO `sys_menu` VALUES (1085, '日志处ç†', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:18', b'0'); |
| 650 | +INSERT INTO `sys_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:21', b'0'); | ||
| 651 | +INSERT INTO `sys_menu` VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', 0, '1', '2021-03-10 01:26:19', '1', '2021-03-10 01:26:19', b'0'); | ||
| 652 | +INSERT INTO `sys_menu` VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', 0, '1', '2021-03-10 01:28:04', '1', '2021-03-10 01:29:38', b'0'); | ||
| 653 | +INSERT INTO `sys_menu` VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', 0, '1', '2021-03-10 01:29:09', '1', '2021-03-10 01:29:09', b'0'); | ||
| 523 | COMMIT; | 654 | COMMIT; |
| 524 | 655 | ||
| 525 | -- ---------------------------- | 656 | -- ---------------------------- |
| @@ -532,9 +663,9 @@ CREATE TABLE `sys_notice` ( | @@ -532,9 +663,9 @@ CREATE TABLE `sys_notice` ( | ||
| 532 | `content` text NOT NULL COMMENT '公告内容', | 663 | `content` text NOT NULL COMMENT '公告内容', |
| 533 | `notice_type` tinyint(4) NOT NULL COMMENT '公告类型(1通知 2公告)', | 664 | `notice_type` tinyint(4) NOT NULL COMMENT '公告类型(1通知 2公告)', |
| 534 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0æ£å¸¸ 1å…³é—)', | 665 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '公告状æ€ï¼ˆ0æ£å¸¸ 1å…³é—)', |
| 535 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 666 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 536 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 667 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 537 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 668 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 538 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 669 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 539 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 670 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 540 | PRIMARY KEY (`id`) USING BTREE | 671 | PRIMARY KEY (`id`) USING BTREE |
| @@ -573,18 +704,31 @@ CREATE TABLE `sys_operate_log` ( | @@ -573,18 +704,31 @@ CREATE TABLE `sys_operate_log` ( | ||
| 573 | `result_code` int(11) NOT NULL DEFAULT '0' COMMENT '结果ç ', | 704 | `result_code` int(11) NOT NULL DEFAULT '0' COMMENT '结果ç ', |
| 574 | `result_msg` varchar(512) DEFAULT '' COMMENT '结果æç¤º', | 705 | `result_msg` varchar(512) DEFAULT '' COMMENT '结果æç¤º', |
| 575 | `result_data` varchar(4000) DEFAULT '' COMMENT '结果数æ®', | 706 | `result_data` varchar(4000) DEFAULT '' COMMENT '结果数æ®', |
| 576 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 707 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 577 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 708 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 578 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 709 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 579 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 710 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 580 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 711 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 581 | PRIMARY KEY (`id`) USING BTREE | 712 | PRIMARY KEY (`id`) USING BTREE |
| 582 | -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COMMENT='æ“作日志记录'; | 713 | +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COMMENT='æ“作日志记录'; |
| 583 | 714 | ||
| 584 | -- ---------------------------- | 715 | -- ---------------------------- |
| 585 | -- Records of sys_operate_log | 716 | -- Records of sys_operate_log |
| 586 | -- ---------------------------- | 717 | -- ---------------------------- |
| 587 | BEGIN; | 718 | BEGIN; |
| 719 | +INSERT INTO `sys_operate_log` VALUES (1, 'de0ba312-0b69-4362-b674-7da54cacfb06', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"é…置管ç†\",\"permission\":\"\",\"type\":2,\"sort\":1,\"parentId\":2,\"path\":\"config\",\"icon\":\"edit\",\"component\":\"infra/config/index\",\"status\":0,\"id\":106}}', '2021-03-10 01:12:09', 27, 0, '', 'true', NULL, '2021-03-10 01:12:10', NULL, '2021-03-10 01:12:10', b'0'); | ||
| 720 | +INSERT INTO `sys_operate_log` VALUES (2, '17138b71-73b5-40c0-b735-57a1aab63a8d', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"é…置新增\",\"permission\":\"infra:config:create\",\"type\":3,\"sort\":2,\"parentId\":106,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1032}}', '2021-03-10 01:12:18', 16, 0, '', 'true', NULL, '2021-03-10 01:12:18', NULL, '2021-03-10 01:12:18', b'0'); | ||
| 721 | +INSERT INTO `sys_operate_log` VALUES (3, '74aff106-7785-4b36-b48f-0ff46d7af074', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"é…置修改\",\"permission\":\"infra:config:update\",\"type\":3,\"sort\":3,\"parentId\":106,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1033}}', '2021-03-10 01:12:30', 16, 0, '', 'true', NULL, '2021-03-10 01:12:30', NULL, '2021-03-10 01:12:30', b'0'); | ||
| 722 | +INSERT INTO `sys_operate_log` VALUES (4, '2cdfcdb3-2059-426b-8d18-4f08ac3d685b', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"é…ç½®åˆ é™¤\",\"permission\":\"infra:config:delete\",\"type\":3,\"sort\":4,\"parentId\":106,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1034}}', '2021-03-10 01:12:36', 14, 0, '', 'true', NULL, '2021-03-10 01:12:36', NULL, '2021-03-10 01:12:36', b'0'); | ||
| 723 | +INSERT INTO `sys_operate_log` VALUES (5, '72652932-6219-4298-b057-86afde0ce065', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"定时任务\",\"permission\":\"\",\"type\":2,\"sort\":2,\"parentId\":2,\"path\":\"job\",\"icon\":\"job\",\"component\":\"infra/job/index\",\"status\":0,\"id\":110}}', '2021-03-10 01:25:51', 28, 0, '', 'true', NULL, '2021-03-10 01:25:51', NULL, '2021-03-10 01:25:51', b'0'); | ||
| 724 | +INSERT INTO `sys_operate_log` VALUES (6, '9160878f-9a8d-47d9-bb54-271263dbc63c', 1, 'èœå•', '创建èœå•', 2, '', '', 'POST', '/api/system/menu/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.createMenu(SysMenuCreateReqVO)', '{\"reqVO\":{\"name\":\"任务查询\",\"permission\":\"infra:job:query\",\"type\":3,\"sort\":1,\"parentId\":110,\"path\":null,\"icon\":null,\"component\":null,\"status\":0}}', '2021-03-10 01:26:19', 16, 0, '', '1087', NULL, '2021-03-10 01:26:19', NULL, '2021-03-10 01:26:19', b'0'); | ||
| 725 | +INSERT INTO `sys_operate_log` VALUES (7, 'b6e1fbd8-1a2d-4d83-8cab-306dbdecb062', 1, 'èœå•', '创建èœå•', 2, '', '', 'POST', '/api/system/menu/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.createMenu(SysMenuCreateReqVO)', '{\"reqVO\":{\"name\":\"日志查询\",\"permission\":\"infra:api-error-log:query\",\"type\":3,\"sort\":1,\"parentId\":1078,\"path\":null,\"icon\":null,\"component\":null,\"status\":0}}', '2021-03-10 01:28:04', 24, 0, '', '1088', NULL, '2021-03-10 01:28:04', NULL, '2021-03-10 01:28:04', b'0'); | ||
| 726 | +INSERT INTO `sys_operate_log` VALUES (8, 'be86e04e-0dc9-4a68-8df0-b03ef0ed25cb', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"访问日志\",\"permission\":\"\",\"type\":2,\"sort\":1,\"parentId\":1083,\"path\":\"api-access-log\",\"icon\":\"log\",\"component\":\"infra/apiAccessLog/index\",\"status\":0,\"id\":1078}}', '2021-03-10 01:28:09', 21, 0, '', 'true', NULL, '2021-03-10 01:28:09', NULL, '2021-03-10 01:28:09', b'0'); | ||
| 727 | +INSERT INTO `sys_operate_log` VALUES (9, 'f744da18-ddc7-43ed-a85c-f88104734dbc', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志导出\",\"permission\":\"infra:api-access-log:export\",\"type\":3,\"sort\":2,\"parentId\":1078,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1082}}', '2021-03-10 01:28:13', 18, 0, '', 'true', NULL, '2021-03-10 01:28:13', NULL, '2021-03-10 01:28:13', b'0'); | ||
| 728 | +INSERT INTO `sys_operate_log` VALUES (10, '3ebdb770-e942-4574-85b5-77f641a3ec54', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志处ç†\",\"permission\":\"infra:api-error-log:update-status\",\"type\":3,\"sort\":2,\"parentId\":1084,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1085}}', '2021-03-10 01:28:18', 18, 0, '', 'true', NULL, '2021-03-10 01:28:18', NULL, '2021-03-10 01:28:18', b'0'); | ||
| 729 | +INSERT INTO `sys_operate_log` VALUES (11, '51d05bc9-b8a1-44a8-a141-f139b1843f0c', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志导出\",\"permission\":\"infra:api-error-log:export\",\"type\":3,\"sort\":3,\"parentId\":1084,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1086}}', '2021-03-10 01:28:21', 16, 0, '', 'true', NULL, '2021-03-10 01:28:21', NULL, '2021-03-10 01:28:21', b'0'); | ||
| 730 | +INSERT INTO `sys_operate_log` VALUES (12, 'b5829295-81a5-47e1-9755-328f020d7037', 1, 'èœå•', '创建èœå•', 2, '', '', 'POST', '/api/system/menu/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.createMenu(SysMenuCreateReqVO)', '{\"reqVO\":{\"name\":\"日志查询\",\"permission\":\"infra:api-error-log:query\",\"type\":3,\"sort\":1,\"parentId\":1084,\"path\":null,\"icon\":null,\"component\":null,\"status\":0}}', '2021-03-10 01:29:09', 14, 0, '', '1089', NULL, '2021-03-10 01:29:09', NULL, '2021-03-10 01:29:09', b'0'); | ||
| 731 | +INSERT INTO `sys_operate_log` VALUES (13, 'f8797735-d948-43f9-9701-dac4533cee31', 1, 'èœå•', '修改èœå•', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志查询\",\"permission\":\"infra:api-access-log:query\",\"type\":3,\"sort\":1,\"parentId\":1078,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1088}}', '2021-03-10 01:29:38', 17, 0, '', 'true', NULL, '2021-03-10 01:29:38', NULL, '2021-03-10 01:29:38', b'0'); | ||
| 588 | COMMIT; | 732 | COMMIT; |
| 589 | 733 | ||
| 590 | -- ---------------------------- | 734 | -- ---------------------------- |
| @@ -598,9 +742,9 @@ CREATE TABLE `sys_post` ( | @@ -598,9 +742,9 @@ CREATE TABLE `sys_post` ( | ||
| 598 | `sort` int(4) NOT NULL COMMENT '显示顺åº', | 742 | `sort` int(4) NOT NULL COMMENT '显示顺åº', |
| 599 | `status` tinyint(4) NOT NULL COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 743 | `status` tinyint(4) NOT NULL COMMENT '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 600 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 744 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 601 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 745 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 602 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 746 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 603 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 747 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 604 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 748 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 605 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 749 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 606 | PRIMARY KEY (`id`) USING BTREE | 750 | PRIMARY KEY (`id`) USING BTREE |
| @@ -631,9 +775,9 @@ CREATE TABLE `sys_role` ( | @@ -631,9 +775,9 @@ CREATE TABLE `sys_role` ( | ||
| 631 | `status` tinyint(4) NOT NULL COMMENT '角色状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 775 | `status` tinyint(4) NOT NULL COMMENT '角色状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 632 | `type` tinyint(4) NOT NULL COMMENT '角色类型', | 776 | `type` tinyint(4) NOT NULL COMMENT '角色类型', |
| 633 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 777 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 634 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 778 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 635 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 779 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 636 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 780 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 637 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 781 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 638 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 782 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 639 | PRIMARY KEY (`id`) USING BTREE | 783 | PRIMARY KEY (`id`) USING BTREE |
| @@ -656,9 +800,9 @@ CREATE TABLE `sys_role_menu` ( | @@ -656,9 +800,9 @@ CREATE TABLE `sys_role_menu` ( | ||
| 656 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编å·', | 800 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编å·', |
| 657 | `role_id` bigint(20) NOT NULL COMMENT '角色ID', | 801 | `role_id` bigint(20) NOT NULL COMMENT '角色ID', |
| 658 | `menu_id` bigint(20) NOT NULL COMMENT 'èœå•ID', | 802 | `menu_id` bigint(20) NOT NULL COMMENT 'èœå•ID', |
| 659 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 803 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 660 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 804 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 661 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 805 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 662 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 806 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 663 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 807 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 664 | PRIMARY KEY (`id`) USING BTREE | 808 | PRIMARY KEY (`id`) USING BTREE |
| @@ -843,9 +987,9 @@ CREATE TABLE `sys_user` ( | @@ -843,9 +987,9 @@ CREATE TABLE `sys_user` ( | ||
| 843 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'å¸å·çжæ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', | 987 | `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'å¸å·çжæ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', |
| 844 | `login_ip` varchar(50) DEFAULT '' COMMENT '最åŽç™»å½•IP', | 988 | `login_ip` varchar(50) DEFAULT '' COMMENT '最åŽç™»å½•IP', |
| 845 | `login_date` datetime DEFAULT NULL COMMENT '最åŽç™»å½•æ—¶é—´', | 989 | `login_date` datetime DEFAULT NULL COMMENT '最åŽç™»å½•æ—¶é—´', |
| 846 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 990 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 847 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 991 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 848 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 992 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 849 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 993 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 850 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 994 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 851 | PRIMARY KEY (`id`) USING BTREE | 995 | PRIMARY KEY (`id`) USING BTREE |
| @@ -870,9 +1014,9 @@ CREATE TABLE `sys_user_role` ( | @@ -870,9 +1014,9 @@ CREATE TABLE `sys_user_role` ( | ||
| 870 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编å·', | 1014 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增编å·', |
| 871 | `user_id` bigint(20) NOT NULL COMMENT '用户ID', | 1015 | `user_id` bigint(20) NOT NULL COMMENT '用户ID', |
| 872 | `role_id` bigint(20) NOT NULL COMMENT '角色ID', | 1016 | `role_id` bigint(20) NOT NULL COMMENT '角色ID', |
| 873 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 1017 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 874 | `create_time` datetime DEFAULT NULL COMMENT '创建时间', | 1018 | `create_time` datetime DEFAULT NULL COMMENT '创建时间', |
| 875 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 1019 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 876 | `update_time` datetime DEFAULT NULL COMMENT 'æ›´æ–°æ—¶é—´', | 1020 | `update_time` datetime DEFAULT NULL COMMENT 'æ›´æ–°æ—¶é—´', |
| 877 | `deleted` bit(1) DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1021 | `deleted` bit(1) DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 878 | PRIMARY KEY (`id`) USING BTREE | 1022 | PRIMARY KEY (`id`) USING BTREE |
| @@ -898,11 +1042,13 @@ DROP TABLE IF EXISTS `sys_user_session`; | @@ -898,11 +1042,13 @@ DROP TABLE IF EXISTS `sys_user_session`; | ||
| 898 | CREATE TABLE `sys_user_session` ( | 1042 | CREATE TABLE `sys_user_session` ( |
| 899 | `id` varchar(32) NOT NULL COMMENT '会è¯ç¼–å·', | 1043 | `id` varchar(32) NOT NULL COMMENT '会è¯ç¼–å·', |
| 900 | `user_id` bigint(20) NOT NULL COMMENT '用户编å·', | 1044 | `user_id` bigint(20) NOT NULL COMMENT '用户编å·', |
| 1045 | + `session_timeout` datetime NOT NULL COMMENT '会è¯è¶…æ—¶æ—¶é—´', | ||
| 1046 | + `username` varchar(30) NOT NULL COMMENT '用户账å·', | ||
| 901 | `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', | 1047 | `user_ip` varchar(50) NOT NULL COMMENT '用户 IP', |
| 902 | `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', | 1048 | `user_agent` varchar(512) NOT NULL COMMENT 'æµè§ˆå™¨ UA', |
| 903 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 1049 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 904 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 1050 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 905 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 1051 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 906 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1052 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 907 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1053 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 908 | PRIMARY KEY (`id`) USING BTREE | 1054 | PRIMARY KEY (`id`) USING BTREE |
| @@ -912,68 +1058,7 @@ CREATE TABLE `sys_user_session` ( | @@ -912,68 +1058,7 @@ CREATE TABLE `sys_user_session` ( | ||
| 912 | -- Records of sys_user_session | 1058 | -- Records of sys_user_session |
| 913 | -- ---------------------------- | 1059 | -- ---------------------------- |
| 914 | BEGIN; | 1060 | BEGIN; |
| 915 | -INSERT INTO `sys_user_session` VALUES ('015797486c564c01b128cb2662bfa1f9', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 03:20:22', '', '2021-02-08 03:20:22', b'0'); | ||
| 916 | -INSERT INTO `sys_user_session` VALUES ('019f009268e24cc1957c46763eef1fd4', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 08:36:48', '', '2021-02-14 20:04:33', b'0'); | ||
| 917 | -INSERT INTO `sys_user_session` VALUES ('037f130370a744a4b1db19aef205b8ae', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 20:38:37', '', '2021-02-08 20:38:37', b'0'); | ||
| 918 | -INSERT INTO `sys_user_session` VALUES ('04d51ff81ad54d05ab2f29e66b2a02f2', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 17:46:10', '', '2021-02-11 00:58:19', b'0'); | ||
| 919 | -INSERT INTO `sys_user_session` VALUES ('055057e3356b4c249d56a6627ca057a7', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-04 16:54:24', '', '2021-03-05 01:25:51', b'0'); | ||
| 920 | -INSERT INTO `sys_user_session` VALUES ('064ba2d647704f57bdf36a1803a724d7', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 02:17:35', '', '2021-02-27 12:04:09', b'0'); | ||
| 921 | -INSERT INTO `sys_user_session` VALUES ('0df60899301d4080bd4164f24bccf18b', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 13:05:42', '', '2021-02-14 22:57:44', b'0'); | ||
| 922 | -INSERT INTO `sys_user_session` VALUES ('1127b5eb9b0c4f9fa382d4d98a8a4a38', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:49:00', '', '2021-02-10 11:10:31', b'0'); | ||
| 923 | -INSERT INTO `sys_user_session` VALUES ('11aa2d7861d445349790804fa8676754', 1, '127.0.0.1', 'Mozilla/5.0 (Linux; Android 10; PCT-AL10 Build/HUAWEIPCT-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.1.1841(0x28000159) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '', '2021-02-09 00:06:03', '', '2021-02-09 00:06:03', b'0'); | ||
| 924 | -INSERT INTO `sys_user_session` VALUES ('135db2c6d88a4f41aaf4df46f3a3e0ea', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 01:44:25', '', '2021-03-06 01:44:25', b'0'); | ||
| 925 | -INSERT INTO `sys_user_session` VALUES ('1bcac32d34b94422893f10718f643320', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 12:14:10', '', '2021-02-09 12:14:10', b'0'); | ||
| 926 | -INSERT INTO `sys_user_session` VALUES ('20109910c52e4b02bbc0531212bff8cb', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 02:39:48', '', '2021-02-06 02:39:48', b'0'); | ||
| 927 | -INSERT INTO `sys_user_session` VALUES ('2024509755b3444690c2a1dddaebd812', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:22:30', '', '2021-02-05 06:22:30', b'0'); | ||
| 928 | -INSERT INTO `sys_user_session` VALUES ('260facb728964db7a3df8461b4eebe86', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 23:10:08', '', '2021-02-08 23:10:08', b'0'); | ||
| 929 | -INSERT INTO `sys_user_session` VALUES ('27858c1f13c64a2a8889063932419885', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 18:27:13', '', '2021-02-20 16:11:21', b'0'); | ||
| 930 | -INSERT INTO `sys_user_session` VALUES ('27d6db8abb3b4ed88d446ad489b9db23', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 06:38:34', '', '2021-02-14 10:57:34', b'0'); | ||
| 931 | -INSERT INTO `sys_user_session` VALUES ('27dbe0b1051b41eb9efe6558af7cd681', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 00:51:14', '', '2021-03-06 19:10:23', b'0'); | ||
| 932 | -INSERT INTO `sys_user_session` VALUES ('285af833677642448bbd19c40a279825', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 04:17:09', '', '2021-02-18 20:23:05', b'0'); | ||
| 933 | -INSERT INTO `sys_user_session` VALUES ('31e5ff8584794ca58460ecf68a177c3f', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 11:48:57', '', '2021-02-12 20:56:44', b'0'); | ||
| 934 | -INSERT INTO `sys_user_session` VALUES ('39cdef31685d4e93931a053d88ff0279', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 08:09:33', '', '2021-02-05 08:09:33', b'0'); | ||
| 935 | -INSERT INTO `sys_user_session` VALUES ('3e111c66356d47da8ffc2755bfa3db52', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 14:00:25', '', '2021-02-09 14:00:25', b'0'); | ||
| 936 | -INSERT INTO `sys_user_session` VALUES ('3f308ac8ff26481e829261dd14babbbb', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 01:33:07', '', '2021-02-17 22:01:24', b'0'); | ||
| 937 | -INSERT INTO `sys_user_session` VALUES ('452d44e0616c4dca93485ce67ac946df', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 03:41:56', '', '2021-03-06 21:59:07', b'0'); | ||
| 938 | -INSERT INTO `sys_user_session` VALUES ('50274d6c400f42f7bd5391a12858e262', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 11:45:04', '', '2021-02-26 11:45:04', b'0'); | ||
| 939 | -INSERT INTO `sys_user_session` VALUES ('5636ae58b9644ea1b4ed934b025b76ea', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 04:24:59', '', '2021-02-09 18:40:06', b'0'); | ||
| 940 | -INSERT INTO `sys_user_session` VALUES ('5891c4873bf746989a132929449d5f2b', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 01:55:18', '', '2021-03-06 20:55:38', b'0'); | ||
| 941 | -INSERT INTO `sys_user_session` VALUES ('597956fbc5b34363981530b24e1b5327', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 13:47:15', '', '2021-02-12 20:36:16', b'0'); | ||
| 942 | -INSERT INTO `sys_user_session` VALUES ('599102a1e8414ab59eddaf5492f98dad', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 06:40:37', '', '2021-02-27 21:25:52', b'0'); | ||
| 943 | -INSERT INTO `sys_user_session` VALUES ('5a9b736ccaa8452394c57ac82bd0815e', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 10:57:52', '', '2021-02-10 16:52:48', b'0'); | ||
| 944 | -INSERT INTO `sys_user_session` VALUES ('5aaeaa5c89434c6bbfa6c5af55097093', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 01:28:32', '', '2021-02-27 10:34:25', b'0'); | ||
| 945 | -INSERT INTO `sys_user_session` VALUES ('5b6787e6cbfa4c7faba0dc825fc02816', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 17:25:20', '', '2021-02-20 14:49:27', b'0'); | ||
| 946 | -INSERT INTO `sys_user_session` VALUES ('604ac07123a445ee8a81e58db1d6d695', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 16:33:53', '', '2021-02-05 16:33:53', b'0'); | ||
| 947 | -INSERT INTO `sys_user_session` VALUES ('648563ff4a7f454dac0385cca0581fb3', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 09:34:50', '', '2021-02-19 09:55:44', b'0'); | ||
| 948 | -INSERT INTO `sys_user_session` VALUES ('64fd3d0a54754b8fa13b62d2f261b1e2', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 01:36:09', '', '2021-02-09 16:05:22', b'0'); | ||
| 949 | -INSERT INTO `sys_user_session` VALUES ('661be9d3983e4e2eb8b346c1329015f5', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 19:46:45', '', '2021-02-13 12:02:29', b'0'); | ||
| 950 | -INSERT INTO `sys_user_session` VALUES ('6acbf1f210ff4c6594acb3505f0c3738', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 12:16:36', '', '2021-02-14 22:37:22', b'0'); | ||
| 951 | -INSERT INTO `sys_user_session` VALUES ('6e7e89c4948f45658eb74878457ac611', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 21:29:20', '', '2021-02-23 01:54:44', b'0'); | ||
| 952 | -INSERT INTO `sys_user_session` VALUES ('73c66b705ed94e18bc53df61abc2d102', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 15:00:55', '', '2021-02-06 15:00:55', b'0'); | ||
| 953 | -INSERT INTO `sys_user_session` VALUES ('73cc914671034f3190f09f520d1b39e9', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-01-26 08:29:27', '', '2021-01-26 08:29:50', b'1'); | ||
| 954 | -INSERT INTO `sys_user_session` VALUES ('7b008d71139f48a4903aeaab0bbbef2e', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 04:38:15', '', '2021-03-06 04:38:15', b'0'); | ||
| 955 | -INSERT INTO `sys_user_session` VALUES ('7cbd0fdfb9304f298abb9ee2f58f7230', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 20:02:24', '', '2021-02-08 20:02:24', b'0'); | ||
| 956 | -INSERT INTO `sys_user_session` VALUES ('830a1687977b44969025177ad3b6d051', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-10 01:56:00', '', '2021-02-10 01:56:00', b'0'); | ||
| 957 | -INSERT INTO `sys_user_session` VALUES ('8331dbbca7be4348a3d2d02bf559b65e', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 13:29:04', '', '2021-02-10 19:06:26', b'0'); | ||
| 958 | -INSERT INTO `sys_user_session` VALUES ('897714de63634dba9ac235247f9860c2', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-03-06 06:27:27', '', '2021-03-06 06:27:27', b'0'); | ||
| 959 | -INSERT INTO `sys_user_session` VALUES ('8d7668c1276344ecbffaf7e4420595d7', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 09:56:09', '', '2021-02-19 19:17:42', b'0'); | ||
| 960 | -INSERT INTO `sys_user_session` VALUES ('9a3a5b8dee1841b69d70454ce23a53a3', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 00:09:49', '', '2021-02-27 01:27:20', b'0'); | ||
| 961 | -INSERT INTO `sys_user_session` VALUES ('9cc71dc2d7a24b978db1bfe0e4bae349', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-01-26 08:30:01', '', '2021-01-26 08:30:01', b'0'); | ||
| 962 | -INSERT INTO `sys_user_session` VALUES ('9e47f4bfee5e444194530de88900e259', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 20:25:02', '', '2021-02-23 01:54:51', b'0'); | ||
| 963 | -INSERT INTO `sys_user_session` VALUES ('a07756b7a4b24117b0bd14ec2c68b516', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 07:47:21', '', '2021-02-27 23:12:38', b'0'); | ||
| 964 | -INSERT INTO `sys_user_session` VALUES ('a1d01dbed7ff4b6392c3f27c18ce8778', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 07:36:14', '', '2021-02-14 12:13:56', b'0'); | ||
| 965 | -INSERT INTO `sys_user_session` VALUES ('a63c2208dd824440999bee9abc22ea7a', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-25 20:45:24', '', '2021-02-25 20:45:24', b'0'); | ||
| 966 | -INSERT INTO `sys_user_session` VALUES ('a7c495d00e2e4543ba943b4edb8c8176', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-26 03:44:46', '', '2021-02-27 12:50:23', b'0'); | ||
| 967 | -INSERT INTO `sys_user_session` VALUES ('a93edff183c447719ecb627d40ca22a6', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 20:28:51', '', '2021-02-05 20:28:51', b'0'); | ||
| 968 | -INSERT INTO `sys_user_session` VALUES ('aa22b7a5754b440e957ec47b832c9fd6', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 21:22:31', '', '2021-02-06 21:22:31', b'0'); | ||
| 969 | -INSERT INTO `sys_user_session` VALUES ('b3881aa0b09b4bcdaf9e5ce5f2bbf15a', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 20:18:33', '', '2021-02-09 20:18:33', b'0'); | ||
| 970 | -INSERT INTO `sys_user_session` VALUES ('bafb6445d05a4ee1bd9cdcf2ee83aea9', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 13:57:15', '', '2021-02-09 13:57:15', b'0'); | ||
| 971 | -INSERT INTO `sys_user_session` VALUES ('c1ede4001ac945f8844b3c7abdc86119', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 03:05:18', '', '2021-02-08 03:05:18', b'0'); | ||
| 972 | -INSERT INTO `sys_user_session` VALUES ('c527dcd973454664a75bbf5dbeae834a', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 17:06:03', '', '2021-02-22 20:33:03', b'0'); | ||
| 973 | -INSERT INTO `sys_user_session` VALUES ('df87c2afa8de4559a091292434df9fd8', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-09 20:05:45', '', '2021-02-23 00:25:16', b'0'); | ||
| 974 | -INSERT INTO `sys_user_session` VALUES ('e3ad1ef8b9aa4b329855b29c7b372e8f', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:21:44', '', '2021-02-05 06:21:44', b'0'); | ||
| 975 | -INSERT INTO `sys_user_session` VALUES ('ea0d48776db84da4ac0f4c2adf62c366', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-08 07:02:03', '', '2021-02-08 07:02:03', b'0'); | ||
| 976 | -INSERT INTO `sys_user_session` VALUES ('f881f7dc67d04cd29574657fdde32a62', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 08:53:20', '', '2021-02-05 08:53:20', b'0'); | 1061 | +INSERT INTO `sys_user_session` VALUES ('f853b50d064340a581e9a49bba9411fc', 1, '2021-03-10 01:55:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', NULL, '2021-03-10 01:11:53', NULL, '2021-03-10 01:25:41', b'0'); |
| 977 | COMMIT; | 1062 | COMMIT; |
| 978 | 1063 | ||
| 979 | -- ---------------------------- | 1064 | -- ---------------------------- |
| @@ -1000,13 +1085,13 @@ CREATE TABLE `tool_codegen_column` ( | @@ -1000,13 +1085,13 @@ CREATE TABLE `tool_codegen_column` ( | ||
| 1000 | `list_operation_condition` varchar(32) NOT NULL DEFAULT '=' COMMENT 'List 查询æ“作的æ¡ä»¶ç±»åž‹', | 1085 | `list_operation_condition` varchar(32) NOT NULL DEFAULT '=' COMMENT 'List 查询æ“作的æ¡ä»¶ç±»åž‹', |
| 1001 | `list_operation_result` bit(1) NOT NULL COMMENT '是å¦ä¸º List 查询æ“ä½œçš„è¿”å›žå—æ®µ', | 1086 | `list_operation_result` bit(1) NOT NULL COMMENT '是å¦ä¸º List 查询æ“ä½œçš„è¿”å›žå—æ®µ', |
| 1002 | `html_type` varchar(32) NOT NULL COMMENT '显示类型', | 1087 | `html_type` varchar(32) NOT NULL COMMENT '显示类型', |
| 1003 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 1088 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 1004 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 1089 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 1005 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 1090 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 1006 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1091 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1007 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1092 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1008 | PRIMARY KEY (`id`) USING BTREE | 1093 | PRIMARY KEY (`id`) USING BTREE |
| 1009 | -) ENGINE=InnoDB AUTO_INCREMENT=369 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å—段定义'; | 1094 | +) ENGINE=InnoDB AUTO_INCREMENT=381 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å—段定义'; |
| 1010 | 1095 | ||
| 1011 | -- ---------------------------- | 1096 | -- ---------------------------- |
| 1012 | -- Records of tool_codegen_column | 1097 | -- Records of tool_codegen_column |
| @@ -1018,9 +1103,9 @@ INSERT INTO `tool_codegen_column` VALUES (234, 20, 'status', 'tinyint(4)', '状æ | @@ -1018,9 +1103,9 @@ INSERT INTO `tool_codegen_column` VALUES (234, 20, 'status', 'tinyint(4)', '状æ | ||
| 1018 | INSERT INTO `tool_codegen_column` VALUES (235, 20, 'type', 'tinyint(4)', '类型', b'0', b'0', '0', 4, 'Integer', 'type', 'sys_operate_type', '2', b'1', b'1', b'1', '=', b'1', 'select', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:05', b'0'); | 1103 | INSERT INTO `tool_codegen_column` VALUES (235, 20, 'type', 'tinyint(4)', '类型', b'0', b'0', '0', 4, 'Integer', 'type', 'sys_operate_type', '2', b'1', b'1', b'1', '=', b'1', 'select', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:05', b'0'); |
| 1019 | INSERT INTO `tool_codegen_column` VALUES (236, 20, 'category', 'tinyint(4)', '分类', b'0', b'0', '0', 5, 'Integer', 'category', 'inf_redis_timeout_type', '3', b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-06 01:33:25', '', '2021-02-06 13:17:53', b'0'); | 1104 | INSERT INTO `tool_codegen_column` VALUES (236, 20, 'category', 'tinyint(4)', '分类', b'0', b'0', '0', 5, 'Integer', 'category', 'inf_redis_timeout_type', '3', b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-06 01:33:25', '', '2021-02-06 13:17:53', b'0'); |
| 1020 | INSERT INTO `tool_codegen_column` VALUES (237, 20, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', '我是备注', b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:08', b'0'); | 1105 | INSERT INTO `tool_codegen_column` VALUES (237, 20, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', '我是备注', b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:08', b'0'); |
| 1021 | -INSERT INTO `tool_codegen_column` VALUES (238, 20, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:09', b'0'); | 1106 | +INSERT INTO `tool_codegen_column` VALUES (238, 20, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:09', b'0'); |
| 1022 | INSERT INTO `tool_codegen_column` VALUES (239, 20, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 01:33:25', '', '2021-02-06 07:50:41', b'0'); | 1107 | INSERT INTO `tool_codegen_column` VALUES (239, 20, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 01:33:25', '', '2021-02-06 07:50:41', b'0'); |
| 1023 | -INSERT INTO `tool_codegen_column` VALUES (240, 20, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:13', b'0'); | 1108 | +INSERT INTO `tool_codegen_column` VALUES (240, 20, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 01:33:25', '', '2021-02-06 03:26:13', b'0'); |
| 1024 | INSERT INTO `tool_codegen_column` VALUES (241, 20, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', '=', b'0', 'datetime', '', '2021-02-06 01:33:25', '', '2021-02-06 08:02:20', b'0'); | 1109 | INSERT INTO `tool_codegen_column` VALUES (241, 20, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', '=', b'0', 'datetime', '', '2021-02-06 01:33:25', '', '2021-02-06 08:02:20', b'0'); |
| 1025 | INSERT INTO `tool_codegen_column` VALUES (242, 20, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'1', '=', b'0', 'radio', '', '2021-02-06 01:33:25', '', '2021-02-06 07:52:14', b'0'); | 1110 | INSERT INTO `tool_codegen_column` VALUES (242, 20, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'1', '=', b'0', 'radio', '', '2021-02-06 01:33:25', '', '2021-02-06 07:52:14', b'0'); |
| 1026 | INSERT INTO `tool_codegen_column` VALUES (243, 21, 'id', 'int(5)', '傿•°ä¸»é”®', b'0', b'1', '1', 1, 'Integer', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1111 | INSERT INTO `tool_codegen_column` VALUES (243, 21, 'id', 'int(5)', '傿•°ä¸»é”®', b'0', b'1', '1', 1, 'Integer', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| @@ -1031,9 +1116,9 @@ INSERT INTO `tool_codegen_column` VALUES (247, 21, 'key', 'varchar(100)', '傿• | @@ -1031,9 +1116,9 @@ INSERT INTO `tool_codegen_column` VALUES (247, 21, 'key', 'varchar(100)', '傿• | ||
| 1031 | INSERT INTO `tool_codegen_column` VALUES (248, 21, 'value', 'varchar(500)', '傿•°é”®å€¼', b'0', b'0', '0', 6, 'String', 'value', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | 1116 | INSERT INTO `tool_codegen_column` VALUES (248, 21, 'value', 'varchar(500)', '傿•°é”®å€¼', b'0', b'0', '0', 6, 'String', 'value', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); |
| 1032 | INSERT INTO `tool_codegen_column` VALUES (249, 21, 'sensitive', 'bit(1)', 'æ˜¯å¦æ•感', b'0', b'0', '0', 7, 'Boolean', 'sensitive', '', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | 1117 | INSERT INTO `tool_codegen_column` VALUES (249, 21, 'sensitive', 'bit(1)', 'æ˜¯å¦æ•感', b'0', b'0', '0', 7, 'Boolean', 'sensitive', '', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); |
| 1033 | INSERT INTO `tool_codegen_column` VALUES (250, 21, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 8, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); | 1118 | INSERT INTO `tool_codegen_column` VALUES (250, 21, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 8, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 19:51:35', '', '2021-03-06 02:20:02', b'0'); |
| 1034 | -INSERT INTO `tool_codegen_column` VALUES (251, 21, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1119 | +INSERT INTO `tool_codegen_column` VALUES (251, 21, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| 1035 | INSERT INTO `tool_codegen_column` VALUES (252, 21, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1120 | INSERT INTO `tool_codegen_column` VALUES (252, 21, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| 1036 | -INSERT INTO `tool_codegen_column` VALUES (253, 21, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1121 | +INSERT INTO `tool_codegen_column` VALUES (253, 21, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| 1037 | INSERT INTO `tool_codegen_column` VALUES (254, 21, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1122 | INSERT INTO `tool_codegen_column` VALUES (254, 21, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| 1038 | INSERT INTO `tool_codegen_column` VALUES (255, 21, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); | 1123 | INSERT INTO `tool_codegen_column` VALUES (255, 21, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0'); |
| 1039 | INSERT INTO `tool_codegen_column` VALUES (256, 23, 'job_id', 'bigint(20)', '任务ID', b'0', b'1', '1', 1, 'Long', 'jobId', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-07 06:38:51', b'1'); | 1124 | INSERT INTO `tool_codegen_column` VALUES (256, 23, 'job_id', 'bigint(20)', '任务ID', b'0', b'1', '1', 1, 'Long', 'jobId', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-07 06:38:51', b'1'); |
| @@ -1044,9 +1129,9 @@ INSERT INTO `tool_codegen_column` VALUES (260, 23, 'cron_expression', 'varchar(2 | @@ -1044,9 +1129,9 @@ INSERT INTO `tool_codegen_column` VALUES (260, 23, 'cron_expression', 'varchar(2 | ||
| 1044 | INSERT INTO `tool_codegen_column` VALUES (261, 23, 'misfire_policy', 'varchar(20)', '计划执行错误ç–略(1ç«‹å³æ‰§è¡Œ 2执行一次 3放弃执行)', b'1', b'0', '0', 6, 'String', 'misfirePolicy', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); | 1129 | INSERT INTO `tool_codegen_column` VALUES (261, 23, 'misfire_policy', 'varchar(20)', '计划执行错误ç–略(1ç«‹å³æ‰§è¡Œ 2执行一次 3放弃执行)', b'1', b'0', '0', 6, 'String', 'misfirePolicy', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); |
| 1045 | INSERT INTO `tool_codegen_column` VALUES (262, 23, 'concurrent', 'char(1)', '是å¦å¹¶å‘执行(0å…许 1ç¦æ¢ï¼‰', b'1', b'0', '0', 7, 'String', 'concurrent', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); | 1130 | INSERT INTO `tool_codegen_column` VALUES (262, 23, 'concurrent', 'char(1)', '是å¦å¹¶å‘执行(0å…许 1ç¦æ¢ï¼‰', b'1', b'0', '0', 7, 'String', 'concurrent', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); |
| 1046 | INSERT INTO `tool_codegen_column` VALUES (263, 23, 'status', 'char(1)', '状æ€ï¼ˆ0æ£å¸¸ 1æš‚åœï¼‰', b'1', b'0', '0', 8, 'String', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); | 1131 | INSERT INTO `tool_codegen_column` VALUES (263, 23, 'status', 'char(1)', '状æ€ï¼ˆ0æ£å¸¸ 1æš‚åœï¼‰', b'1', b'0', '0', 8, 'String', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); |
| 1047 | -INSERT INTO `tool_codegen_column` VALUES (264, 23, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); | 1132 | +INSERT INTO `tool_codegen_column` VALUES (264, 23, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); |
| 1048 | INSERT INTO `tool_codegen_column` VALUES (265, 23, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); | 1133 | INSERT INTO `tool_codegen_column` VALUES (265, 23, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); |
| 1049 | -INSERT INTO `tool_codegen_column` VALUES (266, 23, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); | 1134 | +INSERT INTO `tool_codegen_column` VALUES (266, 23, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1'); |
| 1050 | INSERT INTO `tool_codegen_column` VALUES (267, 23, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'1', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); | 1135 | INSERT INTO `tool_codegen_column` VALUES (267, 23, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'1', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); |
| 1051 | INSERT INTO `tool_codegen_column` VALUES (268, 23, 'remark', 'varchar(500)', '备注信æ¯', b'1', b'0', '0', 13, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); | 1136 | INSERT INTO `tool_codegen_column` VALUES (268, 23, 'remark', 'varchar(500)', '备注信æ¯', b'1', b'0', '0', 13, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1'); |
| 1052 | INSERT INTO `tool_codegen_column` VALUES (269, 24, 'id', 'bigint(20)', '任务编å·', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); | 1137 | INSERT INTO `tool_codegen_column` VALUES (269, 24, 'id', 'bigint(20)', '任务编å·', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); |
| @@ -1060,9 +1145,9 @@ INSERT INTO `tool_codegen_column` VALUES (276, 24, 'execute_end_time', 'datetime | @@ -1060,9 +1145,9 @@ INSERT INTO `tool_codegen_column` VALUES (276, 24, 'execute_end_time', 'datetime | ||
| 1060 | INSERT INTO `tool_codegen_column` VALUES (277, 24, 'fire_prev_time', 'datetime', 'ä¸Šä¸€æ¬¡è§¦å‘æ—¶é—´', b'1', b'0', '0', 9, 'Date', 'firePrevTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0'); | 1145 | INSERT INTO `tool_codegen_column` VALUES (277, 24, 'fire_prev_time', 'datetime', 'ä¸Šä¸€æ¬¡è§¦å‘æ—¶é—´', b'1', b'0', '0', 9, 'Date', 'firePrevTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0'); |
| 1061 | INSERT INTO `tool_codegen_column` VALUES (278, 24, 'fire_next_time', 'datetime', 'ä¸‹ä¸€æ¬¡è§¦å‘æ—¶é—´', b'1', b'0', '0', 10, 'Date', 'fireNextTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0'); | 1146 | INSERT INTO `tool_codegen_column` VALUES (278, 24, 'fire_next_time', 'datetime', 'ä¸‹ä¸€æ¬¡è§¦å‘æ—¶é—´', b'1', b'0', '0', 10, 'Date', 'fireNextTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0'); |
| 1062 | INSERT INTO `tool_codegen_column` VALUES (279, 24, 'monitor_timeout', 'int(11)', '监控超时时间', b'1', b'0', '0', 11, 'Integer', 'monitorTimeout', '', '1000', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); | 1147 | INSERT INTO `tool_codegen_column` VALUES (279, 24, 'monitor_timeout', 'int(11)', '监控超时时间', b'1', b'0', '0', 11, 'Integer', 'monitorTimeout', '', '1000', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); |
| 1063 | -INSERT INTO `tool_codegen_column` VALUES (280, 24, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 12, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); | 1148 | +INSERT INTO `tool_codegen_column` VALUES (280, 24, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 12, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); |
| 1064 | INSERT INTO `tool_codegen_column` VALUES (281, 24, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 13, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); | 1149 | INSERT INTO `tool_codegen_column` VALUES (281, 24, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 13, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0'); |
| 1065 | -INSERT INTO `tool_codegen_column` VALUES (282, 24, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 14, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); | 1150 | +INSERT INTO `tool_codegen_column` VALUES (282, 24, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 14, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); |
| 1066 | INSERT INTO `tool_codegen_column` VALUES (283, 24, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 15, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); | 1151 | INSERT INTO `tool_codegen_column` VALUES (283, 24, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 15, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); |
| 1067 | INSERT INTO `tool_codegen_column` VALUES (284, 24, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 16, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); | 1152 | INSERT INTO `tool_codegen_column` VALUES (284, 24, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 16, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0'); |
| 1068 | INSERT INTO `tool_codegen_column` VALUES (285, 24, 'retry_count', 'int(11)', 'é‡è¯•次数', b'0', b'0', '0', 11, 'Integer', 'retryCount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-08 04:17:27', '', '2021-02-08 04:17:27', b'0'); | 1153 | INSERT INTO `tool_codegen_column` VALUES (285, 24, 'retry_count', 'int(11)', 'é‡è¯•次数', b'0', b'0', '0', 11, 'Integer', 'retryCount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-08 04:17:27', '', '2021-02-08 04:17:27', b'0'); |
| @@ -1077,9 +1162,9 @@ INSERT INTO `tool_codegen_column` VALUES (293, 25, 'end_time', 'datetime', '结æ | @@ -1077,9 +1162,9 @@ INSERT INTO `tool_codegen_column` VALUES (293, 25, 'end_time', 'datetime', '结æ | ||
| 1077 | INSERT INTO `tool_codegen_column` VALUES (294, 25, 'duration', 'int(11)', '执行时长', b'1', b'0', '0', 8, 'Integer', 'duration', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); | 1162 | INSERT INTO `tool_codegen_column` VALUES (294, 25, 'duration', 'int(11)', '执行时长', b'1', b'0', '0', 8, 'Integer', 'duration', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); |
| 1078 | INSERT INTO `tool_codegen_column` VALUES (295, 25, 'status', 'tinyint(4)', '任务状æ€', b'0', b'0', '0', 9, 'Integer', 'status', 'inf_job_log_status', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-08 04:58:41', '', '2021-02-08 10:21:07', b'0'); | 1163 | INSERT INTO `tool_codegen_column` VALUES (295, 25, 'status', 'tinyint(4)', '任务状æ€', b'0', b'0', '0', 9, 'Integer', 'status', 'inf_job_log_status', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-08 04:58:41', '', '2021-02-08 10:21:07', b'0'); |
| 1079 | INSERT INTO `tool_codegen_column` VALUES (296, 25, 'result', 'varchar(4000)', '结果数æ®', b'1', b'0', '0', 10, 'String', 'result', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); | 1164 | INSERT INTO `tool_codegen_column` VALUES (296, 25, 'result', 'varchar(4000)', '结果数æ®', b'1', b'0', '0', 10, 'String', 'result', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); |
| 1080 | -INSERT INTO `tool_codegen_column` VALUES (297, 25, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 11, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); | 1165 | +INSERT INTO `tool_codegen_column` VALUES (297, 25, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 11, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); |
| 1081 | INSERT INTO `tool_codegen_column` VALUES (298, 25, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 12, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); | 1166 | INSERT INTO `tool_codegen_column` VALUES (298, 25, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 12, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-08 04:58:41', '', '2021-02-08 05:06:07', b'0'); |
| 1082 | -INSERT INTO `tool_codegen_column` VALUES (299, 25, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 13, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); | 1167 | +INSERT INTO `tool_codegen_column` VALUES (299, 25, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 13, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); |
| 1083 | INSERT INTO `tool_codegen_column` VALUES (300, 25, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 14, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); | 1168 | INSERT INTO `tool_codegen_column` VALUES (300, 25, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 14, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); |
| 1084 | INSERT INTO `tool_codegen_column` VALUES (301, 25, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 15, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); | 1169 | INSERT INTO `tool_codegen_column` VALUES (301, 25, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 15, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-08 04:58:41', '', '2021-02-08 04:58:41', b'0'); |
| 1085 | INSERT INTO `tool_codegen_column` VALUES (302, 26, 'id', 'bigint(20)', '日志主键', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:18:03', b'0'); | 1170 | INSERT INTO `tool_codegen_column` VALUES (302, 26, 'id', 'bigint(20)', '日志主键', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:18:03', b'0'); |
| @@ -1097,9 +1182,9 @@ INSERT INTO `tool_codegen_column` VALUES (314, 26, 'end_time', 'datetime', '结æ | @@ -1097,9 +1182,9 @@ INSERT INTO `tool_codegen_column` VALUES (314, 26, 'end_time', 'datetime', '结æ | ||
| 1097 | INSERT INTO `tool_codegen_column` VALUES (315, 26, 'duration', 'int(11)', '执行时长', b'0', b'0', '0', 14, 'Integer', 'duration', '', '100', b'1', b'1', b'1', '>=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:29:12', b'0'); | 1182 | INSERT INTO `tool_codegen_column` VALUES (315, 26, 'duration', 'int(11)', '执行时长', b'0', b'0', '0', 14, 'Integer', 'duration', '', '100', b'1', b'1', b'1', '>=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:29:12', b'0'); |
| 1098 | INSERT INTO `tool_codegen_column` VALUES (316, 26, 'result_code', 'int(11)', '结果ç ', b'0', b'0', '0', 15, 'Integer', 'resultCode', '', '0', b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:29:12', b'0'); | 1183 | INSERT INTO `tool_codegen_column` VALUES (316, 26, 'result_code', 'int(11)', '结果ç ', b'0', b'0', '0', 15, 'Integer', 'resultCode', '', '0', b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:29:12', b'0'); |
| 1099 | INSERT INTO `tool_codegen_column` VALUES (317, 26, 'result_msg', 'varchar(512)', '结果æç¤º', b'1', b'0', '0', 16, 'String', 'resultMsg', '', 'èŠ‹é“æºç ,牛逼ï¼', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:30:58', b'0'); | 1184 | INSERT INTO `tool_codegen_column` VALUES (317, 26, 'result_msg', 'varchar(512)', '结果æç¤º', b'1', b'0', '0', 16, 'String', 'resultMsg', '', 'èŠ‹é“æºç ,牛逼ï¼', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:30:58', b'0'); |
| 1100 | -INSERT INTO `tool_codegen_column` VALUES (318, 26, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 17, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); | 1185 | +INSERT INTO `tool_codegen_column` VALUES (318, 26, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 17, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); |
| 1101 | INSERT INTO `tool_codegen_column` VALUES (319, 26, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 18, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-26 00:13:35', '', '2021-02-26 00:33:02', b'0'); | 1186 | INSERT INTO `tool_codegen_column` VALUES (319, 26, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 18, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-26 00:13:35', '', '2021-02-26 00:33:02', b'0'); |
| 1102 | -INSERT INTO `tool_codegen_column` VALUES (320, 26, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 19, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); | 1187 | +INSERT INTO `tool_codegen_column` VALUES (320, 26, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 19, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); |
| 1103 | INSERT INTO `tool_codegen_column` VALUES (321, 26, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 20, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); | 1188 | INSERT INTO `tool_codegen_column` VALUES (321, 26, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 20, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); |
| 1104 | INSERT INTO `tool_codegen_column` VALUES (322, 26, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 21, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); | 1189 | INSERT INTO `tool_codegen_column` VALUES (322, 26, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 21, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-26 00:13:35', '', '2021-02-26 00:13:35', b'0'); |
| 1105 | INSERT INTO `tool_codegen_column` VALUES (323, 27, 'id', 'int(11)', 'ç¼–å·', b'0', b'1', '1', 1, 'Integer', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 06:58:23', b'0'); | 1190 | INSERT INTO `tool_codegen_column` VALUES (323, 27, 'id', 'int(11)', 'ç¼–å·', b'0', b'1', '1', 1, 'Integer', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 06:58:23', b'0'); |
| @@ -1122,7 +1207,7 @@ INSERT INTO `tool_codegen_column` VALUES (339, 27, 'exception_file_name', 'varch | @@ -1122,7 +1207,7 @@ INSERT INTO `tool_codegen_column` VALUES (339, 27, 'exception_file_name', 'varch | ||
| 1122 | INSERT INTO `tool_codegen_column` VALUES (340, 27, 'exception_method_name', 'varchar(512)', '异常å‘生的方法å', b'0', b'0', '0', 18, 'String', 'exceptionMethodName', '', NULL, b'1', b'1', b'0', 'LIKE', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 07:10:19', b'0'); | 1207 | INSERT INTO `tool_codegen_column` VALUES (340, 27, 'exception_method_name', 'varchar(512)', '异常å‘生的方法å', b'0', b'0', '0', 18, 'String', 'exceptionMethodName', '', NULL, b'1', b'1', b'0', 'LIKE', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 07:10:19', b'0'); |
| 1123 | INSERT INTO `tool_codegen_column` VALUES (341, 27, 'exception_line_number', 'int(11)', '异常å‘生的方法所在行', b'0', b'0', '0', 19, 'Integer', 'exceptionLineNumber', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 07:10:19', b'0'); | 1208 | INSERT INTO `tool_codegen_column` VALUES (341, 27, 'exception_line_number', 'int(11)', '异常å‘生的方法所在行', b'0', b'0', '0', 19, 'Integer', 'exceptionLineNumber', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 07:10:19', b'0'); |
| 1124 | INSERT INTO `tool_codegen_column` VALUES (342, 27, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 20, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-26 06:54:49', '', '2021-02-26 06:56:14', b'0'); | 1209 | INSERT INTO `tool_codegen_column` VALUES (342, 27, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 20, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-26 06:54:49', '', '2021-02-26 06:56:14', b'0'); |
| 1125 | -INSERT INTO `tool_codegen_column` VALUES (343, 27, 'update_by', 'varchar(64)', '更新者', b'0', b'0', '0', 21, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 06:56:14', b'0'); | 1210 | +INSERT INTO `tool_codegen_column` VALUES (343, 27, 'updater', 'varchar(64)', '更新者', b'0', b'0', '0', 21, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-26 06:54:49', '', '2021-02-26 06:56:14', b'0'); |
| 1126 | INSERT INTO `tool_codegen_column` VALUES (344, 27, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 22, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-26 06:54:49', '', '2021-02-26 06:54:49', b'0'); | 1211 | INSERT INTO `tool_codegen_column` VALUES (344, 27, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 22, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-26 06:54:49', '', '2021-02-26 06:54:49', b'0'); |
| 1127 | INSERT INTO `tool_codegen_column` VALUES (345, 27, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 23, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-26 06:54:49', '', '2021-02-26 06:54:49', b'0'); | 1212 | INSERT INTO `tool_codegen_column` VALUES (345, 27, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 23, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-26 06:54:49', '', '2021-02-26 06:54:49', b'0'); |
| 1128 | INSERT INTO `tool_codegen_column` VALUES (346, 27, 'process_status', 'tinyint(4)', '处ç†çжæ€', b'0', b'0', '0', 20, 'Integer', 'processStatus', 'inf_api_error_log_process_status', '0', b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-26 07:01:49', '', '2021-02-26 07:11:29', b'0'); | 1213 | INSERT INTO `tool_codegen_column` VALUES (346, 27, 'process_status', 'tinyint(4)', '处ç†çжæ€', b'0', b'0', '0', 20, 'Integer', 'processStatus', 'inf_api_error_log_process_status', '0', b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-02-26 07:01:49', '', '2021-02-26 07:11:29', b'0'); |
| @@ -1133,9 +1218,9 @@ INSERT INTO `tool_codegen_column` VALUES (350, 28, 'name', 'varchar(100)', 'å—å | @@ -1133,9 +1218,9 @@ INSERT INTO `tool_codegen_column` VALUES (350, 28, 'name', 'varchar(100)', 'å—å | ||
| 1133 | INSERT INTO `tool_codegen_column` VALUES (351, 28, 'dict_type', 'varchar(100)', 'å—典类型', b'0', b'0', '0', 3, 'String', 'dictType', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1218 | INSERT INTO `tool_codegen_column` VALUES (351, 28, 'dict_type', 'varchar(100)', 'å—典类型', b'0', b'0', '0', 3, 'String', 'dictType', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1134 | INSERT INTO `tool_codegen_column` VALUES (352, 28, 'status', 'tinyint(4)', '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', b'0', b'0', '0', 4, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1219 | INSERT INTO `tool_codegen_column` VALUES (352, 28, 'status', 'tinyint(4)', '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', b'0', b'0', '0', 4, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1135 | INSERT INTO `tool_codegen_column` VALUES (353, 28, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 5, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1220 | INSERT INTO `tool_codegen_column` VALUES (353, 28, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 5, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1136 | -INSERT INTO `tool_codegen_column` VALUES (354, 28, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 6, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1221 | +INSERT INTO `tool_codegen_column` VALUES (354, 28, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 6, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1137 | INSERT INTO `tool_codegen_column` VALUES (355, 28, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1222 | INSERT INTO `tool_codegen_column` VALUES (355, 28, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1138 | -INSERT INTO `tool_codegen_column` VALUES (356, 28, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1223 | +INSERT INTO `tool_codegen_column` VALUES (356, 28, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1139 | INSERT INTO `tool_codegen_column` VALUES (357, 28, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1224 | INSERT INTO `tool_codegen_column` VALUES (357, 28, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1140 | INSERT INTO `tool_codegen_column` VALUES (358, 28, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1225 | INSERT INTO `tool_codegen_column` VALUES (358, 28, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1141 | INSERT INTO `tool_codegen_column` VALUES (359, 29, 'id', 'bigint(20)', 'å—典主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1226 | INSERT INTO `tool_codegen_column` VALUES (359, 29, 'id', 'bigint(20)', 'å—典主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| @@ -1143,11 +1228,23 @@ INSERT INTO `tool_codegen_column` VALUES (360, 29, 'name', 'varchar(100)', 'å—å | @@ -1143,11 +1228,23 @@ INSERT INTO `tool_codegen_column` VALUES (360, 29, 'name', 'varchar(100)', 'å—å | ||
| 1143 | INSERT INTO `tool_codegen_column` VALUES (361, 29, 'type', 'varchar(100)', 'å—典类型', b'0', b'0', '0', 3, 'String', 'type', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'select', '', '2021-03-06 03:52:57', '', '2021-03-06 03:54:48', b'0'); | 1228 | INSERT INTO `tool_codegen_column` VALUES (361, 29, 'type', 'varchar(100)', 'å—典类型', b'0', b'0', '0', 3, 'String', 'type', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'select', '', '2021-03-06 03:52:57', '', '2021-03-06 03:54:48', b'0'); |
| 1144 | INSERT INTO `tool_codegen_column` VALUES (362, 29, 'status', 'tinyint(4)', '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', b'0', b'0', '0', 4, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1229 | INSERT INTO `tool_codegen_column` VALUES (362, 29, 'status', 'tinyint(4)', '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', b'0', b'0', '0', 4, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1145 | INSERT INTO `tool_codegen_column` VALUES (363, 29, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 5, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:54:48', b'0'); | 1230 | INSERT INTO `tool_codegen_column` VALUES (363, 29, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 5, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:54:48', b'0'); |
| 1146 | -INSERT INTO `tool_codegen_column` VALUES (364, 29, 'create_by', 'varchar(64)', '创建者', b'1', b'0', '0', 6, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1231 | +INSERT INTO `tool_codegen_column` VALUES (364, 29, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 6, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1147 | INSERT INTO `tool_codegen_column` VALUES (365, 29, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1232 | INSERT INTO `tool_codegen_column` VALUES (365, 29, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1148 | -INSERT INTO `tool_codegen_column` VALUES (366, 29, 'update_by', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1233 | +INSERT INTO `tool_codegen_column` VALUES (366, 29, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1149 | INSERT INTO `tool_codegen_column` VALUES (367, 29, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1234 | INSERT INTO `tool_codegen_column` VALUES (367, 29, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1150 | INSERT INTO `tool_codegen_column` VALUES (368, 29, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); | 1235 | INSERT INTO `tool_codegen_column` VALUES (368, 29, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-03-06 03:52:57', '', '2021-03-06 03:52:57', b'0'); |
| 1236 | +INSERT INTO `tool_codegen_column` VALUES (369, 30, 'id', 'bigint(20)', 'å—典编ç ', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1237 | +INSERT INTO `tool_codegen_column` VALUES (370, 30, 'sort', 'int(4)', 'å—典排åº', b'0', b'0', '0', 2, 'Integer', 'sort', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1238 | +INSERT INTO `tool_codegen_column` VALUES (371, 30, 'label', 'varchar(100)', 'å—å…¸æ ‡ç¾', b'0', b'0', '0', 3, 'String', 'label', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1239 | +INSERT INTO `tool_codegen_column` VALUES (372, 30, 'value', 'varchar(100)', 'å—典键值', b'0', b'0', '0', 4, 'String', 'value', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1240 | +INSERT INTO `tool_codegen_column` VALUES (373, 30, 'dict_type', 'varchar(100)', 'å—典类型', b'0', b'0', '0', 5, 'String', 'dictType', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'select', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1241 | +INSERT INTO `tool_codegen_column` VALUES (374, 30, 'status', 'tinyint(4)', '状æ€ï¼ˆ0æ£å¸¸ 1åœç”¨ï¼‰', b'0', b'0', '0', 6, 'Integer', 'status', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'radio', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1242 | +INSERT INTO `tool_codegen_column` VALUES (375, 30, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 7, 'String', 'remark', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:38', b'0'); | ||
| 1243 | +INSERT INTO `tool_codegen_column` VALUES (376, 30, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 8, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1244 | +INSERT INTO `tool_codegen_column` VALUES (377, 30, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 9, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1245 | +INSERT INTO `tool_codegen_column` VALUES (378, 30, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 10, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1246 | +INSERT INTO `tool_codegen_column` VALUES (379, 30, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 11, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1247 | +INSERT INTO `tool_codegen_column` VALUES (380, 30, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 12, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-03-06 06:48:28', '', '2021-03-06 06:48:28', b'0'); | ||
| 1151 | COMMIT; | 1248 | COMMIT; |
| 1152 | 1249 | ||
| 1153 | -- ---------------------------- | 1250 | -- ---------------------------- |
| @@ -1167,13 +1264,13 @@ CREATE TABLE `tool_codegen_table` ( | @@ -1167,13 +1264,13 @@ CREATE TABLE `tool_codegen_table` ( | ||
| 1167 | `author` varchar(50) NOT NULL COMMENT '作者', | 1264 | `author` varchar(50) NOT NULL COMMENT '作者', |
| 1168 | `template_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '模æ¿ç±»åž‹', | 1265 | `template_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '模æ¿ç±»åž‹', |
| 1169 | `parent_menu_id` bigint(20) DEFAULT NULL COMMENT '父èœå•ç¼–å·', | 1266 | `parent_menu_id` bigint(20) DEFAULT NULL COMMENT '父èœå•ç¼–å·', |
| 1170 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 1267 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 1171 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 1268 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 1172 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 1269 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 1173 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1270 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1174 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1271 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1175 | PRIMARY KEY (`id`) USING BTREE | 1272 | PRIMARY KEY (`id`) USING BTREE |
| 1176 | -) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å®šä¹‰'; | 1273 | +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å®šä¹‰'; |
| 1177 | 1274 | ||
| 1178 | -- ---------------------------- | 1275 | -- ---------------------------- |
| 1179 | -- Records of tool_codegen_table | 1276 | -- Records of tool_codegen_table |
| @@ -1189,6 +1286,7 @@ INSERT INTO `tool_codegen_table` VALUES (26, 1, 'inf_api_access_log', 'API è®¿é— | @@ -1189,6 +1286,7 @@ INSERT INTO `tool_codegen_table` VALUES (26, 1, 'inf_api_access_log', 'API è®¿é— | ||
| 1189 | INSERT INTO `tool_codegen_table` VALUES (27, 1, 'inf_api_error_log', 'API 错误日志', NULL, 'infra', 'apiErrorLog', 'InfApiErrorLog', 'API 错误日志', 'èŠ‹é“æºç ', 1, 1083, '', '2021-02-26 06:54:49', '', '2021-02-26 07:53:03', b'0'); | 1286 | INSERT INTO `tool_codegen_table` VALUES (27, 1, 'inf_api_error_log', 'API 错误日志', NULL, 'infra', 'apiErrorLog', 'InfApiErrorLog', 'API 错误日志', 'èŠ‹é“æºç ', 1, 1083, '', '2021-02-26 06:54:49', '', '2021-02-26 07:53:03', b'0'); |
| 1190 | INSERT INTO `tool_codegen_table` VALUES (28, 1, 'sys_dict_type', 'å—典类型表', NULL, 'system', 'dictType', 'SysDictType', 'å—典类型', '芋艿', 1, NULL, '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); | 1287 | INSERT INTO `tool_codegen_table` VALUES (28, 1, 'sys_dict_type', 'å—典类型表', NULL, 'system', 'dictType', 'SysDictType', 'å—典类型', '芋艿', 1, NULL, '', '2021-03-06 03:45:55', '', '2021-03-06 03:51:02', b'1'); |
| 1191 | INSERT INTO `tool_codegen_table` VALUES (29, 1, 'sys_dict_type', 'å—典类型表', NULL, 'system', 'dict', 'SysDictType', 'å—典类型', '芋艿', 1, NULL, '', '2021-03-06 03:52:57', '', '2021-03-06 04:03:52', b'0'); | 1288 | INSERT INTO `tool_codegen_table` VALUES (29, 1, 'sys_dict_type', 'å—典类型表', NULL, 'system', 'dict', 'SysDictType', 'å—典类型', '芋艿', 1, NULL, '', '2021-03-06 03:52:57', '', '2021-03-06 04:03:52', b'0'); |
| 1289 | +INSERT INTO `tool_codegen_table` VALUES (30, 1, 'sys_dict_data', 'å—典数æ®è¡¨', NULL, 'system', 'type', 'SysDictData', 'å—典数æ®', 'èŠ‹é“æºç ', 1, NULL, '', '2021-03-06 06:48:28', '', '2021-03-06 06:50:47', b'0'); | ||
| 1192 | COMMIT; | 1290 | COMMIT; |
| 1193 | 1291 | ||
| 1194 | -- ---------------------------- | 1292 | -- ---------------------------- |
| @@ -1202,9 +1300,9 @@ CREATE TABLE `tool_test_demo` ( | @@ -1202,9 +1300,9 @@ CREATE TABLE `tool_test_demo` ( | ||
| 1202 | `type` tinyint(4) NOT NULL COMMENT '类型', | 1300 | `type` tinyint(4) NOT NULL COMMENT '类型', |
| 1203 | `category` tinyint(4) NOT NULL COMMENT '分类', | 1301 | `category` tinyint(4) NOT NULL COMMENT '分类', |
| 1204 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', | 1302 | `remark` varchar(500) DEFAULT NULL COMMENT '备注', |
| 1205 | - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', | 1303 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', |
| 1206 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | 1304 | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| 1207 | - `update_by` varchar(64) DEFAULT '' COMMENT '更新者', | 1305 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', |
| 1208 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1306 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1209 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1307 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1210 | PRIMARY KEY (`id`) USING BTREE | 1308 | PRIMARY KEY (`id`) USING BTREE |
src/main/java/cn/iocoder/dashboard/framework/mybatis/config/MybatisConfiguration.java
| 1 | package cn.iocoder.dashboard.framework.mybatis.config; | 1 | package cn.iocoder.dashboard.framework.mybatis.config; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.handler.DefaultDBFieldHandler; | ||
| 4 | +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; | ||
| 3 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; | 5 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| 4 | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; | 6 | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| 5 | import org.apache.ibatis.annotations.Mapper; | 7 | import org.apache.ibatis.annotations.Mapper; |
| @@ -13,7 +15,8 @@ import org.springframework.context.annotation.Configuration; | @@ -13,7 +15,8 @@ import org.springframework.context.annotation.Configuration; | ||
| 13 | * @author 芋道源码 | 15 | * @author 芋道源码 |
| 14 | */ | 16 | */ |
| 15 | @Configuration | 17 | @Configuration |
| 16 | -@MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class) | 18 | +@MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class, |
| 19 | + lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试 | ||
| 17 | public class MybatisConfiguration { | 20 | public class MybatisConfiguration { |
| 18 | 21 | ||
| 19 | @Bean | 22 | @Bean |
| @@ -23,4 +26,9 @@ public class MybatisConfiguration { | @@ -23,4 +26,9 @@ public class MybatisConfiguration { | ||
| 23 | return mybatisPlusInterceptor; | 26 | return mybatisPlusInterceptor; |
| 24 | } | 27 | } |
| 25 | 28 | ||
| 29 | + @Bean | ||
| 30 | + public MetaObjectHandler defaultMetaObjectHandler(){ | ||
| 31 | + return new DefaultDBFieldHandler(); // 自动填充参数类 | ||
| 32 | + } | ||
| 33 | + | ||
| 26 | } | 34 | } |
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/dataobject/BaseDO.java
| 1 | package cn.iocoder.dashboard.framework.mybatis.core.dataobject; | 1 | package cn.iocoder.dashboard.framework.mybatis.core.dataobject; |
| 2 | 2 | ||
| 3 | +import com.baomidou.mybatisplus.annotation.FieldFill; | ||
| 4 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
| 3 | import com.baomidou.mybatisplus.annotation.TableLogic; | 5 | import com.baomidou.mybatisplus.annotation.TableLogic; |
| 4 | import lombok.Data; | 6 | import lombok.Data; |
| 5 | 7 | ||
| @@ -15,19 +17,27 @@ public class BaseDO implements Serializable { | @@ -15,19 +17,27 @@ public class BaseDO implements Serializable { | ||
| 15 | /** | 17 | /** |
| 16 | * 创建时间 | 18 | * 创建时间 |
| 17 | */ | 19 | */ |
| 20 | + @TableField(fill = FieldFill.INSERT) | ||
| 18 | private Date createTime; | 21 | private Date createTime; |
| 19 | /** | 22 | /** |
| 20 | * 最后更新时间 | 23 | * 最后更新时间 |
| 21 | */ | 24 | */ |
| 25 | + @TableField(fill = FieldFill.INSERT_UPDATE) | ||
| 22 | private Date updateTime; | 26 | private Date updateTime; |
| 23 | /** | 27 | /** |
| 24 | - * 创建者 TODO 芋艿:迁移成编号 | 28 | + * 创建者,目前使用 SysUser 的 id 编号 |
| 29 | + * | ||
| 30 | + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 | ||
| 25 | */ | 31 | */ |
| 26 | - private String createBy; | 32 | + @TableField(fill = FieldFill.INSERT) |
| 33 | + private String creator; | ||
| 27 | /** | 34 | /** |
| 28 | - * 更新者 TODO 芋艿:迁移成编号 | 35 | + * 更新者,目前使用 SysUser 的 id 编号 |
| 36 | + * | ||
| 37 | + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 | ||
| 29 | */ | 38 | */ |
| 30 | - private String updateBy; | 39 | + @TableField(fill = FieldFill.INSERT_UPDATE) |
| 40 | + private String updater; | ||
| 31 | /** | 41 | /** |
| 32 | * 是否删除 | 42 | * 是否删除 |
| 33 | */ | 43 | */ |
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/handler/DefaultDBFieldHandler.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.mybatis.core.handler; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.dashboard.framework.security.core.LoginUser; | ||
| 5 | +import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; | ||
| 6 | +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; | ||
| 7 | +import org.apache.ibatis.reflection.MetaObject; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | +import java.util.Objects; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 通用参数填充实现类 | ||
| 14 | + * | ||
| 15 | + * 如果没有显式的对通用参数进行赋值,这里会对通用参数进行填充、赋值 | ||
| 16 | + * | ||
| 17 | + * @author hexiaowu | ||
| 18 | + */ | ||
| 19 | +public class DefaultDBFieldHandler implements MetaObjectHandler { | ||
| 20 | + | ||
| 21 | + @Override | ||
| 22 | + public void insertFill(MetaObject metaObject) { | ||
| 23 | + if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseDO) { | ||
| 24 | + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); | ||
| 25 | + BaseDO baseDO = (BaseDO) metaObject.getOriginalObject(); | ||
| 26 | + Date current = new Date(); | ||
| 27 | + | ||
| 28 | + // 创建时间为空,则以当前时间为插入时间 | ||
| 29 | + if (Objects.isNull(baseDO.getCreateTime())) { | ||
| 30 | + baseDO.setCreateTime(current); | ||
| 31 | + } | ||
| 32 | + // 更新时间为空,则以当前时间为更新时间 | ||
| 33 | + if (Objects.isNull(baseDO.getUpdateTime())) { | ||
| 34 | + baseDO.setUpdateTime(current); | ||
| 35 | + } | ||
| 36 | + // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 | ||
| 37 | + if (Objects.nonNull(loginUser) && Objects.isNull(baseDO.getCreator())) { | ||
| 38 | + baseDO.setCreator(loginUser.getId().toString()); | ||
| 39 | + } | ||
| 40 | + // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 | ||
| 41 | + if (Objects.nonNull(loginUser) && Objects.isNull(baseDO.getUpdater())) { | ||
| 42 | + baseDO.setUpdater(loginUser.getId().toString()); | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public void updateFill(MetaObject metaObject) { | ||
| 49 | + Object modifyTime = getFieldValByName("updateTime", metaObject); | ||
| 50 | + Object modifier = getFieldValByName("updater", metaObject); | ||
| 51 | + // 获取登录用户信息 | ||
| 52 | + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); | ||
| 53 | + | ||
| 54 | + // 更新时间为空,则以当前时间为更新时间 | ||
| 55 | + if (Objects.isNull(modifyTime)) { | ||
| 56 | + setFieldValByName("updateTime", new Date(), metaObject); | ||
| 57 | + } | ||
| 58 | + // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 | ||
| 59 | + if (Objects.nonNull(loginUser) && Objects.isNull(modifier)) { | ||
| 60 | + setFieldValByName("updater", loginUser.getId().toString(), metaObject); | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | +} |
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/mapper/BaseMapperX.java
| @@ -28,6 +28,10 @@ public interface BaseMapperX<T> extends BaseMapper<T> { | @@ -28,6 +28,10 @@ public interface BaseMapperX<T> extends BaseMapper<T> { | ||
| 28 | return selectOne(new QueryWrapper<T>().eq(field, value)); | 28 | return selectOne(new QueryWrapper<T>().eq(field, value)); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | + default Integer selectCount(String field, Object value) { | ||
| 32 | + return selectCount(new QueryWrapper<T>().eq(field, value)); | ||
| 33 | + } | ||
| 34 | + | ||
| 31 | default List<T> selectList() { | 35 | default List<T> selectList() { |
| 32 | return selectList(new QueryWrapper<>()); | 36 | return selectList(new QueryWrapper<>()); |
| 33 | } | 37 | } |
src/main/java/cn/iocoder/dashboard/framework/resilience4j/《芋道 Spring Boot 安全框架 Spring Security 入门》.md deleted
| 1 | -<http://www.iocoder.cn/Spring-Boot/Spring-Security/?github> |
src/main/java/cn/iocoder/dashboard/framework/resilience4j/《芋道 Spring Boot 服务容错 Resilience4j 入门》.md
0 → 100644
| 1 | +<https://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao> |
src/main/java/cn/iocoder/dashboard/framework/security/config/SecurityConfiguration.java
| @@ -152,7 +152,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { | @@ -152,7 +152,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { | ||
| 152 | .anyRequest().authenticated() | 152 | .anyRequest().authenticated() |
| 153 | .and() | 153 | .and() |
| 154 | .headers().frameOptions().disable(); | 154 | .headers().frameOptions().disable(); |
| 155 | - httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler); | 155 | + httpSecurity.logout().logoutUrl(webProperties.getApiPrefix() + "/logout").logoutSuccessHandler(logoutSuccessHandler); |
| 156 | // 添加 JWT Filter | 156 | // 添加 JWT Filter |
| 157 | httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); | 157 | httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); |
| 158 | } | 158 | } |
src/main/java/cn/iocoder/dashboard/framework/security/core/handler/LogoutSuccessHandlerImpl.java
| 1 | package cn.iocoder.dashboard.framework.security.core.handler; | 1 | package cn.iocoder.dashboard.framework.security.core.handler; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.util.StrUtil; | 3 | import cn.hutool.core.util.StrUtil; |
| 4 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | ||
| 4 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; | 5 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 5 | import cn.iocoder.dashboard.framework.security.core.service.SecurityAuthFrameworkService; | 6 | import cn.iocoder.dashboard.framework.security.core.service.SecurityAuthFrameworkService; |
| 6 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; | 7 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; |
| @@ -36,6 +37,6 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { | @@ -36,6 +37,6 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { | ||
| 36 | securityFrameworkService.logout(token); | 37 | securityFrameworkService.logout(token); |
| 37 | } | 38 | } |
| 38 | // 返回成功 | 39 | // 返回成功 |
| 39 | - ServletUtils.writeJSON(response, null); | 40 | + ServletUtils.writeJSON(response, CommonResult.success(null)); |
| 40 | } | 41 | } |
| 41 | } | 42 | } |
src/main/java/cn/iocoder/dashboard/framework/security/core/util/SecurityFrameworkUtils.java
| @@ -2,7 +2,10 @@ package cn.iocoder.dashboard.framework.security.core.util; | @@ -2,7 +2,10 @@ package cn.iocoder.dashboard.framework.security.core.util; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 3 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 4 | import cn.iocoder.dashboard.framework.web.core.util.WebFrameworkUtils; | 4 | import cn.iocoder.dashboard.framework.web.core.util.WebFrameworkUtils; |
| 5 | +import org.springframework.lang.Nullable; | ||
| 5 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | 6 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
| 7 | +import org.springframework.security.core.Authentication; | ||
| 8 | +import org.springframework.security.core.context.SecurityContext; | ||
| 6 | import org.springframework.security.core.context.SecurityContextHolder; | 9 | import org.springframework.security.core.context.SecurityContextHolder; |
| 7 | import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; | 10 | import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; |
| 8 | import org.springframework.util.StringUtils; | 11 | import org.springframework.util.StringUtils; |
| @@ -40,9 +43,20 @@ public class SecurityFrameworkUtils { | @@ -40,9 +43,20 @@ public class SecurityFrameworkUtils { | ||
| 40 | 43 | ||
| 41 | /** | 44 | /** |
| 42 | * 获取当前用户 | 45 | * 获取当前用户 |
| 46 | + * | ||
| 47 | + * @return 当前用户 | ||
| 43 | */ | 48 | */ |
| 49 | + @Nullable | ||
| 44 | public static LoginUser getLoginUser() { | 50 | public static LoginUser getLoginUser() { |
| 45 | - return (LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); | 51 | + SecurityContext context = SecurityContextHolder.getContext(); |
| 52 | + if (context == null) { | ||
| 53 | + return null; | ||
| 54 | + } | ||
| 55 | + Authentication authentication = context.getAuthentication(); | ||
| 56 | + if (authentication == null) { | ||
| 57 | + return null; | ||
| 58 | + } | ||
| 59 | + return authentication.getPrincipal() instanceof LoginUser ? (LoginUser) authentication.getPrincipal() : null; | ||
| 46 | } | 60 | } |
| 47 | 61 | ||
| 48 | /** | 62 | /** |
| @@ -50,8 +64,10 @@ public class SecurityFrameworkUtils { | @@ -50,8 +64,10 @@ public class SecurityFrameworkUtils { | ||
| 50 | * | 64 | * |
| 51 | * @return 用户编号 | 65 | * @return 用户编号 |
| 52 | */ | 66 | */ |
| 67 | + @Nullable | ||
| 53 | public static Long getLoginUserId() { | 68 | public static Long getLoginUserId() { |
| 54 | - return getLoginUser().getId(); | 69 | + LoginUser loginUser = getLoginUser(); |
| 70 | + return loginUser != null ? loginUser.getId() : null; | ||
| 55 | } | 71 | } |
| 56 | 72 | ||
| 57 | /** | 73 | /** |
| @@ -59,8 +75,10 @@ public class SecurityFrameworkUtils { | @@ -59,8 +75,10 @@ public class SecurityFrameworkUtils { | ||
| 59 | * | 75 | * |
| 60 | * @return 角色编号数组 | 76 | * @return 角色编号数组 |
| 61 | */ | 77 | */ |
| 78 | + @Nullable | ||
| 62 | public static Set<Long> getLoginUserRoleIds() { | 79 | public static Set<Long> getLoginUserRoleIds() { |
| 63 | - return getLoginUser().getRoleIds(); | 80 | + LoginUser loginUser = getLoginUser(); |
| 81 | + return loginUser != null ? loginUser.getRoleIds() : null; | ||
| 64 | } | 82 | } |
| 65 | 83 | ||
| 66 | /** | 84 | /** |
src/main/java/cn/iocoder/dashboard/framework/swagger/config/SwaggerAutoConfiguration.java
| @@ -10,15 +10,17 @@ import org.springframework.context.annotation.Configuration; | @@ -10,15 +10,17 @@ import org.springframework.context.annotation.Configuration; | ||
| 10 | import org.springframework.http.HttpHeaders; | 10 | import org.springframework.http.HttpHeaders; |
| 11 | import springfox.documentation.builders.ApiInfoBuilder; | 11 | import springfox.documentation.builders.ApiInfoBuilder; |
| 12 | import springfox.documentation.builders.PathSelectors; | 12 | import springfox.documentation.builders.PathSelectors; |
| 13 | -import springfox.documentation.service.*; | 13 | +import springfox.documentation.service.ApiInfo; |
| 14 | +import springfox.documentation.service.ApiKey; | ||
| 15 | +import springfox.documentation.service.AuthorizationScope; | ||
| 16 | +import springfox.documentation.service.Contact; | ||
| 17 | +import springfox.documentation.service.SecurityReference; | ||
| 18 | +import springfox.documentation.service.SecurityScheme; | ||
| 14 | import springfox.documentation.spi.DocumentationType; | 19 | import springfox.documentation.spi.DocumentationType; |
| 15 | import springfox.documentation.spi.service.contexts.SecurityContext; | 20 | import springfox.documentation.spi.service.contexts.SecurityContext; |
| 16 | import springfox.documentation.spring.web.plugins.Docket; | 21 | import springfox.documentation.spring.web.plugins.Docket; |
| 17 | import springfox.documentation.swagger2.annotations.EnableSwagger2; | 22 | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| 18 | -import springfox.documentation.service.ApiKey; | ||
| 19 | 23 | ||
| 20 | -import java.util.ArrayList; | ||
| 21 | -import java.util.Arrays; | ||
| 22 | import java.util.Collections; | 24 | import java.util.Collections; |
| 23 | import java.util.List; | 25 | import java.util.List; |
| 24 | 26 |
src/main/java/cn/iocoder/dashboard/framework/web/config/WebConfiguration.java
| @@ -27,9 +27,10 @@ public class WebConfiguration implements WebMvcConfigurer { | @@ -27,9 +27,10 @@ public class WebConfiguration implements WebMvcConfigurer { | ||
| 27 | 27 | ||
| 28 | @Override | 28 | @Override |
| 29 | public void configurePathMatch(PathMatchConfigurer configurer) { | 29 | public void configurePathMatch(PathMatchConfigurer configurer) { |
| 30 | + // 设置 API 前缀,仅仅匹配 controller 包下的 | ||
| 30 | configurer.addPathPrefix(webProperties.getApiPrefix(), clazz -> | 31 | configurer.addPathPrefix(webProperties.getApiPrefix(), clazz -> |
| 31 | clazz.isAnnotationPresent(RestController.class) | 32 | clazz.isAnnotationPresent(RestController.class) |
| 32 | - && clazz.getPackage().getName().startsWith(webProperties.getControllerPackage())); | 33 | + && clazz.getPackage().getName().startsWith(webProperties.getControllerPackage())); // 仅仅匹配 controller 包 |
| 33 | } | 34 | } |
| 34 | 35 | ||
| 35 | // ========== Filter 相关 ========== | 36 | // ========== Filter 相关 ========== |
src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java
| 1 | package cn.iocoder.dashboard.modules.infra.controller.config; | 1 | package cn.iocoder.dashboard.modules.infra.controller.config; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; | 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 5 | import cn.iocoder.dashboard.common.pojo.PageResult; | 4 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; | 5 | import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; |
| 7 | -import cn.iocoder.dashboard.framework.idempotent.core.annotation.Idempotent; | ||
| 8 | -import cn.iocoder.dashboard.framework.idempotent.core.keyresolver.impl.ExpressionIdempotentKeyResolver; | 6 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; |
| 9 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.*; | 7 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.*; |
| 10 | import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert; | 8 | import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert; |
| 11 | import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | 9 | import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; |
| @@ -13,95 +11,95 @@ import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; | @@ -13,95 +11,95 @@ import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; | ||
| 13 | import io.swagger.annotations.Api; | 11 | import io.swagger.annotations.Api; |
| 14 | import io.swagger.annotations.ApiImplicitParam; | 12 | import io.swagger.annotations.ApiImplicitParam; |
| 15 | import io.swagger.annotations.ApiOperation; | 13 | import io.swagger.annotations.ApiOperation; |
| 14 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 16 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
| 17 | import org.springframework.web.bind.annotation.*; | 16 | import org.springframework.web.bind.annotation.*; |
| 18 | 17 | ||
| 19 | import javax.annotation.Resource; | 18 | import javax.annotation.Resource; |
| 20 | import javax.servlet.http.HttpServletResponse; | 19 | import javax.servlet.http.HttpServletResponse; |
| 20 | +import javax.validation.Valid; | ||
| 21 | import java.io.IOException; | 21 | import java.io.IOException; |
| 22 | import java.util.List; | 22 | import java.util.List; |
| 23 | 23 | ||
| 24 | +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; | ||
| 24 | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | 25 | import static cn.iocoder.dashboard.common.pojo.CommonResult.success; |
| 26 | +import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||
| 25 | import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE; | 27 | import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE; |
| 26 | 28 | ||
| 27 | @Api(tags = "参数配置") | 29 | @Api(tags = "参数配置") |
| 28 | @RestController | 30 | @RestController |
| 29 | @RequestMapping("/infra/config") | 31 | @RequestMapping("/infra/config") |
| 32 | +@Validated | ||
| 30 | public class InfConfigController { | 33 | public class InfConfigController { |
| 31 | 34 | ||
| 32 | @Resource | 35 | @Resource |
| 33 | private InfConfigService configService; | 36 | private InfConfigService configService; |
| 34 | 37 | ||
| 35 | - @ApiOperation("获取参数配置分页") | ||
| 36 | - @GetMapping("/page") | ||
| 37 | -// @PreAuthorize("@ss.hasPermi('infra:config:list')") | ||
| 38 | - public CommonResult<PageResult<InfConfigRespVO>> getConfigPage(@Validated InfConfigPageReqVO reqVO) { | ||
| 39 | - PageResult<InfConfigDO> page = configService.getConfigPage(reqVO); | ||
| 40 | - return success(InfConfigConvert.INSTANCE.convertPage(page)); | 38 | + @PostMapping("/create") |
| 39 | + @ApiOperation("创建参数配置") | ||
| 40 | + @PreAuthorize("@ss.hasPermission('infra:config:create')") | ||
| 41 | + public CommonResult<Long> createConfig(@Valid @RequestBody InfConfigCreateReqVO reqVO) { | ||
| 42 | + return success(configService.createConfig(reqVO)); | ||
| 41 | } | 43 | } |
| 42 | 44 | ||
| 43 | - @ApiOperation("导出参数配置") | ||
| 44 | - @GetMapping("/export") | ||
| 45 | -// @Log(title = "参数管理", businessType = BusinessType.EXPORT) | ||
| 46 | -// @PreAuthorize("@ss.hasPermi('infra:config:export')") | ||
| 47 | - public void exportSysConfig(HttpServletResponse response, @Validated InfConfigExportReqVO reqVO) throws IOException { | ||
| 48 | - List<InfConfigDO> list = configService.getConfigList(reqVO); | ||
| 49 | - // 拼接数据 | ||
| 50 | - List<InfConfigExcelVO> excelDataList = InfConfigConvert.INSTANCE.convertList(list); | ||
| 51 | - // 输出 | ||
| 52 | - ExcelUtils.write(response, "参数配置.xls", "配置列表", | ||
| 53 | - InfConfigExcelVO.class, excelDataList); | 45 | + @PutMapping("/update") |
| 46 | + @ApiOperation("修改参数配置") | ||
| 47 | + @PreAuthorize("@ss.hasPermission('infra:config:update')") | ||
| 48 | + public CommonResult<Boolean> updateConfig(@Valid @RequestBody InfConfigUpdateReqVO reqVO) { | ||
| 49 | + configService.updateConfig(reqVO); | ||
| 50 | + return success(true); | ||
| 54 | } | 51 | } |
| 55 | 52 | ||
| 56 | - @ApiOperation("获得参数配置") | 53 | + @DeleteMapping("/delete") |
| 54 | + @ApiOperation("删除参数配置") | ||
| 57 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | 55 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| 56 | + @PreAuthorize("@ss.hasPermission('infra:config:delete')") | ||
| 57 | + public CommonResult<Boolean> deleteConfig(@RequestParam("id") Long id) { | ||
| 58 | + configService.deleteConfig(id); | ||
| 59 | + return success(true); | ||
| 60 | + } | ||
| 61 | + | ||
| 58 | @GetMapping(value = "/get") | 62 | @GetMapping(value = "/get") |
| 59 | -// @PreAuthorize("@ss.hasPermi('infra:config:query')") | 63 | + @ApiOperation("获得参数配置") |
| 64 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | ||
| 65 | + @PreAuthorize("@ss.hasPermission('infra:config:query')") | ||
| 60 | public CommonResult<InfConfigRespVO> getConfig(@RequestParam("id") Long id) { | 66 | public CommonResult<InfConfigRespVO> getConfig(@RequestParam("id") Long id) { |
| 61 | return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id))); | 67 | return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id))); |
| 62 | } | 68 | } |
| 63 | 69 | ||
| 70 | + @GetMapping(value = "/get-value-by-key") | ||
| 64 | @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端") | 71 | @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端") |
| 65 | @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class) | 72 | @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class) |
| 66 | - @GetMapping(value = "/get-value-by-key") | ||
| 67 | public CommonResult<String> getConfigKey(@RequestParam("key") String key) { | 73 | public CommonResult<String> getConfigKey(@RequestParam("key") String key) { |
| 68 | InfConfigDO config = configService.getConfigByKey(key); | 74 | InfConfigDO config = configService.getConfigByKey(key); |
| 69 | if (config == null) { | 75 | if (config == null) { |
| 70 | return null; | 76 | return null; |
| 71 | } | 77 | } |
| 72 | if (config.getSensitive()) { | 78 | if (config.getSensitive()) { |
| 73 | - throw ServiceExceptionUtil.exception(CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); | 79 | + throw exception(CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); |
| 74 | } | 80 | } |
| 75 | return success(config.getValue()); | 81 | return success(config.getValue()); |
| 76 | } | 82 | } |
| 77 | 83 | ||
| 78 | - @ApiOperation("新增参数配置") | ||
| 79 | - @PostMapping("/create") | ||
| 80 | -// @PreAuthorize("@ss.hasPermi('infra:config:add')") | ||
| 81 | -// @Log(title = "参数管理", businessType = BusinessType.INSERT) | ||
| 82 | - @Idempotent(timeout = 60, keyResolver = ExpressionIdempotentKeyResolver.class, keyArg = "#reqVO.key") | ||
| 83 | - public CommonResult<Long> createConfig(@Validated @RequestBody InfConfigCreateReqVO reqVO) { | ||
| 84 | - return success(configService.createConfig(reqVO)); | ||
| 85 | - } | ||
| 86 | - | ||
| 87 | - @ApiOperation("修改参数配置") | ||
| 88 | - @PutMapping("/update") | ||
| 89 | -// @PreAuthorize("@ss.hasPermi('infra:config:edit')") | ||
| 90 | -// @Log(title = "参数管理", businessType = BusinessType.UPDATE) | ||
| 91 | - @Idempotent(timeout = 60) | ||
| 92 | - public CommonResult<Boolean> updateConfig(@Validated @RequestBody InfConfigUpdateReqVO reqVO) { | ||
| 93 | - configService.updateConfig(reqVO); | ||
| 94 | - return success(true); | 84 | + @GetMapping("/page") |
| 85 | + @ApiOperation("获取参数配置分页") | ||
| 86 | + @PreAuthorize("@ss.hasPermission('infra:config:query')") | ||
| 87 | + public CommonResult<PageResult<InfConfigRespVO>> getConfigPage(@Valid InfConfigPageReqVO reqVO) { | ||
| 88 | + PageResult<InfConfigDO> page = configService.getConfigPage(reqVO); | ||
| 89 | + return success(InfConfigConvert.INSTANCE.convertPage(page)); | ||
| 95 | } | 90 | } |
| 96 | 91 | ||
| 97 | - @ApiOperation("删除参数配置") | ||
| 98 | - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | ||
| 99 | - @DeleteMapping("/delete") | ||
| 100 | -// @PreAuthorize("@ss.hasPermi('infra:config:remove')") | ||
| 101 | -// @Log(title = "参数管理", businessType = BusinessType.DELETE) | ||
| 102 | - public CommonResult<Boolean> deleteConfig(@RequestParam("id") Long id) { | ||
| 103 | - configService.deleteConfig(id); | ||
| 104 | - return success(true); | 92 | + @GetMapping("/export") |
| 93 | + @ApiOperation("导出参数配置") | ||
| 94 | + @PreAuthorize("@ss.hasPermission('infra:config:export')") | ||
| 95 | + @OperateLog(type = EXPORT) | ||
| 96 | + public void exportSysConfig(@Valid InfConfigExportReqVO reqVO, | ||
| 97 | + HttpServletResponse response) throws IOException { | ||
| 98 | + List<InfConfigDO> list = configService.getConfigList(reqVO); | ||
| 99 | + // 拼接数据 | ||
| 100 | + List<InfConfigExcelVO> datas = InfConfigConvert.INSTANCE.convertList(list); | ||
| 101 | + // 输出 | ||
| 102 | + ExcelUtils.write(response, "参数配置.xls", "数据", InfConfigExcelVO.class, datas); | ||
| 105 | } | 103 | } |
| 106 | 104 | ||
| 107 | } | 105 | } |
src/main/java/cn/iocoder/dashboard/modules/infra/controller/job/InfJobLogController.java
| @@ -75,7 +75,7 @@ public class InfJobLogController { | @@ -75,7 +75,7 @@ public class InfJobLogController { | ||
| 75 | List<InfJobLogDO> list = jobLogService.getJobLogList(exportReqVO); | 75 | List<InfJobLogDO> list = jobLogService.getJobLogList(exportReqVO); |
| 76 | // 导出 Excel | 76 | // 导出 Excel |
| 77 | List<InfJobLogExcelVO> datas = InfJobLogConvert.INSTANCE.convertList02(list); | 77 | List<InfJobLogExcelVO> datas = InfJobLogConvert.INSTANCE.convertList02(list); |
| 78 | - ExcelUtils.write(response, "定时任务.xls", "数据", InfJobLogExcelVO.class, datas); | 78 | + ExcelUtils.write(response, "任务日志.xls", "数据", InfJobLogExcelVO.class, datas); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | } | 81 | } |
src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/config/InfConfigMapper.java
| @@ -14,20 +14,21 @@ import java.util.List; | @@ -14,20 +14,21 @@ import java.util.List; | ||
| 14 | @Mapper | 14 | @Mapper |
| 15 | public interface InfConfigMapper extends BaseMapperX<InfConfigDO> { | 15 | public interface InfConfigMapper extends BaseMapperX<InfConfigDO> { |
| 16 | 16 | ||
| 17 | - default PageResult<InfConfigDO> selectPage(InfConfigPageReqVO reqVO) { | ||
| 18 | - return selectPage(reqVO, | ||
| 19 | - new QueryWrapperX<InfConfigDO>().likeIfPresent("name", reqVO.getName()) | ||
| 20 | - .likeIfPresent("`key`", reqVO.getKey()) | ||
| 21 | - .eqIfPresent("`type`", reqVO.getType()) | ||
| 22 | - .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); | ||
| 23 | - } | ||
| 24 | - | ||
| 25 | default InfConfigDO selectByKey(String key) { | 17 | default InfConfigDO selectByKey(String key) { |
| 26 | return selectOne(new QueryWrapper<InfConfigDO>().eq("`key`", key)); | 18 | return selectOne(new QueryWrapper<InfConfigDO>().eq("`key`", key)); |
| 27 | } | 19 | } |
| 28 | 20 | ||
| 21 | + default PageResult<InfConfigDO> selectPage(InfConfigPageReqVO reqVO) { | ||
| 22 | + return selectPage(reqVO, new QueryWrapperX<InfConfigDO>() | ||
| 23 | + .likeIfPresent("name", reqVO.getName()) | ||
| 24 | + .likeIfPresent("`key`", reqVO.getKey()) | ||
| 25 | + .eqIfPresent("`type`", reqVO.getType()) | ||
| 26 | + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | default List<InfConfigDO> selectList(InfConfigExportReqVO reqVO) { | 29 | default List<InfConfigDO> selectList(InfConfigExportReqVO reqVO) { |
| 30 | - return selectList(new QueryWrapperX<InfConfigDO>().likeIfPresent("name", reqVO.getName()) | 30 | + return selectList(new QueryWrapperX<InfConfigDO>() |
| 31 | + .likeIfPresent("name", reqVO.getName()) | ||
| 31 | .likeIfPresent("`key`", reqVO.getKey()) | 32 | .likeIfPresent("`key`", reqVO.getKey()) |
| 32 | .eqIfPresent("`type`", reqVO.getType()) | 33 | .eqIfPresent("`type`", reqVO.getType()) |
| 33 | .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); | 34 | .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); |
src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java
| @@ -7,28 +7,37 @@ import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqV | @@ -7,28 +7,37 @@ import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqV | ||
| 7 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO; | 7 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO; |
| 8 | import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | 8 | import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; |
| 9 | 9 | ||
| 10 | +import javax.validation.Valid; | ||
| 10 | import java.util.List; | 11 | import java.util.List; |
| 11 | 12 | ||
| 12 | /** | 13 | /** |
| 13 | * 参数配置 Service 接口 | 14 | * 参数配置 Service 接口 |
| 15 | + * | ||
| 16 | + * @author 芋道源码 | ||
| 14 | */ | 17 | */ |
| 15 | public interface InfConfigService { | 18 | public interface InfConfigService { |
| 16 | 19 | ||
| 17 | /** | 20 | /** |
| 18 | - * 获得参数配置分页列表 | 21 | + * 创建参数配置 |
| 19 | * | 22 | * |
| 20 | - * @param reqVO 分页条件 | ||
| 21 | - * @return 分页列表 | 23 | + * @param reqVO 创建信息 |
| 24 | + * @return 配置编号 | ||
| 22 | */ | 25 | */ |
| 23 | - PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO); | 26 | + Long createConfig(@Valid InfConfigCreateReqVO reqVO); |
| 24 | 27 | ||
| 25 | /** | 28 | /** |
| 26 | - * 获得参数配置列表 | 29 | + * 更新参数配置 |
| 27 | * | 30 | * |
| 28 | - * @param reqVO 列表 | ||
| 29 | - * @return 列表 | 31 | + * @param reqVO 更新信息 |
| 30 | */ | 32 | */ |
| 31 | - List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO); | 33 | + void updateConfig(@Valid InfConfigUpdateReqVO reqVO); |
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 删除参数配置 | ||
| 37 | + * | ||
| 38 | + * @param id 配置编号 | ||
| 39 | + */ | ||
| 40 | + void deleteConfig(Long id); | ||
| 32 | 41 | ||
| 33 | /** | 42 | /** |
| 34 | * 获得参数配置 | 43 | * 获得参数配置 |
| @@ -47,25 +56,20 @@ public interface InfConfigService { | @@ -47,25 +56,20 @@ public interface InfConfigService { | ||
| 47 | InfConfigDO getConfigByKey(String key); | 56 | InfConfigDO getConfigByKey(String key); |
| 48 | 57 | ||
| 49 | /** | 58 | /** |
| 50 | - * 创建参数配置 | 59 | + * 获得参数配置分页列表 |
| 51 | * | 60 | * |
| 52 | - * @param reqVO 创建信息 | ||
| 53 | - * @return 配置编号 | 61 | + * @param reqVO 分页条件 |
| 62 | + * @return 分页列表 | ||
| 54 | */ | 63 | */ |
| 55 | - Long createConfig(InfConfigCreateReqVO reqVO); | 64 | + PageResult<InfConfigDO> getConfigPage(@Valid InfConfigPageReqVO reqVO); |
| 56 | 65 | ||
| 57 | /** | 66 | /** |
| 58 | - * 更新参数配置 | 67 | + * 获得参数配置列表 |
| 59 | * | 68 | * |
| 60 | - * @param reqVO 更新信息 | 69 | + * @param reqVO 列表 |
| 70 | + * @return 列表 | ||
| 61 | */ | 71 | */ |
| 62 | - void updateConfig(InfConfigUpdateReqVO reqVO); | 72 | + List<InfConfigDO> getConfigList(@Valid InfConfigExportReqVO reqVO); |
| 63 | 73 | ||
| 64 | - /** | ||
| 65 | - * 删除参数配置 | ||
| 66 | - * | ||
| 67 | - * @param id 配置编号 | ||
| 68 | - */ | ||
| 69 | - void deleteConfig(Long id); | ||
| 70 | 74 | ||
| 71 | } | 75 | } |
src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java
| @@ -12,8 +12,10 @@ import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | @@ -12,8 +12,10 @@ import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | ||
| 12 | import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; | 12 | import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; |
| 13 | import cn.iocoder.dashboard.modules.infra.mq.producer.config.InfConfigProducer; | 13 | import cn.iocoder.dashboard.modules.infra.mq.producer.config.InfConfigProducer; |
| 14 | import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; | 14 | import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; |
| 15 | +import com.google.common.annotations.VisibleForTesting; | ||
| 15 | import lombok.extern.slf4j.Slf4j; | 16 | import lombok.extern.slf4j.Slf4j; |
| 16 | import org.springframework.stereotype.Service; | 17 | import org.springframework.stereotype.Service; |
| 18 | +import org.springframework.validation.annotation.Validated; | ||
| 17 | 19 | ||
| 18 | import javax.annotation.Resource; | 20 | import javax.annotation.Resource; |
| 19 | 21 | ||
| @@ -26,6 +28,7 @@ import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*; | @@ -26,6 +28,7 @@ import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*; | ||
| 26 | */ | 28 | */ |
| 27 | @Service | 29 | @Service |
| 28 | @Slf4j | 30 | @Slf4j |
| 31 | +@Validated | ||
| 29 | public class InfConfigServiceImpl implements InfConfigService { | 32 | public class InfConfigServiceImpl implements InfConfigService { |
| 30 | 33 | ||
| 31 | @Resource | 34 | @Resource |
| @@ -35,26 +38,6 @@ public class InfConfigServiceImpl implements InfConfigService { | @@ -35,26 +38,6 @@ public class InfConfigServiceImpl implements InfConfigService { | ||
| 35 | private InfConfigProducer configProducer; | 38 | private InfConfigProducer configProducer; |
| 36 | 39 | ||
| 37 | @Override | 40 | @Override |
| 38 | - public PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO) { | ||
| 39 | - return configMapper.selectPage(reqVO); | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - @Override | ||
| 43 | - public List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO) { | ||
| 44 | - return configMapper.selectList(reqVO); | ||
| 45 | - } | ||
| 46 | - | ||
| 47 | - @Override | ||
| 48 | - public InfConfigDO getConfig(Long id) { | ||
| 49 | - return configMapper.selectById(id); | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - @Override | ||
| 53 | - public InfConfigDO getConfigByKey(String key) { | ||
| 54 | - return configMapper.selectByKey(key); | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - @Override | ||
| 58 | public Long createConfig(InfConfigCreateReqVO reqVO) { | 41 | public Long createConfig(InfConfigCreateReqVO reqVO) { |
| 59 | // 校验正确性 | 42 | // 校验正确性 |
| 60 | checkCreateOrUpdate(null, reqVO.getKey()); | 43 | checkCreateOrUpdate(null, reqVO.getKey()); |
| @@ -92,6 +75,26 @@ public class InfConfigServiceImpl implements InfConfigService { | @@ -92,6 +75,26 @@ public class InfConfigServiceImpl implements InfConfigService { | ||
| 92 | configProducer.sendConfigRefreshMessage(); | 75 | configProducer.sendConfigRefreshMessage(); |
| 93 | } | 76 | } |
| 94 | 77 | ||
| 78 | + @Override | ||
| 79 | + public InfConfigDO getConfig(Long id) { | ||
| 80 | + return configMapper.selectById(id); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @Override | ||
| 84 | + public InfConfigDO getConfigByKey(String key) { | ||
| 85 | + return configMapper.selectByKey(key); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + @Override | ||
| 89 | + public PageResult<InfConfigDO> getConfigPage(InfConfigPageReqVO reqVO) { | ||
| 90 | + return configMapper.selectPage(reqVO); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @Override | ||
| 94 | + public List<InfConfigDO> getConfigList(InfConfigExportReqVO reqVO) { | ||
| 95 | + return configMapper.selectList(reqVO); | ||
| 96 | + } | ||
| 97 | + | ||
| 95 | private void checkCreateOrUpdate(Long id, String key) { | 98 | private void checkCreateOrUpdate(Long id, String key) { |
| 96 | // 校验自己存在 | 99 | // 校验自己存在 |
| 97 | checkConfigExists(id); | 100 | checkConfigExists(id); |
| @@ -99,7 +102,8 @@ public class InfConfigServiceImpl implements InfConfigService { | @@ -99,7 +102,8 @@ public class InfConfigServiceImpl implements InfConfigService { | ||
| 99 | checkConfigKeyUnique(id, key); | 102 | checkConfigKeyUnique(id, key); |
| 100 | } | 103 | } |
| 101 | 104 | ||
| 102 | - private InfConfigDO checkConfigExists(Long id) { | 105 | + @VisibleForTesting |
| 106 | + public InfConfigDO checkConfigExists(Long id) { | ||
| 103 | if (id == null) { | 107 | if (id == null) { |
| 104 | return null; | 108 | return null; |
| 105 | } | 109 | } |
| @@ -110,7 +114,8 @@ public class InfConfigServiceImpl implements InfConfigService { | @@ -110,7 +114,8 @@ public class InfConfigServiceImpl implements InfConfigService { | ||
| 110 | return config; | 114 | return config; |
| 111 | } | 115 | } |
| 112 | 116 | ||
| 113 | - private void checkConfigKeyUnique(Long id, String key) { | 117 | + @VisibleForTesting |
| 118 | + public void checkConfigKeyUnique(Long id, String key) { | ||
| 114 | InfConfigDO config = configMapper.selectByKey(key); | 119 | InfConfigDO config = configMapper.selectByKey(key); |
| 115 | if (config == null) { | 120 | if (config == null) { |
| 116 | return; | 121 | return; |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java
| @@ -25,8 +25,8 @@ public class SysDeptBaseVO { | @@ -25,8 +25,8 @@ public class SysDeptBaseVO { | ||
| 25 | private Long parentId; | 25 | private Long parentId; |
| 26 | 26 | ||
| 27 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | 27 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") |
| 28 | - @NotBlank(message = "显示顺序不能为空") | ||
| 29 | - private String sort; | 28 | + @NotNull(message = "显示顺序不能为空") |
| 29 | + private Integer sort; | ||
| 30 | 30 | ||
| 31 | @ApiModelProperty(value = "负责人", example = "芋道") | 31 | @ApiModelProperty(value = "负责人", example = "芋道") |
| 32 | private String leader; | 32 | private String leader; |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostBaseVO.java
| @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; | @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; | ||
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | import javax.validation.constraints.NotBlank; | 6 | import javax.validation.constraints.NotBlank; |
| 7 | +import javax.validation.constraints.NotNull; | ||
| 7 | import javax.validation.constraints.Size; | 8 | import javax.validation.constraints.Size; |
| 8 | 9 | ||
| 9 | /** | 10 | /** |
| @@ -24,8 +25,8 @@ public class SysPostBaseVO { | @@ -24,8 +25,8 @@ public class SysPostBaseVO { | ||
| 24 | private String code; | 25 | private String code; |
| 25 | 26 | ||
| 26 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | 27 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") |
| 27 | - @NotBlank(message = "显示顺序不能为空") | ||
| 28 | - private String sort; | 28 | + @NotNull(message = "显示顺序不能为空") |
| 29 | + private Integer sort; | ||
| 29 | 30 | ||
| 30 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类") | 31 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类") |
| 31 | private Integer status; | 32 | private Integer status; |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExcelVO.java
| @@ -23,7 +23,7 @@ public class SysPostExcelVO { | @@ -23,7 +23,7 @@ public class SysPostExcelVO { | ||
| 23 | private String name; | 23 | private String name; |
| 24 | 24 | ||
| 25 | @ExcelProperty("岗位排序") | 25 | @ExcelProperty("岗位排序") |
| 26 | - private String sort; | 26 | + private Integer sort; |
| 27 | 27 | ||
| 28 | @ExcelProperty(value = "状态", converter = DictConvert.class) | 28 | @ExcelProperty(value = "状态", converter = DictConvert.class) |
| 29 | @DictFormat(SYS_COMMON_STATUS) | 29 | @DictFormat(SYS_COMMON_STATUS) |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataBaseVO.java
| @@ -15,7 +15,7 @@ import javax.validation.constraints.Size; | @@ -15,7 +15,7 @@ import javax.validation.constraints.Size; | ||
| 15 | public class SysDictDataBaseVO { | 15 | public class SysDictDataBaseVO { |
| 16 | 16 | ||
| 17 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | 17 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") |
| 18 | - @NotBlank(message = "显示顺序不能为空") | 18 | + @NotNull(message = "显示顺序不能为空") |
| 19 | private Integer sort; | 19 | private Integer sort; |
| 20 | 20 | ||
| 21 | @ApiModelProperty(value = "字典标签", required = true, example = "芋道") | 21 | @ApiModelProperty(value = "字典标签", required = true, example = "芋道") |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/menu/SysMenuBaseVO.java
| @@ -28,8 +28,8 @@ public class SysMenuBaseVO { | @@ -28,8 +28,8 @@ public class SysMenuBaseVO { | ||
| 28 | private Integer type; | 28 | private Integer type; |
| 29 | 29 | ||
| 30 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | 30 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") |
| 31 | - @NotBlank(message = "显示顺序不能为空") | ||
| 32 | - private String sort; | 31 | + @NotNull(message = "显示顺序不能为空") |
| 32 | + private Integer sort; | ||
| 33 | 33 | ||
| 34 | @ApiModelProperty(value = "父菜单 ID", required = true, example = "1024") | 34 | @ApiModelProperty(value = "父菜单 ID", required = true, example = "1024") |
| 35 | @NotNull(message = "父菜单 ID 不能为空") | 35 | @NotNull(message = "父菜单 ID 不能为空") |
src/main/java/cn/iocoder/dashboard/modules/system/controller/permission/vo/role/SysRoleBaseVO.java
| @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; | @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; | ||
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | import javax.validation.constraints.NotBlank; | 6 | import javax.validation.constraints.NotBlank; |
| 7 | +import javax.validation.constraints.NotNull; | ||
| 7 | import javax.validation.constraints.Size; | 8 | import javax.validation.constraints.Size; |
| 8 | 9 | ||
| 9 | /** | 10 | /** |
| @@ -24,8 +25,8 @@ public class SysRoleBaseVO { | @@ -24,8 +25,8 @@ public class SysRoleBaseVO { | ||
| 24 | private String code; | 25 | private String code; |
| 25 | 26 | ||
| 26 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | 27 | @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") |
| 27 | - @NotBlank(message = "显示顺序不能为空") | ||
| 28 | - private String sort; | 28 | + @NotNull(message = "显示顺序不能为空") |
| 29 | + private Integer sort; | ||
| 29 | 30 | ||
| 30 | @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "见 SysRoleTypeEnum 枚举") | 31 | @ApiModelProperty(value = "角色类型", required = true, example = "1", notes = "见 SysRoleTypeEnum 枚举") |
| 31 | private Integer type; | 32 | private Integer type; |
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/auth/SysUserSessionDO.java
| @@ -10,6 +10,8 @@ import lombok.Builder; | @@ -10,6 +10,8 @@ import lombok.Builder; | ||
| 10 | import lombok.Data; | 10 | import lombok.Data; |
| 11 | import lombok.EqualsAndHashCode; | 11 | import lombok.EqualsAndHashCode; |
| 12 | 12 | ||
| 13 | +import java.util.Date; | ||
| 14 | + | ||
| 13 | /** | 15 | /** |
| 14 | * 在线用户表 | 16 | * 在线用户表 |
| 15 | * | 17 | * |
| @@ -36,6 +38,14 @@ public class SysUserSessionDO extends BaseDO { | @@ -36,6 +38,14 @@ public class SysUserSessionDO extends BaseDO { | ||
| 36 | * 关联 {@link SysUserDO#getId()} | 38 | * 关联 {@link SysUserDO#getId()} |
| 37 | */ | 39 | */ |
| 38 | private Long userId; | 40 | private Long userId; |
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 用户账号 | ||
| 44 | + * | ||
| 45 | + * 冗余,因为账号可以变更 | ||
| 46 | + */ | ||
| 47 | + private String username; | ||
| 48 | + | ||
| 39 | /** | 49 | /** |
| 40 | * 用户 IP | 50 | * 用户 IP |
| 41 | */ | 51 | */ |
| @@ -44,5 +54,9 @@ public class SysUserSessionDO extends BaseDO { | @@ -44,5 +54,9 @@ public class SysUserSessionDO extends BaseDO { | ||
| 44 | * 浏览器 UA | 54 | * 浏览器 UA |
| 45 | */ | 55 | */ |
| 46 | private String userAgent; | 56 | private String userAgent; |
| 57 | + /** | ||
| 58 | + * 会话超时时间 | ||
| 59 | + */ | ||
| 60 | + private Date sessionTimeout; | ||
| 47 | 61 | ||
| 48 | } | 62 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/dept/SysDeptDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/dept/SysPostDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/permission/SysMenuDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/auth/SysUserSessionMapper.java
| @@ -8,6 +8,8 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO; | @@ -8,6 +8,8 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO; | ||
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | import java.util.Collection; | 10 | import java.util.Collection; |
| 11 | +import java.util.Date; | ||
| 12 | +import java.util.List; | ||
| 11 | 13 | ||
| 12 | @Mapper | 14 | @Mapper |
| 13 | public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> { | 15 | public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> { |
| @@ -18,4 +20,7 @@ public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> { | @@ -18,4 +20,7 @@ public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> { | ||
| 18 | .likeIfPresent("user_ip", reqVO.getUserIp())); | 20 | .likeIfPresent("user_ip", reqVO.getUserIp())); |
| 19 | } | 21 | } |
| 20 | 22 | ||
| 23 | + default List<SysUserSessionDO> selectListBySessionTimoutLt() { | ||
| 24 | + return selectList(new QueryWrapperX<SysUserSessionDO>().lt("session_timeout",new Date())); | ||
| 25 | + } | ||
| 21 | } | 26 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dict/SysDictDataMapper.java
| @@ -15,13 +15,13 @@ import java.util.List; | @@ -15,13 +15,13 @@ import java.util.List; | ||
| 15 | @Mapper | 15 | @Mapper |
| 16 | public interface SysDictDataMapper extends BaseMapperX<SysDictDataDO> { | 16 | public interface SysDictDataMapper extends BaseMapperX<SysDictDataDO> { |
| 17 | 17 | ||
| 18 | - default SysDictDataDO selectByDictTypeAndLabel(String dictType, String label) { | 18 | + default SysDictDataDO selectByDictTypeAndValue(String dictType, String value) { |
| 19 | return selectOne(new QueryWrapper<SysDictDataDO>().eq("dict_type", dictType) | 19 | return selectOne(new QueryWrapper<SysDictDataDO>().eq("dict_type", dictType) |
| 20 | - .eq("label", label)); | 20 | + .eq("value", value)); |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | default int selectCountByDictType(String dictType) { | 23 | default int selectCountByDictType(String dictType) { |
| 24 | - return selectCount(new QueryWrapper<SysDictDataDO>().eq("dict_type", dictType)); | 24 | + return selectCount("dict_type", dictType); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | default PageResult<SysDictDataDO> selectPage(SysDictDataPageReqVO reqVO) { | 27 | default PageResult<SysDictDataDO> selectPage(SysDictDataPageReqVO reqVO) { |
src/main/java/cn/iocoder/dashboard/modules/system/dal/redis/SysRedisKeyConstants.java
| @@ -16,7 +16,7 @@ public interface SysRedisKeyConstants { | @@ -16,7 +16,7 @@ public interface SysRedisKeyConstants { | ||
| 16 | 16 | ||
| 17 | RedisKeyDefine LOGIN_USER = new RedisKeyDefine("登陆用户的缓存", | 17 | RedisKeyDefine LOGIN_USER = new RedisKeyDefine("登陆用户的缓存", |
| 18 | "login_user:%s", // 参数为 sessionId | 18 | "login_user:%s", // 参数为 sessionId |
| 19 | - STRING, LoginUser.class, Duration.ofMinutes(30)); | 19 | + STRING, LoginUser.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); |
| 20 | 20 | ||
| 21 | RedisKeyDefine CAPTCHA_CODE = new RedisKeyDefine("验证码的缓存", | 21 | RedisKeyDefine CAPTCHA_CODE = new RedisKeyDefine("验证码的缓存", |
| 22 | "captcha_code:%s", // 参数为 uuid | 22 | "captcha_code:%s", // 参数为 uuid |
src/main/java/cn/iocoder/dashboard/modules/system/dal/redis/auth/SysLoginUserRedisDAO.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.redis.auth; | 1 | package cn.iocoder.dashboard.modules.system.dal.redis.auth; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 3 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 4 | +import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService; | ||
| 4 | import cn.iocoder.dashboard.util.json.JsonUtils; | 5 | import cn.iocoder.dashboard.util.json.JsonUtils; |
| 5 | import org.springframework.data.redis.core.StringRedisTemplate; | 6 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | import org.springframework.stereotype.Repository; | 7 | import org.springframework.stereotype.Repository; |
| 7 | 8 | ||
| 8 | import javax.annotation.Resource; | 9 | import javax.annotation.Resource; |
| 10 | +import java.time.Duration; | ||
| 9 | 11 | ||
| 10 | import static cn.iocoder.dashboard.modules.system.dal.redis.SysRedisKeyConstants.LOGIN_USER; | 12 | import static cn.iocoder.dashboard.modules.system.dal.redis.SysRedisKeyConstants.LOGIN_USER; |
| 11 | 13 | ||
| @@ -19,6 +21,8 @@ public class SysLoginUserRedisDAO { | @@ -19,6 +21,8 @@ public class SysLoginUserRedisDAO { | ||
| 19 | 21 | ||
| 20 | @Resource | 22 | @Resource |
| 21 | private StringRedisTemplate stringRedisTemplate; | 23 | private StringRedisTemplate stringRedisTemplate; |
| 24 | + @Resource | ||
| 25 | + private SysUserSessionService sysUserSessionService; | ||
| 22 | 26 | ||
| 23 | public LoginUser get(String sessionId) { | 27 | public LoginUser get(String sessionId) { |
| 24 | String redisKey = formatKey(sessionId); | 28 | String redisKey = formatKey(sessionId); |
| @@ -27,7 +31,8 @@ public class SysLoginUserRedisDAO { | @@ -27,7 +31,8 @@ public class SysLoginUserRedisDAO { | ||
| 27 | 31 | ||
| 28 | public void set(String sessionId, LoginUser loginUser) { | 32 | public void set(String sessionId, LoginUser loginUser) { |
| 29 | String redisKey = formatKey(sessionId); | 33 | String redisKey = formatKey(sessionId); |
| 30 | - stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(loginUser), LOGIN_USER.getTimeout()); | 34 | + stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(loginUser), |
| 35 | + Duration.ofMillis(sysUserSessionService.getSessionTimeoutMillis())); | ||
| 31 | } | 36 | } |
| 32 | 37 | ||
| 33 | public void delete(String sessionId) { | 38 | public void delete(String sessionId) { |
src/main/java/cn/iocoder/dashboard/modules/system/job/auth/SysUserSessionTimeoutJob.java
| 1 | package cn.iocoder.dashboard.modules.system.job.auth; | 1 | package cn.iocoder.dashboard.modules.system.job.auth; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.framework.quartz.core.handler.JobHandler; | 3 | import cn.iocoder.dashboard.framework.quartz.core.handler.JobHandler; |
| 4 | +import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService; | ||
| 4 | import lombok.extern.slf4j.Slf4j; | 5 | import lombok.extern.slf4j.Slf4j; |
| 5 | import org.springframework.stereotype.Component; | 6 | import org.springframework.stereotype.Component; |
| 6 | 7 | ||
| 8 | +import javax.annotation.Resource; | ||
| 9 | + | ||
| 7 | /** | 10 | /** |
| 8 | * 用户 Session 超时 Job | 11 | * 用户 Session 超时 Job |
| 9 | * | 12 | * |
| 10 | - * @author 芋道源码 | 13 | + * @author 願 |
| 11 | */ | 14 | */ |
| 12 | @Component | 15 | @Component |
| 13 | @Slf4j | 16 | @Slf4j |
| 14 | public class SysUserSessionTimeoutJob implements JobHandler { | 17 | public class SysUserSessionTimeoutJob implements JobHandler { |
| 15 | 18 | ||
| 19 | + @Resource | ||
| 20 | + private SysUserSessionService sysUserSessionService; | ||
| 21 | + | ||
| 16 | @Override | 22 | @Override |
| 17 | public String execute(String param) throws Exception { | 23 | public String execute(String param) throws Exception { |
| 18 | -// System.out.println("执行了一次任务"); | ||
| 19 | - log.info("[execute][执行任务:{}]", param); | ||
| 20 | - return null; | 24 | + // 执行过期 |
| 25 | + Long timeoutCount = sysUserSessionService.clearSessionTimeout(); | ||
| 26 | + // 返回结果,记录每次的超时数量 | ||
| 27 | + return String.format("移除在线会话数量为 %s 个", timeoutCount); | ||
| 21 | } | 28 | } |
| 22 | 29 | ||
| 23 | } | 30 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/SysUserSessionService.java
| @@ -60,4 +60,10 @@ public interface SysUserSessionService { | @@ -60,4 +60,10 @@ public interface SysUserSessionService { | ||
| 60 | */ | 60 | */ |
| 61 | PageResult<SysUserSessionDO> getUserSessionPage(SysUserSessionPageReqVO reqVO); | 61 | PageResult<SysUserSessionDO> getUserSessionPage(SysUserSessionPageReqVO reqVO); |
| 62 | 62 | ||
| 63 | + /** | ||
| 64 | + * 移除超时的在线用户 | ||
| 65 | + * | ||
| 66 | + * @return {@link Long } 移出的超时用户数量 | ||
| 67 | + **/ | ||
| 68 | + long clearSessionTimeout(); | ||
| 63 | } | 69 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
| @@ -160,7 +160,26 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -160,7 +160,26 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 160 | 160 | ||
| 161 | @Override | 161 | @Override |
| 162 | public void logout(String token) { | 162 | public void logout(String token) { |
| 163 | -// AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功")); TODO 需要搞一搞 | 163 | + // 查询用户信息 |
| 164 | + LoginUser loginUser = userSessionService.getLoginUser(token); | ||
| 165 | + if (loginUser == null) { | ||
| 166 | + return; | ||
| 167 | + } | ||
| 168 | + // 删除 session | ||
| 169 | + userSessionService.deleteUserSession(token); | ||
| 170 | + // 记录登出日子和 | ||
| 171 | + this.createLogoutLog(loginUser.getUsername()); | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + private void createLogoutLog(String username) { | ||
| 175 | + SysLoginLogCreateReqVO reqVO = new SysLoginLogCreateReqVO(); | ||
| 176 | + reqVO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType()); | ||
| 177 | + reqVO.setTraceId(TracerUtils.getTraceId()); | ||
| 178 | + reqVO.setUsername(username); | ||
| 179 | + reqVO.setUserAgent(ServletUtils.getUserAgent()); | ||
| 180 | + reqVO.setUserIp(ServletUtils.getClientIP()); | ||
| 181 | + reqVO.setResult(SysLoginResultEnum.SUCCESS.getResult()); | ||
| 182 | + loginLogService.createLoginLog(reqVO); | ||
| 164 | } | 183 | } |
| 165 | 184 | ||
| 166 | @Override | 185 | @Override |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysUserSessionServiceImpl.java
| @@ -6,20 +6,28 @@ import cn.hutool.core.util.StrUtil; | @@ -6,20 +6,28 @@ import cn.hutool.core.util.StrUtil; | ||
| 6 | import cn.iocoder.dashboard.common.pojo.PageResult; | 6 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 7 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; | 7 | import cn.iocoder.dashboard.framework.security.config.SecurityProperties; |
| 8 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 8 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 9 | +import cn.iocoder.dashboard.framework.tracer.core.util.TracerUtils; | ||
| 9 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; | 10 | import cn.iocoder.dashboard.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO; |
| 10 | -import cn.iocoder.dashboard.modules.system.dal.mysql.auth.SysUserSessionMapper; | 11 | +import cn.iocoder.dashboard.modules.system.controller.logger.vo.loginlog.SysLoginLogCreateReqVO; |
| 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO; | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO; |
| 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | 13 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 14 | +import cn.iocoder.dashboard.modules.system.dal.mysql.auth.SysUserSessionMapper; | ||
| 13 | import cn.iocoder.dashboard.modules.system.dal.redis.auth.SysLoginUserRedisDAO; | 15 | import cn.iocoder.dashboard.modules.system.dal.redis.auth.SysLoginUserRedisDAO; |
| 16 | +import cn.iocoder.dashboard.modules.system.enums.logger.SysLoginLogTypeEnum; | ||
| 17 | +import cn.iocoder.dashboard.modules.system.enums.logger.SysLoginResultEnum; | ||
| 14 | import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService; | 18 | import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService; |
| 19 | +import cn.iocoder.dashboard.modules.system.service.logger.SysLoginLogService; | ||
| 15 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | 20 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 21 | +import com.google.common.collect.Lists; | ||
| 16 | import org.springframework.stereotype.Service; | 22 | import org.springframework.stereotype.Service; |
| 17 | 23 | ||
| 18 | import javax.annotation.Resource; | 24 | import javax.annotation.Resource; |
| 19 | -import java.util.Collection; | ||
| 20 | -import java.util.Date; | 25 | +import java.time.Duration; |
| 26 | +import java.util.*; | ||
| 27 | +import java.util.stream.Collectors; | ||
| 21 | 28 | ||
| 22 | import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; | 29 | import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; |
| 30 | +import static cn.iocoder.dashboard.util.date.DateUtils.addTime; | ||
| 23 | 31 | ||
| 24 | /** | 32 | /** |
| 25 | * 在线用户 Session Service 实现类 | 33 | * 在线用户 Session Service 实现类 |
| @@ -31,14 +39,14 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | @@ -31,14 +39,14 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | ||
| 31 | 39 | ||
| 32 | @Resource | 40 | @Resource |
| 33 | private SecurityProperties securityProperties; | 41 | private SecurityProperties securityProperties; |
| 34 | - | ||
| 35 | @Resource | 42 | @Resource |
| 36 | private SysLoginUserRedisDAO loginUserRedisDAO; | 43 | private SysLoginUserRedisDAO loginUserRedisDAO; |
| 37 | @Resource | 44 | @Resource |
| 38 | private SysUserSessionMapper userSessionMapper; | 45 | private SysUserSessionMapper userSessionMapper; |
| 39 | - | ||
| 40 | @Resource | 46 | @Resource |
| 41 | private SysUserService userService; | 47 | private SysUserService userService; |
| 48 | + @Resource | ||
| 49 | + private SysLoginLogService loginLogService; | ||
| 42 | 50 | ||
| 43 | @Override | 51 | @Override |
| 44 | public String createUserSession(LoginUser loginUser, String userIp, String userAgent) { | 52 | public String createUserSession(LoginUser loginUser, String userIp, String userAgent) { |
| @@ -49,7 +57,9 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | @@ -49,7 +57,9 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | ||
| 49 | loginUserRedisDAO.set(sessionId, loginUser); | 57 | loginUserRedisDAO.set(sessionId, loginUser); |
| 50 | // 写入 DB 中 | 58 | // 写入 DB 中 |
| 51 | SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) | 59 | SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId) |
| 52 | - .userId(loginUser.getId()).userIp(userIp).userAgent(userAgent).build(); | 60 | + .userId(loginUser.getId()).userIp(userIp).userAgent(userAgent).username(loginUser.getUsername()) |
| 61 | + .sessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))) | ||
| 62 | + .build(); | ||
| 53 | userSessionMapper.insert(userSession); | 63 | userSessionMapper.insert(userSession); |
| 54 | // 返回 Session 编号 | 64 | // 返回 Session 编号 |
| 55 | return sessionId; | 65 | return sessionId; |
| @@ -62,7 +72,9 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | @@ -62,7 +72,9 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | ||
| 62 | loginUserRedisDAO.set(sessionId, loginUser); | 72 | loginUserRedisDAO.set(sessionId, loginUser); |
| 63 | // 更新 DB 中 | 73 | // 更新 DB 中 |
| 64 | SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build(); | 74 | SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build(); |
| 75 | + updateObj.setUsername(loginUser.getUsername()); | ||
| 65 | updateObj.setUpdateTime(new Date()); | 76 | updateObj.setUpdateTime(new Date()); |
| 77 | + updateObj.setSessionTimeout(addTime(Duration.ofMillis(getSessionTimeoutMillis()))); | ||
| 66 | userSessionMapper.updateById(updateObj); | 78 | userSessionMapper.updateById(updateObj); |
| 67 | } | 79 | } |
| 68 | 80 | ||
| @@ -97,6 +109,36 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | @@ -97,6 +109,36 @@ public class SysUserSessionServiceImpl implements SysUserSessionService { | ||
| 97 | return userSessionMapper.selectPage(reqVO, userIds); | 109 | return userSessionMapper.selectPage(reqVO, userIds); |
| 98 | } | 110 | } |
| 99 | 111 | ||
| 112 | + @Override | ||
| 113 | + public long clearSessionTimeout() { | ||
| 114 | + // 获取db里已经超时的用户列表 | ||
| 115 | + List<SysUserSessionDO> sessionTimeoutDOS = userSessionMapper.selectListBySessionTimoutLt(); | ||
| 116 | + Map<String, SysUserSessionDO> timeoutSessionDOMap = sessionTimeoutDOS | ||
| 117 | + .stream() | ||
| 118 | + .filter(sessionDO -> loginUserRedisDAO.get(sessionDO.getId()) == null) | ||
| 119 | + .collect(Collectors.toMap(SysUserSessionDO::getId, o -> o)); | ||
| 120 | + // 确认已经超时,按批次移出在线用户列表 | ||
| 121 | + if (CollUtil.isNotEmpty(timeoutSessionDOMap)) { | ||
| 122 | + Lists.partition(new ArrayList<>(timeoutSessionDOMap.keySet()), 100).forEach(userSessionMapper::deleteBatchIds); | ||
| 123 | + //记录用户超时退出日志 | ||
| 124 | + createTimeoutLogoutLog(timeoutSessionDOMap.values()); | ||
| 125 | + } | ||
| 126 | + return timeoutSessionDOMap.size(); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + private void createTimeoutLogoutLog(Collection<SysUserSessionDO> timeoutSessionDOS) { | ||
| 130 | + for (SysUserSessionDO timeoutSessionDO : timeoutSessionDOS) { | ||
| 131 | + SysLoginLogCreateReqVO reqVO = new SysLoginLogCreateReqVO(); | ||
| 132 | + reqVO.setLogType(SysLoginLogTypeEnum.LOGOUT_TIMEOUT.getType()); | ||
| 133 | + reqVO.setTraceId(TracerUtils.getTraceId()); | ||
| 134 | + reqVO.setUsername(timeoutSessionDO.getUsername()); | ||
| 135 | + reqVO.setUserAgent(timeoutSessionDO.getUserAgent()); | ||
| 136 | + reqVO.setUserIp(timeoutSessionDO.getUserIp()); | ||
| 137 | + reqVO.setResult(SysLoginResultEnum.SUCCESS.getResult()); | ||
| 138 | + loginLogService.createLoginLog(reqVO); | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + | ||
| 100 | /** | 142 | /** |
| 101 | * 生成 Session 编号,目前采用 UUID 算法 | 143 | * 生成 Session 编号,目前采用 UUID 算法 |
| 102 | * | 144 | * |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java
| @@ -2,7 +2,6 @@ package cn.iocoder.dashboard.modules.system.service.dict.impl; | @@ -2,7 +2,6 @@ package cn.iocoder.dashboard.modules.system.service.dict.impl; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 6 | import cn.iocoder.dashboard.common.pojo.PageResult; | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 7 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | 6 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 8 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; | 7 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; |
| @@ -10,12 +9,13 @@ import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataEx | @@ -10,12 +9,13 @@ import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataEx | ||
| 10 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; | 9 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; |
| 11 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; | 10 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; |
| 12 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; | 11 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; |
| 13 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; | ||
| 14 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; |
| 15 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | 13 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; |
| 14 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; | ||
| 16 | import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; | 15 | import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; |
| 17 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; | 16 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 18 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | 17 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; |
| 18 | +import com.google.common.annotations.VisibleForTesting; | ||
| 19 | import com.google.common.collect.ImmutableTable; | 19 | import com.google.common.collect.ImmutableTable; |
| 20 | import lombok.extern.slf4j.Slf4j; | 20 | import lombok.extern.slf4j.Slf4j; |
| 21 | import org.springframework.scheduling.annotation.Scheduled; | 21 | import org.springframework.scheduling.annotation.Scheduled; |
| @@ -28,6 +28,7 @@ import java.util.Comparator; | @@ -28,6 +28,7 @@ import java.util.Comparator; | ||
| 28 | import java.util.Date; | 28 | import java.util.Date; |
| 29 | import java.util.List; | 29 | import java.util.List; |
| 30 | 30 | ||
| 31 | +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; | ||
| 31 | import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | 32 | import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; |
| 32 | 33 | ||
| 33 | /** | 34 | /** |
| @@ -156,7 +157,7 @@ public class SysDictDataServiceImpl implements SysDictDataService { | @@ -156,7 +157,7 @@ public class SysDictDataServiceImpl implements SysDictDataService { | ||
| 156 | @Override | 157 | @Override |
| 157 | public Long createDictData(SysDictDataCreateReqVO reqVO) { | 158 | public Long createDictData(SysDictDataCreateReqVO reqVO) { |
| 158 | // 校验正确性 | 159 | // 校验正确性 |
| 159 | - this.checkCreateOrUpdate(null, reqVO.getLabel(), reqVO.getDictType()); | 160 | + this.checkCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); |
| 160 | // 插入字典类型 | 161 | // 插入字典类型 |
| 161 | SysDictDataDO dictData = SysDictDataConvert.INSTANCE.convert(reqVO); | 162 | SysDictDataDO dictData = SysDictDataConvert.INSTANCE.convert(reqVO); |
| 162 | dictDataMapper.insert(dictData); | 163 | dictDataMapper.insert(dictData); |
| @@ -168,7 +169,7 @@ public class SysDictDataServiceImpl implements SysDictDataService { | @@ -168,7 +169,7 @@ public class SysDictDataServiceImpl implements SysDictDataService { | ||
| 168 | @Override | 169 | @Override |
| 169 | public void updateDictData(SysDictDataUpdateReqVO reqVO) { | 170 | public void updateDictData(SysDictDataUpdateReqVO reqVO) { |
| 170 | // 校验正确性 | 171 | // 校验正确性 |
| 171 | - this.checkCreateOrUpdate(reqVO.getId(), reqVO.getLabel(), reqVO.getDictType()); | 172 | + this.checkCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); |
| 172 | // 更新字典类型 | 173 | // 更新字典类型 |
| 173 | SysDictDataDO updateObj = SysDictDataConvert.INSTANCE.convert(reqVO); | 174 | SysDictDataDO updateObj = SysDictDataConvert.INSTANCE.convert(reqVO); |
| 174 | dictDataMapper.updateById(updateObj); | 175 | dictDataMapper.updateById(updateObj); |
| @@ -191,46 +192,49 @@ public class SysDictDataServiceImpl implements SysDictDataService { | @@ -191,46 +192,49 @@ public class SysDictDataServiceImpl implements SysDictDataService { | ||
| 191 | return dictDataMapper.selectCountByDictType(dictType); | 192 | return dictDataMapper.selectCountByDictType(dictType); |
| 192 | } | 193 | } |
| 193 | 194 | ||
| 194 | - private void checkCreateOrUpdate(Long id, String label, String dictType) { | 195 | + private void checkCreateOrUpdate(Long id, String value, String dictType) { |
| 195 | // 校验自己存在 | 196 | // 校验自己存在 |
| 196 | checkDictDataExists(id); | 197 | checkDictDataExists(id); |
| 197 | // 校验字典类型有效 | 198 | // 校验字典类型有效 |
| 198 | checkDictTypeValid(dictType); | 199 | checkDictTypeValid(dictType); |
| 199 | // 校验字典数据的值的唯一性 | 200 | // 校验字典数据的值的唯一性 |
| 200 | - checkDictDataValueUnique(id, dictType, label); | 201 | + checkDictDataValueUnique(id, dictType, value); |
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | - private void checkDictDataValueUnique(Long id, String dictType, String label) { | ||
| 204 | - SysDictDataDO dictData = dictDataMapper.selectByDictTypeAndLabel(dictType, label); | 204 | + @VisibleForTesting |
| 205 | + public void checkDictDataValueUnique(Long id, String dictType, String value) { | ||
| 206 | + SysDictDataDO dictData = dictDataMapper.selectByDictTypeAndValue(dictType, value); | ||
| 205 | if (dictData == null) { | 207 | if (dictData == null) { |
| 206 | return; | 208 | return; |
| 207 | } | 209 | } |
| 208 | // 如果 id 为空,说明不用比较是否为相同 id 的字典数据 | 210 | // 如果 id 为空,说明不用比较是否为相同 id 的字典数据 |
| 209 | if (id == null) { | 211 | if (id == null) { |
| 210 | - throw ServiceExceptionUtil.exception(DICT_DATA_VALUE_DUPLICATE); | 212 | + throw exception(DICT_DATA_VALUE_DUPLICATE); |
| 211 | } | 213 | } |
| 212 | if (!dictData.getId().equals(id)) { | 214 | if (!dictData.getId().equals(id)) { |
| 213 | - throw ServiceExceptionUtil.exception(DICT_DATA_VALUE_DUPLICATE); | 215 | + throw exception(DICT_DATA_VALUE_DUPLICATE); |
| 214 | } | 216 | } |
| 215 | } | 217 | } |
| 216 | 218 | ||
| 217 | - private void checkDictDataExists(Long id) { | 219 | + @VisibleForTesting |
| 220 | + public void checkDictDataExists(Long id) { | ||
| 218 | if (id == null) { | 221 | if (id == null) { |
| 219 | return; | 222 | return; |
| 220 | } | 223 | } |
| 221 | SysDictDataDO dictData = dictDataMapper.selectById(id); | 224 | SysDictDataDO dictData = dictDataMapper.selectById(id); |
| 222 | if (dictData == null) { | 225 | if (dictData == null) { |
| 223 | - throw ServiceExceptionUtil.exception(DICT_DATA_NOT_EXISTS); | 226 | + throw exception(DICT_DATA_NOT_EXISTS); |
| 224 | } | 227 | } |
| 225 | } | 228 | } |
| 226 | 229 | ||
| 227 | - private void checkDictTypeValid(String type) { | 230 | + @VisibleForTesting |
| 231 | + public void checkDictTypeValid(String type) { | ||
| 228 | SysDictTypeDO dictType = dictTypeService.getDictType(type); | 232 | SysDictTypeDO dictType = dictTypeService.getDictType(type); |
| 229 | if (dictType == null) { | 233 | if (dictType == null) { |
| 230 | - throw ServiceExceptionUtil.exception(DICT_TYPE_NOT_EXISTS); | 234 | + throw exception(DICT_TYPE_NOT_EXISTS); |
| 231 | } | 235 | } |
| 232 | if (!CommonStatusEnum.ENABLE.getStatus().equals(dictType.getStatus())) { | 236 | if (!CommonStatusEnum.ENABLE.getStatus().equals(dictType.getStatus())) { |
| 233 | - throw ServiceExceptionUtil.exception(DICT_TYPE_NOT_ENABLE); | 237 | + throw exception(DICT_TYPE_NOT_ENABLE); |
| 234 | } | 238 | } |
| 235 | } | 239 | } |
| 236 | 240 |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictTypeServiceImpl.java
| @@ -10,6 +10,7 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | @@ -10,6 +10,7 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | ||
| 10 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictTypeMapper; | 10 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictTypeMapper; |
| 11 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; | 11 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 12 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | 12 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; |
| 13 | +import com.google.common.annotations.VisibleForTesting; | ||
| 13 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 14 | 15 | ||
| 15 | import javax.annotation.Resource; | 16 | import javax.annotation.Resource; |
| @@ -97,8 +98,9 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | @@ -97,8 +98,9 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | ||
| 97 | checkDictTypeUnique(id, type); | 98 | checkDictTypeUnique(id, type); |
| 98 | } | 99 | } |
| 99 | 100 | ||
| 100 | - private void checkDictTypeNameUnique(Long id, String type) { | ||
| 101 | - SysDictTypeDO dictType = dictTypeMapper.selectByName(type); | 101 | + @VisibleForTesting |
| 102 | + public void checkDictTypeNameUnique(Long id, String name) { | ||
| 103 | + SysDictTypeDO dictType = dictTypeMapper.selectByName(name); | ||
| 102 | if (dictType == null) { | 104 | if (dictType == null) { |
| 103 | return; | 105 | return; |
| 104 | } | 106 | } |
| @@ -111,7 +113,8 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | @@ -111,7 +113,8 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | ||
| 111 | } | 113 | } |
| 112 | } | 114 | } |
| 113 | 115 | ||
| 114 | - private void checkDictTypeUnique(Long id, String type) { | 116 | + @VisibleForTesting |
| 117 | + public void checkDictTypeUnique(Long id, String type) { | ||
| 115 | SysDictTypeDO dictType = dictTypeMapper.selectByType(type); | 118 | SysDictTypeDO dictType = dictTypeMapper.selectByType(type); |
| 116 | if (dictType == null) { | 119 | if (dictType == null) { |
| 117 | return; | 120 | return; |
| @@ -125,7 +128,8 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | @@ -125,7 +128,8 @@ public class SysDictTypeServiceImpl implements SysDictTypeService { | ||
| 125 | } | 128 | } |
| 126 | } | 129 | } |
| 127 | 130 | ||
| 128 | - private SysDictTypeDO checkDictTypeExists(Long id) { | 131 | + @VisibleForTesting |
| 132 | + public SysDictTypeDO checkDictTypeExists(Long id) { | ||
| 129 | if (id == null) { | 133 | if (id == null) { |
| 130 | return null; | 134 | return null; |
| 131 | } | 135 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/notice/impl/SysNoticeServiceImpl.java
| @@ -9,6 +9,7 @@ import cn.iocoder.dashboard.modules.system.convert.notice.SysNoticeConvert; | @@ -9,6 +9,7 @@ import cn.iocoder.dashboard.modules.system.convert.notice.SysNoticeConvert; | ||
| 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper; | 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper; |
| 10 | import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO; | 10 | import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO; |
| 11 | import cn.iocoder.dashboard.modules.system.service.notice.SysNoticeService; | 11 | import cn.iocoder.dashboard.modules.system.service.notice.SysNoticeService; |
| 12 | +import com.google.common.annotations.VisibleForTesting; | ||
| 12 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
| 13 | 14 | ||
| 14 | import javax.annotation.Resource; | 15 | import javax.annotation.Resource; |
| @@ -60,7 +61,8 @@ public class SysNoticeServiceImpl implements SysNoticeService { | @@ -60,7 +61,8 @@ public class SysNoticeServiceImpl implements SysNoticeService { | ||
| 60 | noticeMapper.deleteById(id); | 61 | noticeMapper.deleteById(id); |
| 61 | } | 62 | } |
| 62 | 63 | ||
| 63 | - private void checkNoticeExists(Long id) { | 64 | + @VisibleForTesting |
| 65 | + public void checkNoticeExists(Long id) { | ||
| 64 | if (id == null) { | 66 | if (id == null) { |
| 65 | return; | 67 | return; |
| 66 | } | 68 | } |
src/main/java/cn/iocoder/dashboard/util/collection/ArrayUtils.java
| @@ -2,6 +2,8 @@ package cn.iocoder.dashboard.util.collection; | @@ -2,6 +2,8 @@ package cn.iocoder.dashboard.util.collection; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.util.ArrayUtil; | 3 | import cn.hutool.core.util.ArrayUtil; |
| 4 | 4 | ||
| 5 | +import java.util.function.Consumer; | ||
| 6 | + | ||
| 5 | /** | 7 | /** |
| 6 | * Array 工具类 | 8 | * Array 工具类 |
| 7 | * | 9 | * |
| @@ -18,11 +20,11 @@ public class ArrayUtils { | @@ -18,11 +20,11 @@ public class ArrayUtils { | ||
| 18 | * @return 结果数组 | 20 | * @return 结果数组 |
| 19 | */ | 21 | */ |
| 20 | @SafeVarargs | 22 | @SafeVarargs |
| 21 | - public static <T> T[] append(T object, T... newElements) { | 23 | + public static <T> Consumer<T>[] append(Consumer<T> object, Consumer<T>... newElements) { |
| 22 | if (object == null) { | 24 | if (object == null) { |
| 23 | return newElements; | 25 | return newElements; |
| 24 | } | 26 | } |
| 25 | - T[] result = ArrayUtil.newArray(object.getClass(), 1 + newElements.length); | 27 | + Consumer<T>[] result = ArrayUtil.newArray(Consumer.class, 1 + newElements.length); |
| 26 | result[0] = object; | 28 | result[0] = object; |
| 27 | System.arraycopy(newElements, 0, result, 1, newElements.length); | 29 | System.arraycopy(newElements, 0, result, 1, newElements.length); |
| 28 | return result; | 30 | return result; |
src/main/java/cn/iocoder/dashboard/util/object/ObjectUtils.java
| @@ -19,4 +19,14 @@ public class ObjectUtils { | @@ -19,4 +19,14 @@ public class ObjectUtils { | ||
| 19 | return result; | 19 | return result; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | + public static <T extends Comparable<T>> T max(T obj1, T obj2) { | ||
| 23 | + if (obj1 == null) { | ||
| 24 | + return obj2; | ||
| 25 | + } | ||
| 26 | + if (obj2 == null) { | ||
| 27 | + return obj1; | ||
| 28 | + } | ||
| 29 | + return obj1.compareTo(obj2) > 0 ? obj1 : obj2; | ||
| 30 | + } | ||
| 31 | + | ||
| 22 | } | 32 | } |
src/test/java/cn/iocoder/dashboard/BaseDbAndRedisUnitTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.config.RedisTestConfiguration; | ||
| 4 | +import cn.iocoder.dashboard.framework.datasource.config.DataSourceConfiguration; | ||
| 5 | +import cn.iocoder.dashboard.framework.mybatis.config.MybatisConfiguration; | ||
| 6 | +import cn.iocoder.dashboard.framework.redis.config.RedisConfig; | ||
| 7 | +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; | ||
| 8 | +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; | ||
| 9 | +import org.redisson.spring.starter.RedissonAutoConfiguration; | ||
| 10 | +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | ||
| 11 | +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||
| 12 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 13 | +import org.springframework.context.annotation.Import; | ||
| 14 | +import org.springframework.test.context.ActiveProfiles; | ||
| 15 | +import org.springframework.test.context.jdbc.Sql; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * 依赖内存 DB 的单元测试 | ||
| 19 | + * | ||
| 20 | + * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 | ||
| 21 | + * | ||
| 22 | + * @author 芋道源码 | ||
| 23 | + */ | ||
| 24 | +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisUnitTest.Application.class) | ||
| 25 | +@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | ||
| 26 | +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | ||
| 27 | +public class BaseDbAndRedisUnitTest { | ||
| 28 | + | ||
| 29 | + @Import({ | ||
| 30 | + // DB 配置类 | ||
| 31 | + DataSourceConfiguration.class, // 自己的 DB 配置类 | ||
| 32 | + DataSourceAutoConfiguration.class, // Spring DB 自动配置类 | ||
| 33 | + DruidDataSourceAutoConfigure.class, // Druid 自动配置类 | ||
| 34 | + // MyBatis 配置类 | ||
| 35 | + MybatisConfiguration.class, // 自己的 MyBatis 配置类 | ||
| 36 | + MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 | ||
| 37 | + // Redis 配置类 | ||
| 38 | + RedisTestConfiguration.class, // Redis 测试配置类,用于启动 RedisServer | ||
| 39 | + RedisAutoConfiguration.class, // Spring Redis 自动配置类 | ||
| 40 | + RedisConfig.class, // 自己的 Redis 配置类 | ||
| 41 | + RedissonAutoConfiguration.class, // Redisson 自动高配置类 | ||
| 42 | + }) | ||
| 43 | + public static class Application { | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | +} |
src/test/java/cn/iocoder/dashboard/BaseDbUnitTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.datasource.config.DataSourceConfiguration; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.config.MybatisConfiguration; | ||
| 5 | +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; | ||
| 6 | +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; | ||
| 7 | +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||
| 8 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 9 | +import org.springframework.context.annotation.Import; | ||
| 10 | +import org.springframework.test.context.ActiveProfiles; | ||
| 11 | +import org.springframework.test.context.jdbc.Sql; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 依赖内存 DB 的单元测试 | ||
| 15 | + * | ||
| 16 | + * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 | ||
| 17 | + * | ||
| 18 | + * @author 芋道源码 | ||
| 19 | + */ | ||
| 20 | +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) | ||
| 21 | +@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | ||
| 22 | +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | ||
| 23 | +public class BaseDbUnitTest { | ||
| 24 | + | ||
| 25 | + @Import({ | ||
| 26 | + // DB 配置类 | ||
| 27 | + DataSourceConfiguration.class, // 自己的 DB 配置类 | ||
| 28 | + DataSourceAutoConfiguration.class, // Spring DB 自动配置类 | ||
| 29 | + DruidDataSourceAutoConfigure.class, // Druid 自动配置类 | ||
| 30 | + // MyBatis 配置类 | ||
| 31 | + MybatisConfiguration.class, // 自己的 MyBatis 配置类 | ||
| 32 | + MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 | ||
| 33 | + }) | ||
| 34 | + public static class Application { | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | +} |
src/test/java/cn/iocoder/dashboard/BaseSpringBootUnitTest.java
| @@ -12,6 +12,7 @@ import javax.annotation.Resource; | @@ -12,6 +12,7 @@ import javax.annotation.Resource; | ||
| 12 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) | 12 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) |
| 13 | @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | 13 | @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 |
| 14 | @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | 14 | @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB |
| 15 | +@Deprecated | ||
| 15 | public class BaseSpringBootUnitTest { | 16 | public class BaseSpringBootUnitTest { |
| 16 | 17 | ||
| 17 | @Resource | 18 | @Resource |
src/test/java/cn/iocoder/dashboard/config/RedisTestConfiguration.java
| @@ -8,12 +8,10 @@ import org.springframework.boot.autoconfigure.data.redis.RedisProperties; | @@ -8,12 +8,10 @@ import org.springframework.boot.autoconfigure.data.redis.RedisProperties; | ||
| 8 | import org.springframework.boot.context.properties.EnableConfigurationProperties; | 8 | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
| 9 | import org.springframework.context.annotation.Bean; | 9 | import org.springframework.context.annotation.Bean; |
| 10 | import org.springframework.context.annotation.Configuration; | 10 | import org.springframework.context.annotation.Configuration; |
| 11 | -import org.springframework.context.annotation.Lazy; | ||
| 12 | 11 | ||
| 13 | import java.io.IOException; | 12 | import java.io.IOException; |
| 14 | 13 | ||
| 15 | @Configuration(proxyBeanMethods = false) | 14 | @Configuration(proxyBeanMethods = false) |
| 16 | -@Lazy(false) // 禁用懒加载,因为需要保证 Redis Server 必须先启动 | ||
| 17 | @EnableConfigurationProperties(RedisProperties.class) | 15 | @EnableConfigurationProperties(RedisProperties.class) |
| 18 | @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 | 16 | @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 |
| 19 | public class RedisTestConfiguration { | 17 | public class RedisTestConfiguration { |
src/test/java/cn/iocoder/dashboard/config/SecurityTestConfiguration.java deleted
| 1 | -package cn.iocoder.dashboard.config; | ||
| 2 | - | ||
| 3 | -import org.mockito.Mockito; | ||
| 4 | -import org.springframework.context.annotation.Bean; | ||
| 5 | -import org.springframework.context.annotation.Configuration; | ||
| 6 | -import org.springframework.security.authentication.AuthenticationManager; | ||
| 7 | - | ||
| 8 | -@Configuration | ||
| 9 | -public class SecurityTestConfiguration { | ||
| 10 | - | ||
| 11 | - @Bean | ||
| 12 | - public AuthenticationManager authenticationManager() { | ||
| 13 | - return Mockito.mock(AuthenticationManager.class); | ||
| 14 | - } | ||
| 15 | - | ||
| 16 | -} |
src/test/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigServiceTest.java
| 1 | package cn.iocoder.dashboard.modules.infra.service.config; | 1 | package cn.iocoder.dashboard.modules.infra.service.config; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.BaseSpringBootUnitTest; | 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; |
| 4 | import cn.iocoder.dashboard.common.pojo.PageResult; | 4 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; | 5 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; |
| 6 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExportReqVO; | 6 | import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExportReqVO; |
| @@ -15,6 +15,7 @@ import cn.iocoder.dashboard.util.collection.ArrayUtils; | @@ -15,6 +15,7 @@ import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 15 | import cn.iocoder.dashboard.util.object.ObjectUtils; | 15 | import cn.iocoder.dashboard.util.object.ObjectUtils; |
| 16 | import org.junit.jupiter.api.Test; | 16 | import org.junit.jupiter.api.Test; |
| 17 | import org.springframework.boot.test.mock.mockito.MockBean; | 17 | import org.springframework.boot.test.mock.mockito.MockBean; |
| 18 | +import org.springframework.context.annotation.Import; | ||
| 18 | 19 | ||
| 19 | import javax.annotation.Resource; | 20 | import javax.annotation.Resource; |
| 20 | import java.util.List; | 21 | import java.util.List; |
| @@ -24,8 +25,7 @@ import static cn.hutool.core.util.RandomUtil.randomEle; | @@ -24,8 +25,7 @@ import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 24 | import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*; | 25 | import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*; |
| 25 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | 26 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; |
| 26 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | 27 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; |
| 27 | -import static cn.iocoder.dashboard.util.RandomUtils.randomLongId; | ||
| 28 | -import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; | 28 | +import static cn.iocoder.dashboard.util.RandomUtils.*; |
| 29 | import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; | 29 | import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; |
| 30 | import static org.junit.jupiter.api.Assertions.*; | 30 | import static org.junit.jupiter.api.Assertions.*; |
| 31 | import static org.mockito.Mockito.times; | 31 | import static org.mockito.Mockito.times; |
| @@ -36,7 +36,8 @@ import static org.mockito.Mockito.verify; | @@ -36,7 +36,8 @@ import static org.mockito.Mockito.verify; | ||
| 36 | * | 36 | * |
| 37 | * @author 芋道源码 | 37 | * @author 芋道源码 |
| 38 | */ | 38 | */ |
| 39 | -public class InfConfigServiceTest extends BaseSpringBootUnitTest { | 39 | +@Import(InfConfigServiceImpl.class) |
| 40 | +public class InfConfigServiceTest extends BaseDbUnitTest { | ||
| 40 | 41 | ||
| 41 | @Resource | 42 | @Resource |
| 42 | private InfConfigServiceImpl configService; | 43 | private InfConfigServiceImpl configService; |
| @@ -47,6 +48,120 @@ public class InfConfigServiceTest extends BaseSpringBootUnitTest { | @@ -47,6 +48,120 @@ public class InfConfigServiceTest extends BaseSpringBootUnitTest { | ||
| 47 | private InfConfigProducer configProducer; | 48 | private InfConfigProducer configProducer; |
| 48 | 49 | ||
| 49 | @Test | 50 | @Test |
| 51 | + public void testCreateConfig_success() { | ||
| 52 | + // 准备参数 | ||
| 53 | + InfConfigCreateReqVO reqVO = randomPojo(InfConfigCreateReqVO.class); | ||
| 54 | + | ||
| 55 | + // 调用 | ||
| 56 | + Long configId = configService.createConfig(reqVO); | ||
| 57 | + // 断言 | ||
| 58 | + assertNotNull(configId); | ||
| 59 | + // 校验记录的属性是否正确 | ||
| 60 | + InfConfigDO config = configMapper.selectById(configId); | ||
| 61 | + assertPojoEquals(reqVO, config); | ||
| 62 | + assertEquals(InfConfigTypeEnum.CUSTOM.getType(), config.getType()); | ||
| 63 | + // 校验调用 | ||
| 64 | + verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @Test | ||
| 68 | + public void testUpdateConfig_success() { | ||
| 69 | + // mock 数据 | ||
| 70 | + InfConfigDO dbConfig = randomInfConfigDO(); | ||
| 71 | + configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 72 | + // 准备参数 | ||
| 73 | + InfConfigUpdateReqVO reqVO = randomPojo(InfConfigUpdateReqVO.class, o -> { | ||
| 74 | + o.setId(dbConfig.getId()); // 设置更新的 ID | ||
| 75 | + }); | ||
| 76 | + | ||
| 77 | + // 调用 | ||
| 78 | + configService.updateConfig(reqVO); | ||
| 79 | + // 校验是否更新正确 | ||
| 80 | + InfConfigDO config = configMapper.selectById(reqVO.getId()); // 获取最新的 | ||
| 81 | + assertPojoEquals(reqVO, config); | ||
| 82 | + // 校验调用 | ||
| 83 | + verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + @Test | ||
| 87 | + public void testDeleteConfig_success() { | ||
| 88 | + // mock 数据 | ||
| 89 | + InfConfigDO dbConfig = randomInfConfigDO(o -> { | ||
| 90 | + o.setType(InfConfigTypeEnum.CUSTOM.getType()); // 只能删除 CUSTOM 类型 | ||
| 91 | + }); | ||
| 92 | + configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 93 | + // 准备参数 | ||
| 94 | + Long id = dbConfig.getId(); | ||
| 95 | + | ||
| 96 | + // 调用 | ||
| 97 | + configService.deleteConfig(id); | ||
| 98 | + // 校验数据不存在了 | ||
| 99 | + assertNull(configMapper.selectById(id)); | ||
| 100 | + // 校验调用 | ||
| 101 | + verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + @Test | ||
| 105 | + public void testDeleteConfig_canNotDeleteSystemType() { | ||
| 106 | + // mock 数据 | ||
| 107 | + InfConfigDO dbConfig = randomInfConfigDO(o -> { | ||
| 108 | + o.setType(InfConfigTypeEnum.SYSTEM.getType()); // SYSTEM 不允许删除 | ||
| 109 | + }); | ||
| 110 | + configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 111 | + // 准备参数 | ||
| 112 | + Long id = dbConfig.getId(); | ||
| 113 | + | ||
| 114 | + // 调用, 并断言异常 | ||
| 115 | + assertServiceException(() -> configService.deleteConfig(id), CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + @Test | ||
| 119 | + public void testCheckConfigExists_success() { | ||
| 120 | + // mock 数据 | ||
| 121 | + InfConfigDO dbConfigDO = randomInfConfigDO(); | ||
| 122 | + configMapper.insert(dbConfigDO);// @Sql: 先插入出一条存在的数据 | ||
| 123 | + | ||
| 124 | + // 调用成功 | ||
| 125 | + configService.checkConfigExists(dbConfigDO.getId()); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + @Test | ||
| 129 | + public void testCheckConfigExist_notExists() { | ||
| 130 | + assertServiceException(() -> configService.checkConfigExists(randomLongId()), CONFIG_NOT_EXISTS); | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + @Test | ||
| 134 | + public void testCheckConfigKeyUnique_success() { | ||
| 135 | + // 调用,成功 | ||
| 136 | + configService.checkConfigKeyUnique(randomLongId(), randomString()); | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + @Test | ||
| 140 | + public void testCheckConfigKeyUnique_keyDuplicateForCreate() { | ||
| 141 | + // 准备参数 | ||
| 142 | + String key = randomString(); | ||
| 143 | + // mock 数据 | ||
| 144 | + configMapper.insert(randomInfConfigDO(o -> o.setKey(key))); | ||
| 145 | + | ||
| 146 | + // 调用,校验异常 | ||
| 147 | + assertServiceException(() -> configService.checkConfigKeyUnique(null, key), | ||
| 148 | + CONFIG_KEY_DUPLICATE); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + @Test | ||
| 152 | + public void testCheckConfigKeyUnique_keyDuplicateForUpdate() { | ||
| 153 | + // 准备参数 | ||
| 154 | + Long id = randomLongId(); | ||
| 155 | + String key = randomString(); | ||
| 156 | + // mock 数据 | ||
| 157 | + configMapper.insert(randomInfConfigDO(o -> o.setKey(key))); | ||
| 158 | + | ||
| 159 | + // 调用,校验异常 | ||
| 160 | + assertServiceException(() -> configService.checkConfigKeyUnique(id, key), | ||
| 161 | + CONFIG_KEY_DUPLICATE); | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + @Test | ||
| 50 | public void testGetConfigPage() { | 165 | public void testGetConfigPage() { |
| 51 | // mock 数据 | 166 | // mock 数据 |
| 52 | InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到 | 167 | InfConfigDO dbConfig = randomInfConfigDO(o -> { // 等会查询到 |
| @@ -128,105 +243,6 @@ public class InfConfigServiceTest extends BaseSpringBootUnitTest { | @@ -128,105 +243,6 @@ public class InfConfigServiceTest extends BaseSpringBootUnitTest { | ||
| 128 | assertPojoEquals(dbConfig, config); | 243 | assertPojoEquals(dbConfig, config); |
| 129 | } | 244 | } |
| 130 | 245 | ||
| 131 | - @Test | ||
| 132 | - public void testCreateConfig_success() { | ||
| 133 | - // 准备参数 | ||
| 134 | - InfConfigCreateReqVO reqVO = randomPojo(InfConfigCreateReqVO.class); | ||
| 135 | - | ||
| 136 | - // 调用 | ||
| 137 | - Long configId = configService.createConfig(reqVO); | ||
| 138 | - // 断言 | ||
| 139 | - assertNotNull(configId); | ||
| 140 | - // 校验记录的属性是否正确 | ||
| 141 | - InfConfigDO config = configMapper.selectById(configId); | ||
| 142 | - assertPojoEquals(reqVO, config); | ||
| 143 | - assertEquals(InfConfigTypeEnum.CUSTOM.getType(), config.getType()); | ||
| 144 | - // 校验调用 | ||
| 145 | - verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 146 | - } | ||
| 147 | - | ||
| 148 | - @Test | ||
| 149 | - public void testCreateConfig_keyDuplicate() { | ||
| 150 | - // 准备参数 | ||
| 151 | - InfConfigCreateReqVO reqVO = randomPojo(InfConfigCreateReqVO.class); | ||
| 152 | - // mock 数据 | ||
| 153 | - configMapper.insert(randomInfConfigDO(o -> { // @Sql | ||
| 154 | - o.setKey(reqVO.getKey()); // 模拟 key 重复 | ||
| 155 | - })); | ||
| 156 | - | ||
| 157 | - // 调用, 并断言异常 | ||
| 158 | - assertServiceException(() -> configService.createConfig(reqVO), CONFIG_KEY_DUPLICATE); | ||
| 159 | - } | ||
| 160 | - | ||
| 161 | - @Test | ||
| 162 | - public void testUpdateConfig_success() { | ||
| 163 | - // mock 数据 | ||
| 164 | - InfConfigDO dbConfig = randomInfConfigDO(); | ||
| 165 | - configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 166 | - // 准备参数 | ||
| 167 | - InfConfigUpdateReqVO reqVO = randomPojo(InfConfigUpdateReqVO.class, o -> { | ||
| 168 | - o.setId(dbConfig.getId()); // 设置更新的 ID | ||
| 169 | - }); | ||
| 170 | - | ||
| 171 | - // 调用 | ||
| 172 | - configService.updateConfig(reqVO); | ||
| 173 | - // 校验是否更新正确 | ||
| 174 | - InfConfigDO config = configMapper.selectById(reqVO.getId()); // 获取最新的 | ||
| 175 | - assertPojoEquals(reqVO, config); | ||
| 176 | - // 校验调用 | ||
| 177 | - verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 178 | - } | ||
| 179 | - | ||
| 180 | - @Test | ||
| 181 | - public void testUpdateConfig_notExists() { | ||
| 182 | - // 准备参数 | ||
| 183 | - InfConfigUpdateReqVO reqVO = randomPojo(InfConfigUpdateReqVO.class); | ||
| 184 | - | ||
| 185 | - // 调用, 并断言异常 | ||
| 186 | - assertServiceException(() -> configService.updateConfig(reqVO), CONFIG_NOT_EXISTS); | ||
| 187 | - } | ||
| 188 | - | ||
| 189 | - @Test | ||
| 190 | - public void testDeleteConfig_success() { | ||
| 191 | - // mock 数据 | ||
| 192 | - InfConfigDO dbConfig = randomInfConfigDO(o -> { | ||
| 193 | - o.setType(InfConfigTypeEnum.CUSTOM.getType()); // 只能删除 CUSTOM 类型 | ||
| 194 | - }); | ||
| 195 | - configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 196 | - // 准备参数 | ||
| 197 | - Long id = dbConfig.getId(); | ||
| 198 | - | ||
| 199 | - // 调用 | ||
| 200 | - configService.deleteConfig(id); | ||
| 201 | - // 校验数据不存在了 | ||
| 202 | - assertNull(configMapper.selectById(id)); | ||
| 203 | - // 校验调用 | ||
| 204 | - verify(configProducer, times(1)).sendConfigRefreshMessage(); | ||
| 205 | - } | ||
| 206 | - | ||
| 207 | - @Test | ||
| 208 | - public void testDeleteConfig_canNotDeleteSystemType() { | ||
| 209 | - // mock 数据 | ||
| 210 | - InfConfigDO dbConfig = randomInfConfigDO(o -> { | ||
| 211 | - o.setType(InfConfigTypeEnum.SYSTEM.getType()); // SYSTEM 不允许删除 | ||
| 212 | - }); | ||
| 213 | - configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 | ||
| 214 | - // 准备参数 | ||
| 215 | - Long id = dbConfig.getId(); | ||
| 216 | - | ||
| 217 | - // 调用, 并断言异常 | ||
| 218 | - assertServiceException(() -> configService.deleteConfig(id), CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); | ||
| 219 | - } | ||
| 220 | - | ||
| 221 | - @Test | ||
| 222 | - public void testDeleteConfig_notExists() { | ||
| 223 | - // 准备参数 | ||
| 224 | - Long id = randomLongId(); | ||
| 225 | - | ||
| 226 | - // 调用, 并断言异常 | ||
| 227 | - assertServiceException(() -> configService.deleteConfig(id), CONFIG_NOT_EXISTS); | ||
| 228 | - } | ||
| 229 | - | ||
| 230 | // ========== 随机对象 ========== | 246 | // ========== 随机对象 ========== |
| 231 | 247 | ||
| 232 | @SafeVarargs | 248 | @SafeVarargs |
src/test/java/cn/iocoder/dashboard/modules/system/service/auth/SysAuthServiceImplTest.java
| 1 | package cn.iocoder.dashboard.modules.system.service.auth; | 1 | package cn.iocoder.dashboard.modules.system.service.auth; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.BaseSpringBootUnitTest; | 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; |
| 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | import cn.iocoder.dashboard.framework.security.core.LoginUser; | 5 | import cn.iocoder.dashboard.framework.security.core.LoginUser; |
| 6 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | 6 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 7 | import cn.iocoder.dashboard.modules.system.service.auth.impl.SysAuthServiceImpl; | 7 | import cn.iocoder.dashboard.modules.system.service.auth.impl.SysAuthServiceImpl; |
| 8 | +import cn.iocoder.dashboard.modules.system.service.common.SysCaptchaService; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.service.logger.SysLoginLogService; | ||
| 8 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; | 10 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 9 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | 11 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 10 | import cn.iocoder.dashboard.util.AssertUtils; | 12 | import cn.iocoder.dashboard.util.AssertUtils; |
| 11 | import org.junit.jupiter.api.Test; | 13 | import org.junit.jupiter.api.Test; |
| 12 | import org.springframework.boot.test.mock.mockito.MockBean; | 14 | import org.springframework.boot.test.mock.mockito.MockBean; |
| 15 | +import org.springframework.context.annotation.Import; | ||
| 16 | +import org.springframework.security.authentication.AuthenticationManager; | ||
| 13 | import org.springframework.security.core.userdetails.UsernameNotFoundException; | 17 | import org.springframework.security.core.userdetails.UsernameNotFoundException; |
| 14 | 18 | ||
| 15 | import javax.annotation.Resource; | 19 | import javax.annotation.Resource; |
| @@ -21,7 +25,13 @@ import static org.junit.jupiter.api.Assertions.*; | @@ -21,7 +25,13 @@ import static org.junit.jupiter.api.Assertions.*; | ||
| 21 | import static org.mockito.ArgumentMatchers.eq; | 25 | import static org.mockito.ArgumentMatchers.eq; |
| 22 | import static org.mockito.Mockito.when; | 26 | import static org.mockito.Mockito.when; |
| 23 | 27 | ||
| 24 | -public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | 28 | +/** |
| 29 | + * {@link SysAuthServiceImpl} 的单元测试 | ||
| 30 | + * | ||
| 31 | + * @author 芋道源码 | ||
| 32 | + */ | ||
| 33 | +@Import(SysAuthServiceImpl.class) | ||
| 34 | +public class SysAuthServiceImplTest extends BaseDbUnitTest { | ||
| 25 | 35 | ||
| 26 | @Resource | 36 | @Resource |
| 27 | private SysAuthServiceImpl authService; | 37 | private SysAuthServiceImpl authService; |
| @@ -30,6 +40,14 @@ public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | @@ -30,6 +40,14 @@ public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | ||
| 30 | private SysUserService userService; | 40 | private SysUserService userService; |
| 31 | @MockBean | 41 | @MockBean |
| 32 | private SysPermissionService permissionService; | 42 | private SysPermissionService permissionService; |
| 43 | + @MockBean | ||
| 44 | + private AuthenticationManager authenticationManager; | ||
| 45 | + @MockBean | ||
| 46 | + private SysCaptchaService captchaService; | ||
| 47 | + @MockBean | ||
| 48 | + private SysLoginLogService loginLogService; | ||
| 49 | + @MockBean | ||
| 50 | + private SysUserSessionService userSessionService; | ||
| 33 | 51 | ||
| 34 | @Test | 52 | @Test |
| 35 | public void testLoadUserByUsername_success() { | 53 | public void testLoadUserByUsername_success() { |
src/test/java/cn/iocoder/dashboard/modules/system/service/auth/SysUserSessionServiceImplTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.auth; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.date.DateUtil; | ||
| 4 | +import cn.iocoder.dashboard.BaseDbAndRedisUnitTest; | ||
| 5 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 6 | +import cn.iocoder.dashboard.framework.security.config.SecurityProperties; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.mysql.auth.SysUserSessionMapper; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.redis.auth.SysLoginUserRedisDAO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.service.auth.impl.SysUserSessionServiceImpl; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.service.dept.impl.SysDeptServiceImpl; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.logger.impl.SysLoginLogServiceImpl; | ||
| 13 | +import cn.iocoder.dashboard.modules.system.service.user.SysUserServiceImpl; | ||
| 14 | +import cn.iocoder.dashboard.util.AssertUtils; | ||
| 15 | +import cn.iocoder.dashboard.util.RandomUtils; | ||
| 16 | +import org.junit.jupiter.api.Test; | ||
| 17 | +import org.springframework.boot.test.mock.mockito.MockBean; | ||
| 18 | +import org.springframework.context.annotation.Import; | ||
| 19 | + | ||
| 20 | +import javax.annotation.Resource; | ||
| 21 | +import java.util.Date; | ||
| 22 | +import java.util.List; | ||
| 23 | +import java.util.stream.Collectors; | ||
| 24 | +import java.util.stream.Stream; | ||
| 25 | + | ||
| 26 | +import static org.junit.jupiter.api.Assertions.assertEquals; | ||
| 27 | + | ||
| 28 | +/** | ||
| 29 | + * SysUserSessionServiceImpl Tester. | ||
| 30 | + * | ||
| 31 | + * @author Lyon | ||
| 32 | + * @version 1.0 | ||
| 33 | + * @since <pre>3月 8, 2021</pre> | ||
| 34 | + */ | ||
| 35 | +@Import( | ||
| 36 | + SysUserSessionServiceImpl.class) | ||
| 37 | +public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest { | ||
| 38 | + | ||
| 39 | + @Resource | ||
| 40 | + SysUserSessionServiceImpl sysUserSessionService; | ||
| 41 | + @Resource | ||
| 42 | + SysUserSessionMapper sysUserSessionMapper; | ||
| 43 | + @MockBean | ||
| 44 | + SecurityProperties securityProperties; | ||
| 45 | + @MockBean | ||
| 46 | + SysDeptServiceImpl sysDeptService; | ||
| 47 | + @MockBean | ||
| 48 | + SysUserServiceImpl sysUserService; | ||
| 49 | + @MockBean | ||
| 50 | + SysLoginLogServiceImpl sysLoginLogService; | ||
| 51 | + @MockBean | ||
| 52 | + SysLoginUserRedisDAO sysLoginUserRedisDAO; | ||
| 53 | + | ||
| 54 | + @Test | ||
| 55 | + public void testClearSessionTimeout_success() throws Exception { | ||
| 56 | + // 准备超时数据 120 条, 在线用户 1 条 | ||
| 57 | + int expectedTimeoutCount = 120, expectedTotal = 1; | ||
| 58 | + | ||
| 59 | + // 准备数据 | ||
| 60 | + List<SysUserSessionDO> prepareData = Stream | ||
| 61 | + .iterate(0, i -> i) | ||
| 62 | + .limit(expectedTimeoutCount) | ||
| 63 | + .map(i -> RandomUtils.randomPojo(SysUserSessionDO.class, o -> o.setSessionTimeout(DateUtil.offsetSecond(new Date(), -1)))) | ||
| 64 | + .collect(Collectors.toList()); | ||
| 65 | + SysUserSessionDO sessionDO = RandomUtils.randomPojo(SysUserSessionDO.class, o -> o.setSessionTimeout(DateUtil.offsetMinute(new Date(), 30))); | ||
| 66 | + prepareData.add(sessionDO); | ||
| 67 | + prepareData.forEach(sysUserSessionMapper::insert); | ||
| 68 | + | ||
| 69 | + //清空超时数据 | ||
| 70 | + long actualTimeoutCount = sysUserSessionService.clearSessionTimeout(); | ||
| 71 | + //校验 | ||
| 72 | + assertEquals(expectedTimeoutCount, actualTimeoutCount); | ||
| 73 | + List<SysUserSessionDO> userSessionDOS = sysUserSessionMapper.selectList(); | ||
| 74 | + assertEquals(expectedTotal, userSessionDOS.size()); | ||
| 75 | + AssertUtils.assertPojoEquals(sessionDO, userSessionDOS.get(0), "updateTime"); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | +} |
src/test/java/cn/iocoder/dashboard/modules/system/service/dept/SysDeptServiceTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.dept; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; | ||
| 4 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.mq.producer.dept.SysDeptProducer; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.dept.impl.SysDeptServiceImpl; | ||
| 13 | +import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 14 | +import cn.iocoder.dashboard.util.object.ObjectUtils; | ||
| 15 | +import com.google.common.collect.Multimap; | ||
| 16 | +import org.junit.jupiter.api.Test; | ||
| 17 | +import org.springframework.boot.test.mock.mockito.MockBean; | ||
| 18 | +import org.springframework.context.annotation.Import; | ||
| 19 | + | ||
| 20 | +import javax.annotation.Resource; | ||
| 21 | +import java.util.Date; | ||
| 22 | +import java.util.List; | ||
| 23 | +import java.util.Map; | ||
| 24 | +import java.util.function.Consumer; | ||
| 25 | + | ||
| 26 | +import static cn.hutool.core.bean.BeanUtil.getFieldValue; | ||
| 27 | +import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 28 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 29 | +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||
| 30 | +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | ||
| 31 | +import static cn.iocoder.dashboard.util.RandomUtils.*; | ||
| 32 | +import static org.junit.jupiter.api.Assertions.*; | ||
| 33 | +import static org.mockito.Mockito.times; | ||
| 34 | +import static org.mockito.Mockito.verify; | ||
| 35 | + | ||
| 36 | +/** | ||
| 37 | + * {@link SysDeptServiceImpl} 的单元测试类 | ||
| 38 | + * | ||
| 39 | + * @author niudehua | ||
| 40 | + */ | ||
| 41 | +@Import(SysDeptServiceImpl.class) | ||
| 42 | +class SysDeptServiceTest extends BaseDbUnitTest { | ||
| 43 | + | ||
| 44 | + @Resource | ||
| 45 | + private SysDeptServiceImpl deptService; | ||
| 46 | + @Resource | ||
| 47 | + private SysDeptMapper deptMapper; | ||
| 48 | + @MockBean | ||
| 49 | + private SysDeptProducer deptProducer; | ||
| 50 | + | ||
| 51 | + @Test | ||
| 52 | + @SuppressWarnings("unchecked") | ||
| 53 | + void testInitLocalCache() { | ||
| 54 | + // mock 数据 | ||
| 55 | + SysDeptDO deptDO1 = randomDeptDO(); | ||
| 56 | + deptMapper.insert(deptDO1); | ||
| 57 | + SysDeptDO deptDO2 = randomDeptDO(); | ||
| 58 | + deptMapper.insert(deptDO2); | ||
| 59 | + | ||
| 60 | + // 调用 | ||
| 61 | + deptService.initLocalCache(); | ||
| 62 | + // 断言 deptCache 缓存 | ||
| 63 | + Map<Long, SysDeptDO> deptCache = (Map<Long, SysDeptDO>) getFieldValue(deptService, "deptCache"); | ||
| 64 | + assertEquals(2, deptCache.size()); | ||
| 65 | + assertPojoEquals(deptDO1, deptCache.get(deptDO1.getId())); | ||
| 66 | + assertPojoEquals(deptDO2, deptCache.get(deptDO2.getId())); | ||
| 67 | + // 断言 parentDeptCache 缓存 | ||
| 68 | + Multimap<Long, SysDeptDO> parentDeptCache = (Multimap<Long, SysDeptDO>) getFieldValue(deptService, "parentDeptCache"); | ||
| 69 | + assertEquals(2, parentDeptCache.size()); | ||
| 70 | + assertPojoEquals(deptDO1, parentDeptCache.get(deptDO1.getParentId())); | ||
| 71 | + assertPojoEquals(deptDO2, parentDeptCache.get(deptDO2.getParentId())); | ||
| 72 | + // 断言 maxUpdateTime 缓存 | ||
| 73 | + Date maxUpdateTime = (Date) getFieldValue(deptService, "maxUpdateTime"); | ||
| 74 | + assertEquals(ObjectUtils.max(deptDO1.getUpdateTime(), deptDO2.getUpdateTime()), maxUpdateTime); | ||
| 75 | + | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @Test | ||
| 79 | + void testListDepts() { | ||
| 80 | + // mock 数据 | ||
| 81 | + SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { // 等会查询到 | ||
| 82 | + o.setName("开发部"); | ||
| 83 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 84 | + }); | ||
| 85 | + deptMapper.insert(dept); | ||
| 86 | + // 测试 name 不匹配 | ||
| 87 | + deptMapper.insert(ObjectUtils.clone(dept, o -> o.setName("发"))); | ||
| 88 | + // 测试 status 不匹配 | ||
| 89 | + deptMapper.insert(ObjectUtils.clone(dept, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||
| 90 | + // 准备参数 | ||
| 91 | + SysDeptListReqVO reqVO = new SysDeptListReqVO(); | ||
| 92 | + reqVO.setName("开"); | ||
| 93 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 94 | + // 调用 | ||
| 95 | + List<SysDeptDO> sysDeptDOS = deptService.listDepts(reqVO); | ||
| 96 | + // 断言 | ||
| 97 | + assertEquals(1, sysDeptDOS.size()); | ||
| 98 | + assertPojoEquals(dept, sysDeptDOS.get(0)); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + @Test | ||
| 102 | + void testCreateDept_success() { | ||
| 103 | + // 准备参数 | ||
| 104 | + SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, | ||
| 105 | + o -> { | ||
| 106 | + o.setParentId(DeptIdEnum.ROOT.getId()); | ||
| 107 | + o.setStatus(randomCommonStatus()); | ||
| 108 | + }); | ||
| 109 | + // 调用 | ||
| 110 | + Long deptId = deptService.createDept(reqVO); | ||
| 111 | + // 断言 | ||
| 112 | + assertNotNull(deptId); | ||
| 113 | + // 校验记录的属性是否正确 | ||
| 114 | + SysDeptDO deptDO = deptMapper.selectById(deptId); | ||
| 115 | + assertPojoEquals(reqVO, deptDO); | ||
| 116 | + // 校验调用 | ||
| 117 | + verify(deptProducer, times(1)).sendDeptRefreshMessage(); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + @Test | ||
| 121 | + void testUpdateDept_success() { | ||
| 122 | + // mock 数据 | ||
| 123 | + SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); | ||
| 124 | + deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据 | ||
| 125 | + // 准备参数 | ||
| 126 | + SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, o -> { | ||
| 127 | + // 设置更新的 ID | ||
| 128 | + o.setParentId(DeptIdEnum.ROOT.getId()); | ||
| 129 | + o.setId(dbDeptDO.getId()); | ||
| 130 | + o.setStatus(randomCommonStatus()); | ||
| 131 | + }); | ||
| 132 | + // 调用 | ||
| 133 | + deptService.updateDept(reqVO); | ||
| 134 | + // 校验是否更新正确 | ||
| 135 | + SysDeptDO deptDO = deptMapper.selectById(reqVO.getId()); // 获取最新的 | ||
| 136 | + assertPojoEquals(reqVO, deptDO); | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + @Test | ||
| 140 | + void testDeleteDept_success() { | ||
| 141 | + // mock 数据 | ||
| 142 | + SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); | ||
| 143 | + deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据 | ||
| 144 | + // 准备参数 | ||
| 145 | + Long id = dbDeptDO.getId(); | ||
| 146 | + // 调用 | ||
| 147 | + deptService.deleteDept(id); | ||
| 148 | + // 校验数据不存在了 | ||
| 149 | + assertNull(deptMapper.selectById(id)); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + @Test | ||
| 153 | + void testCheckDept_nameDuplicateForUpdate() { | ||
| 154 | + // mock 数据 | ||
| 155 | + SysDeptDO deptDO = randomDeptDO(); | ||
| 156 | + // 设置根节点部门 | ||
| 157 | + deptDO.setParentId(DeptIdEnum.ROOT.getId()); | ||
| 158 | + deptMapper.insert(deptDO); | ||
| 159 | + // mock 数据 稍后模拟重复它的 name | ||
| 160 | + SysDeptDO nameDeptDO = randomDeptDO(); | ||
| 161 | + // 设置根节点部门 | ||
| 162 | + nameDeptDO.setParentId(DeptIdEnum.ROOT.getId()); | ||
| 163 | + deptMapper.insert(nameDeptDO); | ||
| 164 | + // 准备参数 | ||
| 165 | + SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, | ||
| 166 | + o -> { | ||
| 167 | + // 设置根节点部门 | ||
| 168 | + o.setParentId(DeptIdEnum.ROOT.getId()); | ||
| 169 | + // 设置更新的 ID | ||
| 170 | + o.setId(deptDO.getId()); | ||
| 171 | + // 模拟 name 重复 | ||
| 172 | + o.setName(nameDeptDO.getName()); | ||
| 173 | + }); | ||
| 174 | + // 调用, 并断言异常 | ||
| 175 | + assertServiceException(() -> deptService.updateDept(reqVO), DEPT_NAME_DUPLICATE); | ||
| 176 | + | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + @Test | ||
| 180 | + void testCheckDept_parentNotExitsForCreate() { | ||
| 181 | + SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, | ||
| 182 | + o -> o.setStatus(randomCommonStatus())); | ||
| 183 | + // 调用,并断言异常 | ||
| 184 | + assertServiceException(() -> deptService.createDept(reqVO), DEPT_PARENT_NOT_EXITS); | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + @Test | ||
| 188 | + void testCheckDept_notFoundForDelete() { | ||
| 189 | + // 准备参数 | ||
| 190 | + Long id = randomLongId(); | ||
| 191 | + // 调用, 并断言异常 | ||
| 192 | + assertServiceException(() -> deptService.deleteDept(id), DEPT_NOT_FOUND); | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + @Test | ||
| 196 | + void testCheckDept_exitsChildrenForDelete() { | ||
| 197 | + // mock 数据 | ||
| 198 | + SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); | ||
| 199 | + deptMapper.insert(parentDept);// @Sql: 先插入出一条存在的数据 | ||
| 200 | + // 准备参数 | ||
| 201 | + SysDeptDO childrenDeptDO = randomPojo(SysDeptDO.class, o -> { | ||
| 202 | + o.setParentId(parentDept.getId()); | ||
| 203 | + o.setStatus(randomCommonStatus()); | ||
| 204 | + }); | ||
| 205 | + // 插入子部门 | ||
| 206 | + deptMapper.insert(childrenDeptDO); | ||
| 207 | + // 调用, 并断言异常 | ||
| 208 | + assertServiceException(() -> deptService.deleteDept(parentDept.getId()), DEPT_EXITS_CHILDREN); | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + @Test | ||
| 212 | + void testCheckDept_parentErrorForUpdate() { | ||
| 213 | + // mock 数据 | ||
| 214 | + SysDeptDO dbDeptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(randomCommonStatus())); | ||
| 215 | + deptMapper.insert(dbDeptDO); | ||
| 216 | + // 准备参数 | ||
| 217 | + SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, | ||
| 218 | + o -> { | ||
| 219 | + // 设置自己为父部门 | ||
| 220 | + o.setParentId(dbDeptDO.getId()); | ||
| 221 | + // 设置更新的 ID | ||
| 222 | + o.setId(dbDeptDO.getId()); | ||
| 223 | + }); | ||
| 224 | + // 调用, 并断言异常 | ||
| 225 | + assertServiceException(() -> deptService.updateDept(reqVO), DEPT_PARENT_ERROR); | ||
| 226 | + } | ||
| 227 | + | ||
| 228 | + @Test | ||
| 229 | + void testCheckDept_notEnableForCreate() { | ||
| 230 | + // mock 数据 | ||
| 231 | + SysDeptDO deptDO = randomPojo(SysDeptDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); | ||
| 232 | + deptMapper.insert(deptDO); | ||
| 233 | + // 准备参数 | ||
| 234 | + SysDeptCreateReqVO reqVO = randomPojo(SysDeptCreateReqVO.class, | ||
| 235 | + o -> { | ||
| 236 | + // 设置未启用的部门为副部门 | ||
| 237 | + o.setParentId(deptDO.getId()); | ||
| 238 | + }); | ||
| 239 | + // 调用, 并断言异常 | ||
| 240 | + assertServiceException(() -> deptService.createDept(reqVO), DEPT_NOT_ENABLE); | ||
| 241 | + } | ||
| 242 | + | ||
| 243 | + @Test | ||
| 244 | + void testCheckDept_parentIsChildForUpdate() { | ||
| 245 | + // mock 数据 | ||
| 246 | + SysDeptDO parentDept = randomPojo(SysDeptDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||
| 247 | + deptMapper.insert(parentDept); | ||
| 248 | + SysDeptDO childDept = randomPojo(SysDeptDO.class, o -> { | ||
| 249 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 250 | + o.setParentId(parentDept.getId()); | ||
| 251 | + }); | ||
| 252 | + deptMapper.insert(childDept); | ||
| 253 | + // 初始化本地缓存 | ||
| 254 | + deptService.initLocalCache(); | ||
| 255 | + // 准备参数 | ||
| 256 | + SysDeptUpdateReqVO reqVO = randomPojo(SysDeptUpdateReqVO.class, | ||
| 257 | + o -> { | ||
| 258 | + // 设置自己的子部门为父部门 | ||
| 259 | + o.setParentId(childDept.getId()); | ||
| 260 | + // 设置更新的 ID | ||
| 261 | + o.setId(parentDept.getId()); | ||
| 262 | + }); | ||
| 263 | + // 调用, 并断言异常 | ||
| 264 | + assertServiceException(() -> deptService.updateDept(reqVO), DEPT_PARENT_IS_CHILD); | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + @SafeVarargs | ||
| 268 | + private static SysDeptDO randomDeptDO(Consumer<SysDeptDO>... consumers) { | ||
| 269 | + Consumer<SysDeptDO> consumer = (o) -> { | ||
| 270 | + o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 | ||
| 271 | + }; | ||
| 272 | + return randomPojo(SysDeptDO.class, ArrayUtils.append(consumer, consumers)); | ||
| 273 | + } | ||
| 274 | +} |
src/test/java/cn/iocoder/dashboard/modules/system/service/dept/SysPostServiceTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.dept; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; | ||
| 4 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 5 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostCreateReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostExportReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostPageReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.post.SysPostUpdateReqVO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysPostMapper; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.dept.impl.SysPostServiceImpl; | ||
| 13 | +import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 14 | +import cn.iocoder.dashboard.util.object.ObjectUtils; | ||
| 15 | +import org.junit.jupiter.api.Test; | ||
| 16 | +import org.springframework.context.annotation.Import; | ||
| 17 | + | ||
| 18 | +import javax.annotation.Resource; | ||
| 19 | +import java.util.List; | ||
| 20 | +import java.util.function.Consumer; | ||
| 21 | + | ||
| 22 | +import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 23 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 24 | +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||
| 25 | +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | ||
| 26 | +import static cn.iocoder.dashboard.util.RandomUtils.randomLongId; | ||
| 27 | +import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; | ||
| 28 | +import static org.junit.jupiter.api.Assertions.*; | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * {@link SysPostServiceImpl} 的单元测试类 | ||
| 32 | + * | ||
| 33 | + * @author niudehua | ||
| 34 | + */ | ||
| 35 | +@Import(SysPostServiceImpl.class) | ||
| 36 | +class SysPostServiceTest extends BaseDbUnitTest { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private SysPostServiceImpl postService; | ||
| 40 | + @Resource | ||
| 41 | + private SysPostMapper postMapper; | ||
| 42 | + | ||
| 43 | + @Test | ||
| 44 | + void testPagePosts() { | ||
| 45 | + // mock 数据 | ||
| 46 | + SysPostDO postDO = randomPojo(SysPostDO.class, o -> { | ||
| 47 | + o.setName("码仔"); | ||
| 48 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 49 | + }); | ||
| 50 | + postMapper.insert(postDO); | ||
| 51 | + // 测试 name 不匹配 | ||
| 52 | + postMapper.insert(ObjectUtils.clone(postDO, o -> o.setName("程序员"))); | ||
| 53 | + // 测试 status 不匹配 | ||
| 54 | + postMapper.insert(ObjectUtils.clone(postDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||
| 55 | + | ||
| 56 | + // 准备参数 | ||
| 57 | + SysPostPageReqVO reqVO = new SysPostPageReqVO(); | ||
| 58 | + reqVO.setName("码"); | ||
| 59 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 60 | + | ||
| 61 | + // 调用 | ||
| 62 | + PageResult<SysPostDO> pageResult = postService.pagePosts(reqVO); | ||
| 63 | + | ||
| 64 | + // 断言 | ||
| 65 | + assertEquals(1, pageResult.getTotal()); | ||
| 66 | + assertEquals(1, pageResult.getList().size()); | ||
| 67 | + assertPojoEquals(postDO, pageResult.getList().get(0)); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Test | ||
| 71 | + void testListPosts() { | ||
| 72 | + // mock 数据 | ||
| 73 | + SysPostDO postDO = randomPojo(SysPostDO.class, o -> { | ||
| 74 | + o.setName("码仔"); | ||
| 75 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 76 | + }); | ||
| 77 | + postMapper.insert(postDO); | ||
| 78 | + // 测试 name 不匹配 | ||
| 79 | + postMapper.insert(ObjectUtils.clone(postDO, o -> o.setName("程序员"))); | ||
| 80 | + // 测试 status 不匹配 | ||
| 81 | + postMapper.insert(ObjectUtils.clone(postDO, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||
| 82 | + // 准备参数 | ||
| 83 | + SysPostExportReqVO reqVO = new SysPostExportReqVO(); | ||
| 84 | + reqVO.setName("码"); | ||
| 85 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 86 | + | ||
| 87 | + // 调用 | ||
| 88 | + List<SysPostDO> list = postService.listPosts(reqVO); | ||
| 89 | + // 断言 | ||
| 90 | + assertEquals(1, list.size()); | ||
| 91 | + assertPojoEquals(postDO, list.get(0)); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + @Test | ||
| 95 | + void testGetPost() { | ||
| 96 | + // mock 数据 | ||
| 97 | + SysPostDO dbPostDO = randomPostDO(); | ||
| 98 | + postMapper.insert(dbPostDO); | ||
| 99 | + // 准备参数 | ||
| 100 | + Long id = dbPostDO.getId(); | ||
| 101 | + // 调用 | ||
| 102 | + SysPostDO post = postService.getPost(id); | ||
| 103 | + // 断言 | ||
| 104 | + assertNotNull(post); | ||
| 105 | + assertPojoEquals(dbPostDO, post); | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + @Test | ||
| 109 | + void testCreatePost_success() { | ||
| 110 | + // 准备参数 | ||
| 111 | + SysPostCreateReqVO reqVO = randomPojo(SysPostCreateReqVO.class, | ||
| 112 | + o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus())); | ||
| 113 | + // 调用 | ||
| 114 | + Long postId = postService.createPost(reqVO); | ||
| 115 | + // 断言 | ||
| 116 | + assertNotNull(postId); | ||
| 117 | + // 校验记录的属性是否正确 | ||
| 118 | + SysPostDO post = postMapper.selectById(postId); | ||
| 119 | + assertPojoEquals(reqVO, post); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + @Test | ||
| 123 | + void testUpdatePost_success() { | ||
| 124 | + // mock 数据 | ||
| 125 | + SysPostDO postDO = randomPostDO(); | ||
| 126 | + postMapper.insert(postDO);// @Sql: 先插入出一条存在的数据 | ||
| 127 | + // 准备参数 | ||
| 128 | + SysPostUpdateReqVO reqVO = randomPojo(SysPostUpdateReqVO.class, | ||
| 129 | + o -> { | ||
| 130 | + // 设置更新的 ID | ||
| 131 | + o.setId(postDO.getId()); | ||
| 132 | + o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); | ||
| 133 | + }); | ||
| 134 | + // 调用 | ||
| 135 | + postService.updatePost(reqVO); | ||
| 136 | + // 校验是否更新正确 | ||
| 137 | + SysPostDO post = postMapper.selectById(reqVO.getId());// 获取最新的 | ||
| 138 | + assertPojoEquals(reqVO, post); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + @Test | ||
| 142 | + void testDeletePost_success() { | ||
| 143 | + // mock 数据 | ||
| 144 | + SysPostDO postDO = randomPostDO(); | ||
| 145 | + postMapper.insert(postDO); | ||
| 146 | + // 准备参数 | ||
| 147 | + Long id = postDO.getId(); | ||
| 148 | + // 调用 | ||
| 149 | + postService.deletePost(id); | ||
| 150 | + assertNull(postMapper.selectById(id)); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + @Test | ||
| 154 | + void testCheckPost_notFoundForDelete() { | ||
| 155 | + // 准备参数 | ||
| 156 | + Long id = randomLongId(); | ||
| 157 | + // 调用, 并断言异常 | ||
| 158 | + assertServiceException(() -> postService.deletePost(id), POST_NOT_FOUND); | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + @Test | ||
| 162 | + void testCheckPost_nameDuplicateForCreate() { | ||
| 163 | + // mock 数据 | ||
| 164 | + SysPostDO postDO = randomPostDO(); | ||
| 165 | + postMapper.insert(postDO);// @Sql: 先插入出一条存在的数据 | ||
| 166 | + // 准备参数 | ||
| 167 | + SysPostCreateReqVO reqVO = randomPojo(SysPostCreateReqVO.class, | ||
| 168 | + // 模拟 name 重复 | ||
| 169 | + o -> o.setName(postDO.getName())); | ||
| 170 | + assertServiceException(() -> postService.createPost(reqVO), POST_NAME_DUPLICATE); | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + @Test | ||
| 174 | + void testCheckPost_codeDuplicateForUpdate() { | ||
| 175 | + // mock 数据 | ||
| 176 | + SysPostDO postDO = randomPostDO(); | ||
| 177 | + postMapper.insert(postDO); | ||
| 178 | + // mock 数据 稍后模拟重复它的 code | ||
| 179 | + SysPostDO codePostDO = randomPostDO(); | ||
| 180 | + postMapper.insert(codePostDO); | ||
| 181 | + // 准备参数 | ||
| 182 | + SysPostUpdateReqVO reqVO = randomPojo(SysPostUpdateReqVO.class, | ||
| 183 | + o -> { | ||
| 184 | + // 设置更新的 ID | ||
| 185 | + o.setId(postDO.getId()); | ||
| 186 | + // 模拟 code 重复 | ||
| 187 | + o.setCode(codePostDO.getCode()); | ||
| 188 | + }); | ||
| 189 | + // 调用, 并断言异常 | ||
| 190 | + assertServiceException(() -> postService.updatePost(reqVO), POST_CODE_DUPLICATE); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + @SafeVarargs | ||
| 194 | + private static SysPostDO randomPostDO(Consumer<SysPostDO>... consumers) { | ||
| 195 | + Consumer<SysPostDO> consumer = (o) -> { | ||
| 196 | + o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围 | ||
| 197 | + }; | ||
| 198 | + return randomPojo(SysPostDO.class, ArrayUtils.append(consumer, consumers)); | ||
| 199 | + } | ||
| 200 | +} |
src/test/java/cn/iocoder/dashboard/modules/system/service/dict/SysDictDataServiceTest.java
| 1 | package cn.iocoder.dashboard.modules.system.service.dict; | 1 | package cn.iocoder.dashboard.modules.system.service.dict; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.BaseSpringBootUnitTest; | 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; |
| 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | import cn.iocoder.dashboard.common.pojo.PageResult; | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; |
| @@ -12,14 +12,20 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | @@ -12,14 +12,20 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; | ||
| 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; | 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; |
| 13 | import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; | 13 | import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; |
| 14 | import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl; | 14 | import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl; |
| 15 | +import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 15 | import cn.iocoder.dashboard.util.object.ObjectUtils; | 16 | import cn.iocoder.dashboard.util.object.ObjectUtils; |
| 17 | +import com.google.common.collect.ImmutableTable; | ||
| 16 | import org.junit.jupiter.api.Test; | 18 | import org.junit.jupiter.api.Test; |
| 17 | import org.springframework.boot.test.mock.mockito.MockBean; | 19 | import org.springframework.boot.test.mock.mockito.MockBean; |
| 20 | +import org.springframework.context.annotation.Import; | ||
| 18 | 21 | ||
| 19 | import javax.annotation.Resource; | 22 | import javax.annotation.Resource; |
| 23 | +import java.util.Date; | ||
| 20 | import java.util.List; | 24 | import java.util.List; |
| 25 | +import java.util.function.Consumer; | ||
| 21 | 26 | ||
| 22 | -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_EXISTS; | 27 | +import static cn.hutool.core.bean.BeanUtil.getFieldValue; |
| 28 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 23 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | 29 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; |
| 24 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | 30 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; |
| 25 | import static cn.iocoder.dashboard.util.RandomUtils.*; | 31 | import static cn.iocoder.dashboard.util.RandomUtils.*; |
| @@ -32,7 +38,8 @@ import static org.mockito.Mockito.*; | @@ -32,7 +38,8 @@ import static org.mockito.Mockito.*; | ||
| 32 | * | 38 | * |
| 33 | * @author 芋道源码 | 39 | * @author 芋道源码 |
| 34 | */ | 40 | */ |
| 35 | -public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | 41 | +@Import(SysDictDataServiceImpl.class) |
| 42 | +public class SysDictDataServiceTest extends BaseDbUnitTest { | ||
| 36 | 43 | ||
| 37 | @Resource | 44 | @Resource |
| 38 | private SysDictDataServiceImpl dictDataService; | 45 | private SysDictDataServiceImpl dictDataService; |
| @@ -44,6 +51,37 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | @@ -44,6 +51,37 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | ||
| 44 | @MockBean | 51 | @MockBean |
| 45 | private SysDictDataProducer dictDataProducer; | 52 | private SysDictDataProducer dictDataProducer; |
| 46 | 53 | ||
| 54 | + /** | ||
| 55 | + * 测试加载到新的字典数据的情况 | ||
| 56 | + */ | ||
| 57 | + @Test | ||
| 58 | + @SuppressWarnings("unchecked") | ||
| 59 | + public void testInitLocalCache() { | ||
| 60 | + // mock 数据 | ||
| 61 | + SysDictDataDO dictData01 = randomDictDataDO(); | ||
| 62 | + dictDataMapper.insert(dictData01); | ||
| 63 | + SysDictDataDO dictData02 = randomDictDataDO(); | ||
| 64 | + dictDataMapper.insert(dictData02); | ||
| 65 | + | ||
| 66 | + // 调用 | ||
| 67 | + dictDataService.initLocalCache(); | ||
| 68 | + // 断言 labelDictDataCache 缓存 | ||
| 69 | + ImmutableTable<String, String, SysDictDataDO> labelDictDataCache = | ||
| 70 | + (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataService, "labelDictDataCache"); | ||
| 71 | + assertEquals(2, labelDictDataCache.size()); | ||
| 72 | + assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel())); | ||
| 73 | + assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel())); | ||
| 74 | + // 断言 valueDictDataCache 缓存 | ||
| 75 | + ImmutableTable<String, String, SysDictDataDO> valueDictDataCache = | ||
| 76 | + (ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataService, "valueDictDataCache"); | ||
| 77 | + assertEquals(2, valueDictDataCache.size()); | ||
| 78 | + assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue())); | ||
| 79 | + assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue())); | ||
| 80 | + // 断言 maxUpdateTime 缓存 | ||
| 81 | + Date maxUpdateTime = (Date) getFieldValue(dictDataService, "maxUpdateTime"); | ||
| 82 | + assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime); | ||
| 83 | + } | ||
| 84 | + | ||
| 47 | @Test | 85 | @Test |
| 48 | public void testGetDictDataPage() { | 86 | public void testGetDictDataPage() { |
| 49 | // mock 数据 | 87 | // mock 数据 |
| @@ -107,8 +145,7 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | @@ -107,8 +145,7 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | ||
| 107 | SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class, | 145 | SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class, |
| 108 | o -> o.setStatus(randomCommonStatus())); | 146 | o -> o.setStatus(randomCommonStatus())); |
| 109 | // mock 方法 | 147 | // mock 方法 |
| 110 | - when(dictTypeService.getDictType(eq(reqVO.getDictType()))) | ||
| 111 | - .thenReturn(randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); | 148 | + when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType())); |
| 112 | 149 | ||
| 113 | // 调用 | 150 | // 调用 |
| 114 | Long dictDataId = dictDataService.createDictData(reqVO); | 151 | Long dictDataId = dictDataService.createDictData(reqVO); |
| @@ -124,50 +161,142 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | @@ -124,50 +161,142 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest { | ||
| 124 | @Test | 161 | @Test |
| 125 | public void testUpdateDictData_success() { | 162 | public void testUpdateDictData_success() { |
| 126 | // mock 数据 | 163 | // mock 数据 |
| 127 | - SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class); | 164 | + SysDictDataDO dbDictData = randomDictDataDO(); |
| 128 | dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据 | 165 | dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据 |
| 129 | // 准备参数 | 166 | // 准备参数 |
| 130 | SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> { | 167 | SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> { |
| 131 | o.setId(dbDictData.getId()); // 设置更新的 ID | 168 | o.setId(dbDictData.getId()); // 设置更新的 ID |
| 169 | + o.setStatus(randomCommonStatus()); | ||
| 132 | }); | 170 | }); |
| 171 | + // mock 方法,字典类型 | ||
| 172 | + when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType())); | ||
| 133 | 173 | ||
| 134 | // 调用 | 174 | // 调用 |
| 135 | dictDataService.updateDictData(reqVO); | 175 | dictDataService.updateDictData(reqVO); |
| 136 | // 校验是否更新正确 | 176 | // 校验是否更新正确 |
| 137 | SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // 获取最新的 | 177 | SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // 获取最新的 |
| 138 | assertPojoEquals(reqVO, dictData); | 178 | assertPojoEquals(reqVO, dictData); |
| 179 | + // 校验调用 | ||
| 180 | + verify(dictDataProducer, times(1)).sendDictDataRefreshMessage(); | ||
| 139 | } | 181 | } |
| 140 | 182 | ||
| 141 | @Test | 183 | @Test |
| 142 | - public void testUpdateDictData_notExists() { | 184 | + public void testDeleteDictData_success() { |
| 185 | + // mock 数据 | ||
| 186 | + SysDictDataDO dbDictData = randomDictDataDO(); | ||
| 187 | + dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据 | ||
| 143 | // 准备参数 | 188 | // 准备参数 |
| 144 | - SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class); | 189 | + Long id = dbDictData.getId(); |
| 145 | 190 | ||
| 146 | - // 调用, 并断言异常 | ||
| 147 | - assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_DATA_NOT_EXISTS); | 191 | + // 调用 |
| 192 | + dictDataService.deleteDictData(id); | ||
| 193 | + // 校验数据不存在了 | ||
| 194 | + assertNull(dictDataMapper.selectById(id)); | ||
| 195 | + // 校验调用 | ||
| 196 | + verify(dictDataProducer, times(1)).sendDictDataRefreshMessage(); | ||
| 148 | } | 197 | } |
| 149 | 198 | ||
| 150 | @Test | 199 | @Test |
| 151 | - public void testDeleteDictData_success() { | 200 | + public void testCheckDictDataExists_success() { |
| 152 | // mock 数据 | 201 | // mock 数据 |
| 153 | - SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class); | 202 | + SysDictDataDO dbDictData = randomDictDataDO(); |
| 154 | dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据 | 203 | dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据 |
| 204 | + | ||
| 205 | + // 调用成功 | ||
| 206 | + dictDataService.checkDictDataExists(dbDictData.getId()); | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + @Test | ||
| 210 | + public void testCheckDictDataExists_notExists() { | ||
| 211 | + assertServiceException(() -> dictDataService.checkDictDataExists(randomLongId()), DICT_DATA_NOT_EXISTS); | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | + @Test | ||
| 215 | + public void testCheckDictTypeValid_success() { | ||
| 216 | + // mock 方法,数据类型被禁用 | ||
| 217 | + String type = randomString(); | ||
| 218 | + when(dictTypeService.getDictType(eq(type))).thenReturn(randomDictTypeDO(type)); | ||
| 219 | + | ||
| 220 | + // 调用, 成功 | ||
| 221 | + dictDataService.checkDictTypeValid(type); | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + @Test | ||
| 225 | + public void testCheckDictTypeValid_notExists() { | ||
| 226 | + assertServiceException(() -> dictDataService.checkDictTypeValid(randomString()), DICT_TYPE_NOT_EXISTS); | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + @Test | ||
| 230 | + public void testCheckDictTypeValid_notEnable() { | ||
| 231 | + // mock 方法,数据类型被禁用 | ||
| 232 | + String dictType = randomString(); | ||
| 233 | + when(dictTypeService.getDictType(eq(dictType))).thenReturn( | ||
| 234 | + randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||
| 235 | + | ||
| 236 | + // 调用, 并断言异常 | ||
| 237 | + assertServiceException(() -> dictDataService.checkDictTypeValid(dictType), DICT_TYPE_NOT_ENABLE); | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + @Test | ||
| 241 | + public void testCheckDictDataValueUnique_success() { | ||
| 242 | + // 调用,成功 | ||
| 243 | + dictDataService.checkDictDataValueUnique(randomLongId(), randomString(), randomString()); | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + @Test | ||
| 247 | + public void testCheckDictDataValueUnique_valueDuplicateForCreate() { | ||
| 155 | // 准备参数 | 248 | // 准备参数 |
| 156 | - Long id = dbDictData.getId(); | 249 | + String dictType = randomString(); |
| 250 | + String value = randomString(); | ||
| 251 | + // mock 数据 | ||
| 252 | + dictDataMapper.insert(randomDictDataDO(o -> { | ||
| 253 | + o.setDictType(dictType); | ||
| 254 | + o.setValue(value); | ||
| 255 | + })); | ||
| 157 | 256 | ||
| 158 | - // 调用 | ||
| 159 | - dictDataService.deleteDictData(id); | ||
| 160 | - // 校验数据不存在了 | ||
| 161 | - assertNull(dictDataMapper.selectById(id)); | 257 | + // 调用,校验异常 |
| 258 | + assertServiceException(() -> dictDataService.checkDictDataValueUnique(null, dictType, value), | ||
| 259 | + DICT_DATA_VALUE_DUPLICATE); | ||
| 162 | } | 260 | } |
| 163 | 261 | ||
| 164 | @Test | 262 | @Test |
| 165 | - public void testDeleteDictData_notExists() { | 263 | + public void testCheckDictDataValueUnique_valueDuplicateForUpdate() { |
| 166 | // 准备参数 | 264 | // 准备参数 |
| 167 | Long id = randomLongId(); | 265 | Long id = randomLongId(); |
| 266 | + String dictType = randomString(); | ||
| 267 | + String value = randomString(); | ||
| 268 | + // mock 数据 | ||
| 269 | + dictDataMapper.insert(randomDictDataDO(o -> { | ||
| 270 | + o.setDictType(dictType); | ||
| 271 | + o.setValue(value); | ||
| 272 | + })); | ||
| 168 | 273 | ||
| 169 | - // 调用, 并断言异常 | ||
| 170 | - assertServiceException(() -> dictDataService.deleteDictData(id), DICT_DATA_NOT_EXISTS); | 274 | + // 调用,校验异常 |
| 275 | + assertServiceException(() -> dictDataService.checkDictDataValueUnique(id, dictType, value), | ||
| 276 | + DICT_DATA_VALUE_DUPLICATE); | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + // ========== 随机对象 ========== | ||
| 280 | + | ||
| 281 | + @SafeVarargs | ||
| 282 | + private static SysDictDataDO randomDictDataDO(Consumer<SysDictDataDO>... consumers) { | ||
| 283 | + Consumer<SysDictDataDO> consumer = (o) -> { | ||
| 284 | + o.setStatus(randomCommonStatus()); // 保证 status 的范围 | ||
| 285 | + }; | ||
| 286 | + return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers)); | ||
| 287 | + } | ||
| 288 | + | ||
| 289 | + /** | ||
| 290 | + * 生成一个有效的字典类型 | ||
| 291 | + * | ||
| 292 | + * @param type 字典类型 | ||
| 293 | + * @return SysDictTypeDO 对象 | ||
| 294 | + */ | ||
| 295 | + private static SysDictTypeDO randomDictTypeDO(String type) { | ||
| 296 | + return randomPojo(SysDictTypeDO.class, o -> { | ||
| 297 | + o.setType(type); | ||
| 298 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 保证 status 是开启 | ||
| 299 | + }); | ||
| 171 | } | 300 | } |
| 172 | 301 | ||
| 173 | } | 302 | } |
src/test/java/cn/iocoder/dashboard/modules/system/service/dict/SysDictTypeServiceTest.java
| 1 | package cn.iocoder.dashboard.modules.system.service.dict; | 1 | package cn.iocoder.dashboard.modules.system.service.dict; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.BaseSpringBootUnitTest; | 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; |
| 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | import cn.iocoder.dashboard.common.pojo.PageResult; | 5 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; |
| @@ -14,6 +14,7 @@ import cn.iocoder.dashboard.util.collection.ArrayUtils; | @@ -14,6 +14,7 @@ import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 14 | import cn.iocoder.dashboard.util.object.ObjectUtils; | 14 | import cn.iocoder.dashboard.util.object.ObjectUtils; |
| 15 | import org.junit.jupiter.api.Test; | 15 | import org.junit.jupiter.api.Test; |
| 16 | import org.springframework.boot.test.mock.mockito.MockBean; | 16 | import org.springframework.boot.test.mock.mockito.MockBean; |
| 17 | +import org.springframework.context.annotation.Import; | ||
| 17 | 18 | ||
| 18 | import javax.annotation.Resource; | 19 | import javax.annotation.Resource; |
| 19 | import java.util.List; | 20 | import java.util.List; |
| @@ -23,8 +24,7 @@ import static cn.hutool.core.util.RandomUtil.randomEle; | @@ -23,8 +24,7 @@ import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 23 | import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | 24 | import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; |
| 24 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | 25 | import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; |
| 25 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | 26 | import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; |
| 26 | -import static cn.iocoder.dashboard.util.RandomUtils.randomLongId; | ||
| 27 | -import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; | 27 | +import static cn.iocoder.dashboard.util.RandomUtils.*; |
| 28 | import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; | 28 | import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; |
| 29 | import static org.junit.jupiter.api.Assertions.*; | 29 | import static org.junit.jupiter.api.Assertions.*; |
| 30 | import static org.mockito.ArgumentMatchers.eq; | 30 | import static org.mockito.ArgumentMatchers.eq; |
| @@ -35,7 +35,8 @@ import static org.mockito.Mockito.when; | @@ -35,7 +35,8 @@ import static org.mockito.Mockito.when; | ||
| 35 | * | 35 | * |
| 36 | * @author 芋道源码 | 36 | * @author 芋道源码 |
| 37 | */ | 37 | */ |
| 38 | -public class SysDictTypeServiceTest extends BaseSpringBootUnitTest { | 38 | +@Import(SysDictTypeServiceImpl.class) |
| 39 | +public class SysDictTypeServiceTest extends BaseDbUnitTest { | ||
| 39 | 40 | ||
| 40 | @Resource | 41 | @Resource |
| 41 | private SysDictTypeServiceImpl dictTypeService; | 42 | private SysDictTypeServiceImpl dictTypeService; |
| @@ -143,32 +144,6 @@ public class SysDictTypeServiceTest extends BaseSpringBootUnitTest { | @@ -143,32 +144,6 @@ public class SysDictTypeServiceTest extends BaseSpringBootUnitTest { | ||
| 143 | } | 144 | } |
| 144 | 145 | ||
| 145 | @Test | 146 | @Test |
| 146 | - public void testCreateDictType_nameDuplicate() { | ||
| 147 | - // mock 数据 | ||
| 148 | - SysDictTypeDO dbDictType = randomDictTypeDO(); | ||
| 149 | - dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 | ||
| 150 | - // 准备参数 | ||
| 151 | - SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class, | ||
| 152 | - o -> o.setName(dbDictType.getName())); // 模拟 name 重复 | ||
| 153 | - | ||
| 154 | - // 调用, 并断言异常 | ||
| 155 | - assertServiceException(() -> dictTypeService.createDictType(reqVO), DICT_TYPE_NAME_DUPLICATE); | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - @Test | ||
| 159 | - public void testCreateDictType_typeDuplicate() { | ||
| 160 | - // mock 数据 | ||
| 161 | - SysDictTypeDO dbDictType = randomDictTypeDO(); | ||
| 162 | - dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 | ||
| 163 | - // 准备参数 | ||
| 164 | - SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class, | ||
| 165 | - o -> o.setType(dbDictType.getType())); // 模拟 type 重复 | ||
| 166 | - | ||
| 167 | - // 调用, 并断言异常 | ||
| 168 | - assertServiceException(() -> dictTypeService.createDictType(reqVO), DICT_TYPE_TYPE_DUPLICATE); | ||
| 169 | - } | ||
| 170 | - | ||
| 171 | - @Test | ||
| 172 | public void testUpdateDictType_success() { | 147 | public void testUpdateDictType_success() { |
| 173 | // mock 数据 | 148 | // mock 数据 |
| 174 | SysDictTypeDO dbDictType = randomDictTypeDO(); | 149 | SysDictTypeDO dbDictType = randomDictTypeDO(); |
| @@ -187,67 +162,108 @@ public class SysDictTypeServiceTest extends BaseSpringBootUnitTest { | @@ -187,67 +162,108 @@ public class SysDictTypeServiceTest extends BaseSpringBootUnitTest { | ||
| 187 | } | 162 | } |
| 188 | 163 | ||
| 189 | @Test | 164 | @Test |
| 190 | - public void testUpdateDictType_notExists() { | 165 | + public void testDeleteDictType_success() { |
| 166 | + // mock 数据 | ||
| 167 | + SysDictTypeDO dbDictType = randomDictTypeDO(); | ||
| 168 | + dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 | ||
| 191 | // 准备参数 | 169 | // 准备参数 |
| 192 | - SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class); | 170 | + Long id = dbDictType.getId(); |
| 193 | 171 | ||
| 194 | - // 调用, 并断言异常 | ||
| 195 | - assertServiceException(() -> dictTypeService.updateDictType(reqVO), DICT_TYPE_NOT_EXISTS); | 172 | + // 调用 |
| 173 | + dictTypeService.deleteDictType(id); | ||
| 174 | + // 校验数据不存在了 | ||
| 175 | + assertNull(dictTypeMapper.selectById(id)); | ||
| 196 | } | 176 | } |
| 197 | 177 | ||
| 198 | @Test | 178 | @Test |
| 199 | - public void testUpdateDictType_nameDuplicate() { | ||
| 200 | - // mock 数据,稍后更新它 | 179 | + public void testDeleteDictType_hasChildren() { |
| 180 | + // mock 数据 | ||
| 201 | SysDictTypeDO dbDictType = randomDictTypeDO(); | 181 | SysDictTypeDO dbDictType = randomDictTypeDO(); |
| 202 | - dictTypeMapper.insert(dbDictType); | ||
| 203 | - // mock 数据,ks稍后模拟重复它的名字 | ||
| 204 | - SysDictTypeDO nameDictType = randomDictTypeDO(); | ||
| 205 | - dictTypeMapper.insert(nameDictType); | 182 | + dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 |
| 206 | // 准备参数 | 183 | // 准备参数 |
| 207 | - SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class, o -> { | ||
| 208 | - o.setId(dbDictType.getId()); // 设置更新的 ID | ||
| 209 | - o.setName(nameDictType.getName()); // 模拟 name 重复 | ||
| 210 | - }); | 184 | + Long id = dbDictType.getId(); |
| 185 | + // mock 方法 | ||
| 186 | + when(dictDataService.countByDictType(eq(dbDictType.getType()))).thenReturn(1); | ||
| 211 | 187 | ||
| 212 | // 调用, 并断言异常 | 188 | // 调用, 并断言异常 |
| 213 | - assertServiceException(() -> dictTypeService.updateDictType(reqVO), DICT_TYPE_NAME_DUPLICATE); | 189 | + assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_HAS_CHILDREN); |
| 214 | } | 190 | } |
| 215 | 191 | ||
| 216 | @Test | 192 | @Test |
| 217 | - public void testDeleteDictType_success() { | 193 | + public void testCheckDictDataExists_success() { |
| 218 | // mock 数据 | 194 | // mock 数据 |
| 219 | SysDictTypeDO dbDictType = randomDictTypeDO(); | 195 | SysDictTypeDO dbDictType = randomDictTypeDO(); |
| 220 | dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 | 196 | dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 |
| 197 | + | ||
| 198 | + // 调用成功 | ||
| 199 | + dictTypeService.checkDictTypeExists(dbDictType.getId()); | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + @Test | ||
| 203 | + public void testCheckDictDataExists_notExists() { | ||
| 204 | + assertServiceException(() -> dictTypeService.checkDictTypeExists(randomLongId()), DICT_TYPE_NOT_EXISTS); | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + @Test | ||
| 208 | + public void testCheckDictTypeUnique_success() { | ||
| 209 | + // 调用,成功 | ||
| 210 | + dictTypeService.checkDictTypeUnique(randomLongId(), randomString()); | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + @Test | ||
| 214 | + public void testCheckDictTypeUnique_valueDuplicateForCreate() { | ||
| 221 | // 准备参数 | 215 | // 准备参数 |
| 222 | - Long id = dbDictType.getId(); | 216 | + String type = randomString(); |
| 217 | + // mock 数据 | ||
| 218 | + dictTypeMapper.insert(randomDictTypeDO(o -> o.setType(type))); | ||
| 223 | 219 | ||
| 224 | - // 调用 | ||
| 225 | - dictTypeService.deleteDictType(id); | ||
| 226 | - // 校验数据不存在了 | ||
| 227 | - assertNull(dictTypeMapper.selectById(id)); | 220 | + // 调用,校验异常 |
| 221 | + assertServiceException(() -> dictTypeService.checkDictTypeUnique(null, type), | ||
| 222 | + DICT_TYPE_TYPE_DUPLICATE); | ||
| 228 | } | 223 | } |
| 229 | 224 | ||
| 230 | @Test | 225 | @Test |
| 231 | - public void testDeleteDictType_notExists() { | 226 | + public void testCheckDictTypeUnique_valueDuplicateForUpdate() { |
| 232 | // 准备参数 | 227 | // 准备参数 |
| 233 | Long id = randomLongId(); | 228 | Long id = randomLongId(); |
| 229 | + String type = randomString(); | ||
| 230 | + // mock 数据 | ||
| 231 | + dictTypeMapper.insert(randomDictTypeDO(o -> o.setType(type))); | ||
| 234 | 232 | ||
| 235 | - // 调用, 并断言异常 | ||
| 236 | - assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_NOT_EXISTS); | 233 | + // 调用,校验异常 |
| 234 | + assertServiceException(() -> dictTypeService.checkDictTypeUnique(id, type), | ||
| 235 | + DICT_TYPE_TYPE_DUPLICATE); | ||
| 237 | } | 236 | } |
| 238 | 237 | ||
| 239 | @Test | 238 | @Test |
| 240 | - public void testDeleteDictType_hasChildren() { | 239 | + public void testCheckDictTypNameUnique_success() { |
| 240 | + // 调用,成功 | ||
| 241 | + dictTypeService.checkDictTypeNameUnique(randomLongId(), randomString()); | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + @Test | ||
| 245 | + public void testCheckDictTypeNameUnique_nameDuplicateForCreate() { | ||
| 246 | + // 准备参数 | ||
| 247 | + String name = randomString(); | ||
| 241 | // mock 数据 | 248 | // mock 数据 |
| 242 | - SysDictTypeDO dbDictType = randomDictTypeDO(); | ||
| 243 | - dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据 | 249 | + dictTypeMapper.insert(randomDictTypeDO(o -> o.setName(name))); |
| 250 | + | ||
| 251 | + // 调用,校验异常 | ||
| 252 | + assertServiceException(() -> dictTypeService.checkDictTypeNameUnique(null, name), | ||
| 253 | + DICT_TYPE_NAME_DUPLICATE); | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + @Test | ||
| 257 | + public void testCheckDictTypeNameUnique_nameDuplicateForUpdate() { | ||
| 244 | // 准备参数 | 258 | // 准备参数 |
| 245 | - Long id = dbDictType.getId(); | ||
| 246 | - // mock 方法 | ||
| 247 | - when(dictDataService.countByDictType(eq(dbDictType.getType()))).thenReturn(1); | 259 | + Long id = randomLongId(); |
| 260 | + String name = randomString(); | ||
| 261 | + // mock 数据 | ||
| 262 | + dictTypeMapper.insert(randomDictTypeDO(o -> o.setName(name))); | ||
| 248 | 263 | ||
| 249 | - // 调用, 并断言异常 | ||
| 250 | - assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_HAS_CHILDREN); | 264 | + // 调用,校验异常 |
| 265 | + assertServiceException(() -> dictTypeService.checkDictTypeNameUnique(id, name), | ||
| 266 | + DICT_TYPE_NAME_DUPLICATE); | ||
| 251 | } | 267 | } |
| 252 | 268 | ||
| 253 | // ========== 随机对象 ========== | 269 | // ========== 随机对象 ========== |
src/test/java/cn/iocoder/dashboard/modules/system/service/notice/SysNoticeServiceImplTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.notice; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; | ||
| 4 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 5 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeCreateReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticePageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.notice.vo.SysNoticeUpdateReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.notice.SysNoticeDO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.dal.mysql.notice.SysNoticeMapper; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.enums.notice.SysNoticeTypeEnum; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.notice.impl.SysNoticeServiceImpl; | ||
| 13 | +import cn.iocoder.dashboard.util.object.ObjectUtils; | ||
| 14 | +import org.junit.jupiter.api.Test; | ||
| 15 | +import org.springframework.context.annotation.Import; | ||
| 16 | + | ||
| 17 | +import javax.annotation.Resource; | ||
| 18 | + | ||
| 19 | +import java.util.function.Consumer; | ||
| 20 | + | ||
| 21 | +import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 22 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.NOTICE_NOT_FOUND; | ||
| 23 | +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||
| 24 | +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | ||
| 25 | +import static cn.iocoder.dashboard.util.RandomUtils.randomLongId; | ||
| 26 | +import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; | ||
| 27 | +import static org.junit.jupiter.api.Assertions.*; | ||
| 28 | + | ||
| 29 | +@Import(SysNoticeServiceImpl.class) | ||
| 30 | +class SysNoticeServiceImplTest extends BaseDbUnitTest { | ||
| 31 | + | ||
| 32 | + @Resource | ||
| 33 | + private SysNoticeServiceImpl sysNoticeService; | ||
| 34 | + | ||
| 35 | + @Resource | ||
| 36 | + private SysNoticeMapper sysNoticeMapper; | ||
| 37 | + | ||
| 38 | + @Test | ||
| 39 | + public void testPageNotices_success() { | ||
| 40 | + // 插入前置数据 | ||
| 41 | + SysNoticeDO dbNotice = randomPojo(SysNoticeDO.class, o -> { | ||
| 42 | + o.setTitle("尼古拉斯赵四来啦!"); | ||
| 43 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 44 | + o.setType(randomEle(SysNoticeTypeEnum.values()).getType()); | ||
| 45 | + }); | ||
| 46 | + sysNoticeMapper.insert(dbNotice); | ||
| 47 | + | ||
| 48 | + // 测试 title 不匹配 | ||
| 49 | + sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setTitle("尼古拉斯凯奇也来啦!"))); | ||
| 50 | + // 测试 status 不匹配 | ||
| 51 | + sysNoticeMapper.insert(ObjectUtils.clone(dbNotice, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + // 查询 | ||
| 55 | + SysNoticePageReqVO reqVO = new SysNoticePageReqVO(); | ||
| 56 | + reqVO.setTitle("尼古拉斯赵四来啦!"); | ||
| 57 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 58 | + PageResult<SysNoticeDO> pageResult = sysNoticeService.pageNotices(reqVO); | ||
| 59 | + | ||
| 60 | + // 验证查询结果经过筛选 | ||
| 61 | + assertEquals(1, pageResult.getTotal()); | ||
| 62 | + assertEquals(1, pageResult.getList().size()); | ||
| 63 | + assertPojoEquals(dbNotice, pageResult.getList().get(0)); | ||
| 64 | + | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @Test | ||
| 68 | + public void testGetNotice_success() { | ||
| 69 | + // 插入前置数据 | ||
| 70 | + SysNoticeDO dbNotice = randomSysNoticeDO(); | ||
| 71 | + sysNoticeMapper.insert(dbNotice); | ||
| 72 | + | ||
| 73 | + // 查询 | ||
| 74 | + SysNoticeDO notice = sysNoticeService.getNotice(dbNotice.getId()); | ||
| 75 | + | ||
| 76 | + // 验证插入与读取对象是否一致 | ||
| 77 | + assertNotNull(notice); | ||
| 78 | + assertPojoEquals(dbNotice, notice); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @Test | ||
| 82 | + public void testCreateNotice_success() { | ||
| 83 | + // 准备参数 | ||
| 84 | + SysNoticeCreateReqVO reqVO = randomSysNoticeCreateReqVO(); | ||
| 85 | + | ||
| 86 | + // 校验插入是否成功 | ||
| 87 | + Long noticeId = sysNoticeService.createNotice(reqVO); | ||
| 88 | + assertNotNull(noticeId); | ||
| 89 | + | ||
| 90 | + // 校验插入属性是否正确 | ||
| 91 | + SysNoticeDO notice = sysNoticeMapper.selectById(noticeId); | ||
| 92 | + assertPojoEquals(reqVO, notice); | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + @Test | ||
| 96 | + public void testUpdateNotice_success() { | ||
| 97 | + // 插入前置数据 | ||
| 98 | + SysNoticeDO dbNoticeDO = randomSysNoticeDO(); | ||
| 99 | + sysNoticeMapper.insert(dbNoticeDO); | ||
| 100 | + | ||
| 101 | + // 准备更新参数 | ||
| 102 | + SysNoticeUpdateReqVO reqVO = randomSysNoticeUpdateReqVO(o -> o.setId(dbNoticeDO.getId())); | ||
| 103 | + | ||
| 104 | + // 更新 | ||
| 105 | + sysNoticeService.updateNotice(reqVO); | ||
| 106 | + | ||
| 107 | + // 检验是否更新成功 | ||
| 108 | + SysNoticeDO notice = sysNoticeMapper.selectById(reqVO.getId()); | ||
| 109 | + assertPojoEquals(reqVO, notice); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + @Test | ||
| 113 | + public void testDeleteNotice_success() { | ||
| 114 | + // 插入前置数据 | ||
| 115 | + SysNoticeDO dbNotice = randomSysNoticeDO(); | ||
| 116 | + sysNoticeMapper.insert(dbNotice); | ||
| 117 | + | ||
| 118 | + // 删除 | ||
| 119 | + sysNoticeService.deleteNotice(dbNotice.getId()); | ||
| 120 | + | ||
| 121 | + // 检查是否删除成功 | ||
| 122 | + assertNull(sysNoticeMapper.selectById(dbNotice.getId())); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + @Test | ||
| 126 | + public void checkNoticeExists_success() { | ||
| 127 | + // 插入前置数据 | ||
| 128 | + SysNoticeDO dbNotice = randomSysNoticeDO(); | ||
| 129 | + sysNoticeMapper.insert(dbNotice); | ||
| 130 | + | ||
| 131 | + // 成功调用 | ||
| 132 | + sysNoticeService.checkNoticeExists(dbNotice.getId()); | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | + @Test | ||
| 136 | + public void checkNoticeExists_noExists() { | ||
| 137 | + assertServiceException(() -> sysNoticeService.checkNoticeExists(randomLongId()), NOTICE_NOT_FOUND); | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + @SafeVarargs | ||
| 141 | + private static SysNoticeDO randomSysNoticeDO(Consumer<SysNoticeDO>... consumers) { | ||
| 142 | + SysNoticeDO notice = randomPojo(SysNoticeDO.class, consumers); | ||
| 143 | + notice.setType(randomEle(SysNoticeTypeEnum.values()).getType()); | ||
| 144 | + notice.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 145 | + return notice; | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + @SafeVarargs | ||
| 149 | + private static SysNoticeUpdateReqVO randomSysNoticeUpdateReqVO(Consumer<SysNoticeUpdateReqVO>... consumers) { | ||
| 150 | + SysNoticeUpdateReqVO reqVO = randomPojo(SysNoticeUpdateReqVO.class, consumers); | ||
| 151 | + reqVO.setType(randomEle(SysNoticeTypeEnum.values()).getType()); | ||
| 152 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 153 | + return reqVO; | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + private static SysNoticeCreateReqVO randomSysNoticeCreateReqVO() { | ||
| 157 | + SysNoticeCreateReqVO reqVO = randomPojo(SysNoticeCreateReqVO.class); | ||
| 158 | + reqVO.setType(randomEle(SysNoticeTypeEnum.values()).getType()); | ||
| 159 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||
| 160 | + return reqVO; | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + | ||
| 164 | +} | ||
| 0 | \ No newline at end of file | 165 | \ No newline at end of file |
src/test/resources/application-unit-test.yaml
| @@ -3,21 +3,6 @@ spring: | @@ -3,21 +3,6 @@ spring: | ||
| 3 | lazy-initialization: true # 开启懒加载,加快速度 | 3 | lazy-initialization: true # 开启懒加载,加快速度 |
| 4 | banner-mode: off # 单元测试,禁用 Banner | 4 | banner-mode: off # 单元测试,禁用 Banner |
| 5 | 5 | ||
| 6 | - # 去除的自动配置项 | ||
| 7 | - autoconfigure: | ||
| 8 | - exclude: | ||
| 9 | - - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration # 单元测试,禁用 SpringSecurity | ||
| 10 | - - org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration # 单元测试,禁用 SpringSecurity | ||
| 11 | - - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 单元测试,禁用 Quartz | ||
| 12 | - - com.baomidou.lock.spring.boot.autoconfigure.LockAutoConfiguration # 单元测试,禁用 Lock4j 分布式锁 | ||
| 13 | - - org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration # 单元测试,禁用 Scheduler 定时任务 | ||
| 14 | - - org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration # 项目没有使用 Spring Data,所以禁用配置类,加速启动 | ||
| 15 | - | ||
| 16 | -# Swagger 接口文档的自动配置(单元测试,禁用 Swagger) | ||
| 17 | -springfox: | ||
| 18 | - documentation: | ||
| 19 | - auto-startup: false | ||
| 20 | - | ||
| 21 | --- #################### 数据库相关配置 #################### | 6 | --- #################### 数据库相关配置 #################### |
| 22 | 7 | ||
| 23 | spring: | 8 | spring: |
| @@ -29,6 +14,9 @@ spring: | @@ -29,6 +14,9 @@ spring: | ||
| 29 | username: sa | 14 | username: sa |
| 30 | password: | 15 | password: |
| 31 | schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具 | 16 | schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具 |
| 17 | + druid: | ||
| 18 | + async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度 | ||
| 19 | + initial-size: 1 # 单元测试,配置为 1,提升启动速度 | ||
| 32 | 20 | ||
| 33 | # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 | 21 | # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 |
| 34 | redis: | 22 | redis: |
| @@ -36,17 +24,13 @@ spring: | @@ -36,17 +24,13 @@ spring: | ||
| 36 | port: 16379 # 端口(单元测试,使用 16379 端口) | 24 | port: 16379 # 端口(单元测试,使用 16379 端口) |
| 37 | database: 0 # 数据库索引 | 25 | database: 0 # 数据库索引 |
| 38 | 26 | ||
| 39 | ---- #################### 定时任务相关配置 #################### | 27 | +mybatis: |
| 28 | + lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 | ||
| 40 | 29 | ||
| 41 | -# Quartz 配置项,对应 QuartzProperties 配置类(单元测试,禁用 Quartz) | 30 | +--- #################### 定时任务相关配置 #################### |
| 42 | 31 | ||
| 43 | --- #################### 配置中心相关配置 #################### | 32 | --- #################### 配置中心相关配置 #################### |
| 44 | 33 | ||
| 45 | -# Apollo 配置中心 | ||
| 46 | -apollo: | ||
| 47 | - bootstrap: | ||
| 48 | - enabled: false # 单元测试,禁用配置中心 | ||
| 49 | - | ||
| 50 | --- #################### 服务保障相关配置 #################### | 34 | --- #################### 服务保障相关配置 #################### |
| 51 | 35 | ||
| 52 | # Lock4j 配置项(单元测试,禁用 Lock4j) | 36 | # Lock4j 配置项(单元测试,禁用 Lock4j) |
| @@ -63,23 +47,6 @@ resilience4j: | @@ -63,23 +47,6 @@ resilience4j: | ||
| 63 | 47 | ||
| 64 | --- #################### 监控相关配置 #################### | 48 | --- #################### 监控相关配置 #################### |
| 65 | 49 | ||
| 66 | -# Actuator 监控端点的配置项 | ||
| 67 | -management: | ||
| 68 | - endpoints: | ||
| 69 | - enabled-by-default: false | ||
| 70 | - | ||
| 71 | -# Spring Boot Admin 配置项 | ||
| 72 | -spring: | ||
| 73 | - boot: | ||
| 74 | - admin: | ||
| 75 | - # Spring Boot Admin Client 客户端的相关配置 | ||
| 76 | - client: | ||
| 77 | - enabled: false | ||
| 78 | - # Spring Boot Admin Server 服务端的相关配置 | ||
| 79 | - context-path: /admin # 配置 Spring | ||
| 80 | - | ||
| 81 | -# 日志文件配置(不需要配置) | ||
| 82 | - | ||
| 83 | --- #################### 芋道相关配置 #################### | 50 | --- #################### 芋道相关配置 #################### |
| 84 | 51 | ||
| 85 | # 芋道配置项,设置当前项目所有自定义的配置 | 52 | # 芋道配置项,设置当前项目所有自定义的配置 |
src/test/resources/sql/clean.sql
| @@ -8,6 +8,8 @@ DELETE FROM "sys_role"; | @@ -8,6 +8,8 @@ DELETE FROM "sys_role"; | ||
| 8 | DELETE FROM "sys_role_menu"; | 8 | DELETE FROM "sys_role_menu"; |
| 9 | DELETE FROM "sys_menu"; | 9 | DELETE FROM "sys_menu"; |
| 10 | DELETE FROM "sys_dict_type"; | 10 | DELETE FROM "sys_dict_type"; |
| 11 | +DELETE FROM "sys_user_session"; | ||
| 12 | +DELETE FROM "sys_post"; | ||
| 11 | DELETE FROM "sys_login_log"; | 13 | DELETE FROM "sys_login_log"; |
| 12 | DELETE FROM "sys_operate_log"; | 14 | DELETE FROM "sys_operate_log"; |
| 13 | DELETE FROM "sys_user"; | 15 | DELETE FROM "sys_user"; |
src/test/resources/sql/create_tables.sql
| @@ -9,9 +9,9 @@ CREATE TABLE IF NOT EXISTS "inf_config" ( | @@ -9,9 +9,9 @@ CREATE TABLE IF NOT EXISTS "inf_config" ( | ||
| 9 | "value" varchar(500) NOT NULL DEFAULT '', | 9 | "value" varchar(500) NOT NULL DEFAULT '', |
| 10 | "sensitive" bit NOT NULL, | 10 | "sensitive" bit NOT NULL, |
| 11 | "remark" varchar(500) DEFAULT NULL, | 11 | "remark" varchar(500) DEFAULT NULL, |
| 12 | - "create_by" varchar(64) DEFAULT '', | 12 | + "creator" varchar(64) DEFAULT '', |
| 13 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 13 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 14 | - "update_by" varchar(64) DEFAULT '', | 14 | + "updater" varchar(64) DEFAULT '', |
| 15 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 15 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 16 | "deleted" bit NOT NULL DEFAULT FALSE, | 16 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 17 | PRIMARY KEY ("id") | 17 | PRIMARY KEY ("id") |
| @@ -28,9 +28,9 @@ CREATE TABLE IF NOT EXISTS "sys_dept" ( | @@ -28,9 +28,9 @@ CREATE TABLE IF NOT EXISTS "sys_dept" ( | ||
| 28 | "phone" varchar(11) DEFAULT NULL, | 28 | "phone" varchar(11) DEFAULT NULL, |
| 29 | "email" varchar(50) DEFAULT NULL, | 29 | "email" varchar(50) DEFAULT NULL, |
| 30 | "status" tinyint NOT NULL, | 30 | "status" tinyint NOT NULL, |
| 31 | - "create_by" varchar(64) DEFAULT '', | 31 | + "creator" varchar(64) DEFAULT '', |
| 32 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 32 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 33 | - "update_by" varchar(64) DEFAULT '', | 33 | + "updater" varchar(64) DEFAULT '', |
| 34 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 34 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 35 | "deleted" bit NOT NULL DEFAULT FALSE, | 35 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 36 | PRIMARY KEY ("id") | 36 | PRIMARY KEY ("id") |
| @@ -44,9 +44,9 @@ CREATE TABLE IF NOT EXISTS "sys_dict_data" ( | @@ -44,9 +44,9 @@ CREATE TABLE IF NOT EXISTS "sys_dict_data" ( | ||
| 44 | "dict_type" varchar(100) NOT NULL DEFAULT '', | 44 | "dict_type" varchar(100) NOT NULL DEFAULT '', |
| 45 | "status" tinyint NOT NULL DEFAULT '0', | 45 | "status" tinyint NOT NULL DEFAULT '0', |
| 46 | "remark" varchar(500) DEFAULT NULL, | 46 | "remark" varchar(500) DEFAULT NULL, |
| 47 | - "create_by" varchar(64) DEFAULT '', | 47 | + "creator" varchar(64) DEFAULT '', |
| 48 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 48 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 49 | - "update_by" varchar(64) DEFAULT '', | 49 | + "updater" varchar(64) DEFAULT '', |
| 50 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 50 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 51 | "deleted" bit NOT NULL DEFAULT FALSE, | 51 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 52 | PRIMARY KEY ("id") | 52 | PRIMARY KEY ("id") |
| @@ -62,9 +62,9 @@ CREATE TABLE IF NOT EXISTS "sys_role" ( | @@ -62,9 +62,9 @@ CREATE TABLE IF NOT EXISTS "sys_role" ( | ||
| 62 | "status" tinyint NOT NULL, | 62 | "status" tinyint NOT NULL, |
| 63 | "type" tinyint NOT NULL, | 63 | "type" tinyint NOT NULL, |
| 64 | "remark" varchar(500) DEFAULT NULL, | 64 | "remark" varchar(500) DEFAULT NULL, |
| 65 | - "create_by" varchar(64) DEFAULT '', | 65 | + "creator" varchar(64) DEFAULT '', |
| 66 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 66 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 67 | - "update_by" varchar(64) DEFAULT '', | 67 | + "updater" varchar(64) DEFAULT '', |
| 68 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 68 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 69 | "deleted" bit NOT NULL DEFAULT FALSE, | 69 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 70 | PRIMARY KEY ("id") | 70 | PRIMARY KEY ("id") |
| @@ -74,9 +74,9 @@ CREATE TABLE IF NOT EXISTS "sys_role_menu" ( | @@ -74,9 +74,9 @@ CREATE TABLE IF NOT EXISTS "sys_role_menu" ( | ||
| 74 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | 74 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, |
| 75 | "role_id" bigint NOT NULL, | 75 | "role_id" bigint NOT NULL, |
| 76 | "menu_id" bigint NOT NULL, | 76 | "menu_id" bigint NOT NULL, |
| 77 | - "create_by" varchar(64) DEFAULT '', | 77 | + "creator" varchar(64) DEFAULT '', |
| 78 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 78 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 79 | - "update_by" varchar(64) DEFAULT '', | 79 | + "updater" varchar(64) DEFAULT '', |
| 80 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 80 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 81 | "deleted" bit NOT NULL DEFAULT FALSE, | 81 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 82 | PRIMARY KEY ("id") | 82 | PRIMARY KEY ("id") |
| @@ -93,9 +93,9 @@ CREATE TABLE IF NOT EXISTS "sys_menu" ( | @@ -93,9 +93,9 @@ CREATE TABLE IF NOT EXISTS "sys_menu" ( | ||
| 93 | "icon" varchar(100) DEFAULT '#', | 93 | "icon" varchar(100) DEFAULT '#', |
| 94 | "component" varchar(255) DEFAULT NULL, | 94 | "component" varchar(255) DEFAULT NULL, |
| 95 | "status" tinyint NOT NULL DEFAULT '0', | 95 | "status" tinyint NOT NULL DEFAULT '0', |
| 96 | - "create_by" varchar(64) DEFAULT '', | 96 | + "creator" varchar(64) DEFAULT '', |
| 97 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 97 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 98 | - "update_by" varchar(64) DEFAULT '', | 98 | + "updater" varchar(64) DEFAULT '', |
| 99 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 99 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 100 | "deleted" bit NOT NULL DEFAULT FALSE, | 100 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 101 | PRIMARY KEY ("id") | 101 | PRIMARY KEY ("id") |
| @@ -107,14 +107,61 @@ CREATE TABLE "sys_dict_type" ( | @@ -107,14 +107,61 @@ CREATE TABLE "sys_dict_type" ( | ||
| 107 | "type" varchar(100) NOT NULL DEFAULT '', | 107 | "type" varchar(100) NOT NULL DEFAULT '', |
| 108 | "status" tinyint NOT NULL DEFAULT '0', | 108 | "status" tinyint NOT NULL DEFAULT '0', |
| 109 | "remark" varchar(500) DEFAULT NULL, | 109 | "remark" varchar(500) DEFAULT NULL, |
| 110 | - "create_by" varchar(64) DEFAULT '', | 110 | + "creator" varchar(64) DEFAULT '', |
| 111 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 111 | "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 112 | - "update_by" varchar(64) DEFAULT '', | 112 | + "updater" varchar(64) DEFAULT '', |
| 113 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 113 | "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 114 | "deleted" bit NOT NULL DEFAULT FALSE, | 114 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 115 | PRIMARY KEY ("id") | 115 | PRIMARY KEY ("id") |
| 116 | ) COMMENT '字典类型表'; | 116 | ) COMMENT '字典类型表'; |
| 117 | 117 | ||
| 118 | +CREATE TABLE `sys_user_session` ( | ||
| 119 | + `id` varchar(32) NOT NULL, | ||
| 120 | + `user_id` bigint DEFAULT NULL, | ||
| 121 | + `username` varchar(50) NOT NULL DEFAULT '', | ||
| 122 | + `user_ip` varchar(50) DEFAULT NULL, | ||
| 123 | + `user_agent` varchar(512) DEFAULT NULL, | ||
| 124 | + `session_timeout` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 125 | + "creator" varchar(64) DEFAULT '', | ||
| 126 | + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 127 | + `updater` varchar(64) DEFAULT '' , | ||
| 128 | + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 129 | + "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 130 | + PRIMARY KEY (`id`) | ||
| 131 | +) COMMENT '用户在线 Session'; | ||
| 132 | + | ||
| 133 | +CREATE TABLE IF NOT EXISTS "sys_post" | ||
| 134 | +( | ||
| 135 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 136 | + "code" varchar(64) NOT NULL, | ||
| 137 | + "name" varchar(50) NOT NULL, | ||
| 138 | + "sort" integer NOT NULL, | ||
| 139 | + "status" tinyint NOT NULL, | ||
| 140 | + "remark" varchar(500) DEFAULT NULL, | ||
| 141 | + "creator" varchar(64) DEFAULT '', | ||
| 142 | + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 143 | + "updater" varchar(64) DEFAULT '', | ||
| 144 | + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 145 | + "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 146 | + PRIMARY KEY ("id") | ||
| 147 | +) COMMENT '岗位信息表'; | ||
| 148 | + | ||
| 149 | + | ||
| 150 | +CREATE TABLE IF NOT EXISTS "sys_notice" ( | ||
| 151 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 152 | + "title" varchar(50) NOT NULL COMMENT '公告标题', | ||
| 153 | + "content" text NOT NULL COMMENT '公告内容', | ||
| 154 | + "notice_type" tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', | ||
| 155 | + "status" tinyint NOT NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)', | ||
| 156 | + "creator" varchar(64) DEFAULT '' COMMENT '创建者', | ||
| 157 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 158 | + "updater" varchar(64) DEFAULT '' COMMENT '更新者', | ||
| 159 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | ||
| 160 | + "deleted" bit NOT NULL DEFAULT 0 COMMENT '是否删除', | ||
| 161 | + PRIMARY KEY("id") | ||
| 162 | +) COMMENT '通知公告表'; | ||
| 163 | + | ||
| 164 | + | ||
| 118 | CREATE TABLE IF NOT EXISTS `sys_login_log` ( | 165 | CREATE TABLE IF NOT EXISTS `sys_login_log` ( |
| 119 | `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, | 166 | `id` bigint(20) NOT NULL GENERATED BY DEFAULT AS IDENTITY, |
| 120 | `log_type` bigint(4) NOT NULL, | 167 | `log_type` bigint(4) NOT NULL, |