Commit 27e1fe4468b9c87cb47fd7e51370a37ededcc545
Committed by
Gitee
!23 错误码
Merge pull request !23 from dylan/feature/errorcode
Showing
43 changed files
with
1995 additions
and
22 deletions
README.md
| @@ -37,7 +37,8 @@ | @@ -37,7 +37,8 @@ | ||
| 37 | | | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | | 37 | | | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | |
| 38 | | 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 | | 38 | | 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 | |
| 39 | | 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | | 39 | | 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | |
| 40 | -| | 登录日志 | 系统登录日志记录查询包含登录异常 | | 40 | +| | 登录日志 | 系统登录日志记录查询,包含登录异常 | |
| 41 | +| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | | ||
| 41 | | | 通知公告 | 系统通知公告信息发布维护 | | 42 | | | 通知公告 | 系统通知公告信息发布维护 | |
| 42 | 43 | ||
| 43 | 计划新增功能: | 44 | 计划新增功能: |
| @@ -53,7 +54,7 @@ | @@ -53,7 +54,7 @@ | ||
| 53 | | 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | | 54 | | 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | |
| 54 | | 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | | 55 | | 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | |
| 55 | | | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | | 56 | | | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | |
| 56 | -| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | | 57 | +| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | |
| 57 | | 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | | 58 | | 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | |
| 58 | | 🚀 | 链路追踪 | 基于 SkyWalking 实现性能监控,特别是链路的追踪 | | 59 | | 🚀 | 链路追踪 | 基于 SkyWalking 实现性能监控,特别是链路的追踪 | |
| 59 | | 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | | 60 | | 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | |
| @@ -64,7 +65,6 @@ | @@ -64,7 +65,6 @@ | ||
| 64 | 65 | ||
| 65 | 计划新增: | 66 | 计划新增: |
| 66 | * 工作流 | 67 | * 工作流 |
| 67 | -* 错误码 | ||
| 68 | 68 | ||
| 69 | ### 研发工具 | 69 | ### 研发工具 |
| 70 | 70 |
ruoyi-ui/src/api/system/errorCode.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 创建错误码 | ||
| 4 | +export function createErrorCode(data) { | ||
| 5 | + return request({ | ||
| 6 | + url: '/system/error-code/create', | ||
| 7 | + method: 'post', | ||
| 8 | + data: data | ||
| 9 | + }) | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +// 更新错误码 | ||
| 13 | +export function updateErrorCode(data) { | ||
| 14 | + return request({ | ||
| 15 | + url: '/system/error-code/update', | ||
| 16 | + method: 'put', | ||
| 17 | + data: data | ||
| 18 | + }) | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +// 删除错误码 | ||
| 22 | +export function deleteErrorCode(id) { | ||
| 23 | + return request({ | ||
| 24 | + url: '/system/error-code/delete?id=' + id, | ||
| 25 | + method: 'delete' | ||
| 26 | + }) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// 获得错误码 | ||
| 30 | +export function getErrorCode(id) { | ||
| 31 | + return request({ | ||
| 32 | + url: '/system/error-code/get?id=' + id, | ||
| 33 | + method: 'get' | ||
| 34 | + }) | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// 获得错误码分页 | ||
| 38 | +export function getErrorCodePage(query) { | ||
| 39 | + return request({ | ||
| 40 | + url: '/system/error-code/page', | ||
| 41 | + method: 'get', | ||
| 42 | + params: query | ||
| 43 | + }) | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +// 导出错误码 Excel | ||
| 47 | +export function exportErrorCodeExcel(query) { | ||
| 48 | + return request({ | ||
| 49 | + url: '/system/error-code/export-excel', | ||
| 50 | + method: 'get', | ||
| 51 | + params: query, | ||
| 52 | + responseType: 'blob' | ||
| 53 | + }) | ||
| 54 | +} |
ruoyi-ui/src/utils/dict.js
| @@ -21,6 +21,7 @@ export const DICT_TYPE = { | @@ -21,6 +21,7 @@ export const DICT_TYPE = { | ||
| 21 | SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type', | 21 | SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type', |
| 22 | SYS_SMS_SEND_STATUS: 'sys_sms_send_status', | 22 | SYS_SMS_SEND_STATUS: 'sys_sms_send_status', |
| 23 | SYS_SMS_RECEIVE_STATUS: 'sys_sms_receive_status', | 23 | SYS_SMS_RECEIVE_STATUS: 'sys_sms_receive_status', |
| 24 | + SYS_ERROR_CODE_TYPE: 'sys_error_code_type', | ||
| 24 | 25 | ||
| 25 | INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', | 26 | INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', |
| 26 | INF_JOB_STATUS: 'inf_job_status', | 27 | INF_JOB_STATUS: 'inf_job_status', |
ruoyi-ui/src/views/system/errorCode/index.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="app-container"> | ||
| 3 | + | ||
| 4 | + <!-- 搜索工作栏 --> | ||
| 5 | + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px"> | ||
| 6 | + <el-form-item label="错误码类型" prop="type"> | ||
| 7 | + <el-select v-model="queryParams.type" placeholder="请选择错误码类型" clearable size="small"> | ||
| 8 | + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_ERROR_CODE_TYPE)" | ||
| 9 | + :key="dict.value" :label="dict.label" :value="dict.value"/> | ||
| 10 | + </el-select> | ||
| 11 | + </el-form-item> | ||
| 12 | + <el-form-item label="应用名" prop="applicationName"> | ||
| 13 | + <el-input v-model="queryParams.applicationName" placeholder="请输入应用名" clearable size="small" @keyup.enter.native="handleQuery"/> | ||
| 14 | + </el-form-item> | ||
| 15 | + <el-form-item label="错误码编码" prop="code"> | ||
| 16 | + <el-input v-model="queryParams.code" placeholder="请输入错误码编码" clearable size="small" @keyup.enter.native="handleQuery"/> | ||
| 17 | + </el-form-item> | ||
| 18 | + <el-form-item label="错误码提示" prop="message"> | ||
| 19 | + <el-input v-model="queryParams.message" placeholder="请输入错误码提示" clearable size="small" @keyup.enter.native="handleQuery"/> | ||
| 20 | + </el-form-item> | ||
| 21 | + <el-form-item label="创建时间"> | ||
| 22 | + <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" | ||
| 23 | + type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> | ||
| 24 | + </el-form-item> | ||
| 25 | + <el-form-item> | ||
| 26 | + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||
| 27 | + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||
| 28 | + </el-form-item> | ||
| 29 | + </el-form> | ||
| 30 | + | ||
| 31 | + <!-- 操作工具栏 --> | ||
| 32 | + <el-row :gutter="10" class="mb8"> | ||
| 33 | + <el-col :span="1.5"> | ||
| 34 | + <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" | ||
| 35 | + v-hasPermi="['system:error-code:create']">新增</el-button> | ||
| 36 | + </el-col> | ||
| 37 | + <el-col :span="1.5"> | ||
| 38 | + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" | ||
| 39 | + v-hasPermi="['system:error-code:export']">导出</el-button> | ||
| 40 | + </el-col> | ||
| 41 | + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | ||
| 42 | + </el-row> | ||
| 43 | + | ||
| 44 | + <!-- 列表 --> | ||
| 45 | + <el-table v-loading="loading" :data="list"> | ||
| 46 | + <el-table-column label="编号" align="center" prop="id" /> | ||
| 47 | + <el-table-column label="类型" align="center" prop="type" width="80"> | ||
| 48 | + <template slot-scope="scope"> | ||
| 49 | + <span>{{ getDictDataLabel(DICT_TYPE.SYS_ERROR_CODE_TYPE, scope.row.type) }}</span> | ||
| 50 | + </template> | ||
| 51 | + </el-table-column> | ||
| 52 | + <el-table-column label="应用名" align="center" prop="applicationName" width="200" /> | ||
| 53 | + <el-table-column label="错误码编码" align="center" prop="code" width="100" /> | ||
| 54 | + <el-table-column label="错误码提示" align="center" prop="message" width="300" /> | ||
| 55 | + <el-table-column label="备注" align="center" prop="memo" width="200" /> | ||
| 56 | + <el-table-column label="创建时间" align="center" prop="createTime" width="180"> | ||
| 57 | + <template slot-scope="scope"> | ||
| 58 | + <span>{{ parseTime(scope.row.createTime) }}</span> | ||
| 59 | + </template> | ||
| 60 | + </el-table-column> | ||
| 61 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||
| 62 | + <template slot-scope="scope"> | ||
| 63 | + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" | ||
| 64 | + v-hasPermi="['system:error-code:update']">修改</el-button> | ||
| 65 | + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" | ||
| 66 | + v-hasPermi="['system:error-code:delete']">删除</el-button> | ||
| 67 | + </template> | ||
| 68 | + </el-table-column> | ||
| 69 | + </el-table> | ||
| 70 | + <!-- 分页组件 --> | ||
| 71 | + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" | ||
| 72 | + @pagination="getList"/> | ||
| 73 | + | ||
| 74 | + <!-- 对话框(添加 / 修改) --> | ||
| 75 | + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | ||
| 76 | + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> | ||
| 77 | + <el-form-item label="应用名" prop="applicationName"> | ||
| 78 | + <el-input v-model="form.applicationName" placeholder="请输入应用名" /> | ||
| 79 | + </el-form-item> | ||
| 80 | + <el-form-item label="错误码编码" prop="code"> | ||
| 81 | + <el-input v-model="form.code" placeholder="请输入错误码编码" /> | ||
| 82 | + </el-form-item> | ||
| 83 | + <el-form-item label="错误码提示" prop="message"> | ||
| 84 | + <el-input v-model="form.message" placeholder="请输入错误码提示" /> | ||
| 85 | + </el-form-item> | ||
| 86 | + <el-form-item label="备注" prop="memo"> | ||
| 87 | + <el-input v-model="form.memo" placeholder="请输入备注" /> | ||
| 88 | + </el-form-item> | ||
| 89 | + </el-form> | ||
| 90 | + <div slot="footer" class="dialog-footer"> | ||
| 91 | + <el-button type="primary" @click="submitForm">确 定</el-button> | ||
| 92 | + <el-button @click="cancel">取 消</el-button> | ||
| 93 | + </div> | ||
| 94 | + </el-dialog> | ||
| 95 | + </div> | ||
| 96 | +</template> | ||
| 97 | + | ||
| 98 | +<script> | ||
| 99 | +import { createErrorCode, updateErrorCode, deleteErrorCode, getErrorCode, getErrorCodePage, exportErrorCodeExcel } from "@/api/system/errorCode"; | ||
| 100 | + | ||
| 101 | +export default { | ||
| 102 | + name: "ErrorCode", | ||
| 103 | + components: { | ||
| 104 | + }, | ||
| 105 | + data() { | ||
| 106 | + return { | ||
| 107 | + // 遮罩层 | ||
| 108 | + loading: true, | ||
| 109 | + // 显示搜索条件 | ||
| 110 | + showSearch: true, | ||
| 111 | + // 总条数 | ||
| 112 | + total: 0, | ||
| 113 | + // 错误码列表 | ||
| 114 | + list: [], | ||
| 115 | + // 弹出层标题 | ||
| 116 | + title: "", | ||
| 117 | + // 是否显示弹出层 | ||
| 118 | + open: false, | ||
| 119 | + dateRangeCreateTime: [], | ||
| 120 | + // 查询参数 | ||
| 121 | + queryParams: { | ||
| 122 | + pageNo: 1, | ||
| 123 | + pageSize: 10, | ||
| 124 | + type: null, | ||
| 125 | + applicationName: null, | ||
| 126 | + code: null, | ||
| 127 | + message: null, | ||
| 128 | + }, | ||
| 129 | + // 表单参数 | ||
| 130 | + form: {}, | ||
| 131 | + // 表单校验 | ||
| 132 | + rules: { | ||
| 133 | + applicationName: [{ required: true, message: "应用名不能为空", trigger: "blur" }], | ||
| 134 | + code: [{ required: true, message: "错误码编码不能为空", trigger: "blur" }], | ||
| 135 | + message: [{ required: true, message: "错误码提示不能为空", trigger: "blur" }], | ||
| 136 | + } | ||
| 137 | + }; | ||
| 138 | + }, | ||
| 139 | + created() { | ||
| 140 | + this.getList(); | ||
| 141 | + }, | ||
| 142 | + methods: { | ||
| 143 | + /** 查询列表 */ | ||
| 144 | + getList() { | ||
| 145 | + this.loading = true; | ||
| 146 | + // 处理查询参数 | ||
| 147 | + let params = {...this.queryParams}; | ||
| 148 | + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); | ||
| 149 | + // 执行查询 | ||
| 150 | + getErrorCodePage(params).then(response => { | ||
| 151 | + this.list = response.data.list; | ||
| 152 | + this.total = response.data.total; | ||
| 153 | + this.loading = false; | ||
| 154 | + }); | ||
| 155 | + }, | ||
| 156 | + /** 取消按钮 */ | ||
| 157 | + cancel() { | ||
| 158 | + this.open = false; | ||
| 159 | + this.reset(); | ||
| 160 | + }, | ||
| 161 | + /** 表单重置 */ | ||
| 162 | + reset() { | ||
| 163 | + this.form = { | ||
| 164 | + id: undefined, | ||
| 165 | + applicationName: undefined, | ||
| 166 | + code: undefined, | ||
| 167 | + message: undefined, | ||
| 168 | + memo: undefined, | ||
| 169 | + }; | ||
| 170 | + this.resetForm("form"); | ||
| 171 | + }, | ||
| 172 | + /** 搜索按钮操作 */ | ||
| 173 | + handleQuery() { | ||
| 174 | + this.queryParams.pageNo = 1; | ||
| 175 | + this.getList(); | ||
| 176 | + }, | ||
| 177 | + /** 重置按钮操作 */ | ||
| 178 | + resetQuery() { | ||
| 179 | + this.dateRangeCreateTime = []; | ||
| 180 | + this.resetForm("queryForm"); | ||
| 181 | + this.handleQuery(); | ||
| 182 | + }, | ||
| 183 | + /** 新增按钮操作 */ | ||
| 184 | + handleAdd() { | ||
| 185 | + this.reset(); | ||
| 186 | + this.open = true; | ||
| 187 | + this.title = "添加错误码"; | ||
| 188 | + }, | ||
| 189 | + /** 修改按钮操作 */ | ||
| 190 | + handleUpdate(row) { | ||
| 191 | + this.reset(); | ||
| 192 | + const id = row.id; | ||
| 193 | + getErrorCode(id).then(response => { | ||
| 194 | + this.form = response.data; | ||
| 195 | + this.open = true; | ||
| 196 | + this.title = "修改错误码"; | ||
| 197 | + }); | ||
| 198 | + }, | ||
| 199 | + /** 提交按钮 */ | ||
| 200 | + submitForm() { | ||
| 201 | + this.$refs["form"].validate(valid => { | ||
| 202 | + if (!valid) { | ||
| 203 | + return; | ||
| 204 | + } | ||
| 205 | + // 修改的提交 | ||
| 206 | + if (this.form.id != null) { | ||
| 207 | + updateErrorCode(this.form).then(response => { | ||
| 208 | + this.msgSuccess("修改成功"); | ||
| 209 | + this.open = false; | ||
| 210 | + this.getList(); | ||
| 211 | + }); | ||
| 212 | + return; | ||
| 213 | + } | ||
| 214 | + // 添加的提交 | ||
| 215 | + createErrorCode(this.form).then(response => { | ||
| 216 | + this.msgSuccess("新增成功"); | ||
| 217 | + this.open = false; | ||
| 218 | + this.getList(); | ||
| 219 | + }); | ||
| 220 | + }); | ||
| 221 | + }, | ||
| 222 | + /** 删除按钮操作 */ | ||
| 223 | + handleDelete(row) { | ||
| 224 | + const id = row.id; | ||
| 225 | + this.$confirm('是否确认删除错误码编号为"' + id + '"的数据项?', "警告", { | ||
| 226 | + confirmButtonText: "确定", | ||
| 227 | + cancelButtonText: "取消", | ||
| 228 | + type: "warning" | ||
| 229 | + }).then(function() { | ||
| 230 | + return deleteErrorCode(id); | ||
| 231 | + }).then(() => { | ||
| 232 | + this.getList(); | ||
| 233 | + this.msgSuccess("删除成功"); | ||
| 234 | + }) | ||
| 235 | + }, | ||
| 236 | + /** 导出按钮操作 */ | ||
| 237 | + handleExport() { | ||
| 238 | + // 处理查询参数 | ||
| 239 | + let params = {...this.queryParams}; | ||
| 240 | + params.pageNo = undefined; | ||
| 241 | + params.pageSize = undefined; | ||
| 242 | + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); | ||
| 243 | + // 执行导出 | ||
| 244 | + this.$confirm('是否确认导出所有错误码数据项?', "警告", { | ||
| 245 | + confirmButtonText: "确定", | ||
| 246 | + cancelButtonText: "取消", | ||
| 247 | + type: "warning" | ||
| 248 | + }).then(function() { | ||
| 249 | + return exportErrorCodeExcel(params); | ||
| 250 | + }).then(response => { | ||
| 251 | + this.downloadExcel(response, '错误码.xls'); | ||
| 252 | + }) | ||
| 253 | + } | ||
| 254 | + } | ||
| 255 | +}; | ||
| 256 | +</script> |
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: 18/04/2021 00:36:06 | 14 | + Date: 22/04/2021 00:48:26 |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | SET NAMES utf8mb4; | 17 | SET NAMES utf8mb4; |
| @@ -43,7 +43,7 @@ CREATE TABLE `inf_api_access_log` ( | @@ -43,7 +43,7 @@ CREATE TABLE `inf_api_access_log` ( | ||
| 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=3750 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; | 46 | +) ENGINE=InnoDB AUTO_INCREMENT=4229 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; |
| 47 | 47 | ||
| 48 | -- ---------------------------- | 48 | -- ---------------------------- |
| 49 | -- Records of inf_api_access_log | 49 | -- Records of inf_api_access_log |
| @@ -84,7 +84,7 @@ CREATE TABLE `inf_api_error_log` ( | @@ -84,7 +84,7 @@ CREATE TABLE `inf_api_error_log` ( | ||
| 84 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 84 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 85 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 85 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 86 | PRIMARY KEY (`id`) USING BTREE | 86 | PRIMARY KEY (`id`) USING BTREE |
| 87 | -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; | 87 | +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; |
| 88 | 88 | ||
| 89 | -- ---------------------------- | 89 | -- ---------------------------- |
| 90 | -- Records of inf_api_error_log | 90 | -- Records of inf_api_error_log |
| @@ -118,7 +118,7 @@ CREATE TABLE `inf_config` ( | @@ -118,7 +118,7 @@ CREATE TABLE `inf_config` ( | ||
| 118 | -- ---------------------------- | 118 | -- ---------------------------- |
| 119 | BEGIN; | 119 | BEGIN; |
| 120 | INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-é»˜è®¤çš®è‚¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); | 120 | INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-é»˜è®¤çš®è‚¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', b'0', 'è“色 skin-blueã€ç»¿è‰² skin-greenã€ç´«è‰² skin-purpleã€çº¢è‰² skin-redã€é»„色 skin-yellow', 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); |
| 121 | -INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.initPassword', '123456', b'0', 'åˆå§‹åŒ–密ç 123456', 'admin', '2021-01-05 17:03:48', '', '2021-01-21 02:13:02', b'0'); | 121 | +INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管ç†-è´¦å·åˆå§‹å¯†ç ', 'sys.user.init-password', '123456', b'0', 'åˆå§‹åŒ–密ç 123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); |
| 122 | INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ 主题', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); | 122 | INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-ä¾§è¾¹æ 主题', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); |
| 123 | INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); | 123 | INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); |
| 124 | INSERT INTO `inf_config` VALUES (5, 'xxx', 2, 'xxx', 'xxx', 'xxx', b'1', 'xxx', '', '2021-02-09 20:06:47', '', '2021-02-09 20:06:47', b'0'); | 124 | INSERT INTO `inf_config` VALUES (5, 'xxx', 2, 'xxx', 'xxx', 'xxx', b'1', 'xxx', '', '2021-02-09 20:06:47', '', '2021-02-09 20:06:47', b'0'); |
| @@ -201,7 +201,7 @@ CREATE TABLE `inf_job_log` ( | @@ -201,7 +201,7 @@ CREATE TABLE `inf_job_log` ( | ||
| 201 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 201 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 202 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 202 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 203 | PRIMARY KEY (`id`) USING BTREE | 203 | PRIMARY KEY (`id`) USING BTREE |
| 204 | -) ENGINE=InnoDB AUTO_INCREMENT=2322 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; | 204 | +) ENGINE=InnoDB AUTO_INCREMENT=2527 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; |
| 205 | 205 | ||
| 206 | -- ---------------------------- | 206 | -- ---------------------------- |
| 207 | -- Records of inf_job_log | 207 | -- Records of inf_job_log |
| @@ -264,7 +264,7 @@ CREATE TABLE `sys_dict_data` ( | @@ -264,7 +264,7 @@ CREATE TABLE `sys_dict_data` ( | ||
| 264 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 264 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 265 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 265 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 266 | PRIMARY KEY (`id`) USING BTREE | 266 | PRIMARY KEY (`id`) USING BTREE |
| 267 | -) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8mb4 COMMENT='å—典数æ®è¡¨'; | 267 | +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb4 COMMENT='å—典数æ®è¡¨'; |
| 268 | 268 | ||
| 269 | -- ---------------------------- | 269 | -- ---------------------------- |
| 270 | -- Records of sys_dict_data | 270 | -- Records of sys_dict_data |
| @@ -337,6 +337,8 @@ INSERT INTO `sys_dict_data` VALUES (74, 0, 'ç‰å¾…结果', '0', 'sys_sms_receive | @@ -337,6 +337,8 @@ INSERT INTO `sys_dict_data` VALUES (74, 0, 'ç‰å¾…结果', '0', 'sys_sms_receive | ||
| 337 | INSERT INTO `sys_dict_data` VALUES (75, 1, '接收æˆåŠŸ', '10', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:25', '1', '2021-04-11 20:29:35', b'0'); | 337 | INSERT INTO `sys_dict_data` VALUES (75, 1, '接收æˆåŠŸ', '10', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:25', '1', '2021-04-11 20:29:35', b'0'); |
| 338 | INSERT INTO `sys_dict_data` VALUES (76, 2, '接收失败', '20', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:31', '1', '2021-04-11 20:29:39', b'0'); | 338 | INSERT INTO `sys_dict_data` VALUES (76, 2, '接收失败', '20', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:31', '1', '2021-04-11 20:29:39', b'0'); |
| 339 | INSERT INTO `sys_dict_data` VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-13 00:20:37', '1', '2021-04-13 00:20:37', b'0'); | 339 | INSERT INTO `sys_dict_data` VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-13 00:20:37', '1', '2021-04-13 00:20:37', b'0'); |
| 340 | +INSERT INTO `sys_dict_data` VALUES (78, 1, '自动生æˆ', '1', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:48', '1', '2021-04-13 22:06:44', b'0'); | ||
| 341 | +INSERT INTO `sys_dict_data` VALUES (79, 2, '手动编辑', '2', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:07:14', '1', '2021-04-13 22:06:49', b'0'); | ||
| 340 | COMMIT; | 342 | COMMIT; |
| 341 | 343 | ||
| 342 | -- ---------------------------- | 344 | -- ---------------------------- |
| @@ -356,7 +358,7 @@ CREATE TABLE `sys_dict_type` ( | @@ -356,7 +358,7 @@ CREATE TABLE `sys_dict_type` ( | ||
| 356 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 358 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 357 | PRIMARY KEY (`id`) USING BTREE, | 359 | PRIMARY KEY (`id`) USING BTREE, |
| 358 | UNIQUE KEY `dict_type` (`type`) | 360 | UNIQUE KEY `dict_type` (`type`) |
| 359 | -) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4 COMMENT='å—典类型表'; | 361 | +) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COMMENT='å—典类型表'; |
| 360 | 362 | ||
| 361 | -- ---------------------------- | 363 | -- ---------------------------- |
| 362 | -- Records of sys_dict_type | 364 | -- Records of sys_dict_type |
| @@ -383,6 +385,109 @@ INSERT INTO `sys_dict_type` VALUES (111, 'çŸä¿¡æ¸ é“ç¼–ç ', 'sys_sms_channel_ | @@ -383,6 +385,109 @@ INSERT INTO `sys_dict_type` VALUES (111, 'çŸä¿¡æ¸ é“ç¼–ç ', 'sys_sms_channel_ | ||
| 383 | INSERT INTO `sys_dict_type` VALUES (112, 'çŸä¿¡æ¨¡æ¿çš„类型', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2021-04-05 21:50:43', b'0'); | 385 | INSERT INTO `sys_dict_type` VALUES (112, 'çŸä¿¡æ¨¡æ¿çš„类型', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2021-04-05 21:50:43', b'0'); |
| 384 | INSERT INTO `sys_dict_type` VALUES (113, 'çŸä¿¡å‘é€çжæ€', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2021-04-11 09:30:02', b'0'); | 386 | INSERT INTO `sys_dict_type` VALUES (113, 'çŸä¿¡å‘é€çжæ€', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2021-04-11 09:30:02', b'0'); |
| 385 | INSERT INTO `sys_dict_type` VALUES (114, 'çŸä¿¡æŽ¥æ”¶çжæ€', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2021-04-11 20:27:14', b'0'); | 387 | INSERT INTO `sys_dict_type` VALUES (114, 'çŸä¿¡æŽ¥æ”¶çжæ€', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2021-04-11 20:27:14', b'0'); |
| 388 | +INSERT INTO `sys_dict_type` VALUES (115, '错误ç 的类型', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:30', '1', '2021-04-13 22:07:12', b'0'); | ||
| 389 | +COMMIT; | ||
| 390 | + | ||
| 391 | +-- ---------------------------- | ||
| 392 | +-- Table structure for sys_error_code | ||
| 393 | +-- ---------------------------- | ||
| 394 | +DROP TABLE IF EXISTS `sys_error_code`; | ||
| 395 | +CREATE TABLE `sys_error_code` ( | ||
| 396 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '错误ç ç¼–å·', | ||
| 397 | + `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '错误ç 类型', | ||
| 398 | + `application_name` varchar(50) NOT NULL COMMENT '应用å', | ||
| 399 | + `code` int(11) NOT NULL DEFAULT '0' COMMENT '错误ç ç¼–ç ', | ||
| 400 | + `message` varchar(512) NOT NULL DEFAULT '' COMMENT '错误ç 错误æç¤º', | ||
| 401 | + `memo` varchar(512) DEFAULT '' COMMENT '备注', | ||
| 402 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', | ||
| 403 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 404 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', | ||
| 405 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | ||
| 406 | + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | ||
| 407 | + PRIMARY KEY (`id`) USING BTREE | ||
| 408 | +) ENGINE=InnoDB AUTO_INCREMENT=4016 DEFAULT CHARSET=utf8mb4 COMMENT='错误ç 表'; | ||
| 409 | + | ||
| 410 | +-- ---------------------------- | ||
| 411 | +-- Records of sys_error_code | ||
| 412 | +-- ---------------------------- | ||
| 413 | +BEGIN; | ||
| 414 | +INSERT INTO `sys_error_code` VALUES (3939, 2, 'dashboard', 1001000001, '傿•°é…ç½®ä¸å˜åœ¨', 'ceshi', NULL, '2021-04-20 23:52:56', '1', '2021-04-21 23:44:15', b'0'); | ||
| 415 | +INSERT INTO `sys_error_code` VALUES (3940, 1, 'dashboard', 1001000002, '傿•°é…ç½® key é‡å¤', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 416 | +INSERT INTO `sys_error_code` VALUES (3941, 1, 'dashboard', 1001000003, 'ä¸èƒ½åˆ é™¤ç±»åž‹ä¸ºç³»ç»Ÿå†…ç½®çš„å‚æ•°é…ç½®', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 417 | +INSERT INTO `sys_error_code` VALUES (3942, 1, 'dashboard', 1001000004, 'ä¸å…è®¸èŽ·å–æ•感é…置到å‰ç«¯', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 418 | +INSERT INTO `sys_error_code` VALUES (3943, 1, 'dashboard', 1001001000, '定时任务ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 419 | +INSERT INTO `sys_error_code` VALUES (3944, 1, 'dashboard', 1001001001, '定时任务的处ç†å™¨å·²ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 420 | +INSERT INTO `sys_error_code` VALUES (3945, 1, 'dashboard', 1001001002, 'åªå…è®¸ä¿®æ”¹ä¸ºå¼€å¯æˆ–者关é—状æ€', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 421 | +INSERT INTO `sys_error_code` VALUES (3946, 1, 'dashboard', 1001001003, '定时任务已ç»å¤„于该状æ€ï¼Œæ— 需修改', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); | ||
| 422 | +INSERT INTO `sys_error_code` VALUES (3947, 1, 'dashboard', 1001001004, 'åªæœ‰å¼€å¯çжæ€çš„任务,æ‰å¯ä»¥ä¿®æ”¹', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 423 | +INSERT INTO `sys_error_code` VALUES (3948, 1, 'dashboard', 1001001005, 'CRON 表达å¼ä¸æ£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 424 | +INSERT INTO `sys_error_code` VALUES (3949, 2, 'dashboard', 1001002000, 'API 错误日志ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-13 21:55:55', b'1'); | ||
| 425 | +INSERT INTO `sys_error_code` VALUES (3950, 1, 'dashboard', 1001002001, 'API 错误日志已处ç†', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 426 | +INSERT INTO `sys_error_code` VALUES (3951, 1, 'dashboard', 1001003000, '文件ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 427 | +INSERT INTO `sys_error_code` VALUES (3952, 1, 'dashboard', 1002000000, '登录失败,账å·å¯†ç 䏿£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 428 | +INSERT INTO `sys_error_code` VALUES (3953, 1, 'dashboard', 1002000001, '登录失败,账å·è¢«ç¦ç”¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 429 | +INSERT INTO `sys_error_code` VALUES (3954, 1, 'dashboard', 1002000002, '登录失败', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 430 | +INSERT INTO `sys_error_code` VALUES (3955, 1, 'dashboard', 1002000003, '验è¯ç ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 431 | +INSERT INTO `sys_error_code` VALUES (3956, 1, 'dashboard', 1002000004, '验è¯ç 䏿£ç¡®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 432 | +INSERT INTO `sys_error_code` VALUES (3957, 1, 'dashboard', 1002001000, 'Token å·²ç»è¿‡æœŸ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 433 | +INSERT INTO `sys_error_code` VALUES (3958, 1, 'dashboard', 1002001001, 'Token è§£æžå¤±è´¥', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 434 | +INSERT INTO `sys_error_code` VALUES (3959, 1, 'dashboard', 1002002000, 'å·²ç»å˜åœ¨è¯¥åå—çš„èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 435 | +INSERT INTO `sys_error_code` VALUES (3960, 1, 'dashboard', 1002002001, '父èœå•ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 436 | +INSERT INTO `sys_error_code` VALUES (3961, 1, 'dashboard', 1002002002, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 437 | +INSERT INTO `sys_error_code` VALUES (3962, 1, 'dashboard', 1002002003, 'èœå•ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 438 | +INSERT INTO `sys_error_code` VALUES (3963, 1, 'dashboard', 1002002004, 'å˜åœ¨åèœå•ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 439 | +INSERT INTO `sys_error_code` VALUES (3964, 1, 'dashboard', 1002002005, '父èœå•的类型必须是目录或者èœå•', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 440 | +INSERT INTO `sys_error_code` VALUES (3965, 1, 'dashboard', 1002003000, '角色ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 441 | +INSERT INTO `sys_error_code` VALUES (3966, 1, 'dashboard', 1002003001, 'å·²ç»å˜åœ¨å为ã€{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 442 | +INSERT INTO `sys_error_code` VALUES (3967, 1, 'dashboard', 1002003002, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 443 | +INSERT INTO `sys_error_code` VALUES (3968, 1, 'dashboard', 1002003004, 'ä¸èƒ½æ“作类型为系统内置的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 444 | +INSERT INTO `sys_error_code` VALUES (3969, 1, 'dashboard', 1002004000, '用户账å·å·²ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 445 | +INSERT INTO `sys_error_code` VALUES (3970, 1, 'dashboard', 1002004001, 'å·²ç»å˜åœ¨è¯¥åå—的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 446 | +INSERT INTO `sys_error_code` VALUES (3971, 1, 'dashboard', 1002004002, '父级部门ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 447 | +INSERT INTO `sys_error_code` VALUES (3972, 1, 'dashboard', 1002004003, '用户ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 448 | +INSERT INTO `sys_error_code` VALUES (3973, 1, 'dashboard', 1002004004, 'å˜åœ¨åéƒ¨é—¨ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 449 | +INSERT INTO `sys_error_code` VALUES (3974, 1, 'dashboard', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 450 | +INSERT INTO `sys_error_code` VALUES (3975, 1, 'dashboard', 1002004001, 'å·²ç»å˜åœ¨è¯¥åå—的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 451 | +INSERT INTO `sys_error_code` VALUES (3976, 1, 'dashboard', 1002004002, '父级部门ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 452 | +INSERT INTO `sys_error_code` VALUES (3977, 1, 'dashboard', 1002004003, '当å‰éƒ¨é—¨ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 453 | +INSERT INTO `sys_error_code` VALUES (3978, 1, 'dashboard', 1002004004, 'å˜åœ¨åéƒ¨é—¨ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 454 | +INSERT INTO `sys_error_code` VALUES (3979, 1, 'dashboard', 1002004005, 'ä¸èƒ½è®¾ç½®è‡ªå·±ä¸ºçˆ¶éƒ¨é—¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 455 | +INSERT INTO `sys_error_code` VALUES (3980, 1, 'dashboard', 1002004006, '部门ä¸å˜åœ¨å‘˜å·¥ï¼Œæ— æ³•åˆ é™¤', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 456 | +INSERT INTO `sys_error_code` VALUES (3981, 1, 'dashboard', 1002004007, '部门ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 457 | +INSERT INTO `sys_error_code` VALUES (3982, 1, 'dashboard', 1002004008, 'ä¸èƒ½è®¾ç½®è‡ªå·±çš„å部门为父部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 458 | +INSERT INTO `sys_error_code` VALUES (3983, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 459 | +INSERT INTO `sys_error_code` VALUES (3984, 1, 'dashboard', 1002005002, 'å²—ä½({}) ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 460 | +INSERT INTO `sys_error_code` VALUES (3985, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥åå—的岗ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 461 | +INSERT INTO `sys_error_code` VALUES (3986, 1, 'dashboard', 1002005001, 'å·²ç»å˜åœ¨è¯¥æ ‡è¯†çš„å²—ä½', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 462 | +INSERT INTO `sys_error_code` VALUES (3987, 1, 'dashboard', 1002006001, '当å‰å—典类型ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 463 | +INSERT INTO `sys_error_code` VALUES (3988, 1, 'dashboard', 1002006002, 'å—典类型ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 464 | +INSERT INTO `sys_error_code` VALUES (3989, 1, 'dashboard', 1002006003, 'å·²ç»å˜åœ¨è¯¥åå—çš„å—典类型', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 465 | +INSERT INTO `sys_error_code` VALUES (3990, 1, 'dashboard', 1002006004, 'æ— æ³•åˆ é™¤ï¼Œè¯¥å—典类型还有å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 466 | +INSERT INTO `sys_error_code` VALUES (3991, 1, 'dashboard', 1002006004, 'æ— æ³•åˆ é™¤ï¼Œè¯¥å—典类型还有å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 467 | +INSERT INTO `sys_error_code` VALUES (3992, 1, 'dashboard', 1002007001, '当å‰å—典数æ®ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 468 | +INSERT INTO `sys_error_code` VALUES (3993, 1, 'dashboard', 1002007002, 'å—典数æ®ä¸å¤„于开å¯çжæ€ï¼Œä¸å…许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 469 | +INSERT INTO `sys_error_code` VALUES (3994, 1, 'dashboard', 1002007003, 'å·²ç»å˜åœ¨è¯¥å€¼çš„å—典数æ®', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 470 | +INSERT INTO `sys_error_code` VALUES (3995, 1, 'dashboard', 1002008001, '当å‰é€šçŸ¥å…¬å‘Šä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 471 | +INSERT INTO `sys_error_code` VALUES (3996, 1, 'dashboard', 1002009001, '文件路径已ç»å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-21 00:03:20', b'0'); | ||
| 472 | +INSERT INTO `sys_error_code` VALUES (3997, 1, 'dashboard', 1002009002, 'æ–‡ä»¶ä¸Šä¼ å¤±è´¥', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 473 | +INSERT INTO `sys_error_code` VALUES (3998, 1, 'dashboard', 1002009003, '文件为空', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 474 | +INSERT INTO `sys_error_code` VALUES (3999, 1, 'dashboard', 1002011000, 'çŸä¿¡æ¨¡æ¿ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 475 | +INSERT INTO `sys_error_code` VALUES (4000, 1, 'dashboard', 1002011001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 476 | +INSERT INTO `sys_error_code` VALUES (4001, 2, 'dashboard', 1002011002, 'æ— æ³•åˆ é™¤ï¼Œè¯¥çŸä¿¡æ¸ é“还有çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-22 00:06:52', b'0'); | ||
| 477 | +INSERT INTO `sys_error_code` VALUES (4002, 1, 'dashboard', 1002011000, 'çŸä¿¡æ¨¡æ¿ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 478 | +INSERT INTO `sys_error_code` VALUES (4003, 1, 'dashboard', 1002011001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的çŸä¿¡æ¨¡æ¿', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 479 | +INSERT INTO `sys_error_code` VALUES (4004, 1, 'dashboard', 1002012000, '手机å·ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 480 | +INSERT INTO `sys_error_code` VALUES (4005, 1, 'dashboard', 1002012001, '模æ¿å‚æ•°({})缺失', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 481 | +INSERT INTO `sys_error_code` VALUES (4006, 1, 'dashboard', 1002009000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 482 | +INSERT INTO `sys_error_code` VALUES (4007, 1, 'dashboard', 1002009001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}}】的错误ç ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 483 | +INSERT INTO `sys_error_code` VALUES (4008, 1, 'dashboard', 1002004003, 'ä¸èƒ½ä¿®æ”¹ç±»åž‹ä¸ºç³»ç»Ÿå†…置的错误ç ', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); | ||
| 484 | +INSERT INTO `sys_error_code` VALUES (4009, 1, 'dashboard', 1001004000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); | ||
| 485 | +INSERT INTO `sys_error_code` VALUES (4010, 1, 'dashboard', 1001004001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的错误ç ', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 23:48:44', b'0'); | ||
| 486 | +INSERT INTO `sys_error_code` VALUES (4011, 1, 'dashboard', 1001004002, 'ä¸èƒ½ä¿®æ”¹ç±»åž‹ä¸ºç³»ç»Ÿå†…置的错误ç ', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); | ||
| 487 | +INSERT INTO `sys_error_code` VALUES (4012, 2, 'dashboard', 1201002000, '啦啦啦啦', 'biubiub', '1', '2021-04-21 23:46:02', '1', '2021-04-21 23:46:02', b'0'); | ||
| 488 | +INSERT INTO `sys_error_code` VALUES (4013, 1, 'dashboard', 1001002000, 'API 错误日志ä¸å˜åœ¨', '', NULL, '2021-04-21 23:48:44', NULL, '2021-04-21 23:48:44', b'0'); | ||
| 489 | +INSERT INTO `sys_error_code` VALUES (4014, 1, 'dashboard', 1002013000, '错误ç ä¸å˜åœ¨', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 490 | +INSERT INTO `sys_error_code` VALUES (4015, 1, 'dashboard', 1002013001, 'å·²ç»å˜åœ¨ç¼–ç 为ã€{}】的错误ç ', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); | ||
| 386 | COMMIT; | 491 | COMMIT; |
| 387 | 492 | ||
| 388 | -- ---------------------------- | 493 | -- ---------------------------- |
| @@ -403,7 +508,7 @@ CREATE TABLE `sys_login_log` ( | @@ -403,7 +508,7 @@ CREATE TABLE `sys_login_log` ( | ||
| 403 | `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 'æ›´æ–°æ—¶é—´', |
| 404 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 509 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 405 | PRIMARY KEY (`id`) USING BTREE | 510 | PRIMARY KEY (`id`) USING BTREE |
| 406 | -) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; | 511 | +) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; |
| 407 | 512 | ||
| 408 | -- ---------------------------- | 513 | -- ---------------------------- |
| 409 | -- Records of sys_login_log | 514 | -- Records of sys_login_log |
| @@ -432,7 +537,7 @@ CREATE TABLE `sys_menu` ( | @@ -432,7 +537,7 @@ CREATE TABLE `sys_menu` ( | ||
| 432 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 537 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 433 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 538 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 434 | PRIMARY KEY (`id`) USING BTREE | 539 | PRIMARY KEY (`id`) USING BTREE |
| 435 | -) ENGINE=InnoDB AUTO_INCREMENT=1110 DEFAULT CHARSET=utf8mb4 COMMENT='èœå•æƒé™è¡¨'; | 540 | +) ENGINE=InnoDB AUTO_INCREMENT=1116 DEFAULT CHARSET=utf8mb4 COMMENT='èœå•æƒé™è¡¨'; |
| 436 | 541 | ||
| 437 | -- ---------------------------- | 542 | -- ---------------------------- |
| 438 | -- Records of sys_menu | 543 | -- Records of sys_menu |
| @@ -563,6 +668,12 @@ INSERT INTO `sys_menu` VALUES (1106, 'å‘逿µ‹è¯•çŸä¿¡', 'system:sms-template: | @@ -563,6 +668,12 @@ INSERT INTO `sys_menu` VALUES (1106, 'å‘逿µ‹è¯•çŸä¿¡', 'system:sms-template: | ||
| 563 | INSERT INTO `sys_menu` VALUES (1107, 'çŸä¿¡æ—¥å¿—', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, '', '2021-04-11 08:37:05', '1', '2021-04-11 19:34:25', b'0'); | 668 | INSERT INTO `sys_menu` VALUES (1107, 'çŸä¿¡æ—¥å¿—', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, '', '2021-04-11 08:37:05', '1', '2021-04-11 19:34:25', b'0'); |
| 564 | INSERT INTO `sys_menu` VALUES (1108, 'çŸä¿¡æ—¥å¿—查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); | 669 | INSERT INTO `sys_menu` VALUES (1108, 'çŸä¿¡æ—¥å¿—查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); |
| 565 | INSERT INTO `sys_menu` VALUES (1109, 'çŸä¿¡æ—¥å¿—导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); | 670 | INSERT INTO `sys_menu` VALUES (1109, 'çŸä¿¡æ—¥å¿—导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); |
| 671 | +INSERT INTO `sys_menu` VALUES (1110, '错误ç 管ç†', '', 2, 12, 1, 'error-code', 'code', 'system/errorCode/index', 0, '', '2021-04-13 21:46:42', '1', '2021-04-22 00:04:35', b'0'); | ||
| 672 | +INSERT INTO `sys_menu` VALUES (1111, 'é”™è¯¯ç æŸ¥è¯¢', 'system:error-code:query', 3, 1, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:37', b'0'); | ||
| 673 | +INSERT INTO `sys_menu` VALUES (1112, '错误ç 创建', 'system:error-code:create', 3, 2, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:43', b'0'); | ||
| 674 | +INSERT INTO `sys_menu` VALUES (1113, 'é”™è¯¯ç æ›´æ–°', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:47', b'0'); | ||
| 675 | +INSERT INTO `sys_menu` VALUES (1114, '错误ç åˆ é™¤', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0'); | ||
| 676 | +INSERT INTO `sys_menu` VALUES (1115, '错误ç 导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0'); | ||
| 566 | COMMIT; | 677 | COMMIT; |
| 567 | 678 | ||
| 568 | -- ---------------------------- | 679 | -- ---------------------------- |
| @@ -622,7 +733,7 @@ CREATE TABLE `sys_operate_log` ( | @@ -622,7 +733,7 @@ CREATE TABLE `sys_operate_log` ( | ||
| 622 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 733 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 623 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 734 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 624 | PRIMARY KEY (`id`) USING BTREE | 735 | PRIMARY KEY (`id`) USING BTREE |
| 625 | -) ENGINE=InnoDB AUTO_INCREMENT=177 DEFAULT CHARSET=utf8mb4 COMMENT='æ“作日志记录'; | 736 | +) ENGINE=InnoDB AUTO_INCREMENT=193 DEFAULT CHARSET=utf8mb4 COMMENT='æ“作日志记录'; |
| 626 | 737 | ||
| 627 | -- ---------------------------- | 738 | -- ---------------------------- |
| 628 | -- Records of sys_operate_log | 739 | -- Records of sys_operate_log |
| @@ -933,7 +1044,7 @@ CREATE TABLE `sys_sms_log` ( | @@ -933,7 +1044,7 @@ CREATE TABLE `sys_sms_log` ( | ||
| 933 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1044 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 934 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1045 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 935 | PRIMARY KEY (`id`) USING BTREE | 1046 | PRIMARY KEY (`id`) USING BTREE |
| 936 | -) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COMMENT='çŸä¿¡æ—¥å¿—'; | 1047 | +) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COMMENT='çŸä¿¡æ—¥å¿—'; |
| 937 | 1048 | ||
| 938 | -- ---------------------------- | 1049 | -- ---------------------------- |
| 939 | -- Records of sys_sms_log | 1050 | -- Records of sys_sms_log |
| @@ -1074,6 +1185,7 @@ INSERT INTO `sys_user_session` VALUES ('12166cd28b4f448ea468d13c471dfc6e', 1, '2 | @@ -1074,6 +1185,7 @@ INSERT INTO `sys_user_session` VALUES ('12166cd28b4f448ea468d13c471dfc6e', 1, '2 | ||
| 1074 | INSERT INTO `sys_user_session` VALUES ('134d908ae33146bd9b5291471c04f604', 1, '2021-04-10 00:29:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-09 23:10:26', NULL, '2021-04-02 08:08:17', b'1'); | 1185 | INSERT INTO `sys_user_session` VALUES ('134d908ae33146bd9b5291471c04f604', 1, '2021-04-10 00:29:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-09 23:10:26', NULL, '2021-04-02 08:08:17', b'1'); |
| 1075 | INSERT INTO `sys_user_session` VALUES ('1407ce21e47947b9b8d93bff1b55c7d6', 1, '2021-04-07 01:09:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-07 00:07:43', NULL, '2021-04-01 18:10:44', b'1'); | 1186 | INSERT INTO `sys_user_session` VALUES ('1407ce21e47947b9b8d93bff1b55c7d6', 1, '2021-04-07 01:09:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-07 00:07:43', NULL, '2021-04-01 18:10:44', b'1'); |
| 1076 | INSERT INTO `sys_user_session` VALUES ('1477c38290ff4cee8887ebfe593faa02', 1, '2021-04-17 23:34:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 23:04:57', NULL, '2021-04-12 21:36:29', b'1'); | 1187 | INSERT INTO `sys_user_session` VALUES ('1477c38290ff4cee8887ebfe593faa02', 1, '2021-04-17 23:34:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 23:04:57', NULL, '2021-04-12 21:36:29', b'1'); |
| 1188 | +INSERT INTO `sys_user_session` VALUES ('347ec49c06d74d138a95266cbb5535a0', 1, '2021-04-21 00:45:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 00:03:50', NULL, '2021-04-13 18:38:39', b'1'); | ||
| 1077 | INSERT INTO `sys_user_session` VALUES ('3c75ea73e13b4857a18eb57ca2eea80f', 1, '2021-04-11 20:06:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:36:52', NULL, '2021-04-11 09:10:53', b'1'); | 1189 | INSERT INTO `sys_user_session` VALUES ('3c75ea73e13b4857a18eb57ca2eea80f', 1, '2021-04-11 20:06:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:36:52', NULL, '2021-04-11 09:10:53', b'1'); |
| 1078 | INSERT INTO `sys_user_session` VALUES ('40d532d8900c43b791266429a7911751', 1, '2021-04-05 22:11:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 21:41:34', NULL, '2021-04-01 12:28:20', b'1'); | 1190 | INSERT INTO `sys_user_session` VALUES ('40d532d8900c43b791266429a7911751', 1, '2021-04-05 22:11:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 21:41:34', NULL, '2021-04-01 12:28:20', b'1'); |
| 1079 | INSERT INTO `sys_user_session` VALUES ('43676e85d0e04980b2a67181f8d9933b', 1, '2021-04-11 10:41:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:56:31', NULL, '2021-04-02 17:32:07', b'1'); | 1191 | INSERT INTO `sys_user_session` VALUES ('43676e85d0e04980b2a67181f8d9933b', 1, '2021-04-11 10:41:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:56:31', NULL, '2021-04-02 17:32:07', b'1'); |
| @@ -1084,16 +1196,22 @@ INSERT INTO `sys_user_session` VALUES ('5c30d80eb72048daa1a24d3d4f01317b', 1, '2 | @@ -1084,16 +1196,22 @@ INSERT INTO `sys_user_session` VALUES ('5c30d80eb72048daa1a24d3d4f01317b', 1, '2 | ||
| 1084 | INSERT INTO `sys_user_session` VALUES ('5dca80a5c61541479a4dbb6e004c2e28', 1, '2021-04-14 00:57:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 23:38:30', NULL, '2021-04-12 17:33:48', b'1'); | 1196 | INSERT INTO `sys_user_session` VALUES ('5dca80a5c61541479a4dbb6e004c2e28', 1, '2021-04-14 00:57:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 23:38:30', NULL, '2021-04-12 17:33:48', b'1'); |
| 1085 | INSERT INTO `sys_user_session` VALUES ('7324a76b029a49ee95bf54ceb4164ba9', 1, '2021-04-13 01:29:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 00:18:40', NULL, '2021-04-11 23:15:00', b'1'); | 1197 | INSERT INTO `sys_user_session` VALUES ('7324a76b029a49ee95bf54ceb4164ba9', 1, '2021-04-13 01:29:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 00:18:40', NULL, '2021-04-11 23:15:00', b'1'); |
| 1086 | INSERT INTO `sys_user_session` VALUES ('749619894bc441bb9773902515f81e6a', 1, '2021-04-11 00:39:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 00:09:51', NULL, '2021-04-02 16:50:56', b'1'); | 1198 | INSERT INTO `sys_user_session` VALUES ('749619894bc441bb9773902515f81e6a', 1, '2021-04-11 00:39:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 00:09:51', NULL, '2021-04-02 16:50:56', b'1'); |
| 1199 | +INSERT INTO `sys_user_session` VALUES ('750dca41b315488b8c17e1c0f8b6a519', 1, '2021-04-21 01:24:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 00:54:28', NULL, '2021-04-13 21:42:10', b'1'); | ||
| 1087 | INSERT INTO `sys_user_session` VALUES ('7768ae62ad974fd989f5159649a4be82', 1, '2021-04-11 00:53:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-10 23:23:27', NULL, '2021-04-02 17:04:58', b'1'); | 1200 | INSERT INTO `sys_user_session` VALUES ('7768ae62ad974fd989f5159649a4be82', 1, '2021-04-11 00:53:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-10 23:23:27', NULL, '2021-04-02 17:04:58', b'1'); |
| 1088 | INSERT INTO `sys_user_session` VALUES ('79efcb8f64aa42af9f4b327fb383532f', 1, '2021-04-11 22:44:07', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 21:34:53', NULL, '2021-04-11 14:10:45', b'1'); | 1201 | INSERT INTO `sys_user_session` VALUES ('79efcb8f64aa42af9f4b327fb383532f', 1, '2021-04-11 22:44:07', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 21:34:53', NULL, '2021-04-11 14:10:45', b'1'); |
| 1202 | +INSERT INTO `sys_user_session` VALUES ('83b227ad356f4343b01d321ad26807ce', 1, '2021-04-22 00:49:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 23:33:02', NULL, '2021-04-22 00:19:12', b'0'); | ||
| 1089 | INSERT INTO `sys_user_session` VALUES ('87d5b95fdad9447189a95abf8a5152df', 1, '2021-04-17 23:01:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 22:31:18', NULL, '2021-04-12 21:03:27', b'1'); | 1203 | INSERT INTO `sys_user_session` VALUES ('87d5b95fdad9447189a95abf8a5152df', 1, '2021-04-17 23:01:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 22:31:18', NULL, '2021-04-12 21:03:27', b'1'); |
| 1090 | INSERT INTO `sys_user_session` VALUES ('8b3eac5e4a104a4191c8070e03d553ea', 1, '2021-04-05 02:45:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 02:15:12', NULL, '2021-04-01 11:05:25', b'1'); | 1204 | INSERT INTO `sys_user_session` VALUES ('8b3eac5e4a104a4191c8070e03d553ea', 1, '2021-04-05 02:45:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 02:15:12', NULL, '2021-04-01 11:05:25', b'1'); |
| 1091 | INSERT INTO `sys_user_session` VALUES ('9ae27346d8b7491aad1385f51e8aa196', 1, '2021-03-13 14:02:12', '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-13 10:43:06', NULL, '2021-03-13 06:40:35', b'1'); | 1205 | INSERT INTO `sys_user_session` VALUES ('9ae27346d8b7491aad1385f51e8aa196', 1, '2021-03-13 14:02:12', '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-13 10:43:06', NULL, '2021-03-13 06:40:35', b'1'); |
| 1092 | INSERT INTO `sys_user_session` VALUES ('a2fb443b31c049008975ff8ee5499db1', 1, '2021-04-11 09:42:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:12:09', NULL, '2021-04-02 17:16:00', b'1'); | 1206 | INSERT INTO `sys_user_session` VALUES ('a2fb443b31c049008975ff8ee5499db1', 1, '2021-04-11 09:42:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:12:09', NULL, '2021-04-02 17:16:00', b'1'); |
| 1093 | INSERT INTO `sys_user_session` VALUES ('a71a74adf9d141e2849d2a411d558205', 1, '2021-04-17 18:24:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 17:54:44', NULL, '2021-04-12 17:54:50', b'1'); | 1207 | INSERT INTO `sys_user_session` VALUES ('a71a74adf9d141e2849d2a411d558205', 1, '2021-04-17 18:24:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 17:54:44', NULL, '2021-04-12 17:54:50', b'1'); |
| 1208 | +INSERT INTO `sys_user_session` VALUES ('ab2099c12f5c4b0288c60abe8cfff307', 1, '2021-04-18 01:41:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 01:01:35', NULL, '2021-04-13 05:14:54', b'1'); | ||
| 1094 | INSERT INTO `sys_user_session` VALUES ('ae9ee7452ee54e4b983d658188c15c4d', 1, '2021-03-14 21:32:57', '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-14 20:25:00', NULL, '2021-03-13 15:19:10', b'1'); | 1209 | INSERT INTO `sys_user_session` VALUES ('ae9ee7452ee54e4b983d658188c15c4d', 1, '2021-03-14 21:32:57', '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-14 20:25:00', NULL, '2021-03-13 15:19:10', b'1'); |
| 1095 | INSERT INTO `sys_user_session` VALUES ('b727853eccea4c8589e006ffea985146', 1, '2021-04-12 01:36:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-12 01:06:00', NULL, '2021-04-11 19:40:07', b'1'); | 1210 | INSERT INTO `sys_user_session` VALUES ('b727853eccea4c8589e006ffea985146', 1, '2021-04-12 01:36:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-12 01:06:00', NULL, '2021-04-11 19:40:07', b'1'); |
| 1211 | +INSERT INTO `sys_user_session` VALUES ('b9ee6fde7bf74ed49cad99abf86c94d6', 1, '2021-04-18 20:21:02', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 19:18:52', NULL, '2021-04-13 06:36:39', b'1'); | ||
| 1212 | +INSERT INTO `sys_user_session` VALUES ('bb4ad4579bd1436c859b94228967582f', 1, '2021-04-18 20:52:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 20:22:38', NULL, '2021-04-13 07:14:58', b'1'); | ||
| 1096 | INSERT INTO `sys_user_session` VALUES ('c095616db95044c5bed66a3f84519b8b', 1, '2021-04-11 19:59:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:29:33', NULL, '2021-04-11 09:04:19', b'1'); | 1213 | INSERT INTO `sys_user_session` VALUES ('c095616db95044c5bed66a3f84519b8b', 1, '2021-04-11 19:59:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:29:33', NULL, '2021-04-11 09:04:19', b'1'); |
| 1214 | +INSERT INTO `sys_user_session` VALUES ('c8805f37eb76432c89d6d54feb14756f', 1, '2021-04-18 21:54:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 21:00:38', NULL, '2021-04-13 17:45:30', b'1'); | ||
| 1097 | INSERT INTO `sys_user_session` VALUES ('d0adf48f82914212b947e5ab04d9fb65', 1, '2021-03-21 19:16:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-03-21 18:13:37', NULL, '2021-03-15 05:53:20', b'1'); | 1215 | INSERT INTO `sys_user_session` VALUES ('d0adf48f82914212b947e5ab04d9fb65', 1, '2021-03-21 19:16:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-03-21 18:13:37', NULL, '2021-03-15 05:53:20', b'1'); |
| 1098 | INSERT INTO `sys_user_session` VALUES ('dfbce0af867547f4bb01ac6f2e583337', 1, '2021-04-11 17:06:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:15', NULL, '2021-04-11 08:24:03', b'1'); | 1216 | INSERT INTO `sys_user_session` VALUES ('dfbce0af867547f4bb01ac6f2e583337', 1, '2021-04-11 17:06:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:15', NULL, '2021-04-11 08:24:03', b'1'); |
| 1099 | INSERT INTO `sys_user_session` VALUES ('e5ecf10e40a5463b8f9b5b453cb1649b', 1, '2021-04-11 17:06:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:22', NULL, '2021-04-11 08:24:03', b'1'); | 1217 | INSERT INTO `sys_user_session` VALUES ('e5ecf10e40a5463b8f9b5b453cb1649b', 1, '2021-04-11 17:06:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:22', NULL, '2021-04-11 08:24:03', b'1'); |
| @@ -1134,7 +1252,7 @@ CREATE TABLE `tool_codegen_column` ( | @@ -1134,7 +1252,7 @@ CREATE TABLE `tool_codegen_column` ( | ||
| 1134 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1252 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1135 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1253 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1136 | PRIMARY KEY (`id`) USING BTREE | 1254 | PRIMARY KEY (`id`) USING BTREE |
| 1137 | -) ENGINE=InnoDB AUTO_INCREMENT=447 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å—段定义'; | 1255 | +) ENGINE=InnoDB AUTO_INCREMENT=458 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å—段定义'; |
| 1138 | 1256 | ||
| 1139 | -- ---------------------------- | 1257 | -- ---------------------------- |
| 1140 | -- Records of tool_codegen_column | 1258 | -- Records of tool_codegen_column |
| @@ -1354,6 +1472,17 @@ INSERT INTO `tool_codegen_column` VALUES (443, 36, 'create_time', 'datetime', 'å | @@ -1354,6 +1472,17 @@ INSERT INTO `tool_codegen_column` VALUES (443, 36, 'create_time', 'datetime', 'å | ||
| 1354 | INSERT INTO `tool_codegen_column` VALUES (444, 36, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); | 1472 | INSERT INTO `tool_codegen_column` VALUES (444, 36, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); |
| 1355 | INSERT INTO `tool_codegen_column` VALUES (445, 36, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); | 1473 | INSERT INTO `tool_codegen_column` VALUES (445, 36, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); |
| 1356 | INSERT INTO `tool_codegen_column` VALUES (446, 36, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); | 1474 | INSERT INTO `tool_codegen_column` VALUES (446, 36, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); |
| 1475 | +INSERT INTO `tool_codegen_column` VALUES (447, 37, 'id', 'bigint(20)', '错误ç ç¼–å·', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1476 | +INSERT INTO `tool_codegen_column` VALUES (448, 37, 'type', 'tinyint(4)', '错误ç 类型', b'0', b'0', '0', 2, 'Integer', 'type', 'inf_error_code_type', '1', b'0', b'0', b'1', '=', b'1', 'select', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1477 | +INSERT INTO `tool_codegen_column` VALUES (449, 37, 'application_name', 'varchar(50)', '应用å', b'0', b'0', '0', 3, 'String', 'applicationName', '', 'dashboard', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1478 | +INSERT INTO `tool_codegen_column` VALUES (450, 37, 'code', 'int(11)', '错误ç ç¼–ç ', b'0', b'0', '0', 4, 'Integer', 'code', '', '1234', b'1', b'1', b'1', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1479 | +INSERT INTO `tool_codegen_column` VALUES (451, 37, 'message', 'varchar(512)', '错误ç 错误æç¤º', b'0', b'0', '0', 5, 'String', 'message', '', '帅气', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1480 | +INSERT INTO `tool_codegen_column` VALUES (452, 37, 'memo', 'varchar(512)', '备注', b'1', b'0', '0', 6, 'String', 'memo', '', '哈哈哈', b'1', b'1', b'0', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1481 | +INSERT INTO `tool_codegen_column` VALUES (453, 37, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1482 | +INSERT INTO `tool_codegen_column` VALUES (454, 37, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1483 | +INSERT INTO `tool_codegen_column` VALUES (455, 37, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1484 | +INSERT INTO `tool_codegen_column` VALUES (456, 37, 'update_time', 'datetime', 'æ›´æ–°æ—¶é—´', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1485 | +INSERT INTO `tool_codegen_column` VALUES (457, 37, 'deleted', 'bit(1)', '是å¦åˆ 除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1357 | COMMIT; | 1486 | COMMIT; |
| 1358 | 1487 | ||
| 1359 | -- ---------------------------- | 1488 | -- ---------------------------- |
| @@ -1379,7 +1508,7 @@ CREATE TABLE `tool_codegen_table` ( | @@ -1379,7 +1508,7 @@ CREATE TABLE `tool_codegen_table` ( | ||
| 1379 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', | 1508 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ›´æ–°æ—¶é—´', |
| 1380 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', | 1509 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是å¦åˆ 除', |
| 1381 | PRIMARY KEY (`id`) USING BTREE | 1510 | PRIMARY KEY (`id`) USING BTREE |
| 1382 | -) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å®šä¹‰'; | 1511 | +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COMMENT='代ç 生æˆè¡¨å®šä¹‰'; |
| 1383 | 1512 | ||
| 1384 | -- ---------------------------- | 1513 | -- ---------------------------- |
| 1385 | -- Records of tool_codegen_table | 1514 | -- Records of tool_codegen_table |
| @@ -1400,6 +1529,7 @@ INSERT INTO `tool_codegen_table` VALUES (33, 1, 'inf_file', '文件表', NULL, ' | @@ -1400,6 +1529,7 @@ INSERT INTO `tool_codegen_table` VALUES (33, 1, 'inf_file', '文件表', NULL, ' | ||
| 1400 | INSERT INTO `tool_codegen_table` VALUES (34, 1, 'sys_sms_channel', 'çŸä¿¡æ¸ é“', NULL, 'system', 'sms', 'SysSmsChannel', 'çŸä¿¡æ¸ é“', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-03 13:39:06', '1', '2021-04-05 20:52:09', b'0'); | 1529 | INSERT INTO `tool_codegen_table` VALUES (34, 1, 'sys_sms_channel', 'çŸä¿¡æ¸ é“', NULL, 'system', 'sms', 'SysSmsChannel', 'çŸä¿¡æ¸ é“', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-03 13:39:06', '1', '2021-04-05 20:52:09', b'0'); |
| 1401 | INSERT INTO `tool_codegen_table` VALUES (35, 1, 'sys_sms_template', 'çŸä¿¡æ¨¡æ¿', NULL, 'system', 'sms', 'SysSmsTemplate', 'çŸä¿¡æ¨¡æ¿', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-03 13:58:55', '1', '2021-04-05 22:23:38', b'0'); | 1530 | INSERT INTO `tool_codegen_table` VALUES (35, 1, 'sys_sms_template', 'çŸä¿¡æ¨¡æ¿', NULL, 'system', 'sms', 'SysSmsTemplate', 'çŸä¿¡æ¨¡æ¿', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-03 13:58:55', '1', '2021-04-05 22:23:38', b'0'); |
| 1402 | INSERT INTO `tool_codegen_table` VALUES (36, 1, 'sys_sms_log', 'çŸä¿¡æ—¥å¿—', NULL, 'system', 'sms', 'SysSmsLog', 'çŸä¿¡æ—¥å¿—', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-11 01:12:57', '1', '2021-04-11 20:33:54', b'0'); | 1531 | INSERT INTO `tool_codegen_table` VALUES (36, 1, 'sys_sms_log', 'çŸä¿¡æ—¥å¿—', NULL, 'system', 'sms', 'SysSmsLog', 'çŸä¿¡æ—¥å¿—', 'èŠ‹é“æºç ', 1, 1093, '1', '2021-04-11 01:12:57', '1', '2021-04-11 20:33:54', b'0'); |
| 1532 | +INSERT INTO `tool_codegen_table` VALUES (37, 1, 'inf_error_code', '错误ç 表', NULL, 'infra', 'errorcode', 'InfErrorCode', '错误ç ', 'èŠ‹é“æºç ', 1, 2, '1', '2021-04-20 15:27:45', '1', '2021-04-21 00:55:37', b'0'); | ||
| 1403 | COMMIT; | 1533 | COMMIT; |
| 1404 | 1534 | ||
| 1405 | -- ---------------------------- | 1535 | -- ---------------------------- |
src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.config; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.errorcode.core.generator.ErrorCodeAutoGenerator; | ||
| 4 | +import cn.iocoder.dashboard.framework.errorcode.core.loader.ErrorCodeLoader; | ||
| 5 | +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; | ||
| 6 | +import cn.iocoder.dashboard.framework.errorcode.core.loader.ErrorCodeLoaderImpl; | ||
| 7 | +import cn.iocoder.dashboard.framework.errorcode.core.generator.ErrorCodeAutoGeneratorImpl; | ||
| 8 | +import org.springframework.beans.factory.annotation.Value; | ||
| 9 | +import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||
| 10 | +import org.springframework.context.annotation.Bean; | ||
| 11 | +import org.springframework.context.annotation.Configuration; | ||
| 12 | +import org.springframework.scheduling.annotation.EnableScheduling; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 错误码配置类 | ||
| 16 | + */ | ||
| 17 | +@Configuration | ||
| 18 | +@EnableConfigurationProperties(ErrorCodeProperties.class) | ||
| 19 | +@EnableScheduling // 开启调度任务的功能,因为 ErrorCodeRemoteLoader 通过定时刷新错误码 | ||
| 20 | +public class ErrorCodeConfiguration { | ||
| 21 | + | ||
| 22 | + @Bean | ||
| 23 | + public ErrorCodeAutoGenerator errorCodeAutoGenerator(@Value("${spring.application.name}") String applicationName, | ||
| 24 | + ErrorCodeProperties errorCodeProperties, | ||
| 25 | + ErrorCodeFrameworkService errorCodeFrameworkService) { | ||
| 26 | + return new ErrorCodeAutoGeneratorImpl(applicationName, errorCodeProperties.getConstantsClassList(), | ||
| 27 | + errorCodeFrameworkService); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + @Bean | ||
| 31 | + public ErrorCodeLoader errorCodeLoader(@Value("${spring.application.name}") String applicationName, | ||
| 32 | + ErrorCodeFrameworkService errorCodeFrameworkService) { | ||
| 33 | + return new ErrorCodeLoaderImpl(applicationName, errorCodeFrameworkService); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.config; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | +import org.springframework.boot.context.properties.ConfigurationProperties; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 错误码的配置属性类 | ||
| 12 | + * | ||
| 13 | + * @author dlyan | ||
| 14 | + */ | ||
| 15 | +@ConfigurationProperties("yudao.error-code") | ||
| 16 | +@Data | ||
| 17 | +@Validated | ||
| 18 | +public class ErrorCodeProperties { | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * 错误码枚举类 | ||
| 22 | + */ | ||
| 23 | + @NotNull(message = "错误码枚举类不能为空") | ||
| 24 | + private List<String> constantsClassList; | ||
| 25 | + | ||
| 26 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.dto; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | +import lombok.experimental.Accessors; | ||
| 5 | + | ||
| 6 | +import javax.validation.constraints.NotEmpty; | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 错误码自动生成 DTO | ||
| 11 | + * | ||
| 12 | + * @author dylan | ||
| 13 | + */ | ||
| 14 | +@Data | ||
| 15 | +@Accessors(chain = true) | ||
| 16 | +public class ErrorCodeAutoGenerateReqDTO { | ||
| 17 | + | ||
| 18 | + /** | ||
| 19 | + * 应用名 | ||
| 20 | + */ | ||
| 21 | + @NotNull(message = "应用名不能为空") | ||
| 22 | + private String applicationName; | ||
| 23 | + /** | ||
| 24 | + * 错误码编码 | ||
| 25 | + */ | ||
| 26 | + @NotNull(message = "错误码编码不能为空") | ||
| 27 | + private Integer code; | ||
| 28 | + /** | ||
| 29 | + * 错误码错误提示 | ||
| 30 | + */ | ||
| 31 | + @NotEmpty(message = "错误码错误提示不能为空") | ||
| 32 | + private String message; | ||
| 33 | + | ||
| 34 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.dto; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | + | ||
| 5 | +import java.util.Date; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 错误码的 Response DTO | ||
| 9 | + * | ||
| 10 | + * @author 芋道源码 | ||
| 11 | + */ | ||
| 12 | +@Data | ||
| 13 | +public class ErrorCodeRespDTO { | ||
| 14 | + | ||
| 15 | + /** | ||
| 16 | + * 错误码编码 | ||
| 17 | + */ | ||
| 18 | + private Integer code; | ||
| 19 | + /** | ||
| 20 | + * 错误码错误提示 | ||
| 21 | + */ | ||
| 22 | + private String message; | ||
| 23 | + /** | ||
| 24 | + * 更新时间 | ||
| 25 | + */ | ||
| 26 | + private Date updateTime; | ||
| 27 | + | ||
| 28 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java
0 → 100644
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.generator; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.hutool.core.util.ClassUtil; | ||
| 5 | +import cn.hutool.core.util.ReflectUtil; | ||
| 6 | +import cn.iocoder.dashboard.common.exception.ErrorCode; | ||
| 7 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; | ||
| 8 | +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; | ||
| 9 | +import lombok.RequiredArgsConstructor; | ||
| 10 | +import lombok.extern.slf4j.Slf4j; | ||
| 11 | +import org.springframework.boot.context.event.ApplicationReadyEvent; | ||
| 12 | +import org.springframework.context.event.EventListener; | ||
| 13 | +import org.springframework.scheduling.annotation.Async; | ||
| 14 | + | ||
| 15 | +import java.util.ArrayList; | ||
| 16 | +import java.util.Arrays; | ||
| 17 | +import java.util.List; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * ErrorCodeAutoGenerator 的实现类 | ||
| 21 | + * 目的是,扫描指定的 {@link #constantsClassList} 类,写入到 system 服务中 | ||
| 22 | + * | ||
| 23 | + * @author dylan | ||
| 24 | + */ | ||
| 25 | +@RequiredArgsConstructor | ||
| 26 | +@Slf4j | ||
| 27 | +public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 应用分组 | ||
| 31 | + */ | ||
| 32 | + private final String applicationName; | ||
| 33 | + /** | ||
| 34 | + * 错误码枚举类 | ||
| 35 | + */ | ||
| 36 | + private final List<String> constantsClassList; | ||
| 37 | + /** | ||
| 38 | + * 错误码 Service | ||
| 39 | + */ | ||
| 40 | + private final ErrorCodeFrameworkService errorCodeService; | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + @EventListener(ApplicationReadyEvent.class) | ||
| 44 | + @Async // 异步,保证项目的启动过程,毕竟非关键流程 | ||
| 45 | + public void execute() { | ||
| 46 | + // 第一步,解析错误码 | ||
| 47 | + List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs = parseErrorCode(); | ||
| 48 | + log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size()); | ||
| 49 | + | ||
| 50 | + // 第二步,写入到 system 服务 | ||
| 51 | + errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); | ||
| 52 | + log.info("[execute][写入到 system 组件完成]"); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 解析 constantsClassList 变量,转换成错误码数组 | ||
| 57 | + * | ||
| 58 | + * @return 错误码数组 | ||
| 59 | + */ | ||
| 60 | + private List<ErrorCodeAutoGenerateReqDTO> parseErrorCode() { | ||
| 61 | + // 校验 errorCodeConstantsClass 参数 | ||
| 62 | + if (CollUtil.isEmpty(constantsClassList)) { | ||
| 63 | + log.info("[execute][未配置 yudao.error-code.constants-class-list 配置项,不进行自动写入到 system 服务中]"); | ||
| 64 | + return new ArrayList<>(); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + // 解析错误码 | ||
| 68 | + List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs = new ArrayList<>(); | ||
| 69 | + constantsClassList.forEach(constantsClass -> { | ||
| 70 | + // 解析错误码枚举类 | ||
| 71 | + Class<?> errorCodeConstantsClazz = ClassUtil.loadClass(constantsClass); | ||
| 72 | + // 解析错误码 | ||
| 73 | + autoGenerateDTOs.addAll(parseErrorCode(errorCodeConstantsClazz)); | ||
| 74 | + }); | ||
| 75 | + return autoGenerateDTOs; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * 解析错误码类,获得错误码数组 | ||
| 80 | + * | ||
| 81 | + * @return 错误码数组 | ||
| 82 | + */ | ||
| 83 | + private List<ErrorCodeAutoGenerateReqDTO> parseErrorCode(Class<?> constantsClass) { | ||
| 84 | + List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs = new ArrayList<>(); | ||
| 85 | + Arrays.stream(constantsClass.getFields()).forEach(field -> { | ||
| 86 | + if (field.getType() != ErrorCode.class) { | ||
| 87 | + return; | ||
| 88 | + } | ||
| 89 | + // 转换成 ErrorCodeAutoGenerateReqDTO 对象 | ||
| 90 | + ErrorCode errorCode = (ErrorCode) ReflectUtil.getFieldValue(constantsClass, field); | ||
| 91 | + autoGenerateDTOs.add(new ErrorCodeAutoGenerateReqDTO().setApplicationName(applicationName) | ||
| 92 | + .setCode(errorCode.getCode()).setMessage(errorCode.getMsg())); | ||
| 93 | + }); | ||
| 94 | + return autoGenerateDTOs; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | +} | ||
| 98 | + |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoader.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.loader; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * 错误码加载器 | ||
| 7 | + * | ||
| 8 | + * 注意,错误码最终加载到 {@link cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil} 的 MESSAGES 变量中! | ||
| 9 | + * | ||
| 10 | + * @author dlyan | ||
| 11 | + */ | ||
| 12 | +public interface ErrorCodeLoader { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 添加错误码 | ||
| 16 | + * | ||
| 17 | + * @param code 错误码的编号 | ||
| 18 | + * @param msg 错误码的提示 | ||
| 19 | + */ | ||
| 20 | + default void putErrorCode(Integer code, String msg) { | ||
| 21 | + ServiceExceptionUtil.put(code, msg); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.loader; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; | ||
| 5 | +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; | ||
| 6 | +import cn.iocoder.dashboard.util.date.DateUtils; | ||
| 7 | +import lombok.RequiredArgsConstructor; | ||
| 8 | +import lombok.extern.slf4j.Slf4j; | ||
| 9 | +import org.springframework.boot.context.event.ApplicationReadyEvent; | ||
| 10 | +import org.springframework.context.event.EventListener; | ||
| 11 | +import org.springframework.scheduling.annotation.Scheduled; | ||
| 12 | + | ||
| 13 | +import java.util.Date; | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * ErrorCodeLoader 的实现类,从 infra 的数据库中,加载错误码。 | ||
| 18 | + * | ||
| 19 | + * 考虑到错误码会刷新,所以按照 {@link #REFRESH_ERROR_CODE_PERIOD} 频率,增量加载错误码。 | ||
| 20 | + * | ||
| 21 | + * @author dlyan | ||
| 22 | + */ | ||
| 23 | +@RequiredArgsConstructor | ||
| 24 | +@Slf4j | ||
| 25 | +public class ErrorCodeLoaderImpl implements ErrorCodeLoader { | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * 刷新错误码的频率,单位:毫秒 | ||
| 29 | + */ | ||
| 30 | + private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 应用分组 | ||
| 34 | + */ | ||
| 35 | + private final String applicationName; | ||
| 36 | + /** | ||
| 37 | + * 错误码 Service | ||
| 38 | + */ | ||
| 39 | + private final ErrorCodeFrameworkService errorCodeService; | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * 缓存错误码的最大更新时间,用于后续的增量轮询,判断是否有更新 | ||
| 43 | + */ | ||
| 44 | + private Date maxUpdateTime; | ||
| 45 | + | ||
| 46 | + @EventListener(ApplicationReadyEvent.class) | ||
| 47 | + public void loadErrorCodes() { | ||
| 48 | + this.loadErrorCodes0(); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) | ||
| 52 | + public void refreshErrorCodes() { | ||
| 53 | + this.loadErrorCodes0(); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + private void loadErrorCodes0() { | ||
| 57 | + // 加载错误码 | ||
| 58 | + List<ErrorCodeRespDTO> errorCodeRespDTOs = errorCodeService.getErrorCodeList(applicationName, maxUpdateTime); | ||
| 59 | + if (CollUtil.isEmpty(errorCodeRespDTOs)) { | ||
| 60 | + return; | ||
| 61 | + } | ||
| 62 | + log.info("[loadErrorCodes0][加载到 ({}) 个错误码]", errorCodeRespDTOs.size()); | ||
| 63 | + | ||
| 64 | + // 刷新错误码的缓存 | ||
| 65 | + errorCodeRespDTOs.forEach(errorCodeRespDTO -> { | ||
| 66 | + // 写入到错误码的缓存 | ||
| 67 | + putErrorCode(errorCodeRespDTO.getCode(), errorCodeRespDTO.getMessage()); | ||
| 68 | + // 记录下更新时间,方便增量更新 | ||
| 69 | + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeRespDTO.getUpdateTime()); | ||
| 70 | + }); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | +} |
src/main/java/cn/iocoder/dashboard/framework/errorcode/core/service/ErrorCodeFrameworkService.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.errorcode.core.service; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; | ||
| 4 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; | ||
| 5 | + | ||
| 6 | +import javax.validation.Valid; | ||
| 7 | +import java.util.Date; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 错误码 Framework Service 接口 | ||
| 12 | + * | ||
| 13 | + * @author 芋道源码 | ||
| 14 | + */ | ||
| 15 | +public interface ErrorCodeFrameworkService { | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * 自动创建错误码 | ||
| 19 | + * | ||
| 20 | + * @param autoGenerateDTOs 错误码信息 | ||
| 21 | + */ | ||
| 22 | + void autoGenerateErrorCodes(@Valid List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs); | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 增量获得错误码数组 | ||
| 26 | + * | ||
| 27 | + * 如果 minUpdateTime 为空时,则获取所有错误码 | ||
| 28 | + * | ||
| 29 | + * @param applicationName 应用名 | ||
| 30 | + * @param minUpdateTime 最小更新时间 | ||
| 31 | + * @return 错误码数组 | ||
| 32 | + */ | ||
| 33 | + List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime); | ||
| 34 | + | ||
| 35 | +} |
src/main/java/cn/iocoder/dashboard/framework/validator/InEnum.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.validator; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.core.IntArrayValuable; | ||
| 4 | + | ||
| 5 | +import javax.validation.Constraint; | ||
| 6 | +import javax.validation.Payload; | ||
| 7 | +import java.lang.annotation.*; | ||
| 8 | + | ||
| 9 | +@Target({ | ||
| 10 | + ElementType.METHOD, | ||
| 11 | + ElementType.FIELD, | ||
| 12 | + ElementType.ANNOTATION_TYPE, | ||
| 13 | + ElementType.CONSTRUCTOR, | ||
| 14 | + ElementType.PARAMETER, | ||
| 15 | + ElementType.TYPE_USE | ||
| 16 | +}) | ||
| 17 | +@Retention(RetentionPolicy.RUNTIME) | ||
| 18 | +@Documented | ||
| 19 | +@Constraint( | ||
| 20 | + validatedBy = InEnumValidator.class | ||
| 21 | +) | ||
| 22 | +public @interface InEnum { | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * @return 实现 EnumValuable 接口的 | ||
| 26 | + */ | ||
| 27 | + Class<? extends IntArrayValuable> value(); | ||
| 28 | + | ||
| 29 | + String message() default "必须在指定范围 {value}"; | ||
| 30 | + | ||
| 31 | + Class<?>[] groups() default {}; | ||
| 32 | + | ||
| 33 | + Class<? extends Payload>[] payload() default {}; | ||
| 34 | + | ||
| 35 | +} | ||
| 0 | \ No newline at end of file | 36 | \ No newline at end of file |
src/main/java/cn/iocoder/dashboard/framework/validator/InEnumValidator.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.validator; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.core.IntArrayValuable; | ||
| 4 | + | ||
| 5 | +import javax.validation.ConstraintValidator; | ||
| 6 | +import javax.validation.ConstraintValidatorContext; | ||
| 7 | +import java.util.Arrays; | ||
| 8 | +import java.util.Collections; | ||
| 9 | +import java.util.List; | ||
| 10 | +import java.util.stream.Collectors; | ||
| 11 | + | ||
| 12 | +public class InEnumValidator implements ConstraintValidator<InEnum, Integer> { | ||
| 13 | + | ||
| 14 | + private List<Integer> values; | ||
| 15 | + | ||
| 16 | + @Override | ||
| 17 | + public void initialize(InEnum annotation) { | ||
| 18 | + IntArrayValuable[] values = annotation.value().getEnumConstants(); | ||
| 19 | + if (values.length == 0) { | ||
| 20 | + this.values = Collections.emptyList(); | ||
| 21 | + } else { | ||
| 22 | + this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList()); | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + @Override | ||
| 27 | + public boolean isValid(Integer value, ConstraintValidatorContext context) { | ||
| 28 | + // 为空时,默认不校验,即认为通过 | ||
| 29 | + if (value == null) { | ||
| 30 | + return true; | ||
| 31 | + } | ||
| 32 | + // 校验通过 | ||
| 33 | + if (values.contains(value)) { | ||
| 34 | + return true; | ||
| 35 | + } | ||
| 36 | + // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) | ||
| 37 | + context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 | ||
| 38 | + context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() | ||
| 39 | + .replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句 | ||
| 40 | + return false; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | +} | ||
| 44 | + |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExportReqVO.java
| @@ -8,6 +8,9 @@ import lombok.Data; | @@ -8,6 +8,9 @@ import lombok.Data; | ||
| 8 | @Data | 8 | @Data |
| 9 | public class SysPostExportReqVO { | 9 | public class SysPostExportReqVO { |
| 10 | 10 | ||
| 11 | + @ApiModelProperty(value = "岗位编码", example = "yudao", notes = "模糊匹配") | ||
| 12 | + private String code; | ||
| 13 | + | ||
| 11 | @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") | 14 | @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") |
| 12 | private String name; | 15 | private String name; |
| 13 | 16 |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostPageReqVO.java
| @@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode; | @@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode; | ||
| 11 | @EqualsAndHashCode(callSuper = true) | 11 | @EqualsAndHashCode(callSuper = true) |
| 12 | public class SysPostPageReqVO extends PageParam { | 12 | public class SysPostPageReqVO extends PageParam { |
| 13 | 13 | ||
| 14 | + @ApiModelProperty(value = "岗位编码", example = "yudao", notes = "模糊匹配") | ||
| 15 | + private String code; | ||
| 16 | + | ||
| 14 | @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") | 17 | @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") |
| 15 | private String name; | 18 | private String name; |
| 16 | 19 |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.http
0 → 100644
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; | ||
| 6 | +import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.*; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; | ||
| 11 | +import io.swagger.annotations.Api; | ||
| 12 | +import io.swagger.annotations.ApiImplicitParam; | ||
| 13 | +import io.swagger.annotations.ApiOperation; | ||
| 14 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 15 | +import org.springframework.validation.annotation.Validated; | ||
| 16 | +import org.springframework.web.bind.annotation.*; | ||
| 17 | + | ||
| 18 | +import javax.annotation.Resource; | ||
| 19 | +import javax.servlet.http.HttpServletResponse; | ||
| 20 | +import javax.validation.Valid; | ||
| 21 | +import java.io.IOException; | ||
| 22 | +import java.util.List; | ||
| 23 | + | ||
| 24 | +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | ||
| 25 | +import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||
| 26 | + | ||
| 27 | +@Api(tags = "错误码") | ||
| 28 | +@RestController | ||
| 29 | +@RequestMapping("/system/error-code") | ||
| 30 | +@Validated | ||
| 31 | +public class SysErrorCodeController { | ||
| 32 | + | ||
| 33 | + @Resource | ||
| 34 | + private SysErrorCodeService errorCodeService; | ||
| 35 | + | ||
| 36 | + @PostMapping("/create") | ||
| 37 | + @ApiOperation("创建错误码") | ||
| 38 | + @PreAuthorize("@ss.hasPermission('system:error-code:create')") | ||
| 39 | + public CommonResult<Long> createErrorCode(@Valid @RequestBody SysErrorCodeCreateReqVO createReqVO) { | ||
| 40 | + return success(errorCodeService.createErrorCode(createReqVO)); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + @PutMapping("/update") | ||
| 44 | + @ApiOperation("更新错误码") | ||
| 45 | + @PreAuthorize("@ss.hasPermission('system:error-code:update')") | ||
| 46 | + public CommonResult<Boolean> updateErrorCode(@Valid @RequestBody SysErrorCodeUpdateReqVO updateReqVO) { | ||
| 47 | + errorCodeService.updateErrorCode(updateReqVO); | ||
| 48 | + return success(true); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @DeleteMapping("/delete") | ||
| 52 | + @ApiOperation("删除错误码") | ||
| 53 | + @ApiImplicitParam(name = "id", value = "编号", required = true) | ||
| 54 | + @PreAuthorize("@ss.hasPermission('system:error-code:delete')") | ||
| 55 | + public CommonResult<Boolean> deleteErrorCode(@RequestParam("id") Long id) { | ||
| 56 | + errorCodeService.deleteErrorCode(id); | ||
| 57 | + return success(true); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @GetMapping("/get") | ||
| 61 | + @ApiOperation("获得错误码") | ||
| 62 | + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | ||
| 63 | + @PreAuthorize("@ss.hasPermission('system:error-code:query')") | ||
| 64 | + public CommonResult<SysErrorCodeRespVO> getErrorCode(@RequestParam("id") Long id) { | ||
| 65 | + SysErrorCodeDO errorCode = errorCodeService.getErrorCode(id); | ||
| 66 | + return success(SysErrorCodeConvert.INSTANCE.convert(errorCode)); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @GetMapping("/page") | ||
| 70 | + @ApiOperation("获得错误码分页") | ||
| 71 | + @PreAuthorize("@ss.hasPermission('system:error-code:query')") | ||
| 72 | + public CommonResult<PageResult<SysErrorCodeRespVO>> getErrorCodePage(@Valid SysErrorCodePageReqVO pageVO) { | ||
| 73 | + PageResult<SysErrorCodeDO> pageResult = errorCodeService.getErrorCodePage(pageVO); | ||
| 74 | + return success(SysErrorCodeConvert.INSTANCE.convertPage(pageResult)); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + @GetMapping("/export-excel") | ||
| 78 | + @ApiOperation("导出错误码 Excel") | ||
| 79 | + @PreAuthorize("@ss.hasPermission('system:error-code:export')") | ||
| 80 | + @OperateLog(type = EXPORT) | ||
| 81 | + public void exportErrorCodeExcel(@Valid SysErrorCodeExportReqVO exportReqVO, | ||
| 82 | + HttpServletResponse response) throws IOException { | ||
| 83 | + List<SysErrorCodeDO> list = errorCodeService.getErrorCodeList(exportReqVO); | ||
| 84 | + // 导出 Excel | ||
| 85 | + List<SysErrorCodeExcelVO> datas = SysErrorCodeConvert.INSTANCE.convertList02(list); | ||
| 86 | + ExcelUtils.write(response, "错误码.xls", "数据", SysErrorCodeExcelVO.class, datas); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import javax.validation.constraints.NotNull; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | +* 错误码 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 10 | +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 11 | +*/ | ||
| 12 | +@Data | ||
| 13 | +public class SysErrorCodeBaseVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "应用名", required = true, example = "dashboard") | ||
| 16 | + @NotNull(message = "应用名不能为空") | ||
| 17 | + private String applicationName; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "错误码编码", required = true, example = "1234") | ||
| 20 | + @NotNull(message = "错误码编码不能为空") | ||
| 21 | + private Integer code; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "错误码错误提示", required = true, example = "帅气") | ||
| 24 | + @NotNull(message = "错误码错误提示不能为空") | ||
| 25 | + private String message; | ||
| 26 | + | ||
| 27 | + @ApiModelProperty(value = "备注", example = "哈哈哈") | ||
| 28 | + private String memo; | ||
| 29 | + | ||
| 30 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import lombok.EqualsAndHashCode; | ||
| 6 | +import lombok.ToString; | ||
| 7 | + | ||
| 8 | +@ApiModel("错误码创建 Request VO") | ||
| 9 | +@Data | ||
| 10 | +@EqualsAndHashCode(callSuper = true) | ||
| 11 | +@ToString(callSuper = true) | ||
| 12 | +public class SysErrorCodeCreateReqVO extends SysErrorCodeBaseVO { | ||
| 13 | + | ||
| 14 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; | ||
| 4 | +import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; | ||
| 5 | +import com.alibaba.excel.annotation.ExcelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +import java.util.Date; | ||
| 9 | + | ||
| 10 | +import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_ERROR_CODE_TYPE; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 错误码 Excel VO | ||
| 14 | + * | ||
| 15 | + * @author 芋道源码 | ||
| 16 | + */ | ||
| 17 | +@Data | ||
| 18 | +public class SysErrorCodeExcelVO { | ||
| 19 | + | ||
| 20 | + @ExcelProperty("错误码编号") | ||
| 21 | + private Long id; | ||
| 22 | + | ||
| 23 | + @ExcelProperty(value = "错误码类型", converter = DictConvert.class) | ||
| 24 | + @DictFormat(SYS_ERROR_CODE_TYPE) | ||
| 25 | + private Integer type; | ||
| 26 | + | ||
| 27 | + @ExcelProperty("应用名") | ||
| 28 | + private String applicationName; | ||
| 29 | + | ||
| 30 | + @ExcelProperty("错误码编码") | ||
| 31 | + private Integer code; | ||
| 32 | + | ||
| 33 | + @ExcelProperty("错误码错误提示") | ||
| 34 | + private String message; | ||
| 35 | + | ||
| 36 | + @ExcelProperty("备注") | ||
| 37 | + private String memo; | ||
| 38 | + | ||
| 39 | + @ExcelProperty("创建时间") | ||
| 40 | + private Date createTime; | ||
| 41 | + | ||
| 42 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | + | ||
| 8 | +import java.util.Date; | ||
| 9 | + | ||
| 10 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@ApiModel(value = "错误码 Excel 导出 Request VO", description = "参数和 InfErrorCodePageReqVO 是一致的") | ||
| 13 | +@Data | ||
| 14 | +public class SysErrorCodeExportReqVO { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "错误码类型", example = "1") | ||
| 17 | + private Integer type; | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "应用名", example = "dashboard") | ||
| 20 | + private String applicationName; | ||
| 21 | + | ||
| 22 | + @ApiModelProperty(value = "错误码编码", example = "1234") | ||
| 23 | + private Integer code; | ||
| 24 | + | ||
| 25 | + @ApiModelProperty(value = "错误码错误提示", example = "帅气") | ||
| 26 | + private String message; | ||
| 27 | + | ||
| 28 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 29 | + @ApiModelProperty(value = "开始创建时间") | ||
| 30 | + private Date beginCreateTime; | ||
| 31 | + | ||
| 32 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 33 | + @ApiModelProperty(value = "结束创建时间") | ||
| 34 | + private Date endCreateTime; | ||
| 35 | + | ||
| 36 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageParam; | ||
| 4 | +import io.swagger.annotations.ApiModel; | ||
| 5 | +import io.swagger.annotations.ApiModelProperty; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 10 | + | ||
| 11 | +import java.util.Date; | ||
| 12 | + | ||
| 13 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 14 | + | ||
| 15 | +@ApiModel("错误码分页 Request VO") | ||
| 16 | +@Data | ||
| 17 | +@EqualsAndHashCode(callSuper = true) | ||
| 18 | +@ToString(callSuper = true) | ||
| 19 | +public class SysErrorCodePageReqVO extends PageParam { | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "错误码类型", example = "1", notes = "参见 SysErrorCodeTypeEnum 枚举类") | ||
| 22 | + private Integer type; | ||
| 23 | + | ||
| 24 | + @ApiModelProperty(value = "应用名", example = "dashboard") | ||
| 25 | + private String applicationName; | ||
| 26 | + | ||
| 27 | + @ApiModelProperty(value = "错误码编码", example = "1234") | ||
| 28 | + private Integer code; | ||
| 29 | + | ||
| 30 | + @ApiModelProperty(value = "错误码错误提示", example = "帅气") | ||
| 31 | + private String message; | ||
| 32 | + | ||
| 33 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 34 | + @ApiModelProperty(value = "开始创建时间") | ||
| 35 | + private Date beginCreateTime; | ||
| 36 | + | ||
| 37 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 38 | + @ApiModelProperty(value = "结束创建时间") | ||
| 39 | + private Date endCreateTime; | ||
| 40 | + | ||
| 41 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import java.util.Date; | ||
| 10 | + | ||
| 11 | +@ApiModel("错误码 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class SysErrorCodeRespVO extends SysErrorCodeBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "错误码编号", required = true, example = "1024") | ||
| 18 | + private Long id; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "错误码类型", required = true, example = "1", notes = "参见 SysErrorCodeTypeEnum 枚举类") | ||
| 21 | + private Integer type; | ||
| 22 | + | ||
| 23 | + @ApiModelProperty(value = "创建时间", required = true) | ||
| 24 | + private Date createTime; | ||
| 25 | + | ||
| 26 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +@ApiModel("错误码更新 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +@ToString(callSuper = true) | ||
| 15 | +public class SysErrorCodeUpdateReqVO extends SysErrorCodeBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "错误码编号", required = true, example = "1024") | ||
| 18 | + @NotNull(message = "错误码编号不能为空") | ||
| 19 | + private Long id; | ||
| 20 | + | ||
| 21 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.convert.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; | ||
| 5 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExcelVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeRespVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 11 | +import org.mapstruct.Mapper; | ||
| 12 | +import org.mapstruct.factory.Mappers; | ||
| 13 | + | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * 错误码 Convert | ||
| 18 | + * | ||
| 19 | + * @author 芋道源码 | ||
| 20 | + */ | ||
| 21 | +@Mapper | ||
| 22 | +public interface SysErrorCodeConvert { | ||
| 23 | + | ||
| 24 | + SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); | ||
| 25 | + | ||
| 26 | + SysErrorCodeDO convert(SysErrorCodeCreateReqVO bean); | ||
| 27 | + | ||
| 28 | + SysErrorCodeDO convert(SysErrorCodeUpdateReqVO bean); | ||
| 29 | + | ||
| 30 | + SysErrorCodeRespVO convert(SysErrorCodeDO bean); | ||
| 31 | + | ||
| 32 | + List<SysErrorCodeRespVO> convertList(List<SysErrorCodeDO> list); | ||
| 33 | + | ||
| 34 | + PageResult<SysErrorCodeRespVO> convertPage(PageResult<SysErrorCodeDO> page); | ||
| 35 | + | ||
| 36 | + List<SysErrorCodeExcelVO> convertList02(List<SysErrorCodeDO> list); | ||
| 37 | + | ||
| 38 | + SysErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); | ||
| 39 | + | ||
| 40 | + List<ErrorCodeRespDTO> convertList03(List<SysErrorCodeDO> list); | ||
| 41 | + | ||
| 42 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 7 | +import lombok.Data; | ||
| 8 | +import lombok.EqualsAndHashCode; | ||
| 9 | +import lombok.ToString; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 错误码表 | ||
| 13 | + * | ||
| 14 | + * @author 芋道源码 | ||
| 15 | + */ | ||
| 16 | +@TableName(value = "sys_error_code") | ||
| 17 | +@Data | ||
| 18 | +@EqualsAndHashCode(callSuper = true) | ||
| 19 | +@ToString(callSuper = true) | ||
| 20 | +public class SysErrorCodeDO extends BaseDO { | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 错误码编号,自增 | ||
| 24 | + */ | ||
| 25 | + @TableId | ||
| 26 | + private Long id; | ||
| 27 | + /** | ||
| 28 | + * 错误码类型 | ||
| 29 | + * | ||
| 30 | + * 枚举 {@link SysErrorCodeTypeEnum} | ||
| 31 | + */ | ||
| 32 | + private Integer type; | ||
| 33 | + /** | ||
| 34 | + * 应用名 | ||
| 35 | + */ | ||
| 36 | + private String applicationName; | ||
| 37 | + /** | ||
| 38 | + * 错误码编码 | ||
| 39 | + */ | ||
| 40 | + private Integer code; | ||
| 41 | + /** | ||
| 42 | + * 错误码错误提示 | ||
| 43 | + */ | ||
| 44 | + private String message; | ||
| 45 | + /** | ||
| 46 | + * 错误码备注 | ||
| 47 | + */ | ||
| 48 | + private String memo; | ||
| 49 | + | ||
| 50 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dept/SysPostMapper.java
| @@ -22,12 +22,15 @@ public interface SysPostMapper extends BaseMapperX<SysPostDO> { | @@ -22,12 +22,15 @@ public interface SysPostMapper extends BaseMapperX<SysPostDO> { | ||
| 22 | 22 | ||
| 23 | default PageResult<SysPostDO> selectPage(SysPostPageReqVO reqVO) { | 23 | default PageResult<SysPostDO> selectPage(SysPostPageReqVO reqVO) { |
| 24 | return selectPage(reqVO, new QueryWrapperX<SysPostDO>() | 24 | return selectPage(reqVO, new QueryWrapperX<SysPostDO>() |
| 25 | + .likeIfPresent("code", reqVO.getCode()) | ||
| 25 | .likeIfPresent("name", reqVO.getName()) | 26 | .likeIfPresent("name", reqVO.getName()) |
| 26 | .eqIfPresent("status", reqVO.getStatus())); | 27 | .eqIfPresent("status", reqVO.getStatus())); |
| 27 | } | 28 | } |
| 28 | 29 | ||
| 29 | default List<SysPostDO> selectList(SysPostExportReqVO reqVO) { | 30 | default List<SysPostDO> selectList(SysPostExportReqVO reqVO) { |
| 30 | - return selectList(new QueryWrapperX<SysPostDO>().likeIfPresent("name", reqVO.getName()) | 31 | + return selectList(new QueryWrapperX<SysPostDO>() |
| 32 | + .likeIfPresent("code", reqVO.getCode()) | ||
| 33 | + .likeIfPresent("name", reqVO.getName()) | ||
| 31 | .eqIfPresent("status", reqVO.getStatus())); | 34 | .eqIfPresent("status", reqVO.getStatus())); |
| 32 | } | 35 | } |
| 33 | 36 |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 9 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 10 | +import org.apache.ibatis.annotations.Mapper; | ||
| 11 | + | ||
| 12 | +import java.util.Collection; | ||
| 13 | +import java.util.Date; | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 16 | +@Mapper | ||
| 17 | +public interface SysErrorCodeMapper extends BaseMapperX<SysErrorCodeDO> { | ||
| 18 | + | ||
| 19 | + default PageResult<SysErrorCodeDO> selectPage(SysErrorCodePageReqVO reqVO) { | ||
| 20 | + return selectPage(reqVO, new QueryWrapperX<SysErrorCodeDO>() | ||
| 21 | + .eqIfPresent("type", reqVO.getType()) | ||
| 22 | + .likeIfPresent("application_name", reqVO.getApplicationName()) | ||
| 23 | + .eqIfPresent("code", reqVO.getCode()) | ||
| 24 | + .likeIfPresent("message", reqVO.getMessage()) | ||
| 25 | + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||
| 26 | + .orderByAsc("application_name", "code")); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + default List<SysErrorCodeDO> selectList(SysErrorCodeExportReqVO reqVO) { | ||
| 30 | + return selectList(new QueryWrapperX<SysErrorCodeDO>() | ||
| 31 | + .eqIfPresent("type", reqVO.getType()) | ||
| 32 | + .likeIfPresent("application_name", reqVO.getApplicationName()) | ||
| 33 | + .eqIfPresent("code", reqVO.getCode()) | ||
| 34 | + .likeIfPresent("message", reqVO.getMessage()) | ||
| 35 | + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||
| 36 | + .orderByAsc("application_name", "code")); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + default List<SysErrorCodeDO> selectListByCodes(Collection<Integer> codes) { | ||
| 40 | + return selectList(new QueryWrapper<SysErrorCodeDO>().in("code", codes)); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + default SysErrorCodeDO selectByCode(Integer code) { | ||
| 44 | + return selectOne(new QueryWrapper<SysErrorCodeDO>().eq("code", code)); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + default List<SysErrorCodeDO> selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { | ||
| 48 | + return selectList(new QueryWrapperX<SysErrorCodeDO>().eq("application_name", applicationName) | ||
| 49 | + .gtIfPresent("update_time", minUpdateTime)); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| @@ -91,5 +91,8 @@ public interface SysErrorCodeConstants { | @@ -91,5 +91,8 @@ public interface SysErrorCodeConstants { | ||
| 91 | ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在"); | 91 | ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在"); |
| 92 | ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失"); | 92 | ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失"); |
| 93 | 93 | ||
| 94 | + // ========== 错误码模块 1002013000 ========== | ||
| 95 | + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误码不存在"); | ||
| 96 | + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "已经存在编码为【{}】的错误码"); | ||
| 94 | 97 | ||
| 95 | } | 98 | } |
src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java
| @@ -22,12 +22,12 @@ public enum SysDictTypeEnum { | @@ -22,12 +22,12 @@ public enum SysDictTypeEnum { | ||
| 22 | SYS_SMS_TEMPLATE_TYPE("sys_sms_template_type"), // 短信模板类型 | 22 | SYS_SMS_TEMPLATE_TYPE("sys_sms_template_type"), // 短信模板类型 |
| 23 | SYS_SMS_SEND_STATUS("sys_sms_send_status"), // 短信发送状态 | 23 | SYS_SMS_SEND_STATUS("sys_sms_send_status"), // 短信发送状态 |
| 24 | SYS_SMS_RECEIVE_STATUS("sys_sms_receive_status"), // 短信接收状态 | 24 | SYS_SMS_RECEIVE_STATUS("sys_sms_receive_status"), // 短信接收状态 |
| 25 | + SYS_ERROR_CODE_TYPE("inf_error_code_type"), // 错误码的类型枚举 | ||
| 25 | 26 | ||
| 26 | INF_REDIS_TIMEOUT_TYPE("inf_redis_timeout_type"), // Redis 超时类型 | 27 | INF_REDIS_TIMEOUT_TYPE("inf_redis_timeout_type"), // Redis 超时类型 |
| 27 | INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举 | 28 | INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举 |
| 28 | INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举 | 29 | INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举 |
| 29 | INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举 | 30 | INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举 |
| 30 | - | ||
| 31 | ; | 31 | ; |
| 32 | 32 | ||
| 33 | 33 |
src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.enums.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.core.IntArrayValuable; | ||
| 4 | +import lombok.AllArgsConstructor; | ||
| 5 | +import lombok.Getter; | ||
| 6 | + | ||
| 7 | +import java.util.Arrays; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 错误码的类型枚举 | ||
| 11 | + * | ||
| 12 | + * @author dylan | ||
| 13 | + */ | ||
| 14 | +@AllArgsConstructor | ||
| 15 | +@Getter | ||
| 16 | +public enum SysErrorCodeTypeEnum implements IntArrayValuable { | ||
| 17 | + | ||
| 18 | + /** | ||
| 19 | + * 自动生成 | ||
| 20 | + */ | ||
| 21 | + AUTO_GENERATION(1), | ||
| 22 | + /** | ||
| 23 | + * 手动编辑 | ||
| 24 | + */ | ||
| 25 | + MANUAL_OPERATION(2); | ||
| 26 | + | ||
| 27 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysErrorCodeTypeEnum::getType).toArray(); | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 类型 | ||
| 31 | + */ | ||
| 32 | + private final Integer type; | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public int[] array() { | ||
| 36 | + return ARRAYS; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java
| @@ -85,7 +85,7 @@ public class SysAuthServiceImpl implements SysAuthService { | @@ -85,7 +85,7 @@ public class SysAuthServiceImpl implements SysAuthService { | ||
| 85 | @Override | 85 | @Override |
| 86 | public String login(SysAuthLoginReqVO reqVO, String userIp, String userAgent) { | 86 | public String login(SysAuthLoginReqVO reqVO, String userIp, String userAgent) { |
| 87 | // 判断验证码是否正确 | 87 | // 判断验证码是否正确 |
| 88 | - this.verifyCaptcha(reqVO.getUsername(), reqVO.getUuid(), reqVO.getCode()); | 88 | +// this.verifyCaptcha(reqVO.getUsername(), reqVO.getUuid(), reqVO.getCode()); |
| 89 | 89 | ||
| 90 | // 使用账号密码,进行登陆。 | 90 | // 使用账号密码,进行登陆。 |
| 91 | LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); | 91 | LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); |
src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 10 | + | ||
| 11 | +import javax.validation.Valid; | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 错误码 Service 接口 | ||
| 16 | + * | ||
| 17 | + * @author 芋道源码 | ||
| 18 | + */ | ||
| 19 | +public interface SysErrorCodeService extends ErrorCodeFrameworkService { | ||
| 20 | + | ||
| 21 | + /** | ||
| 22 | + * 创建错误码 | ||
| 23 | + * | ||
| 24 | + * @param createReqVO 创建信息 | ||
| 25 | + * @return 编号 | ||
| 26 | + */ | ||
| 27 | + Long createErrorCode(@Valid SysErrorCodeCreateReqVO createReqVO); | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 更新错误码 | ||
| 31 | + * | ||
| 32 | + * @param updateReqVO 更新信息 | ||
| 33 | + */ | ||
| 34 | + void updateErrorCode(@Valid SysErrorCodeUpdateReqVO updateReqVO); | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * 删除错误码 | ||
| 38 | + * | ||
| 39 | + * @param id 编号 | ||
| 40 | + */ | ||
| 41 | + void deleteErrorCode(Long id); | ||
| 42 | + | ||
| 43 | + /** | ||
| 44 | + * 获得错误码 | ||
| 45 | + * | ||
| 46 | + * @param id 编号 | ||
| 47 | + * @return 错误码 | ||
| 48 | + */ | ||
| 49 | + SysErrorCodeDO getErrorCode(Long id); | ||
| 50 | + | ||
| 51 | + /** | ||
| 52 | + * 获得错误码分页 | ||
| 53 | + * | ||
| 54 | + * @param pageReqVO 分页查询 | ||
| 55 | + * @return 错误码分页 | ||
| 56 | + */ | ||
| 57 | + PageResult<SysErrorCodeDO> getErrorCodePage(SysErrorCodePageReqVO pageReqVO); | ||
| 58 | + | ||
| 59 | + /** | ||
| 60 | + * 获得错误码列表, 用于 Excel 导出 | ||
| 61 | + * | ||
| 62 | + * @param exportReqVO 查询条件 | ||
| 63 | + * @return 错误码列表 | ||
| 64 | + */ | ||
| 65 | + List<SysErrorCodeDO> getErrorCodeList(SysErrorCodeExportReqVO exportReqVO); | ||
| 66 | + | ||
| 67 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.errorcode.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; | ||
| 6 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 13 | +import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; | ||
| 14 | +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; | ||
| 15 | +import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; | ||
| 16 | +import com.google.common.annotations.VisibleForTesting; | ||
| 17 | +import lombok.extern.slf4j.Slf4j; | ||
| 18 | +import org.springframework.stereotype.Service; | ||
| 19 | +import org.springframework.transaction.annotation.Transactional; | ||
| 20 | +import org.springframework.validation.annotation.Validated; | ||
| 21 | + | ||
| 22 | +import javax.annotation.Resource; | ||
| 23 | +import java.util.Date; | ||
| 24 | +import java.util.List; | ||
| 25 | +import java.util.Map; | ||
| 26 | + | ||
| 27 | +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; | ||
| 28 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 29 | +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertMap; | ||
| 30 | +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * 错误码 Service 实现类 | ||
| 34 | + * | ||
| 35 | + * @author dlyan | ||
| 36 | + */ | ||
| 37 | +@Service | ||
| 38 | +@Validated | ||
| 39 | +@Slf4j | ||
| 40 | +public class SysErrorCodeServiceImpl implements SysErrorCodeService { | ||
| 41 | + | ||
| 42 | + @Resource | ||
| 43 | + private SysErrorCodeMapper errorCodeMapper; | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + public Long createErrorCode(SysErrorCodeCreateReqVO createReqVO) { | ||
| 47 | + // 校验 code 重复 | ||
| 48 | + validateCodeDuplicate(createReqVO.getCode(), null); | ||
| 49 | + | ||
| 50 | + // 插入 | ||
| 51 | + SysErrorCodeDO errorCode = SysErrorCodeConvert.INSTANCE.convert(createReqVO) | ||
| 52 | + .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); | ||
| 53 | + errorCodeMapper.insert(errorCode); | ||
| 54 | + // 返回 | ||
| 55 | + return errorCode.getId(); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @Override | ||
| 59 | + public void updateErrorCode(SysErrorCodeUpdateReqVO updateReqVO) { | ||
| 60 | + // 校验存在 | ||
| 61 | + this.validateErrorCodeExists(updateReqVO.getId()); | ||
| 62 | + // 校验 code 重复 | ||
| 63 | + validateCodeDuplicate(updateReqVO.getCode(), updateReqVO.getId()); | ||
| 64 | + | ||
| 65 | + // 更新 | ||
| 66 | + SysErrorCodeDO updateObj = SysErrorCodeConvert.INSTANCE.convert(updateReqVO) | ||
| 67 | + .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); | ||
| 68 | + errorCodeMapper.updateById(updateObj); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @Override | ||
| 72 | + public void deleteErrorCode(Long id) { | ||
| 73 | + // 校验存在 | ||
| 74 | + this.validateErrorCodeExists(id); | ||
| 75 | + // 删除 | ||
| 76 | + errorCodeMapper.deleteById(id); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * 校验错误码的唯一字段是否重复 | ||
| 81 | + * | ||
| 82 | + * 是否存在相同编码的错误码 | ||
| 83 | + * | ||
| 84 | + * @param code 错误码编码 | ||
| 85 | + * @param id 错误码编号 | ||
| 86 | + */ | ||
| 87 | + @VisibleForTesting | ||
| 88 | + public void validateCodeDuplicate(Integer code, Long id) { | ||
| 89 | + SysErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); | ||
| 90 | + if (errorCodeDO == null) { | ||
| 91 | + return; | ||
| 92 | + } | ||
| 93 | + // 如果 id 为空,说明不用比较是否为相同 id 的错误码 | ||
| 94 | + if (id == null) { | ||
| 95 | + throw exception(ERROR_CODE_DUPLICATE); | ||
| 96 | + } | ||
| 97 | + if (!errorCodeDO.getId().equals(id)) { | ||
| 98 | + throw exception(ERROR_CODE_DUPLICATE); | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + @VisibleForTesting | ||
| 103 | + public void validateErrorCodeExists(Long id) { | ||
| 104 | + if (errorCodeMapper.selectById(id) == null) { | ||
| 105 | + throw exception(ERROR_CODE_NOT_EXISTS); | ||
| 106 | + } | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + @Override | ||
| 110 | + public SysErrorCodeDO getErrorCode(Long id) { | ||
| 111 | + return errorCodeMapper.selectById(id); | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + @Override | ||
| 115 | + public PageResult<SysErrorCodeDO> getErrorCodePage(SysErrorCodePageReqVO pageReqVO) { | ||
| 116 | + return errorCodeMapper.selectPage(pageReqVO); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + @Override | ||
| 120 | + public List<SysErrorCodeDO> getErrorCodeList(SysErrorCodeExportReqVO exportReqVO) { | ||
| 121 | + return errorCodeMapper.selectList(exportReqVO); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + @Override | ||
| 125 | + @Transactional | ||
| 126 | + public void autoGenerateErrorCodes(List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs) { | ||
| 127 | + if (CollUtil.isEmpty(autoGenerateDTOs)) { | ||
| 128 | + return; | ||
| 129 | + } | ||
| 130 | + // 获得错误码 | ||
| 131 | + List<SysErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByCodes( | ||
| 132 | + convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); | ||
| 133 | + Map<Integer, SysErrorCodeDO> errorCodeDOMap = convertMap(errorCodeDOs, SysErrorCodeDO::getCode); | ||
| 134 | + | ||
| 135 | + // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 | ||
| 136 | + autoGenerateDTOs.forEach(autoGenerateDTO -> { | ||
| 137 | + SysErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); | ||
| 138 | + // 不存在,则进行新增 | ||
| 139 | + if (errorCodeDO == null) { | ||
| 140 | + errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) | ||
| 141 | + .setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); | ||
| 142 | + errorCodeMapper.insert(errorCodeDO); | ||
| 143 | + return; | ||
| 144 | + } | ||
| 145 | + // 存在,则进行更新。更新有三个前置条件: | ||
| 146 | + // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION | ||
| 147 | + if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { | ||
| 148 | + return; | ||
| 149 | + } | ||
| 150 | + // 条件 2. 分组 applicationName 必须匹配,避免存在错误码冲突的情况 | ||
| 151 | + if (!autoGenerateDTO.getApplicationName().equals(errorCodeDO.getApplicationName())) { | ||
| 152 | + log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", | ||
| 153 | + autoGenerateDTO.getCode(), autoGenerateDTO.getApplicationName(), | ||
| 154 | + errorCodeDO.getCode(), errorCodeDO.getApplicationName()); | ||
| 155 | + return; | ||
| 156 | + } | ||
| 157 | + // 条件 3. 错误提示语存在差异 | ||
| 158 | + if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { | ||
| 159 | + return; | ||
| 160 | + } | ||
| 161 | + // 最终匹配,进行更新 | ||
| 162 | + errorCodeMapper.updateById(new SysErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); | ||
| 163 | + }); | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + @Override | ||
| 167 | + public List<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime) { | ||
| 168 | + List<SysErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( | ||
| 169 | + applicationName, minUpdateTime); | ||
| 170 | + return SysErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | +} | ||
| 174 | + |
src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java
| @@ -64,4 +64,14 @@ public class DateUtils { | @@ -64,4 +64,14 @@ public class DateUtils { | ||
| 64 | return calendar.getTime(); | 64 | return calendar.getTime(); |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | + public static Date max(Date a, Date b) { | ||
| 68 | + if (a == null) { | ||
| 69 | + return b; | ||
| 70 | + } | ||
| 71 | + if (b == null) { | ||
| 72 | + return a; | ||
| 73 | + } | ||
| 74 | + return a.compareTo(b) > 0 ? a : b; | ||
| 75 | + } | ||
| 76 | + | ||
| 67 | } | 77 | } |
src/main/resources/application.yaml
| @@ -12,6 +12,7 @@ spring: | @@ -12,6 +12,7 @@ spring: | ||
| 12 | max-file-size: 16MB # 单个文件大小 | 12 | max-file-size: 16MB # 单个文件大小 |
| 13 | max-request-size: 32MB # 设置总上传的文件大小 | 13 | max-request-size: 32MB # 设置总上传的文件大小 |
| 14 | 14 | ||
| 15 | + # Jackson 配置项 | ||
| 15 | jackson: | 16 | jackson: |
| 16 | serialization: | 17 | serialization: |
| 17 | write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳 | 18 | write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳 |
| @@ -34,3 +35,8 @@ mybatis-plus: | @@ -34,3 +35,8 @@ mybatis-plus: | ||
| 34 | 35 | ||
| 35 | --- #################### 芋道相关配置 #################### | 36 | --- #################### 芋道相关配置 #################### |
| 36 | 37 | ||
| 38 | +yudao: | ||
| 39 | + error-code: # 错误码相关配置项 | ||
| 40 | + constants-class-list: | ||
| 41 | + - cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants | ||
| 42 | + - cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants |
src/main/resources/codegen/java/service/serviceImpl.vm
| @@ -53,7 +53,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service | @@ -53,7 +53,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service | ||
| 53 | public void delete${simpleClassName}(${primaryColumn.javaType} id) { | 53 | public void delete${simpleClassName}(${primaryColumn.javaType} id) { |
| 54 | // 校验存在 | 54 | // 校验存在 |
| 55 | this.validate${simpleClassName}Exists(id); | 55 | this.validate${simpleClassName}Exists(id); |
| 56 | - // 更新 | 56 | + // 删除 |
| 57 | ${classNameVar}Mapper.deleteById(id); | 57 | ${classNameVar}Mapper.deleteById(id); |
| 58 | } | 58 | } |
| 59 | 59 |
src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.errorcode; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.BaseDbUnitTest; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; | ||
| 6 | +import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; | ||
| 13 | +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; | ||
| 14 | +import cn.iocoder.dashboard.modules.system.service.errorcode.impl.SysErrorCodeServiceImpl; | ||
| 15 | +import cn.iocoder.dashboard.util.collection.ArrayUtils; | ||
| 16 | +import cn.iocoder.dashboard.util.object.ObjectUtils; | ||
| 17 | +import org.assertj.core.util.Lists; | ||
| 18 | +import org.junit.jupiter.api.Test; | ||
| 19 | +import org.mockito.Mock; | ||
| 20 | +import org.slf4j.Logger; | ||
| 21 | +import org.springframework.context.annotation.Import; | ||
| 22 | + | ||
| 23 | +import javax.annotation.Resource; | ||
| 24 | +import java.util.List; | ||
| 25 | +import java.util.function.Consumer; | ||
| 26 | + | ||
| 27 | +import static cn.hutool.core.util.RandomUtil.randomEle; | ||
| 28 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; | ||
| 29 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; | ||
| 30 | +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||
| 31 | +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | ||
| 32 | +import static cn.iocoder.dashboard.util.RandomUtils.*; | ||
| 33 | +import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; | ||
| 34 | +import static org.junit.jupiter.api.Assertions.*; | ||
| 35 | + | ||
| 36 | +/** | ||
| 37 | +* {@link SysErrorCodeServiceImpl} 的单元测试类 | ||
| 38 | +* | ||
| 39 | +* @author 芋道源码 | ||
| 40 | +*/ | ||
| 41 | +@Import(SysErrorCodeServiceImpl.class) | ||
| 42 | +public class SysErrorCodeServiceTest extends BaseDbUnitTest { | ||
| 43 | + | ||
| 44 | + @Resource | ||
| 45 | + private SysErrorCodeServiceImpl errorCodeService; | ||
| 46 | + | ||
| 47 | + @Resource | ||
| 48 | + private SysErrorCodeMapper errorCodeMapper; | ||
| 49 | + | ||
| 50 | + @Mock | ||
| 51 | + private Logger log; | ||
| 52 | + | ||
| 53 | + @Test | ||
| 54 | + public void testCreateErrorCode_success() { | ||
| 55 | + // 准备参数 | ||
| 56 | + SysErrorCodeCreateReqVO reqVO = randomPojo(SysErrorCodeCreateReqVO.class); | ||
| 57 | + | ||
| 58 | + // 调用 | ||
| 59 | + Long errorCodeId = errorCodeService.createErrorCode(reqVO); | ||
| 60 | + // 断言 | ||
| 61 | + assertNotNull(errorCodeId); | ||
| 62 | + // 校验记录的属性是否正确 | ||
| 63 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); | ||
| 64 | + assertPojoEquals(reqVO, errorCode); | ||
| 65 | + assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Test | ||
| 69 | + public void testUpdateErrorCode_success() { | ||
| 70 | + // mock 数据 | ||
| 71 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); | ||
| 72 | + errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 | ||
| 73 | + // 准备参数 | ||
| 74 | + SysErrorCodeUpdateReqVO reqVO = randomPojo(SysErrorCodeUpdateReqVO.class, o -> { | ||
| 75 | + o.setId(dbErrorCode.getId()); // 设置更新的 ID | ||
| 76 | + }); | ||
| 77 | + | ||
| 78 | + // 调用 | ||
| 79 | + errorCodeService.updateErrorCode(reqVO); | ||
| 80 | + // 校验是否更新正确 | ||
| 81 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // 获取最新的 | ||
| 82 | + assertPojoEquals(reqVO, errorCode); | ||
| 83 | + assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + @Test | ||
| 87 | + public void testDeleteErrorCode_success() { | ||
| 88 | + // mock 数据 | ||
| 89 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); | ||
| 90 | + errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 | ||
| 91 | + // 准备参数 | ||
| 92 | + Long id = dbErrorCode.getId(); | ||
| 93 | + | ||
| 94 | + // 调用 | ||
| 95 | + errorCodeService.deleteErrorCode(id); | ||
| 96 | + // 校验数据不存在了 | ||
| 97 | + assertNull(errorCodeMapper.selectById(id)); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @Test | ||
| 101 | + public void testGetErrorCodePage() { | ||
| 102 | + // mock 数据 | ||
| 103 | + SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); | ||
| 104 | + // 准备参数 | ||
| 105 | + SysErrorCodePageReqVO reqVO = new SysErrorCodePageReqVO(); | ||
| 106 | + reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); | ||
| 107 | + reqVO.setApplicationName("yudao"); | ||
| 108 | + reqVO.setCode(1); | ||
| 109 | + reqVO.setMessage("yu"); | ||
| 110 | + reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); | ||
| 111 | + reqVO.setEndCreateTime(buildTime(2020, 11, 30)); | ||
| 112 | + | ||
| 113 | + // 调用 | ||
| 114 | + PageResult<SysErrorCodeDO> pageResult = errorCodeService.getErrorCodePage(reqVO); | ||
| 115 | + // 断言 | ||
| 116 | + assertEquals(1, pageResult.getTotal()); | ||
| 117 | + assertEquals(1, pageResult.getList().size()); | ||
| 118 | + assertPojoEquals(dbErrorCode, pageResult.getList().get(0)); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + /** | ||
| 122 | + * 初始化 getErrorCodePage 方法的测试数据 | ||
| 123 | + */ | ||
| 124 | + private SysErrorCodeDO initGetErrorCodePage() { | ||
| 125 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 | ||
| 126 | + o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); | ||
| 127 | + o.setApplicationName("yudaoyuanma"); | ||
| 128 | + o.setCode(1); | ||
| 129 | + o.setMessage("yudao"); | ||
| 130 | + o.setCreateTime(buildTime(2020, 11, 11)); | ||
| 131 | + }); | ||
| 132 | + errorCodeMapper.insert(dbErrorCode); | ||
| 133 | + // 测试 type 不匹配 | ||
| 134 | + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); | ||
| 135 | + // 测试 applicationName 不匹配 | ||
| 136 | + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setApplicationName("yunai"))); | ||
| 137 | + // 测试 code 不匹配 | ||
| 138 | + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setCode(2))); | ||
| 139 | + // 测试 message 不匹配 | ||
| 140 | + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setMessage("nai"))); | ||
| 141 | + // 测试 createTime 不匹配 | ||
| 142 | + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setCreateTime(buildTime(2020, 12, 12)))); | ||
| 143 | + return dbErrorCode; | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + @Test | ||
| 147 | + public void testGetErrorCodeList() { | ||
| 148 | + // mock 数据 | ||
| 149 | + SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); | ||
| 150 | + // 准备参数 | ||
| 151 | + SysErrorCodeExportReqVO reqVO = new SysErrorCodeExportReqVO(); | ||
| 152 | + reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); | ||
| 153 | + reqVO.setApplicationName("yudao"); | ||
| 154 | + reqVO.setCode(1); | ||
| 155 | + reqVO.setMessage("yu"); | ||
| 156 | + reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); | ||
| 157 | + reqVO.setEndCreateTime(buildTime(2020, 11, 30)); | ||
| 158 | + | ||
| 159 | + // 调用 | ||
| 160 | + List<SysErrorCodeDO> list = errorCodeService.getErrorCodeList(reqVO); | ||
| 161 | + // 断言 | ||
| 162 | + assertEquals(1, list.size()); | ||
| 163 | + assertPojoEquals(dbErrorCode, list.get(0)); | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + @Test | ||
| 167 | + public void testValidateCodeDuplicate_codeDuplicateForCreate() { | ||
| 168 | + // 准备参数 | ||
| 169 | + Integer code = randomInteger(); | ||
| 170 | + // mock 数据 | ||
| 171 | + errorCodeMapper.insert(randomInfErrorCodeDO(o -> o.setCode(code))); | ||
| 172 | + | ||
| 173 | + // 调用,校验异常 | ||
| 174 | + assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, null), | ||
| 175 | + ERROR_CODE_DUPLICATE); | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + @Test | ||
| 179 | + public void testValidateCodeDuplicate_codeDuplicateForUpdate() { | ||
| 180 | + // 准备参数 | ||
| 181 | + Long id = randomLongId(); | ||
| 182 | + Integer code = randomInteger(); | ||
| 183 | + // mock 数据 | ||
| 184 | + errorCodeMapper.insert(randomInfErrorCodeDO(o -> o.setCode(code))); | ||
| 185 | + | ||
| 186 | + // 调用,校验异常 | ||
| 187 | + assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, id), | ||
| 188 | + ERROR_CODE_DUPLICATE); | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + @Test | ||
| 192 | + public void testValidateErrorCodeExists_notExists() { | ||
| 193 | + assertServiceException(() -> errorCodeService.validateErrorCodeExists(null), | ||
| 194 | + ERROR_CODE_NOT_EXISTS); | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + /** | ||
| 198 | + * 情况 1,错误码不存在的情况 | ||
| 199 | + */ | ||
| 200 | + @Test | ||
| 201 | + public void testAutoGenerateErrorCodes_01() { | ||
| 202 | + // 准备参数 | ||
| 203 | + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class); | ||
| 204 | + // mock 方法 | ||
| 205 | + | ||
| 206 | + // 调用 | ||
| 207 | + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); | ||
| 208 | + // 断言 | ||
| 209 | + SysErrorCodeDO errorCode = errorCodeMapper.selectOne(null); | ||
| 210 | + assertPojoEquals(generateReqDTO, errorCode); | ||
| 211 | + assertEquals(SysErrorCodeTypeEnum.AUTO_GENERATION.getType(), errorCode.getType()); | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | + /** | ||
| 215 | + * 情况 2.1,错误码存在,但是是 SysErrorCodeTypeEnum.MANUAL_OPERATION 类型 | ||
| 216 | + */ | ||
| 217 | + @Test | ||
| 218 | + public void testAutoGenerateErrorCodes_021() { | ||
| 219 | + // mock 数据 | ||
| 220 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType())); | ||
| 221 | + errorCodeMapper.insert(dbErrorCode); | ||
| 222 | + // 准备参数 | ||
| 223 | + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, | ||
| 224 | + o -> o.setCode(dbErrorCode.getCode())); | ||
| 225 | + // mock 方法 | ||
| 226 | + | ||
| 227 | + // 调用 | ||
| 228 | + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); | ||
| 229 | + // 断言,相等,说明不会更新 | ||
| 230 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); | ||
| 231 | + assertPojoEquals(dbErrorCode, errorCode); | ||
| 232 | + } | ||
| 233 | + | ||
| 234 | + /** | ||
| 235 | + * 情况 2.2,错误码存在,但是是 applicationName 不匹配 | ||
| 236 | + */ | ||
| 237 | + @Test | ||
| 238 | + public void testAutoGenerateErrorCodes_022() { | ||
| 239 | + // mock 数据 | ||
| 240 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); | ||
| 241 | + errorCodeMapper.insert(dbErrorCode); | ||
| 242 | + // 准备参数 | ||
| 243 | + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, | ||
| 244 | + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(randomString())); | ||
| 245 | + // mock 方法 | ||
| 246 | + | ||
| 247 | + // 调用 | ||
| 248 | + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); | ||
| 249 | + // 断言,相等,说明不会更新 | ||
| 250 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); | ||
| 251 | + assertPojoEquals(dbErrorCode, errorCode); | ||
| 252 | + } | ||
| 253 | + | ||
| 254 | + /** | ||
| 255 | + * 情况 2.3,错误码存在,但是是 message 相同 | ||
| 256 | + */ | ||
| 257 | + @Test | ||
| 258 | + public void testAutoGenerateErrorCodes_023() { | ||
| 259 | + // mock 数据 | ||
| 260 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); | ||
| 261 | + errorCodeMapper.insert(dbErrorCode); | ||
| 262 | + // 准备参数 | ||
| 263 | + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, | ||
| 264 | + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName()) | ||
| 265 | + .setMessage(dbErrorCode.getMessage())); | ||
| 266 | + // mock 方法 | ||
| 267 | + | ||
| 268 | + // 调用 | ||
| 269 | + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); | ||
| 270 | + // 断言,相等,说明不会更新 | ||
| 271 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); | ||
| 272 | + assertPojoEquals(dbErrorCode, errorCode); | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + /** | ||
| 276 | + * 情况 2.3,错误码存在,但是是 message 不同,则进行更新 | ||
| 277 | + */ | ||
| 278 | + @Test | ||
| 279 | + public void testAutoGenerateErrorCodes_024() { | ||
| 280 | + // mock 数据 | ||
| 281 | + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); | ||
| 282 | + errorCodeMapper.insert(dbErrorCode); | ||
| 283 | + // 准备参数 | ||
| 284 | + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, | ||
| 285 | + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName())); | ||
| 286 | + // mock 方法 | ||
| 287 | + | ||
| 288 | + // 调用 | ||
| 289 | + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); | ||
| 290 | + // 断言,匹配 | ||
| 291 | + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); | ||
| 292 | + assertPojoEquals(generateReqDTO, errorCode); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + // ========== 随机对象 ========== | ||
| 296 | + | ||
| 297 | + @SafeVarargs | ||
| 298 | + private static SysErrorCodeDO randomInfErrorCodeDO(Consumer<SysErrorCodeDO>... consumers) { | ||
| 299 | + Consumer<SysErrorCodeDO> consumer = (o) -> { | ||
| 300 | + o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // 保证 key 的范围 | ||
| 301 | + }; | ||
| 302 | + return randomPojo(SysErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); | ||
| 303 | + } | ||
| 304 | + | ||
| 305 | +} |
src/test/resources/sql/clean.sql
| @@ -22,3 +22,4 @@ DELETE FROM "sys_user"; | @@ -22,3 +22,4 @@ DELETE FROM "sys_user"; | ||
| 22 | DELETE FROM "sys_sms_channel"; | 22 | DELETE FROM "sys_sms_channel"; |
| 23 | DELETE FROM "sys_sms_template"; | 23 | DELETE FROM "sys_sms_template"; |
| 24 | DELETE FROM "sys_sms_log"; | 24 | DELETE FROM "sys_sms_log"; |
| 25 | +DELETE FROM "sys_error_code"; |
src/test/resources/sql/create_tables.sql
| @@ -359,7 +359,7 @@ CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( | @@ -359,7 +359,7 @@ CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( | ||
| 359 | PRIMARY KEY ("id") | 359 | PRIMARY KEY ("id") |
| 360 | ) COMMENT '短信渠道'; | 360 | ) COMMENT '短信渠道'; |
| 361 | 361 | ||
| 362 | -CREATE TABLE "sys_sms_template" ( | 362 | +CREATE TABLE IF NOT EXISTS "sys_sms_template" ( |
| 363 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | 363 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, |
| 364 | "type" tinyint NOT NULL, | 364 | "type" tinyint NOT NULL, |
| 365 | "status" tinyint NOT NULL, | 365 | "status" tinyint NOT NULL, |
| @@ -379,7 +379,7 @@ CREATE TABLE "sys_sms_template" ( | @@ -379,7 +379,7 @@ CREATE TABLE "sys_sms_template" ( | ||
| 379 | PRIMARY KEY ("id") | 379 | PRIMARY KEY ("id") |
| 380 | ) COMMENT '短信模板'; | 380 | ) COMMENT '短信模板'; |
| 381 | 381 | ||
| 382 | -CREATE TABLE "sys_sms_log" ( | 382 | +CREATE TABLE IF NOT EXISTS "sys_sms_log" ( |
| 383 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | 383 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, |
| 384 | "channel_id" bigint NOT NULL, | 384 | "channel_id" bigint NOT NULL, |
| 385 | "channel_code" varchar(63) NOT NULL, | 385 | "channel_code" varchar(63) NOT NULL, |
| @@ -411,3 +411,18 @@ CREATE TABLE "sys_sms_log" ( | @@ -411,3 +411,18 @@ CREATE TABLE "sys_sms_log" ( | ||
| 411 | "deleted" bit NOT NULL DEFAULT FALSE, | 411 | "deleted" bit NOT NULL DEFAULT FALSE, |
| 412 | PRIMARY KEY ("id") | 412 | PRIMARY KEY ("id") |
| 413 | ) COMMENT '短信日志'; | 413 | ) COMMENT '短信日志'; |
| 414 | + | ||
| 415 | +CREATE TABLE IF NOT EXISTS "sys_error_code" ( | ||
| 416 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | ||
| 417 | + "type" tinyint NOT NULL DEFAULT '0', | ||
| 418 | + "application_name" varchar(50) NOT NULL, | ||
| 419 | + "code" int NOT NULL DEFAULT '0', | ||
| 420 | + "message" varchar(512) NOT NULL DEFAULT '', | ||
| 421 | + "memo" varchar(512) DEFAULT '', | ||
| 422 | + "creator" varchar(64) DEFAULT '', | ||
| 423 | + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 424 | + "updater" varchar(64) DEFAULT '', | ||
| 425 | + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | ||
| 426 | + "deleted" bit NOT NULL DEFAULT FALSE, | ||
| 427 | + PRIMARY KEY ("id") | ||
| 428 | +) COMMENT '错误码表'; |