Commit f6bb33863fbd86c010b2851ed1ee6bc87fe10613

Authored by YunaiV
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 +}