Commit f6bb33863fbd86c010b2851ed1ee6bc87fe10613
1 parent
f7f27c96
1. 完成字典类型的迁移
2. 开始字典数据的迁移
Showing
27 changed files
with
753 additions
and
222 deletions
ruoyi-ui/src/api/system/dict/type.js
| @@ -3,7 +3,7 @@ import request from '@/utils/request' | @@ -3,7 +3,7 @@ import request from '@/utils/request' | ||
| 3 | // 查询字典类型列表 | 3 | // 查询字典类型列表 |
| 4 | export function listType(query) { | 4 | export function listType(query) { |
| 5 | return request({ | 5 | return request({ |
| 6 | - url: '/system/dict/type/list', | 6 | + url: '/system/dict-type/page', |
| 7 | method: 'get', | 7 | method: 'get', |
| 8 | params: query | 8 | params: query |
| 9 | }) | 9 | }) |
| @@ -12,7 +12,7 @@ export function listType(query) { | @@ -12,7 +12,7 @@ export function listType(query) { | ||
| 12 | // 查询字典类型详细 | 12 | // 查询字典类型详细 |
| 13 | export function getType(dictId) { | 13 | export function getType(dictId) { |
| 14 | return request({ | 14 | return request({ |
| 15 | - url: '/system/dict/type/' + dictId, | 15 | + url: '/system/dict-type/get?id=' + dictId, |
| 16 | method: 'get' | 16 | method: 'get' |
| 17 | }) | 17 | }) |
| 18 | } | 18 | } |
| @@ -20,7 +20,7 @@ export function getType(dictId) { | @@ -20,7 +20,7 @@ export function getType(dictId) { | ||
| 20 | // 新增字典类型 | 20 | // 新增字典类型 |
| 21 | export function addType(data) { | 21 | export function addType(data) { |
| 22 | return request({ | 22 | return request({ |
| 23 | - url: '/system/dict/type', | 23 | + url: '/system/dict-type/create', |
| 24 | method: 'post', | 24 | method: 'post', |
| 25 | data: data | 25 | data: data |
| 26 | }) | 26 | }) |
| @@ -29,8 +29,8 @@ export function addType(data) { | @@ -29,8 +29,8 @@ export function addType(data) { | ||
| 29 | // 修改字典类型 | 29 | // 修改字典类型 |
| 30 | export function updateType(data) { | 30 | export function updateType(data) { |
| 31 | return request({ | 31 | return request({ |
| 32 | - url: '/system/dict/type', | ||
| 33 | - method: 'put', | 32 | + url: '/system/dict-type/update', |
| 33 | + method: 'post', | ||
| 34 | data: data | 34 | data: data |
| 35 | }) | 35 | }) |
| 36 | } | 36 | } |
| @@ -38,23 +38,15 @@ export function updateType(data) { | @@ -38,23 +38,15 @@ export function updateType(data) { | ||
| 38 | // 删除字典类型 | 38 | // 删除字典类型 |
| 39 | export function delType(dictId) { | 39 | export function delType(dictId) { |
| 40 | return request({ | 40 | return request({ |
| 41 | - url: '/system/dict/type/' + dictId, | ||
| 42 | - method: 'delete' | ||
| 43 | - }) | ||
| 44 | -} | ||
| 45 | - | ||
| 46 | -// 清理参数缓存 | ||
| 47 | -export function clearCache() { | ||
| 48 | - return request({ | ||
| 49 | - url: '/system/dict/type/clearCache', | ||
| 50 | - method: 'delete' | 41 | + url: '/system/dict-type/delete?id=' + dictId, |
| 42 | + method: 'post' | ||
| 51 | }) | 43 | }) |
| 52 | } | 44 | } |
| 53 | 45 | ||
| 54 | // 导出字典类型 | 46 | // 导出字典类型 |
| 55 | export function exportType(query) { | 47 | export function exportType(query) { |
| 56 | return request({ | 48 | return request({ |
| 57 | - url: '/system/dict/type/export', | 49 | + url: '/system/dict-type/export', |
| 58 | method: 'get', | 50 | method: 'get', |
| 59 | params: query | 51 | params: query |
| 60 | }) | 52 | }) |
| @@ -63,7 +55,7 @@ export function exportType(query) { | @@ -63,7 +55,7 @@ export function exportType(query) { | ||
| 63 | // 获取字典选择框列表 | 55 | // 获取字典选择框列表 |
| 64 | export function optionselect() { | 56 | export function optionselect() { |
| 65 | return request({ | 57 | return request({ |
| 66 | - url: '/system/dict/type/optionselect', | 58 | + url: '/system/dict-type/optionselect', |
| 67 | method: 'get' | 59 | method: 'get' |
| 68 | }) | 60 | }) |
| 69 | -} | ||
| 70 | \ No newline at end of file | 61 | \ No newline at end of file |
| 62 | +} |
ruoyi-ui/src/views/system/dict/index.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="app-container"> | 2 | <div class="app-container"> |
| 3 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> | 3 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> |
| 4 | - <el-form-item label="字典名称" prop="dictName"> | 4 | + <el-form-item label="字典名称" prop="name"> |
| 5 | <el-input | 5 | <el-input |
| 6 | - v-model="queryParams.dictName" | 6 | + v-model="queryParams.name" |
| 7 | placeholder="请输入字典名称" | 7 | placeholder="请输入字典名称" |
| 8 | clearable | 8 | clearable |
| 9 | size="small" | 9 | size="small" |
| @@ -11,9 +11,9 @@ | @@ -11,9 +11,9 @@ | ||
| 11 | @keyup.enter.native="handleQuery" | 11 | @keyup.enter.native="handleQuery" |
| 12 | /> | 12 | /> |
| 13 | </el-form-item> | 13 | </el-form-item> |
| 14 | - <el-form-item label="字典类型" prop="dictType"> | 14 | + <el-form-item label="字典类型" prop="type"> |
| 15 | <el-input | 15 | <el-input |
| 16 | - v-model="queryParams.dictType" | 16 | + v-model="queryParams.type" |
| 17 | placeholder="请输入字典类型" | 17 | placeholder="请输入字典类型" |
| 18 | clearable | 18 | clearable |
| 19 | size="small" | 19 | size="small" |
| @@ -30,10 +30,10 @@ | @@ -30,10 +30,10 @@ | ||
| 30 | style="width: 240px" | 30 | style="width: 240px" |
| 31 | > | 31 | > |
| 32 | <el-option | 32 | <el-option |
| 33 | - v-for="dict in statusOptions" | ||
| 34 | - :key="dict.dictValue" | ||
| 35 | - :label="dict.dictLabel" | ||
| 36 | - :value="dict.dictValue" | 33 | + v-for="dict in statusDictDatas" |
| 34 | + :key="parseInt(dict.value)" | ||
| 35 | + :label="dict.label" | ||
| 36 | + :value="parseInt(dict.value)" | ||
| 37 | /> | 37 | /> |
| 38 | </el-select> | 38 | </el-select> |
| 39 | </el-form-item> | 39 | </el-form-item> |
| @@ -67,26 +67,6 @@ | @@ -67,26 +67,6 @@ | ||
| 67 | </el-col> | 67 | </el-col> |
| 68 | <el-col :span="1.5"> | 68 | <el-col :span="1.5"> |
| 69 | <el-button | 69 | <el-button |
| 70 | - type="success" | ||
| 71 | - icon="el-icon-edit" | ||
| 72 | - size="mini" | ||
| 73 | - :disabled="single" | ||
| 74 | - @click="handleUpdate" | ||
| 75 | - v-hasPermi="['system:dict:edit']" | ||
| 76 | - >修改</el-button> | ||
| 77 | - </el-col> | ||
| 78 | - <el-col :span="1.5"> | ||
| 79 | - <el-button | ||
| 80 | - type="danger" | ||
| 81 | - icon="el-icon-delete" | ||
| 82 | - size="mini" | ||
| 83 | - :disabled="multiple" | ||
| 84 | - @click="handleDelete" | ||
| 85 | - v-hasPermi="['system:dict:remove']" | ||
| 86 | - >删除</el-button> | ||
| 87 | - </el-col> | ||
| 88 | - <el-col :span="1.5"> | ||
| 89 | - <el-button | ||
| 90 | type="warning" | 70 | type="warning" |
| 91 | icon="el-icon-download" | 71 | icon="el-icon-download" |
| 92 | size="mini" | 72 | size="mini" |
| @@ -94,26 +74,16 @@ | @@ -94,26 +74,16 @@ | ||
| 94 | v-hasPermi="['system:dict:export']" | 74 | v-hasPermi="['system:dict:export']" |
| 95 | >导出</el-button> | 75 | >导出</el-button> |
| 96 | </el-col> | 76 | </el-col> |
| 97 | - <el-col :span="1.5"> | ||
| 98 | - <el-button | ||
| 99 | - type="danger" | ||
| 100 | - icon="el-icon-refresh" | ||
| 101 | - size="mini" | ||
| 102 | - @click="handleClearCache" | ||
| 103 | - v-hasPermi="['system:dict:remove']" | ||
| 104 | - >清理缓存</el-button> | ||
| 105 | - </el-col> | ||
| 106 | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | 77 | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| 107 | </el-row> | 78 | </el-row> |
| 108 | 79 | ||
| 109 | - <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange"> | ||
| 110 | - <el-table-column type="selection" width="55" align="center" /> | ||
| 111 | - <el-table-column label="字典编号" align="center" prop="dictId" /> | ||
| 112 | - <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" /> | 80 | + <el-table v-loading="loading" :data="typeList"> |
| 81 | + <el-table-column label="字典编号" align="center" prop="id" /> | ||
| 82 | + <el-table-column label="字典名称" align="center" prop="name" :show-overflow-tooltip="true" /> | ||
| 113 | <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> | 83 | <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> |
| 114 | <template slot-scope="scope"> | 84 | <template slot-scope="scope"> |
| 115 | - <router-link :to="'/dict/type/data/' + scope.row.dictId" class="link-type"> | ||
| 116 | - <span>{{ scope.row.dictType }}</span> | 85 | + <router-link :to="'/dict/type/data/' + scope.row.id" class="link-type"> |
| 86 | + <span>{{ scope.row.type }}</span> | ||
| 117 | </router-link> | 87 | </router-link> |
| 118 | </template> | 88 | </template> |
| 119 | </el-table-column> | 89 | </el-table-column> |
| @@ -147,7 +117,7 @@ | @@ -147,7 +117,7 @@ | ||
| 147 | <pagination | 117 | <pagination |
| 148 | v-show="total>0" | 118 | v-show="total>0" |
| 149 | :total="total" | 119 | :total="total" |
| 150 | - :page.sync="queryParams.pageNum" | 120 | + :page.sync="queryParams.pageNo" |
| 151 | :limit.sync="queryParams.pageSize" | 121 | :limit.sync="queryParams.pageSize" |
| 152 | @pagination="getList" | 122 | @pagination="getList" |
| 153 | /> | 123 | /> |
| @@ -155,19 +125,19 @@ | @@ -155,19 +125,19 @@ | ||
| 155 | <!-- 添加或修改参数配置对话框 --> | 125 | <!-- 添加或修改参数配置对话框 --> |
| 156 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | 126 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| 157 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | 127 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| 158 | - <el-form-item label="字典名称" prop="dictName"> | ||
| 159 | - <el-input v-model="form.dictName" placeholder="请输入字典名称" /> | 128 | + <el-form-item label="字典名称" prop="name"> |
| 129 | + <el-input v-model="form.name" placeholder="请输入字典名称" /> | ||
| 160 | </el-form-item> | 130 | </el-form-item> |
| 161 | - <el-form-item label="字典类型" prop="dictType"> | ||
| 162 | - <el-input v-model="form.dictType" placeholder="请输入字典类型" /> | 131 | + <el-form-item label="字典类型" prop="type"> |
| 132 | + <el-input v-model="form.type" placeholder="请输入字典类型" /> | ||
| 163 | </el-form-item> | 133 | </el-form-item> |
| 164 | <el-form-item label="状态" prop="status"> | 134 | <el-form-item label="状态" prop="status"> |
| 165 | <el-radio-group v-model="form.status"> | 135 | <el-radio-group v-model="form.status"> |
| 166 | <el-radio | 136 | <el-radio |
| 167 | - v-for="dict in statusOptions" | ||
| 168 | - :key="dict.dictValue" | ||
| 169 | - :label="dict.dictValue" | ||
| 170 | - >{{dict.dictLabel}}</el-radio> | 137 | + v-for="dict in statusDictDatas" |
| 138 | + :key="parseInt(dict.value)" | ||
| 139 | + :label="parseInt(dict.value)" | ||
| 140 | + >{{dict.label}}</el-radio> | ||
| 171 | </el-radio-group> | 141 | </el-radio-group> |
| 172 | </el-form-item> | 142 | </el-form-item> |
| 173 | <el-form-item label="备注" prop="remark"> | 143 | <el-form-item label="备注" prop="remark"> |
| @@ -183,7 +153,10 @@ | @@ -183,7 +153,10 @@ | ||
| 183 | </template> | 153 | </template> |
| 184 | 154 | ||
| 185 | <script> | 155 | <script> |
| 186 | -import { listType, getType, delType, addType, updateType, exportType, clearCache } from "@/api/system/dict/type"; | 156 | +import { listType, getType, delType, addType, updateType, exportType } from "@/api/system/dict/type"; |
| 157 | + | ||
| 158 | +import { SysCommonStatusEnum } from '@/utils/constants' | ||
| 159 | +import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | ||
| 187 | 160 | ||
| 188 | export default { | 161 | export default { |
| 189 | name: "Dict", | 162 | name: "Dict", |
| @@ -191,12 +164,6 @@ export default { | @@ -191,12 +164,6 @@ export default { | ||
| 191 | return { | 164 | return { |
| 192 | // 遮罩层 | 165 | // 遮罩层 |
| 193 | loading: true, | 166 | loading: true, |
| 194 | - // 选中数组 | ||
| 195 | - ids: [], | ||
| 196 | - // 非单个禁用 | ||
| 197 | - single: true, | ||
| 198 | - // 非多个禁用 | ||
| 199 | - multiple: true, | ||
| 200 | // 显示搜索条件 | 167 | // 显示搜索条件 |
| 201 | showSearch: true, | 168 | showSearch: true, |
| 202 | // 总条数 | 169 | // 总条数 |
| @@ -213,45 +180,50 @@ export default { | @@ -213,45 +180,50 @@ export default { | ||
| 213 | dateRange: [], | 180 | dateRange: [], |
| 214 | // 查询参数 | 181 | // 查询参数 |
| 215 | queryParams: { | 182 | queryParams: { |
| 216 | - pageNum: 1, | 183 | + pageNo: 1, |
| 217 | pageSize: 10, | 184 | pageSize: 10, |
| 218 | - dictName: undefined, | ||
| 219 | - dictType: undefined, | 185 | + name: undefined, |
| 186 | + type: undefined, | ||
| 220 | status: undefined | 187 | status: undefined |
| 221 | }, | 188 | }, |
| 222 | // 表单参数 | 189 | // 表单参数 |
| 223 | form: {}, | 190 | form: {}, |
| 224 | // 表单校验 | 191 | // 表单校验 |
| 225 | rules: { | 192 | rules: { |
| 226 | - dictName: [ | 193 | + name: [ |
| 227 | { required: true, message: "字典名称不能为空", trigger: "blur" } | 194 | { required: true, message: "字典名称不能为空", trigger: "blur" } |
| 228 | ], | 195 | ], |
| 229 | - dictType: [ | 196 | + type: [ |
| 230 | { required: true, message: "字典类型不能为空", trigger: "blur" } | 197 | { required: true, message: "字典类型不能为空", trigger: "blur" } |
| 231 | ] | 198 | ] |
| 232 | - } | 199 | + }, |
| 200 | + | ||
| 201 | + // 枚举 | ||
| 202 | + CommonStatusEnum: SysCommonStatusEnum, | ||
| 203 | + // 数据字典 | ||
| 204 | + statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS) | ||
| 233 | }; | 205 | }; |
| 234 | }, | 206 | }, |
| 235 | created() { | 207 | created() { |
| 236 | this.getList(); | 208 | this.getList(); |
| 237 | - this.getDicts("sys_normal_disable").then(response => { | ||
| 238 | - this.statusOptions = response.data; | ||
| 239 | - }); | ||
| 240 | }, | 209 | }, |
| 241 | methods: { | 210 | methods: { |
| 242 | /** 查询字典类型列表 */ | 211 | /** 查询字典类型列表 */ |
| 243 | getList() { | 212 | getList() { |
| 244 | this.loading = true; | 213 | this.loading = true; |
| 245 | - listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => { | ||
| 246 | - this.typeList = response.rows; | ||
| 247 | - this.total = response.total; | 214 | + listType(this.addDateRange(this.queryParams, [ |
| 215 | + this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined, | ||
| 216 | + this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined, | ||
| 217 | + ])).then(response => { | ||
| 218 | + this.typeList = response.data.list; | ||
| 219 | + this.total = response.data.total; | ||
| 248 | this.loading = false; | 220 | this.loading = false; |
| 249 | } | 221 | } |
| 250 | ); | 222 | ); |
| 251 | }, | 223 | }, |
| 252 | // 字典状态字典翻译 | 224 | // 字典状态字典翻译 |
| 253 | statusFormat(row, column) { | 225 | statusFormat(row, column) { |
| 254 | - return this.selectDictLabel(this.statusOptions, row.status); | 226 | + return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status) |
| 255 | }, | 227 | }, |
| 256 | // 取消按钮 | 228 | // 取消按钮 |
| 257 | cancel() { | 229 | cancel() { |
| @@ -261,17 +233,17 @@ export default { | @@ -261,17 +233,17 @@ export default { | ||
| 261 | // 表单重置 | 233 | // 表单重置 |
| 262 | reset() { | 234 | reset() { |
| 263 | this.form = { | 235 | this.form = { |
| 264 | - dictId: undefined, | ||
| 265 | - dictName: undefined, | ||
| 266 | - dictType: undefined, | ||
| 267 | - status: "0", | 236 | + id: undefined, |
| 237 | + name: undefined, | ||
| 238 | + type: undefined, | ||
| 239 | + status: SysCommonStatusEnum.ENABLE, | ||
| 268 | remark: undefined | 240 | remark: undefined |
| 269 | }; | 241 | }; |
| 270 | this.resetForm("form"); | 242 | this.resetForm("form"); |
| 271 | }, | 243 | }, |
| 272 | /** 搜索按钮操作 */ | 244 | /** 搜索按钮操作 */ |
| 273 | handleQuery() { | 245 | handleQuery() { |
| 274 | - this.queryParams.pageNum = 1; | 246 | + this.queryParams.pageNo = 1; |
| 275 | this.getList(); | 247 | this.getList(); |
| 276 | }, | 248 | }, |
| 277 | /** 重置按钮操作 */ | 249 | /** 重置按钮操作 */ |
| @@ -286,17 +258,11 @@ export default { | @@ -286,17 +258,11 @@ export default { | ||
| 286 | this.open = true; | 258 | this.open = true; |
| 287 | this.title = "添加字典类型"; | 259 | this.title = "添加字典类型"; |
| 288 | }, | 260 | }, |
| 289 | - // 多选框选中数据 | ||
| 290 | - handleSelectionChange(selection) { | ||
| 291 | - this.ids = selection.map(item => item.dictId) | ||
| 292 | - this.single = selection.length!=1 | ||
| 293 | - this.multiple = !selection.length | ||
| 294 | - }, | ||
| 295 | /** 修改按钮操作 */ | 261 | /** 修改按钮操作 */ |
| 296 | handleUpdate(row) { | 262 | handleUpdate(row) { |
| 297 | this.reset(); | 263 | this.reset(); |
| 298 | - const dictId = row.dictId || this.ids | ||
| 299 | - getType(dictId).then(response => { | 264 | + const id = row.id; |
| 265 | + getType(id).then(response => { | ||
| 300 | this.form = response.data; | 266 | this.form = response.data; |
| 301 | this.open = true; | 267 | this.open = true; |
| 302 | this.title = "修改字典类型"; | 268 | this.title = "修改字典类型"; |
| @@ -306,7 +272,7 @@ export default { | @@ -306,7 +272,7 @@ export default { | ||
| 306 | submitForm: function() { | 272 | submitForm: function() { |
| 307 | this.$refs["form"].validate(valid => { | 273 | this.$refs["form"].validate(valid => { |
| 308 | if (valid) { | 274 | if (valid) { |
| 309 | - if (this.form.dictId != undefined) { | 275 | + if (this.form.id !== undefined) { |
| 310 | updateType(this.form).then(response => { | 276 | updateType(this.form).then(response => { |
| 311 | this.msgSuccess("修改成功"); | 277 | this.msgSuccess("修改成功"); |
| 312 | this.open = false; | 278 | this.open = false; |
| @@ -324,13 +290,13 @@ export default { | @@ -324,13 +290,13 @@ export default { | ||
| 324 | }, | 290 | }, |
| 325 | /** 删除按钮操作 */ | 291 | /** 删除按钮操作 */ |
| 326 | handleDelete(row) { | 292 | handleDelete(row) { |
| 327 | - const dictIds = row.dictId || this.ids; | ||
| 328 | - this.$confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?', "警告", { | 293 | + const ids = row.id || this.ids; |
| 294 | + this.$confirm('是否确认删除字典编号为"' + ids + '"的数据项?', "警告", { | ||
| 329 | confirmButtonText: "确定", | 295 | confirmButtonText: "确定", |
| 330 | cancelButtonText: "取消", | 296 | cancelButtonText: "取消", |
| 331 | type: "warning" | 297 | type: "warning" |
| 332 | }).then(function() { | 298 | }).then(function() { |
| 333 | - return delType(dictIds); | 299 | + return delType(ids); |
| 334 | }).then(() => { | 300 | }).then(() => { |
| 335 | this.getList(); | 301 | this.getList(); |
| 336 | this.msgSuccess("删除成功"); | 302 | this.msgSuccess("删除成功"); |
| @@ -357,4 +323,4 @@ export default { | @@ -357,4 +323,4 @@ export default { | ||
| 357 | } | 323 | } |
| 358 | } | 324 | } |
| 359 | }; | 325 | }; |
| 360 | -</script> | ||
| 361 | \ No newline at end of file | 326 | \ No newline at end of file |
| 327 | +</script> |
ruoyi-ui/src/views/system/post/index.vue
| @@ -141,12 +141,6 @@ export default { | @@ -141,12 +141,6 @@ export default { | ||
| 141 | return { | 141 | return { |
| 142 | // 遮罩层 | 142 | // 遮罩层 |
| 143 | loading: true, | 143 | loading: true, |
| 144 | - // 选中数组 | ||
| 145 | - ids: [], | ||
| 146 | - // 非单个禁用 | ||
| 147 | - single: true, | ||
| 148 | - // 非多个禁用 | ||
| 149 | - multiple: true, | ||
| 150 | // 显示搜索条件 | 144 | // 显示搜索条件 |
| 151 | showSearch: true, | 145 | showSearch: true, |
| 152 | // 总条数 | 146 | // 总条数 |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/SysDictDataController.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.dict; | 1 | package cn.iocoder.dashboard.modules.system.controller.dict; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; | 3 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | -import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDataDictSimpleVO; | 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.*; | ||
| 5 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; | 6 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; |
| 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 7 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; | 8 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 8 | import io.swagger.annotations.Api; | 9 | import io.swagger.annotations.Api; |
| 10 | +import io.swagger.annotations.ApiImplicitParam; | ||
| 9 | import io.swagger.annotations.ApiOperation; | 11 | import io.swagger.annotations.ApiOperation; |
| 10 | -import org.springframework.web.bind.annotation.GetMapping; | ||
| 11 | -import org.springframework.web.bind.annotation.RequestMapping; | ||
| 12 | -import org.springframework.web.bind.annotation.RestController; | 12 | +import org.springframework.validation.annotation.Validated; |
| 13 | +import org.springframework.web.bind.annotation.*; | ||
| 13 | 14 | ||
| 14 | import javax.annotation.Resource; | 15 | import javax.annotation.Resource; |
| 15 | import java.util.List; | 16 | import java.util.List; |
| @@ -27,79 +28,61 @@ public class SysDictDataController { | @@ -27,79 +28,61 @@ public class SysDictDataController { | ||
| 27 | @GetMapping("/list-all-simple") | 28 | @GetMapping("/list-all-simple") |
| 28 | @ApiOperation(value = "获得全部字典数据列表", notes = "一般用于管理后台缓存字典数据在本地") | 29 | @ApiOperation(value = "获得全部字典数据列表", notes = "一般用于管理后台缓存字典数据在本地") |
| 29 | // 无需添加权限认证,因为前端全局都需要 | 30 | // 无需添加权限认证,因为前端全局都需要 |
| 30 | - public CommonResult<List<SysDataDictSimpleVO>> listSimpleDictDatas() { | 31 | + public CommonResult<List<SysDictDataSimpleVO>> listSimpleDictDatas() { |
| 31 | List<SysDictDataDO> list = dictDataService.listDictDatas(); | 32 | List<SysDictDataDO> list = dictDataService.listDictDatas(); |
| 32 | return success(SysDictDataConvert.INSTANCE.convertList(list)); | 33 | return success(SysDictDataConvert.INSTANCE.convertList(list)); |
| 33 | } | 34 | } |
| 34 | 35 | ||
| 36 | + @ApiOperation("/获得字典类型的分页列表") | ||
| 37 | + @GetMapping("/page") | ||
| 35 | // @PreAuthorize("@ss.hasPermi('system:dict:list')") | 38 | // @PreAuthorize("@ss.hasPermi('system:dict:list')") |
| 36 | -// @GetMapping("/list") | ||
| 37 | -// public TableDataInfo list(SysDictData dictData) { | ||
| 38 | -// startPage(); | ||
| 39 | -// List<SysDictData> list = dictDataService.selectDictDataList(dictData); | ||
| 40 | -// return getDataTable(list); | ||
| 41 | -// } | ||
| 42 | -// | ||
| 43 | -// @Log(title = "字典数据", businessType = BusinessType.EXPORT) | ||
| 44 | -// @PreAuthorize("@ss.hasPermi('system:dict:export')") | ||
| 45 | -// @GetMapping("/export") | ||
| 46 | -// public AjaxResult export(SysDictData dictData) { | ||
| 47 | -// List<SysDictData> list = dictDataService.selectDictDataList(dictData); | ||
| 48 | -// ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class); | ||
| 49 | -// return util.exportExcel(list, "字典数据"); | ||
| 50 | -// } | ||
| 51 | -// | ||
| 52 | -// /** | ||
| 53 | -// * 查询字典数据详细 | ||
| 54 | -// */ | 39 | + public CommonResult<PageResult<SysDictDataRespVO>> pageDictTypes(@Validated SysDictDataPageReqVO reqVO) { |
| 40 | + return success(SysDictDataConvert.INSTANCE.convertPage(dictDataService.pageDictDatas(reqVO))); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + @ApiOperation("/查询字典数据详细") | ||
| 44 | + @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") | ||
| 45 | + @GetMapping(value = "/get") | ||
| 55 | // @PreAuthorize("@ss.hasPermi('system:dict:query')") | 46 | // @PreAuthorize("@ss.hasPermi('system:dict:query')") |
| 56 | -// @GetMapping(value = "/{dictCode}") | ||
| 57 | -// public AjaxResult getInfo(@PathVariable Long dictCode) { | ||
| 58 | -// return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); | ||
| 59 | -// } | ||
| 60 | -// | ||
| 61 | -// /** | ||
| 62 | -// * 根据字典类型查询字典数据信息 | ||
| 63 | -// */ | ||
| 64 | -// @GetMapping(value = "/type/{dictType}") | ||
| 65 | -// public AjaxResult dictType(@PathVariable String dictType) { | ||
| 66 | -// List<SysDictData> data = dictTypeService.selectDictDataByType(dictType); | ||
| 67 | -// if (StringUtils.isNull(data)) { | ||
| 68 | -// data = new ArrayList<SysDictData>(); | ||
| 69 | -// } | ||
| 70 | -// return AjaxResult.success(data); | ||
| 71 | -// } | ||
| 72 | -// | ||
| 73 | -// /** | ||
| 74 | -// * 新增字典类型 | ||
| 75 | -// */ | 47 | + public CommonResult<SysDictDataRespVO> getDictData(@RequestParam("id") Long id) { |
| 48 | + return success(SysDictDataConvert.INSTANCE.convert(dictDataService.getDictData(id))); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @ApiOperation("新增字典数据") | ||
| 52 | + @PostMapping("/create") | ||
| 76 | // @PreAuthorize("@ss.hasPermi('system:dict:add')") | 53 | // @PreAuthorize("@ss.hasPermi('system:dict:add')") |
| 77 | -// @Log(title = "字典数据", businessType = BusinessType.INSERT) | ||
| 78 | -// @PostMapping | ||
| 79 | -// public AjaxResult add(@Validated @RequestBody SysDictData dict) { | ||
| 80 | -// dict.setCreateBy(SecurityUtils.getUsername()); | ||
| 81 | -// return toAjax(dictDataService.insertDictData(dict)); | ||
| 82 | -// } | ||
| 83 | -// | ||
| 84 | -// /** | ||
| 85 | -// * 修改保存字典类型 | ||
| 86 | -// */ | 54 | +// @Log(title = "字典数据", businessData = BusinessData.INSERT) |
| 55 | + public CommonResult<Long> createDictData(@Validated @RequestBody SysDictDataCreateReqVO reqVO) { | ||
| 56 | + Long dictDataId = dictDataService.createDictData(reqVO); | ||
| 57 | + return success(dictDataId); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @ApiOperation("修改字典数据") | ||
| 61 | + @PostMapping("update") | ||
| 87 | // @PreAuthorize("@ss.hasPermi('system:dict:edit')") | 62 | // @PreAuthorize("@ss.hasPermi('system:dict:edit')") |
| 88 | -// @Log(title = "字典数据", businessType = BusinessType.UPDATE) | ||
| 89 | -// @PutMapping | ||
| 90 | -// public AjaxResult edit(@Validated @RequestBody SysDictData dict) { | ||
| 91 | -// dict.setUpdateBy(SecurityUtils.getUsername()); | ||
| 92 | -// return toAjax(dictDataService.updateDictData(dict)); | ||
| 93 | -// } | ||
| 94 | -// | ||
| 95 | -// /** | ||
| 96 | -// * 删除字典类型 | ||
| 97 | -// */ | 63 | +// @Log(title = "字典数据", businessData = BusinessData.UPDATE) |
| 64 | + public CommonResult<Boolean> updateDictData(@Validated @RequestBody SysDictDataUpdateReqVO reqVO) { | ||
| 65 | + dictDataService.updateDictData(reqVO); | ||
| 66 | + return success(true); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @ApiOperation("删除字典数据") | ||
| 70 | + @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") | ||
| 71 | + @PostMapping("/delete") | ||
| 98 | // @PreAuthorize("@ss.hasPermi('system:dict:remove')") | 72 | // @PreAuthorize("@ss.hasPermi('system:dict:remove')") |
| 99 | -// @Log(title = "字典类型", businessType = BusinessType.DELETE) | ||
| 100 | -// @DeleteMapping("/{dictCodes}") | ||
| 101 | -// public AjaxResult remove(@PathVariable Long[] dictCodes) { | ||
| 102 | -// return toAjax(dictDataService.deleteDictDataByIds(dictCodes)); | 73 | + public CommonResult<Boolean> deleteDictData(Long id) { |
| 74 | + dictDataService.deleteDictData(id); | ||
| 75 | + return success(true); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + // | ||
| 79 | +// @Log(title = "字典类型", businessType = BusinessType.EXPORT) | ||
| 80 | +// @PreAuthorize("@ss.hasPermi('system:dict:export')") | ||
| 81 | +// @GetMapping("/export") | ||
| 82 | +// public AjaxResult export(SysDictType dictType) { | ||
| 83 | +// List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); | ||
| 84 | +// ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class); | ||
| 85 | +// return util.exportExcel(list, "字典类型"); | ||
| 103 | // } | 86 | // } |
| 104 | 87 | ||
| 105 | } | 88 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/SysDictTypeController.java
| @@ -5,7 +5,7 @@ import cn.iocoder.dashboard.common.pojo.PageResult; | @@ -5,7 +5,7 @@ import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; |
| 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeRespVO; | 7 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeRespVO; |
| 8 | -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; | 8 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; |
| 9 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictTypeConvert; | 9 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictTypeConvert; |
| 10 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | 10 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; |
| 11 | import io.swagger.annotations.Api; | 11 | import io.swagger.annotations.Api; |
| @@ -26,14 +26,14 @@ public class SysDictTypeController { | @@ -26,14 +26,14 @@ public class SysDictTypeController { | ||
| 26 | @Resource | 26 | @Resource |
| 27 | private SysDictTypeService dictTypeService; | 27 | private SysDictTypeService dictTypeService; |
| 28 | 28 | ||
| 29 | - @ApiOperation("/page") | ||
| 30 | - @GetMapping("/list") | 29 | + @ApiOperation("/获得字典类型的分页列表") |
| 30 | + @GetMapping("/page") | ||
| 31 | // @PreAuthorize("@ss.hasPermi('system:dict:list')") | 31 | // @PreAuthorize("@ss.hasPermi('system:dict:list')") |
| 32 | public CommonResult<PageResult<SysDictTypeRespVO>> pageDictTypes(@Validated SysDictTypePageReqVO reqVO) { | 32 | public CommonResult<PageResult<SysDictTypeRespVO>> pageDictTypes(@Validated SysDictTypePageReqVO reqVO) { |
| 33 | return success(SysDictTypeConvert.INSTANCE.convertPage(dictTypeService.pageDictTypes(reqVO))); | 33 | return success(SysDictTypeConvert.INSTANCE.convertPage(dictTypeService.pageDictTypes(reqVO))); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | - @ApiOperation("/查询字典详细") | 36 | + @ApiOperation("/查询字典类型详细") |
| 37 | @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") | 37 | @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") |
| 38 | @GetMapping(value = "/get") | 38 | @GetMapping(value = "/get") |
| 39 | // @PreAuthorize("@ss.hasPermi('system:dict:query')") | 39 | // @PreAuthorize("@ss.hasPermi('system:dict:query')") |
| @@ -54,7 +54,7 @@ public class SysDictTypeController { | @@ -54,7 +54,7 @@ public class SysDictTypeController { | ||
| 54 | @PostMapping("update") | 54 | @PostMapping("update") |
| 55 | // @PreAuthorize("@ss.hasPermi('system:dict:edit')") | 55 | // @PreAuthorize("@ss.hasPermi('system:dict:edit')") |
| 56 | // @Log(title = "字典类型", businessType = BusinessType.UPDATE) | 56 | // @Log(title = "字典类型", businessType = BusinessType.UPDATE) |
| 57 | - public CommonResult<Boolean> updateDictType(@Validated @RequestBody SysUserUpdateReqVO reqVO) { | 57 | + public CommonResult<Boolean> updateDictType(@Validated @RequestBody SysDictTypeUpdateReqVO reqVO) { |
| 58 | dictTypeService.updateDictType(reqVO); | 58 | dictTypeService.updateDictType(reqVO); |
| 59 | return success(true); | 59 | return success(true); |
| 60 | } | 60 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataBaseVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import javax.validation.constraints.NotBlank; | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | +import javax.validation.constraints.Size; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 字典数据 Base VO,提供给添加、修改、详细的子 VO 使用 | ||
| 12 | + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||
| 13 | + */ | ||
| 14 | +@Data | ||
| 15 | +public class SysDictDataBaseVO { | ||
| 16 | + | ||
| 17 | + @ApiModelProperty(value = "显示顺序不能为空", required = true, example = "1024") | ||
| 18 | + @NotBlank(message = "显示顺序不能为空") | ||
| 19 | + private String sort; | ||
| 20 | + | ||
| 21 | + @ApiModelProperty(value = "字典标签", required = true, example = "芋道") | ||
| 22 | + @NotBlank(message = "字典标签不能为空") | ||
| 23 | + @Size(max = 100, message = "字典标签长度不能超过100个字符") | ||
| 24 | + private String label; | ||
| 25 | + | ||
| 26 | + @ApiModelProperty(value = "字典值", required = true, example = "iocoder") | ||
| 27 | + @NotBlank(message = "字典键值不能为空") | ||
| 28 | + @Size(max = 100, message = "字典键值长度不能超过100个字符") | ||
| 29 | + private String value; | ||
| 30 | + | ||
| 31 | + @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") | ||
| 32 | + @NotBlank(message = "字典类型不能为空") | ||
| 33 | + @Size(max = 100, message = "字典类型长度不能超过100个字符") | ||
| 34 | + private String dictType; | ||
| 35 | + | ||
| 36 | + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举") | ||
| 37 | + @NotNull(message = "状态不能为空") | ||
| 38 | +// @InEnum(value = SysCommonStatusEnum.class, message = "修改状态必须是 {value}") | ||
| 39 | + private Integer status; | ||
| 40 | + | ||
| 41 | + @ApiModelProperty(value = "备注", example = "我是一个角色") | ||
| 42 | + private String remark; | ||
| 43 | + | ||
| 44 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataCreateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import lombok.EqualsAndHashCode; | ||
| 6 | + | ||
| 7 | +@ApiModel("字典数据创建 Request VO") | ||
| 8 | +@Data | ||
| 9 | +@EqualsAndHashCode(callSuper = true) | ||
| 10 | +public class SysDictDataCreateReqVO extends SysDictDataBaseVO { | ||
| 11 | + | ||
| 12 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataExcelRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.excel.Excel; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 字典数据 Excel 导出响应 VO | ||
| 8 | + */ | ||
| 9 | +@Data | ||
| 10 | +public class SysDictDataExcelRespVO { | ||
| 11 | + | ||
| 12 | + @Excel(name = "字典编码", cellType = Excel.ColumnType.NUMERIC) | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC) | ||
| 16 | + private Integer sort; | ||
| 17 | + | ||
| 18 | + @Excel(name = "字典标签") | ||
| 19 | + private String label; | ||
| 20 | + | ||
| 21 | + @Excel(name = "字典键值") | ||
| 22 | + private String value; | ||
| 23 | + | ||
| 24 | + @Excel(name = "字典类型") | ||
| 25 | + private String dictType; | ||
| 26 | + | ||
| 27 | + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") | ||
| 28 | + private Integer status; | ||
| 29 | + | ||
| 30 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 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 | + | ||
| 9 | +import javax.validation.constraints.Size; | ||
| 10 | + | ||
| 11 | +@ApiModel("字典类型分页列表 Request VO") | ||
| 12 | +@Data | ||
| 13 | +@EqualsAndHashCode(callSuper = true) | ||
| 14 | +public class SysDictDataPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "字典标签", example = "芋道") | ||
| 17 | + @Size(max = 100, message = "字典标签长度不能超过100个字符") | ||
| 18 | + private String label; | ||
| 19 | + | ||
| 20 | + @ApiModelProperty(value = "字典类型", example = "sys_common_sex", notes = "模糊匹配") | ||
| 21 | + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") | ||
| 22 | + private String dictType; | ||
| 23 | + | ||
| 24 | + @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") | ||
| 25 | + private Integer status; | ||
| 26 | + | ||
| 27 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataRespVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.AllArgsConstructor; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.NoArgsConstructor; | ||
| 9 | + | ||
| 10 | +import java.util.Date; | ||
| 11 | + | ||
| 12 | +@ApiModel("字典数据信息 Response VO") | ||
| 13 | +@Data | ||
| 14 | +@NoArgsConstructor | ||
| 15 | +@AllArgsConstructor | ||
| 16 | +@EqualsAndHashCode(callSuper = true) | ||
| 17 | +public class SysDictDataRespVO extends SysDictDataBaseVO { | ||
| 18 | + | ||
| 19 | + @ApiModelProperty(value = "字典数据编号", required = true, example = "1024") | ||
| 20 | + private Integer id; | ||
| 21 | + | ||
| 22 | + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") | ||
| 23 | + private Date createTime; | ||
| 24 | + | ||
| 25 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDataDictSimpleVO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataSimpleVO.java
| @@ -6,7 +6,7 @@ import lombok.Data; | @@ -6,7 +6,7 @@ import lombok.Data; | ||
| 6 | 6 | ||
| 7 | @ApiModel("数据字典精简 VO") | 7 | @ApiModel("数据字典精简 VO") |
| 8 | @Data | 8 | @Data |
| 9 | -public class SysDataDictSimpleVO { | 9 | +public class SysDictDataSimpleVO { |
| 10 | 10 | ||
| 11 | @ApiModelProperty(value = "字典类型", required = true, example = "gender") | 11 | @ApiModelProperty(value = "字典类型", required = true, example = "gender") |
| 12 | private String dictType; | 12 | private String dictType; |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/data/SysDictDataUpdateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.controller.dict.vo.data; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModel; | ||
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | + | ||
| 8 | +import javax.validation.constraints.NotNull; | ||
| 9 | + | ||
| 10 | +@ApiModel("字典数据更新 Request VO") | ||
| 11 | +@Data | ||
| 12 | +@EqualsAndHashCode(callSuper = true) | ||
| 13 | +public class SysDictDataUpdateReqVO extends SysDictDataBaseVO { | ||
| 14 | + | ||
| 15 | + @ApiModelProperty(value = "字典数据编号", required = true, example = "1024") | ||
| 16 | + @NotNull(message = "字典数据编号不能为空") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypeBaseVO.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.framework.excel.Excel; | ||
| 4 | import io.swagger.annotations.ApiModelProperty; | 3 | import io.swagger.annotations.ApiModelProperty; |
| 5 | import lombok.Data; | 4 | import lombok.Data; |
| 6 | 5 | ||
| 7 | import javax.validation.constraints.NotBlank; | 6 | import javax.validation.constraints.NotBlank; |
| 7 | +import javax.validation.constraints.NotNull; | ||
| 8 | import javax.validation.constraints.Size; | 8 | import javax.validation.constraints.Size; |
| 9 | 9 | ||
| 10 | /** | 10 | /** |
| @@ -19,14 +19,11 @@ public class SysDictTypeBaseVO { | @@ -19,14 +19,11 @@ public class SysDictTypeBaseVO { | ||
| 19 | @Size(max = 100, message = "字典类型名称长度不能超过100个字符") | 19 | @Size(max = 100, message = "字典类型名称长度不能超过100个字符") |
| 20 | private String name; | 20 | private String name; |
| 21 | 21 | ||
| 22 | - @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") | ||
| 23 | - @NotBlank(message = "字典类型不能为空") | ||
| 24 | - @Size(max = 100, message = "字典类型类型长度不能超过100个字符") | ||
| 25 | - private String type; | ||
| 26 | - | ||
| 27 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类") | 22 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类") |
| 28 | - @NotBlank(message = "状态不能为空") | ||
| 29 | - @Excel(name = "状态", readConverterExp = "0=正常,1=停用") | 23 | + @NotNull(message = "状态不能为空") |
| 30 | private Integer status; | 24 | private Integer status; |
| 31 | 25 | ||
| 26 | + @ApiModelProperty(value = "备注", example = "快乐的备注") | ||
| 27 | + private String remark; | ||
| 28 | + | ||
| 32 | } | 29 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypeCreateReqVO.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | ||
| 3 | import io.swagger.annotations.ApiModel; | 3 | import io.swagger.annotations.ApiModel; |
| 4 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | import lombok.Data; | 5 | import lombok.Data; |
| 5 | import lombok.EqualsAndHashCode; | 6 | import lombok.EqualsAndHashCode; |
| 6 | 7 | ||
| 8 | +import javax.validation.constraints.NotNull; | ||
| 9 | +import javax.validation.constraints.Size; | ||
| 10 | + | ||
| 7 | @ApiModel("字典类型创建 Request VO") | 11 | @ApiModel("字典类型创建 Request VO") |
| 8 | @Data | 12 | @Data |
| 9 | @EqualsAndHashCode(callSuper = true) | 13 | @EqualsAndHashCode(callSuper = true) |
| 10 | public class SysDictTypeCreateReqVO extends SysDictTypeBaseVO { | 14 | public class SysDictTypeCreateReqVO extends SysDictTypeBaseVO { |
| 15 | + | ||
| 16 | + @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") | ||
| 17 | + @NotNull(message = "字典类型不能为空") | ||
| 18 | + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") | ||
| 19 | + private String type; | ||
| 20 | + | ||
| 11 | } | 21 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypePageReqVO.java
| 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageParam; | ||
| 3 | import io.swagger.annotations.ApiModel; | 4 | import io.swagger.annotations.ApiModel; |
| 4 | import io.swagger.annotations.ApiModelProperty; | 5 | import io.swagger.annotations.ApiModelProperty; |
| 5 | import lombok.Data; | 6 | import lombok.Data; |
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | + | ||
| 9 | +import javax.validation.constraints.Size; | ||
| 10 | +import java.util.Date; | ||
| 11 | + | ||
| 12 | +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 6 | 13 | ||
| 7 | @ApiModel("字典类型分页列表 Request VO") | 14 | @ApiModel("字典类型分页列表 Request VO") |
| 8 | @Data | 15 | @Data |
| 9 | -public class SysDictTypePageReqVO { | 16 | +public class SysDictTypePageReqVO extends PageParam { |
| 10 | 17 | ||
| 11 | @ApiModelProperty(value = "字典类型名称", example = "芋道", notes = "模糊匹配") | 18 | @ApiModelProperty(value = "字典类型名称", example = "芋道", notes = "模糊匹配") |
| 12 | private String name; | 19 | private String name; |
| 13 | 20 | ||
| 21 | + @ApiModelProperty(value = "字典类型", example = "sys_common_sex", notes = "模糊匹配") | ||
| 22 | + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") | ||
| 23 | + private String type; | ||
| 24 | + | ||
| 14 | @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") | 25 | @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") |
| 15 | private Integer status; | 26 | private Integer status; |
| 16 | 27 | ||
| 28 | + @ApiModelProperty(value = "开始时间", example = "2020-10-24") | ||
| 29 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 30 | + private Date beginTime; | ||
| 31 | + | ||
| 32 | + @ApiModelProperty(value = "结束时间", example = "2020-10-24") | ||
| 33 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 34 | + private Date endTime; | ||
| 35 | + | ||
| 17 | } | 36 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/vo/type/SysDictTypeRespVO.java
| @@ -19,6 +19,9 @@ public class SysDictTypeRespVO extends SysDictTypeBaseVO { | @@ -19,6 +19,9 @@ public class SysDictTypeRespVO extends SysDictTypeBaseVO { | ||
| 19 | @ApiModelProperty(value = "字典类型编号", required = true, example = "1024") | 19 | @ApiModelProperty(value = "字典类型编号", required = true, example = "1024") |
| 20 | private Integer id; | 20 | private Integer id; |
| 21 | 21 | ||
| 22 | + @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") | ||
| 23 | + private String type; | ||
| 24 | + | ||
| 22 | @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") | 25 | @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") |
| 23 | private Date createTime; | 26 | private Date createTime; |
| 24 | 27 |
src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictDataConvert.java
| 1 | package cn.iocoder.dashboard.modules.system.convert.dict; | 1 | package cn.iocoder.dashboard.modules.system.convert.dict; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDataDictSimpleVO; | 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataRespVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataSimpleVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; | ||
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 9 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 5 | import org.mapstruct.Mapper; | 10 | import org.mapstruct.Mapper; |
| 11 | +import org.mapstruct.Mapping; | ||
| 6 | import org.mapstruct.factory.Mappers; | 12 | import org.mapstruct.factory.Mappers; |
| 7 | 13 | ||
| 8 | import java.util.List; | 14 | import java.util.List; |
| @@ -12,6 +18,17 @@ public interface SysDictDataConvert { | @@ -12,6 +18,17 @@ public interface SysDictDataConvert { | ||
| 12 | 18 | ||
| 13 | SysDictDataConvert INSTANCE = Mappers.getMapper(SysDictDataConvert.class); | 19 | SysDictDataConvert INSTANCE = Mappers.getMapper(SysDictDataConvert.class); |
| 14 | 20 | ||
| 15 | - List<SysDataDictSimpleVO> convertList(List<SysDictDataDO> list); | 21 | + List<SysDictDataSimpleVO> convertList(List<SysDictDataDO> list); |
| 22 | + | ||
| 23 | + SysDictDataRespVO convert(SysDictDataDO bean); | ||
| 24 | + | ||
| 25 | + PageResult<SysDictDataRespVO> convertPage(PageResult<SysDictDataDO> page); | ||
| 26 | + | ||
| 27 | + SysDictDataDO convert(SysDictDataUpdateReqVO bean); | ||
| 28 | + | ||
| 29 | + SysDictDataDO convert(SysDictDataCreateReqVO bean); | ||
| 30 | + | ||
| 31 | + @Mapping(source = "records", target = "list") | ||
| 32 | + PageResult<SysDictDataDO> convertPage02(IPage<SysDictDataDO> page); | ||
| 16 | 33 | ||
| 17 | } | 34 | } |
src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictTypeConvert.java
| 1 | package cn.iocoder.dashboard.modules.system.convert.dict; | 1 | package cn.iocoder.dashboard.modules.system.convert.dict; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.pojo.PageResult; | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | ||
| 4 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeRespVO; | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeRespVO; |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; | ||
| 5 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; |
| 8 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 6 | import org.mapstruct.Mapper; | 9 | import org.mapstruct.Mapper; |
| 10 | +import org.mapstruct.Mapping; | ||
| 7 | import org.mapstruct.factory.Mappers; | 11 | import org.mapstruct.factory.Mappers; |
| 8 | 12 | ||
| 9 | @Mapper | 13 | @Mapper |
| @@ -15,4 +19,11 @@ public interface SysDictTypeConvert { | @@ -15,4 +19,11 @@ public interface SysDictTypeConvert { | ||
| 15 | 19 | ||
| 16 | SysDictTypeRespVO convert(SysDictTypeDO bean); | 20 | SysDictTypeRespVO convert(SysDictTypeDO bean); |
| 17 | 21 | ||
| 22 | + @Mapping(source = "records", target = "list") | ||
| 23 | + PageResult<SysDictTypeDO> convertPage02(IPage<SysDictTypeDO> page); | ||
| 24 | + | ||
| 25 | + SysDictTypeDO convert(SysDictTypeCreateReqVO bean); | ||
| 26 | + | ||
| 27 | + SysDictTypeDO convert(SysDictTypeUpdateReqVO bean); | ||
| 28 | + | ||
| 18 | } | 29 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dict/SysDictDataMapper.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 9 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 5 | import org.apache.ibatis.annotations.Mapper; | 10 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 11 | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +import static com.baomidou.mybatisplus.core.metadata.OrderItem.asc; | ||
| 15 | + | ||
| 7 | @Mapper | 16 | @Mapper |
| 8 | public interface SysDictDataMapper extends BaseMapper<SysDictDataDO> { | 17 | public interface SysDictDataMapper extends BaseMapper<SysDictDataDO> { |
| 18 | + | ||
| 19 | + default SysDictDataDO selectByLabel(String label) { | ||
| 20 | + return selectOne(new QueryWrapper<SysDictDataDO>().eq("label", label)); | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + default int selectCountByDictType(String dictType) { | ||
| 24 | + return selectCount(new QueryWrapper<SysDictDataDO>().eq("dict_type", dictType)); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + default IPage<SysDictDataDO> selectList(SysDictDataPageReqVO reqVO) { | ||
| 28 | + return selectPage(MyBatisUtils.buildPage(reqVO), | ||
| 29 | + new QueryWrapperX<SysDictDataDO>().likeIfPresent("label", reqVO.getLabel()) | ||
| 30 | + .likeIfPresent("dict_type", reqVO.getDictType()) | ||
| 31 | + .eqIfPresent("status", reqVO.getStatus())) | ||
| 32 | + .addOrder(asc("dict_type"), asc("sort")); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + default List<SysDictDataDO> selectList() { | ||
| 36 | + return selectList(new QueryWrapper<>()); | ||
| 37 | + } | ||
| 38 | + | ||
| 9 | } | 39 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dict/SysDictTypeMapper.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; | ||
| 4 | +import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; | ||
| 7 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
| 8 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
| 9 | +import org.apache.ibatis.annotations.Mapper; | ||
| 10 | + | ||
| 11 | +@Mapper | ||
| 12 | +public interface SysDictTypeMapper extends BaseMapper<SysDictTypeDO> { | ||
| 13 | + | ||
| 14 | + default IPage<SysDictTypeDO> selectList(SysDictTypePageReqVO reqVO) { | ||
| 15 | + return selectPage(MyBatisUtils.buildPage(reqVO), | ||
| 16 | + new QueryWrapperX<SysDictTypeDO>().likeIfPresent("name", reqVO.getName()) | ||
| 17 | + .likeIfPresent("dict_type", reqVO.getType()) | ||
| 18 | + .eqIfPresent("status", reqVO.getStatus()) | ||
| 19 | + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + default SysDictTypeDO selectByType(String type) { | ||
| 23 | + return selectOne(new QueryWrapperX<SysDictTypeDO>().eq("dict_type", type)); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + default SysDictTypeDO selectByName(String name) { | ||
| 27 | + return selectOne(new QueryWrapperX<SysDictTypeDO>().eq("name", name)); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | +} |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/dict/SysDictDataDO.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 4 | -import cn.iocoder.dashboard.framework.excel.Excel; | ||
| 5 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | 4 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 6 | import com.baomidou.mybatisplus.annotation.TableId; | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 7 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 8 | import lombok.Data; | 7 | import lombok.Data; |
| 9 | import lombok.EqualsAndHashCode; | 8 | import lombok.EqualsAndHashCode; |
| 10 | 9 | ||
| 11 | -import javax.validation.constraints.NotBlank; | ||
| 12 | -import javax.validation.constraints.Size; | ||
| 13 | - | ||
| 14 | /** | 10 | /** |
| 15 | * 字典数据表 | 11 | * 字典数据表 |
| 16 | * | 12 | * |
| @@ -22,45 +18,33 @@ import javax.validation.constraints.Size; | @@ -22,45 +18,33 @@ import javax.validation.constraints.Size; | ||
| 22 | public class SysDictDataDO extends BaseDO { | 18 | public class SysDictDataDO extends BaseDO { |
| 23 | 19 | ||
| 24 | /** | 20 | /** |
| 25 | - * 字典编码 | 21 | + * 字典数据编号 |
| 26 | */ | 22 | */ |
| 27 | @TableId | 23 | @TableId |
| 28 | - @Excel(name = "字典编码", cellType = Excel.ColumnType.NUMERIC) | ||
| 29 | private Long id; | 24 | private Long id; |
| 30 | /** | 25 | /** |
| 31 | * 字典排序 | 26 | * 字典排序 |
| 32 | */ | 27 | */ |
| 33 | - @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC) | ||
| 34 | private Integer sort; | 28 | private Integer sort; |
| 35 | /** | 29 | /** |
| 36 | * 字典标签 | 30 | * 字典标签 |
| 37 | */ | 31 | */ |
| 38 | - @Excel(name = "字典标签") | ||
| 39 | - @NotBlank(message = "字典标签不能为空") | ||
| 40 | - @Size(max = 100, message = "字典标签长度不能超过100个字符") | ||
| 41 | private String label; | 32 | private String label; |
| 42 | /** | 33 | /** |
| 43 | * 字典值 | 34 | * 字典值 |
| 44 | */ | 35 | */ |
| 45 | - @Excel(name = "字典键值") | ||
| 46 | - @NotBlank(message = "字典键值不能为空") | ||
| 47 | - @Size(max = 100, message = "字典键值长度不能超过100个字符") | ||
| 48 | private String value; | 36 | private String value; |
| 49 | /** | 37 | /** |
| 50 | * 字典类型 | 38 | * 字典类型 |
| 51 | * | 39 | * |
| 52 | * 冗余 {@link SysDictDataDO#getDictType()} | 40 | * 冗余 {@link SysDictDataDO#getDictType()} |
| 53 | */ | 41 | */ |
| 54 | - @Excel(name = "字典类型") | ||
| 55 | - @NotBlank(message = "字典类型不能为空") | ||
| 56 | - @Size(max = 100, message = "字典类型长度不能超过100个字符") | ||
| 57 | private String dictType; | 42 | private String dictType; |
| 58 | /** | 43 | /** |
| 59 | * 状态 | 44 | * 状态 |
| 60 | * | 45 | * |
| 61 | * 枚举 {@link CommonStatusEnum} | 46 | * 枚举 {@link CommonStatusEnum} |
| 62 | */ | 47 | */ |
| 63 | - @Excel(name = "状态", readConverterExp = "0=正常,1=停用") | ||
| 64 | private Integer status; | 48 | private Integer status; |
| 65 | /** | 49 | /** |
| 66 | * 备注 | 50 | * 备注 |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/dict/SysDictTypeDO.java
| @@ -38,5 +38,9 @@ public class SysDictTypeDO extends BaseDO { | @@ -38,5 +38,9 @@ public class SysDictTypeDO extends BaseDO { | ||
| 38 | * 枚举 {@link CommonStatusEnum} | 38 | * 枚举 {@link CommonStatusEnum} |
| 39 | */ | 39 | */ |
| 40 | private Integer status; | 40 | private Integer status; |
| 41 | + /** | ||
| 42 | + * 备注 | ||
| 43 | + */ | ||
| 44 | + private String remark; | ||
| 41 | 45 | ||
| 42 | } | 46 | } |
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| @@ -51,7 +51,19 @@ public interface SysErrorCodeConstants { | @@ -51,7 +51,19 @@ public interface SysErrorCodeConstants { | ||
| 51 | // ========== 岗位模块 1002005000 ========== | 51 | // ========== 岗位模块 1002005000 ========== |
| 52 | ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在"); | 52 | ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在"); |
| 53 | ErrorCode POST_NOT_ENABLE = new ErrorCode(1002005002, "岗位({}) 不处于开启状态,不允许选择"); | 53 | ErrorCode POST_NOT_ENABLE = new ErrorCode(1002005002, "岗位({}) 不处于开启状态,不允许选择"); |
| 54 | - ErrorCode POST_NAME_DUPLICATE = new ErrorCode(1002004001, "已经存在该名字的岗位"); | ||
| 55 | - ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1002004001, "已经存在该标识的岗位"); | 54 | + ErrorCode POST_NAME_DUPLICATE = new ErrorCode(1002005001, "已经存在该名字的岗位"); |
| 55 | + ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1002005001, "已经存在该标识的岗位"); | ||
| 56 | + | ||
| 57 | + // ========== 字典类型 1002006000 ========== | ||
| 58 | + ErrorCode DICT_TYPE_NOT_FOUND = new ErrorCode(1002006001, "当前字典类型不存在"); | ||
| 59 | + ErrorCode DICT_TYPE_NOT_ENABLE = new ErrorCode(1002006002, "字典类型不处于开启状态,不允许选择"); | ||
| 60 | + ErrorCode DICT_TYPE_NAME_DUPLICATE = new ErrorCode(1002006003, "已经存在该名字的字典类型"); | ||
| 61 | + ErrorCode DICT_TYPE_TYPE_DUPLICATE = new ErrorCode(1002006004, "已经存在该类型的字典类型"); | ||
| 62 | + ErrorCode DICT_TYPE_HAS_CHILDREN = new ErrorCode(1002006004, "无法删除,该字典类型还有字典数据"); | ||
| 63 | + | ||
| 64 | + // ========== 字典数据 1002007000 ========== | ||
| 65 | + ErrorCode DICT_DATA_NOT_FOUND = new ErrorCode(1002007001, "当前字典数据不存在"); | ||
| 66 | + ErrorCode DICT_DATA_NOT_ENABLE = new ErrorCode(1002007002, "字典数据不处于开启状态,不允许选择"); | ||
| 67 | + ErrorCode DICT_DATA_VALUE_DUPLICATE = new ErrorCode(1002007003, "已经存在该值的字典数据"); | ||
| 56 | 68 | ||
| 57 | } | 69 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/SysDictDataService.java
| 1 | package cn.iocoder.dashboard.modules.system.service.dict; | 1 | package cn.iocoder.dashboard.modules.system.service.dict; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 4 | 8 | ||
| 5 | import java.util.List; | 9 | import java.util.List; |
| @@ -13,4 +17,50 @@ public interface SysDictDataService { | @@ -13,4 +17,50 @@ public interface SysDictDataService { | ||
| 13 | 17 | ||
| 14 | List<SysDictDataDO> listDictDatas(); | 18 | List<SysDictDataDO> listDictDatas(); |
| 15 | 19 | ||
| 20 | + /** | ||
| 21 | + * 获得字典数据分页列表 | ||
| 22 | + * | ||
| 23 | + * @param reqVO 分页请求 | ||
| 24 | + * @return 字典数据分页列表 | ||
| 25 | + */ | ||
| 26 | + PageResult<SysDictDataDO> pageDictDatas(SysDictDataPageReqVO reqVO); | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 获得字典数据详情 | ||
| 30 | + * | ||
| 31 | + * @param id 字典数据编号 | ||
| 32 | + * @return 字典数据 | ||
| 33 | + */ | ||
| 34 | + SysDictDataDO getDictData(Long id); | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * 创建字典数据 | ||
| 38 | + * | ||
| 39 | + * @param reqVO 字典数据信息 | ||
| 40 | + * @return 字典数据编号 | ||
| 41 | + */ | ||
| 42 | + Long createDictData(SysDictDataCreateReqVO reqVO); | ||
| 43 | + | ||
| 44 | + /** | ||
| 45 | + * 更新字典数据 | ||
| 46 | + * | ||
| 47 | + * @param reqVO 字典数据信息 | ||
| 48 | + */ | ||
| 49 | + void updateDictData(SysDictDataUpdateReqVO reqVO); | ||
| 50 | + | ||
| 51 | + /** | ||
| 52 | + * 删除字典数据 | ||
| 53 | + * | ||
| 54 | + * @param id 字典数据编号 | ||
| 55 | + */ | ||
| 56 | + void deleteDictData(Long id); | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 获得指定字典类型的数据数量 | ||
| 60 | + * | ||
| 61 | + * @param dictType 字典类型 | ||
| 62 | + * @return 数据数量 | ||
| 63 | + */ | ||
| 64 | + int countByDictType(String dictType); | ||
| 65 | + | ||
| 16 | } | 66 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/SysDictTypeService.java
| @@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.dict; | @@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.dict; | ||
| 3 | import cn.iocoder.dashboard.common.pojo.PageResult; | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | 4 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; |
| 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; |
| 6 | -import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; | 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; |
| 8 | 8 | ||
| 9 | /** | 9 | /** |
| @@ -13,14 +13,50 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictType | @@ -13,14 +13,50 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictType | ||
| 13 | */ | 13 | */ |
| 14 | public interface SysDictTypeService { | 14 | public interface SysDictTypeService { |
| 15 | 15 | ||
| 16 | + /** | ||
| 17 | + * 获得字典类型分页列表 | ||
| 18 | + * | ||
| 19 | + * @param reqVO 分页请求 | ||
| 20 | + * @return 字典类型分页列表 | ||
| 21 | + */ | ||
| 16 | PageResult<SysDictTypeDO> pageDictTypes(SysDictTypePageReqVO reqVO); | 22 | PageResult<SysDictTypeDO> pageDictTypes(SysDictTypePageReqVO reqVO); |
| 17 | 23 | ||
| 24 | + /** | ||
| 25 | + * 获得字典类型详情 | ||
| 26 | + * | ||
| 27 | + * @param id 字典类型编号 | ||
| 28 | + * @return 字典类型 | ||
| 29 | + */ | ||
| 18 | SysDictTypeDO getDictType(Long id); | 30 | SysDictTypeDO getDictType(Long id); |
| 19 | 31 | ||
| 32 | + /** | ||
| 33 | + * 获得字典类型详情 | ||
| 34 | + * | ||
| 35 | + * @param type 字典类型 | ||
| 36 | + * @return 字典类型详情 | ||
| 37 | + */ | ||
| 38 | + SysDictTypeDO getDictType(String type); | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * 创建字典类型 | ||
| 42 | + * | ||
| 43 | + * @param reqVO 字典类型信息 | ||
| 44 | + * @return 字典类型编号 | ||
| 45 | + */ | ||
| 20 | Long createDictType(SysDictTypeCreateReqVO reqVO); | 46 | Long createDictType(SysDictTypeCreateReqVO reqVO); |
| 21 | 47 | ||
| 22 | - void updateDictType(SysUserUpdateReqVO reqVO); | ||
| 23 | - | 48 | + /** |
| 49 | + * 更新字典类型 | ||
| 50 | + * | ||
| 51 | + * @param reqVO 字典类型信息 | ||
| 52 | + */ | ||
| 53 | + void updateDictType(SysDictTypeUpdateReqVO reqVO); | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 删除字典类型 | ||
| 57 | + * | ||
| 58 | + * @param id 字典类型编号 | ||
| 59 | + */ | ||
| 24 | void deleteDictType(Long id); | 60 | void deleteDictType(Long id); |
| 25 | 61 | ||
| 26 | } | 62 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java
| 1 | package cn.iocoder.dashboard.modules.system.service.dict.impl; | 1 | package cn.iocoder.dashboard.modules.system.service.dict.impl; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||
| 4 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 5 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; | ||
| 3 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict.SysDictDataMapper; | 10 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict.SysDictDataMapper; |
| 4 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; | 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 12 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; | ||
| 5 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; | 13 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 14 | +import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | ||
| 6 | import org.springframework.stereotype.Service; | 15 | import org.springframework.stereotype.Service; |
| 7 | 16 | ||
| 8 | import javax.annotation.Resource; | 17 | import javax.annotation.Resource; |
| 9 | import java.util.Comparator; | 18 | import java.util.Comparator; |
| 10 | import java.util.List; | 19 | import java.util.List; |
| 11 | 20 | ||
| 21 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 22 | + | ||
| 12 | /** | 23 | /** |
| 13 | * 字典数据 Service 实现类 | 24 | * 字典数据 Service 实现类 |
| 14 | * | 25 | * |
| @@ -22,13 +33,101 @@ public class SysDictDataServiceImpl implements SysDictDataService { | @@ -22,13 +33,101 @@ public class SysDictDataServiceImpl implements SysDictDataService { | ||
| 22 | .thenComparingInt(SysDictDataDO::getSort); | 33 | .thenComparingInt(SysDictDataDO::getSort); |
| 23 | 34 | ||
| 24 | @Resource | 35 | @Resource |
| 36 | + private SysDictTypeService dictTypeService; | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 25 | private SysDictDataMapper dictDataMapper; | 39 | private SysDictDataMapper dictDataMapper; |
| 26 | 40 | ||
| 27 | @Override | 41 | @Override |
| 28 | public List<SysDictDataDO> listDictDatas() { | 42 | public List<SysDictDataDO> listDictDatas() { |
| 29 | - List<SysDictDataDO> list = dictDataMapper.selectList(null); | 43 | + List<SysDictDataDO> list = dictDataMapper.selectList(); |
| 30 | list.sort(COMPARATOR_TYPE_AND_SORT); | 44 | list.sort(COMPARATOR_TYPE_AND_SORT); |
| 31 | return list; | 45 | return list; |
| 32 | } | 46 | } |
| 33 | 47 | ||
| 48 | + @Override | ||
| 49 | + public PageResult<SysDictDataDO> pageDictDatas(SysDictDataPageReqVO reqVO) { | ||
| 50 | + return SysDictDataConvert.INSTANCE.convertPage02(dictDataMapper.selectList(reqVO)); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + @Override | ||
| 54 | + public SysDictDataDO getDictData(Long id) { | ||
| 55 | + return dictDataMapper.selectById(id); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @Override | ||
| 59 | + public Long createDictData(SysDictDataCreateReqVO reqVO) { | ||
| 60 | + // 校验正确性 | ||
| 61 | + this.checkCreateOrUpdate(null, reqVO.getLabel(), reqVO.getDictType()); | ||
| 62 | + // 插入字典类型 | ||
| 63 | + SysDictDataDO dictData = SysDictDataConvert.INSTANCE.convert(reqVO); | ||
| 64 | + dictDataMapper.insert(dictData); | ||
| 65 | + return dictData.getId(); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Override | ||
| 69 | + public void updateDictData(SysDictDataUpdateReqVO reqVO) { | ||
| 70 | + // 校验正确性 | ||
| 71 | + this.checkCreateOrUpdate(reqVO.getId(), reqVO.getLabel(), reqVO.getDictType()); | ||
| 72 | + // 更新字典类型 | ||
| 73 | + SysDictDataDO updateObj = SysDictDataConvert.INSTANCE.convert(reqVO); | ||
| 74 | + dictDataMapper.updateById(updateObj); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + @Override | ||
| 78 | + public void deleteDictData(Long id) { | ||
| 79 | + // 校验是否存在 | ||
| 80 | + this.checkDictDataExists(id); | ||
| 81 | + // 删除字典数据 | ||
| 82 | + dictDataMapper.deleteById(id); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + @Override | ||
| 86 | + public int countByDictType(String dictType) { | ||
| 87 | + return dictDataMapper.selectCountByDictType(dictType); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + private void checkCreateOrUpdate(Long id, String label, String dictType) { | ||
| 91 | + // 校验自己存在 | ||
| 92 | + checkDictDataExists(id); | ||
| 93 | + // 校验字典数据的值的唯一性 | ||
| 94 | + checkDictDataValueUnique(id, label); | ||
| 95 | + // 校验字典类型有效 | ||
| 96 | + checkDictTypeValid(dictType); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + private void checkDictDataValueUnique(Long id, String label) { | ||
| 100 | + SysDictDataDO dictData = dictDataMapper.selectByLabel(label); | ||
| 101 | + if (dictData == null) { | ||
| 102 | + return; | ||
| 103 | + } | ||
| 104 | + // 如果 id 为空,说明不用比较是否为相同 id 的字典数据 | ||
| 105 | + if (id == null) { | ||
| 106 | + throw ServiceExceptionUtil.exception(DICT_DATA_VALUE_DUPLICATE); | ||
| 107 | + } | ||
| 108 | + if (!dictData.getId().equals(id)) { | ||
| 109 | + throw ServiceExceptionUtil.exception(DICT_DATA_VALUE_DUPLICATE); | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + private void checkDictDataExists(Long id) { | ||
| 114 | + if (id == null) { | ||
| 115 | + return; | ||
| 116 | + } | ||
| 117 | + SysDictDataDO dictData = dictDataMapper.selectById(id); | ||
| 118 | + if (dictData == null) { | ||
| 119 | + throw ServiceExceptionUtil.exception(DICT_DATA_NOT_FOUND); | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + private void checkDictTypeValid(String type) { | ||
| 124 | + SysDictTypeDO dictType = dictTypeService.getDictType(type); | ||
| 125 | + if (dictType == null) { | ||
| 126 | + throw ServiceExceptionUtil.exception(DICT_TYPE_NOT_FOUND); | ||
| 127 | + } | ||
| 128 | + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictType.getStatus())) { | ||
| 129 | + throw ServiceExceptionUtil.exception(DICT_TYPE_NOT_ENABLE); | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + | ||
| 34 | } | 133 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictTypeServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.dict.impl; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 4 | +import cn.iocoder.dashboard.common.pojo.PageResult; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; | ||
| 7 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.convert.dict.SysDictTypeConvert; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict.SysDictTypeMapper; | ||
| 10 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; | ||
| 11 | +import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; | ||
| 12 | +import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | ||
| 13 | +import org.springframework.stereotype.Service; | ||
| 14 | +import org.springframework.transaction.annotation.Transactional; | ||
| 15 | + | ||
| 16 | +import javax.annotation.Resource; | ||
| 17 | + | ||
| 18 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * 字典类型 Service 实现类 | ||
| 22 | + * | ||
| 23 | + * @author 芋道源码 | ||
| 24 | + */ | ||
| 25 | +@Service | ||
| 26 | +public class SysDictTypeServiceImpl implements SysDictTypeService { | ||
| 27 | + | ||
| 28 | + @Resource | ||
| 29 | + private SysDictTypeServiceImpl self; | ||
| 30 | + @Resource | ||
| 31 | + private SysDictDataService dictDataService; | ||
| 32 | + | ||
| 33 | + @Resource | ||
| 34 | + private SysDictTypeMapper dictTypeMapper; | ||
| 35 | + | ||
| 36 | + @Override | ||
| 37 | + public PageResult<SysDictTypeDO> pageDictTypes(SysDictTypePageReqVO reqVO) { | ||
| 38 | + return SysDictTypeConvert.INSTANCE.convertPage02(dictTypeMapper.selectList(reqVO)); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Override | ||
| 42 | + public SysDictTypeDO getDictType(Long id) { | ||
| 43 | + return dictTypeMapper.selectById(id); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + @Override | ||
| 47 | + public SysDictTypeDO getDictType(String type) { | ||
| 48 | + return dictTypeMapper.selectByType(type); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @Override | ||
| 52 | + public Long createDictType(SysDictTypeCreateReqVO reqVO) { | ||
| 53 | + // 校验正确性 | ||
| 54 | + this.checkCreateOrUpdate(null, reqVO.getName(), reqVO.getType()); | ||
| 55 | + // 插入字典类型 | ||
| 56 | + SysDictTypeDO dictType = SysDictTypeConvert.INSTANCE.convert(reqVO); | ||
| 57 | + dictTypeMapper.insert(dictType); | ||
| 58 | + return dictType.getId(); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + @Override | ||
| 62 | + public void updateDictType(SysDictTypeUpdateReqVO reqVO) { | ||
| 63 | + // 校验正确性 | ||
| 64 | + this.checkCreateOrUpdate(reqVO.getId(), reqVO.getName(), null); | ||
| 65 | + // 更新字典类型 | ||
| 66 | + SysDictTypeDO updateObj = SysDictTypeConvert.INSTANCE.convert(reqVO); | ||
| 67 | + dictTypeMapper.updateById(updateObj); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + public void deleteDictType(Long id) { | ||
| 72 | + // 执行删除 | ||
| 73 | + self.deleteDictType0(id); | ||
| 74 | + // TODO 发送 MQ 消息 | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + @Transactional | ||
| 78 | + public void deleteDictType0(Long id) { | ||
| 79 | + // 校验是否存在 | ||
| 80 | + SysDictTypeDO dictType = this.checkDictTypeExists(id); | ||
| 81 | + // 校验是否有字典数据 | ||
| 82 | + if (dictDataService.countByDictType(dictType.getType()) > 0) { | ||
| 83 | + throw ServiceExceptionUtil.exception(DICT_TYPE_HAS_CHILDREN); | ||
| 84 | + } | ||
| 85 | + // 删除字典类型 | ||
| 86 | + dictTypeMapper.deleteById(id); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + private void checkCreateOrUpdate(Long id, String name, String type) { | ||
| 90 | + // 校验自己存在 | ||
| 91 | + checkDictTypeExists(id); | ||
| 92 | + // 校验字典类型的名字的唯一性 | ||
| 93 | + checkDictTypeNameUnique(id, name); | ||
| 94 | + // 校验字典类型的类型的唯一性 | ||
| 95 | + checkDictTypeUnique(id, type); | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + private void checkDictTypeNameUnique(Long id, String type) { | ||
| 99 | + SysDictTypeDO dictType = dictTypeMapper.selectByName(type); | ||
| 100 | + if (dictType == null) { | ||
| 101 | + return; | ||
| 102 | + } | ||
| 103 | + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 | ||
| 104 | + if (id == null) { | ||
| 105 | + throw ServiceExceptionUtil.exception(DICT_TYPE_NAME_DUPLICATE); | ||
| 106 | + } | ||
| 107 | + if (!dictType.getId().equals(id)) { | ||
| 108 | + throw ServiceExceptionUtil.exception(DICT_TYPE_NAME_DUPLICATE); | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + private void checkDictTypeUnique(Long id, String type) { | ||
| 113 | + SysDictTypeDO dictType = dictTypeMapper.selectByType(type); | ||
| 114 | + if (dictType == null) { | ||
| 115 | + return; | ||
| 116 | + } | ||
| 117 | + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 | ||
| 118 | + if (id == null) { | ||
| 119 | + throw ServiceExceptionUtil.exception(DICT_TYPE_TYPE_DUPLICATE); | ||
| 120 | + } | ||
| 121 | + if (!dictType.getId().equals(id)) { | ||
| 122 | + throw ServiceExceptionUtil.exception(DICT_TYPE_TYPE_DUPLICATE); | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + private SysDictTypeDO checkDictTypeExists(Long id) { | ||
| 127 | + if (id == null) { | ||
| 128 | + return null; | ||
| 129 | + } | ||
| 130 | + SysDictTypeDO dictType = dictTypeMapper.selectById(id); | ||
| 131 | + if (dictType == null) { | ||
| 132 | + throw ServiceExceptionUtil.exception(DICT_TYPE_NOT_FOUND); | ||
| 133 | + } | ||
| 134 | + return dictType; | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | +} |