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 | 3 | // 查询字典类型列表 |
| 4 | 4 | export function listType(query) { |
| 5 | 5 | return request({ |
| 6 | - url: '/system/dict/type/list', | |
| 6 | + url: '/system/dict-type/page', | |
| 7 | 7 | method: 'get', |
| 8 | 8 | params: query |
| 9 | 9 | }) |
| ... | ... | @@ -12,7 +12,7 @@ export function listType(query) { |
| 12 | 12 | // 查询字典类型详细 |
| 13 | 13 | export function getType(dictId) { |
| 14 | 14 | return request({ |
| 15 | - url: '/system/dict/type/' + dictId, | |
| 15 | + url: '/system/dict-type/get?id=' + dictId, | |
| 16 | 16 | method: 'get' |
| 17 | 17 | }) |
| 18 | 18 | } |
| ... | ... | @@ -20,7 +20,7 @@ export function getType(dictId) { |
| 20 | 20 | // 新增字典类型 |
| 21 | 21 | export function addType(data) { |
| 22 | 22 | return request({ |
| 23 | - url: '/system/dict/type', | |
| 23 | + url: '/system/dict-type/create', | |
| 24 | 24 | method: 'post', |
| 25 | 25 | data: data |
| 26 | 26 | }) |
| ... | ... | @@ -29,8 +29,8 @@ export function addType(data) { |
| 29 | 29 | // 修改字典类型 |
| 30 | 30 | export function updateType(data) { |
| 31 | 31 | return request({ |
| 32 | - url: '/system/dict/type', | |
| 33 | - method: 'put', | |
| 32 | + url: '/system/dict-type/update', | |
| 33 | + method: 'post', | |
| 34 | 34 | data: data |
| 35 | 35 | }) |
| 36 | 36 | } |
| ... | ... | @@ -38,23 +38,15 @@ export function updateType(data) { |
| 38 | 38 | // 删除字典类型 |
| 39 | 39 | export function delType(dictId) { |
| 40 | 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 | 47 | export function exportType(query) { |
| 56 | 48 | return request({ |
| 57 | - url: '/system/dict/type/export', | |
| 49 | + url: '/system/dict-type/export', | |
| 58 | 50 | method: 'get', |
| 59 | 51 | params: query |
| 60 | 52 | }) |
| ... | ... | @@ -63,7 +55,7 @@ export function exportType(query) { |
| 63 | 55 | // 获取字典选择框列表 |
| 64 | 56 | export function optionselect() { |
| 65 | 57 | return request({ |
| 66 | - url: '/system/dict/type/optionselect', | |
| 58 | + url: '/system/dict-type/optionselect', | |
| 67 | 59 | method: 'get' |
| 68 | 60 | }) |
| 69 | -} | |
| 70 | 61 | \ No newline at end of file |
| 62 | +} | ... | ... |
ruoyi-ui/src/views/system/dict/index.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="app-container"> |
| 3 | 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 | 5 | <el-input |
| 6 | - v-model="queryParams.dictName" | |
| 6 | + v-model="queryParams.name" | |
| 7 | 7 | placeholder="请输入字典名称" |
| 8 | 8 | clearable |
| 9 | 9 | size="small" |
| ... | ... | @@ -11,9 +11,9 @@ |
| 11 | 11 | @keyup.enter.native="handleQuery" |
| 12 | 12 | /> |
| 13 | 13 | </el-form-item> |
| 14 | - <el-form-item label="字典类型" prop="dictType"> | |
| 14 | + <el-form-item label="字典类型" prop="type"> | |
| 15 | 15 | <el-input |
| 16 | - v-model="queryParams.dictType" | |
| 16 | + v-model="queryParams.type" | |
| 17 | 17 | placeholder="请输入字典类型" |
| 18 | 18 | clearable |
| 19 | 19 | size="small" |
| ... | ... | @@ -30,10 +30,10 @@ |
| 30 | 30 | style="width: 240px" |
| 31 | 31 | > |
| 32 | 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 | 38 | </el-select> |
| 39 | 39 | </el-form-item> |
| ... | ... | @@ -67,26 +67,6 @@ |
| 67 | 67 | </el-col> |
| 68 | 68 | <el-col :span="1.5"> |
| 69 | 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 | 70 | type="warning" |
| 91 | 71 | icon="el-icon-download" |
| 92 | 72 | size="mini" |
| ... | ... | @@ -94,26 +74,16 @@ |
| 94 | 74 | v-hasPermi="['system:dict:export']" |
| 95 | 75 | >导出</el-button> |
| 96 | 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 | 77 | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| 107 | 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 | 83 | <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> |
| 114 | 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 | 87 | </router-link> |
| 118 | 88 | </template> |
| 119 | 89 | </el-table-column> |
| ... | ... | @@ -147,7 +117,7 @@ |
| 147 | 117 | <pagination |
| 148 | 118 | v-show="total>0" |
| 149 | 119 | :total="total" |
| 150 | - :page.sync="queryParams.pageNum" | |
| 120 | + :page.sync="queryParams.pageNo" | |
| 151 | 121 | :limit.sync="queryParams.pageSize" |
| 152 | 122 | @pagination="getList" |
| 153 | 123 | /> |
| ... | ... | @@ -155,19 +125,19 @@ |
| 155 | 125 | <!-- 添加或修改参数配置对话框 --> |
| 156 | 126 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| 157 | 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 | 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 | 133 | </el-form-item> |
| 164 | 134 | <el-form-item label="状态" prop="status"> |
| 165 | 135 | <el-radio-group v-model="form.status"> |
| 166 | 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 | 141 | </el-radio-group> |
| 172 | 142 | </el-form-item> |
| 173 | 143 | <el-form-item label="备注" prop="remark"> |
| ... | ... | @@ -183,7 +153,10 @@ |
| 183 | 153 | </template> |
| 184 | 154 | |
| 185 | 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 | 161 | export default { |
| 189 | 162 | name: "Dict", |
| ... | ... | @@ -191,12 +164,6 @@ export default { |
| 191 | 164 | return { |
| 192 | 165 | // 遮罩层 |
| 193 | 166 | loading: true, |
| 194 | - // 选中数组 | |
| 195 | - ids: [], | |
| 196 | - // 非单个禁用 | |
| 197 | - single: true, | |
| 198 | - // 非多个禁用 | |
| 199 | - multiple: true, | |
| 200 | 167 | // 显示搜索条件 |
| 201 | 168 | showSearch: true, |
| 202 | 169 | // 总条数 |
| ... | ... | @@ -213,45 +180,50 @@ export default { |
| 213 | 180 | dateRange: [], |
| 214 | 181 | // 查询参数 |
| 215 | 182 | queryParams: { |
| 216 | - pageNum: 1, | |
| 183 | + pageNo: 1, | |
| 217 | 184 | pageSize: 10, |
| 218 | - dictName: undefined, | |
| 219 | - dictType: undefined, | |
| 185 | + name: undefined, | |
| 186 | + type: undefined, | |
| 220 | 187 | status: undefined |
| 221 | 188 | }, |
| 222 | 189 | // 表单参数 |
| 223 | 190 | form: {}, |
| 224 | 191 | // 表单校验 |
| 225 | 192 | rules: { |
| 226 | - dictName: [ | |
| 193 | + name: [ | |
| 227 | 194 | { required: true, message: "字典名称不能为空", trigger: "blur" } |
| 228 | 195 | ], |
| 229 | - dictType: [ | |
| 196 | + type: [ | |
| 230 | 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 | 207 | created() { |
| 236 | 208 | this.getList(); |
| 237 | - this.getDicts("sys_normal_disable").then(response => { | |
| 238 | - this.statusOptions = response.data; | |
| 239 | - }); | |
| 240 | 209 | }, |
| 241 | 210 | methods: { |
| 242 | 211 | /** 查询字典类型列表 */ |
| 243 | 212 | getList() { |
| 244 | 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 | 220 | this.loading = false; |
| 249 | 221 | } |
| 250 | 222 | ); |
| 251 | 223 | }, |
| 252 | 224 | // 字典状态字典翻译 |
| 253 | 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 | 229 | cancel() { |
| ... | ... | @@ -261,17 +233,17 @@ export default { |
| 261 | 233 | // 表单重置 |
| 262 | 234 | reset() { |
| 263 | 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 | 240 | remark: undefined |
| 269 | 241 | }; |
| 270 | 242 | this.resetForm("form"); |
| 271 | 243 | }, |
| 272 | 244 | /** 搜索按钮操作 */ |
| 273 | 245 | handleQuery() { |
| 274 | - this.queryParams.pageNum = 1; | |
| 246 | + this.queryParams.pageNo = 1; | |
| 275 | 247 | this.getList(); |
| 276 | 248 | }, |
| 277 | 249 | /** 重置按钮操作 */ |
| ... | ... | @@ -286,17 +258,11 @@ export default { |
| 286 | 258 | this.open = true; |
| 287 | 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 | 262 | handleUpdate(row) { |
| 297 | 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 | 266 | this.form = response.data; |
| 301 | 267 | this.open = true; |
| 302 | 268 | this.title = "修改字典类型"; |
| ... | ... | @@ -306,7 +272,7 @@ export default { |
| 306 | 272 | submitForm: function() { |
| 307 | 273 | this.$refs["form"].validate(valid => { |
| 308 | 274 | if (valid) { |
| 309 | - if (this.form.dictId != undefined) { | |
| 275 | + if (this.form.id !== undefined) { | |
| 310 | 276 | updateType(this.form).then(response => { |
| 311 | 277 | this.msgSuccess("修改成功"); |
| 312 | 278 | this.open = false; |
| ... | ... | @@ -324,13 +290,13 @@ export default { |
| 324 | 290 | }, |
| 325 | 291 | /** 删除按钮操作 */ |
| 326 | 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 | 295 | confirmButtonText: "确定", |
| 330 | 296 | cancelButtonText: "取消", |
| 331 | 297 | type: "warning" |
| 332 | 298 | }).then(function() { |
| 333 | - return delType(dictIds); | |
| 299 | + return delType(ids); | |
| 334 | 300 | }).then(() => { |
| 335 | 301 | this.getList(); |
| 336 | 302 | this.msgSuccess("删除成功"); |
| ... | ... | @@ -357,4 +323,4 @@ export default { |
| 357 | 323 | } |
| 358 | 324 | } |
| 359 | 325 | }; |
| 360 | -</script> | |
| 361 | 326 | \ No newline at end of file |
| 327 | +</script> | ... | ... |
ruoyi-ui/src/views/system/post/index.vue
src/main/java/cn/iocoder/dashboard/modules/system/controller/dict/SysDictDataController.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.controller.dict; |
| 2 | 2 | |
| 3 | 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 | 6 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; |
| 6 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 7 | 8 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 8 | 9 | import io.swagger.annotations.Api; |
| 10 | +import io.swagger.annotations.ApiImplicitParam; | |
| 9 | 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 | 15 | import javax.annotation.Resource; |
| 15 | 16 | import java.util.List; |
| ... | ... | @@ -27,79 +28,61 @@ public class SysDictDataController { |
| 27 | 28 | @GetMapping("/list-all-simple") |
| 28 | 29 | @ApiOperation(value = "获得全部字典数据列表", notes = "一般用于管理后台缓存字典数据在本地") |
| 29 | 30 | // 无需添加权限认证,因为前端全局都需要 |
| 30 | - public CommonResult<List<SysDataDictSimpleVO>> listSimpleDictDatas() { | |
| 31 | + public CommonResult<List<SysDictDataSimpleVO>> listSimpleDictDatas() { | |
| 31 | 32 | List<SysDictDataDO> list = dictDataService.listDictDatas(); |
| 32 | 33 | return success(SysDictDataConvert.INSTANCE.convertList(list)); |
| 33 | 34 | } |
| 34 | 35 | |
| 36 | + @ApiOperation("/获得字典类型的分页列表") | |
| 37 | + @GetMapping("/page") | |
| 35 | 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 | 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 | 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 | 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 | 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 | 5 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO; |
| 7 | 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 | 9 | import cn.iocoder.dashboard.modules.system.convert.dict.SysDictTypeConvert; |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; |
| 11 | 11 | import io.swagger.annotations.Api; |
| ... | ... | @@ -26,14 +26,14 @@ public class SysDictTypeController { |
| 26 | 26 | @Resource |
| 27 | 27 | private SysDictTypeService dictTypeService; |
| 28 | 28 | |
| 29 | - @ApiOperation("/page") | |
| 30 | - @GetMapping("/list") | |
| 29 | + @ApiOperation("/获得字典类型的分页列表") | |
| 30 | + @GetMapping("/page") | |
| 31 | 31 | // @PreAuthorize("@ss.hasPermi('system:dict:list')") |
| 32 | 32 | public CommonResult<PageResult<SysDictTypeRespVO>> pageDictTypes(@Validated SysDictTypePageReqVO reqVO) { |
| 33 | 33 | return success(SysDictTypeConvert.INSTANCE.convertPage(dictTypeService.pageDictTypes(reqVO))); |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | - @ApiOperation("/查询字典详细") | |
| 36 | + @ApiOperation("/查询字典类型详细") | |
| 37 | 37 | @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") |
| 38 | 38 | @GetMapping(value = "/get") |
| 39 | 39 | // @PreAuthorize("@ss.hasPermi('system:dict:query')") |
| ... | ... | @@ -54,7 +54,7 @@ public class SysDictTypeController { |
| 54 | 54 | @PostMapping("update") |
| 55 | 55 | // @PreAuthorize("@ss.hasPermi('system:dict:edit')") |
| 56 | 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 | 58 | dictTypeService.updateDictType(reqVO); |
| 59 | 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
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 | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.framework.excel.Excel; | |
| 4 | 3 | import io.swagger.annotations.ApiModelProperty; |
| 5 | 4 | import lombok.Data; |
| 6 | 5 | |
| 7 | 6 | import javax.validation.constraints.NotBlank; |
| 7 | +import javax.validation.constraints.NotNull; | |
| 8 | 8 | import javax.validation.constraints.Size; |
| 9 | 9 | |
| 10 | 10 | /** |
| ... | ... | @@ -19,14 +19,11 @@ public class SysDictTypeBaseVO { |
| 19 | 19 | @Size(max = 100, message = "字典类型名称长度不能超过100个字符") |
| 20 | 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 | 22 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类") |
| 28 | - @NotBlank(message = "状态不能为空") | |
| 29 | - @Excel(name = "状态", readConverterExp = "0=正常,1=停用") | |
| 23 | + @NotNull(message = "状态不能为空") | |
| 30 | 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 | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | |
| 3 | 3 | import io.swagger.annotations.ApiModel; |
| 4 | +import io.swagger.annotations.ApiModelProperty; | |
| 4 | 5 | import lombok.Data; |
| 5 | 6 | import lombok.EqualsAndHashCode; |
| 6 | 7 | |
| 8 | +import javax.validation.constraints.NotNull; | |
| 9 | +import javax.validation.constraints.Size; | |
| 10 | + | |
| 7 | 11 | @ApiModel("字典类型创建 Request VO") |
| 8 | 12 | @Data |
| 9 | 13 | @EqualsAndHashCode(callSuper = true) |
| 10 | 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 | 1 | package cn.iocoder.dashboard.modules.system.controller.dict.vo.type; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.pojo.PageParam; | |
| 3 | 4 | import io.swagger.annotations.ApiModel; |
| 4 | 5 | import io.swagger.annotations.ApiModelProperty; |
| 5 | 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 | 14 | @ApiModel("字典类型分页列表 Request VO") |
| 8 | 15 | @Data |
| 9 | -public class SysDictTypePageReqVO { | |
| 16 | +public class SysDictTypePageReqVO extends PageParam { | |
| 10 | 17 | |
| 11 | 18 | @ApiModelProperty(value = "字典类型名称", example = "芋道", notes = "模糊匹配") |
| 12 | 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 | 25 | @ApiModelProperty(value = "展示状态", example = "1", notes = "参见 SysCommonStatusEnum 枚举类") |
| 15 | 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 | 19 | @ApiModelProperty(value = "字典类型编号", required = true, example = "1024") |
| 20 | 20 | private Integer id; |
| 21 | 21 | |
| 22 | + @ApiModelProperty(value = "字典类型", required = true, example = "sys_common_sex") | |
| 23 | + private String type; | |
| 24 | + | |
| 22 | 25 | @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") |
| 23 | 26 | private Date createTime; |
| 24 | 27 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictDataConvert.java
| 1 | 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 | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 9 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 5 | 10 | import org.mapstruct.Mapper; |
| 11 | +import org.mapstruct.Mapping; | |
| 6 | 12 | import org.mapstruct.factory.Mappers; |
| 7 | 13 | |
| 8 | 14 | import java.util.List; |
| ... | ... | @@ -12,6 +18,17 @@ public interface SysDictDataConvert { |
| 12 | 18 | |
| 13 | 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 | 1 | package cn.iocoder.dashboard.modules.system.convert.dict; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | +import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; | |
| 4 | 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 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO; |
| 8 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 6 | 9 | import org.mapstruct.Mapper; |
| 10 | +import org.mapstruct.Mapping; | |
| 7 | 11 | import org.mapstruct.factory.Mappers; |
| 8 | 12 | |
| 9 | 13 | @Mapper |
| ... | ... | @@ -15,4 +19,11 @@ public interface SysDictTypeConvert { |
| 15 | 19 | |
| 16 | 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 | 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 | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 7 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
| 4 | 8 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 9 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 5 | 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 | 16 | @Mapper |
| 8 | 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 | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 4 | -import cn.iocoder.dashboard.framework.excel.Excel; | |
| 5 | 4 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 6 | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 7 | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 8 | 7 | import lombok.Data; |
| 9 | 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 | 18 | public class SysDictDataDO extends BaseDO { |
| 23 | 19 | |
| 24 | 20 | /** |
| 25 | - * 字典编码 | |
| 21 | + * 字典数据编号 | |
| 26 | 22 | */ |
| 27 | 23 | @TableId |
| 28 | - @Excel(name = "字典编码", cellType = Excel.ColumnType.NUMERIC) | |
| 29 | 24 | private Long id; |
| 30 | 25 | /** |
| 31 | 26 | * 字典排序 |
| 32 | 27 | */ |
| 33 | - @Excel(name = "字典排序", cellType = Excel.ColumnType.NUMERIC) | |
| 34 | 28 | private Integer sort; |
| 35 | 29 | /** |
| 36 | 30 | * 字典标签 |
| 37 | 31 | */ |
| 38 | - @Excel(name = "字典标签") | |
| 39 | - @NotBlank(message = "字典标签不能为空") | |
| 40 | - @Size(max = 100, message = "字典标签长度不能超过100个字符") | |
| 41 | 32 | private String label; |
| 42 | 33 | /** |
| 43 | 34 | * 字典值 |
| 44 | 35 | */ |
| 45 | - @Excel(name = "字典键值") | |
| 46 | - @NotBlank(message = "字典键值不能为空") | |
| 47 | - @Size(max = 100, message = "字典键值长度不能超过100个字符") | |
| 48 | 36 | private String value; |
| 49 | 37 | /** |
| 50 | 38 | * 字典类型 |
| 51 | 39 | * |
| 52 | 40 | * 冗余 {@link SysDictDataDO#getDictType()} |
| 53 | 41 | */ |
| 54 | - @Excel(name = "字典类型") | |
| 55 | - @NotBlank(message = "字典类型不能为空") | |
| 56 | - @Size(max = 100, message = "字典类型长度不能超过100个字符") | |
| 57 | 42 | private String dictType; |
| 58 | 43 | /** |
| 59 | 44 | * 状态 |
| 60 | 45 | * |
| 61 | 46 | * 枚举 {@link CommonStatusEnum} |
| 62 | 47 | */ |
| 63 | - @Excel(name = "状态", readConverterExp = "0=正常,1=停用") | |
| 64 | 48 | private Integer status; |
| 65 | 49 | /** |
| 66 | 50 | * 备注 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/dict/SysDictTypeDO.java
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| ... | ... | @@ -51,7 +51,19 @@ public interface SysErrorCodeConstants { |
| 51 | 51 | // ========== 岗位模块 1002005000 ========== |
| 52 | 52 | ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在"); |
| 53 | 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 | 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 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictDataDO; |
| 4 | 8 | |
| 5 | 9 | import java.util.List; |
| ... | ... | @@ -13,4 +17,50 @@ public interface SysDictDataService { |
| 13 | 17 | |
| 14 | 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 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO; |
| 5 | 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 | 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 | 13 | */ |
| 14 | 14 | public interface SysDictTypeService { |
| 15 | 15 | |
| 16 | + /** | |
| 17 | + * 获得字典类型分页列表 | |
| 18 | + * | |
| 19 | + * @param reqVO 分页请求 | |
| 20 | + * @return 字典类型分页列表 | |
| 21 | + */ | |
| 16 | 22 | PageResult<SysDictTypeDO> pageDictTypes(SysDictTypePageReqVO reqVO); |
| 17 | 23 | |
| 24 | + /** | |
| 25 | + * 获得字典类型详情 | |
| 26 | + * | |
| 27 | + * @param id 字典类型编号 | |
| 28 | + * @return 字典类型 | |
| 29 | + */ | |
| 18 | 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 | 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 | 60 | void deleteDictType(Long id); |
| 25 | 61 | |
| 26 | 62 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java
| 1 | 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 | 10 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dict.SysDictDataMapper; |
| 4 | 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 | 13 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 14 | +import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; | |
| 6 | 15 | import org.springframework.stereotype.Service; |
| 7 | 16 | |
| 8 | 17 | import javax.annotation.Resource; |
| 9 | 18 | import java.util.Comparator; |
| 10 | 19 | import java.util.List; |
| 11 | 20 | |
| 21 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | |
| 22 | + | |
| 12 | 23 | /** |
| 13 | 24 | * 字典数据 Service 实现类 |
| 14 | 25 | * |
| ... | ... | @@ -22,13 +33,101 @@ public class SysDictDataServiceImpl implements SysDictDataService { |
| 22 | 33 | .thenComparingInt(SysDictDataDO::getSort); |
| 23 | 34 | |
| 24 | 35 | @Resource |
| 36 | + private SysDictTypeService dictTypeService; | |
| 37 | + | |
| 38 | + @Resource | |
| 25 | 39 | private SysDictDataMapper dictDataMapper; |
| 26 | 40 | |
| 27 | 41 | @Override |
| 28 | 42 | public List<SysDictDataDO> listDictDatas() { |
| 29 | - List<SysDictDataDO> list = dictDataMapper.selectList(null); | |
| 43 | + List<SysDictDataDO> list = dictDataMapper.selectList(); | |
| 30 | 44 | list.sort(COMPARATOR_TYPE_AND_SORT); |
| 31 | 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 | +} | ... | ... |