Forráskód Böngészése

Fix 修复字典键值可重复配置问题

YueYunyun 1 éve
szülő
commit
90c39edecf

+ 6 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysDictDataController.java

@@ -87,6 +87,9 @@ public class SysDictDataController extends BaseController {
     @Log(title = "字典数据", businessType = BusinessType.INSERT)
     @PostMapping
     public R<Void> add(@Validated @RequestBody SysDictDataBo dict) {
+        if (!dictDataService.checkDictDataUnique(dict)) {
+            return R.fail("新增字典数据'" + dict.getDictValue() + "'失败,字典键值已存在");
+        }
         dictDataService.insertDictData(dict);
         return R.ok();
     }
@@ -98,6 +101,9 @@ public class SysDictDataController extends BaseController {
     @Log(title = "字典数据", businessType = BusinessType.UPDATE)
     @PutMapping
     public R<Void> edit(@Validated @RequestBody SysDictDataBo dict) {
+        if (!dictDataService.checkDictDataUnique(dict)) {
+            return R.fail("修改字典数据'" + dict.getDictValue() + "'失败,字典键值已存在");
+        }
         dictDataService.updateDictData(dict);
         return R.ok();
     }

+ 8 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/ISysDictDataService.java

@@ -64,4 +64,12 @@ public interface ISysDictDataService {
      * @return 结果
      */
     List<SysDictDataVo> updateDictData(SysDictDataBo bo);
+
+    /**
+     * 校验字典键值是否唯一
+     *
+     * @param dict 字典数据
+     * @return 结果
+     */
+    boolean checkDictDataUnique(SysDictDataBo dict);
 }

+ 18 - 3
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysDictDataServiceImpl.java

@@ -1,16 +1,17 @@
 package com.vber.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vber.common.core.constant.CacheNames;
+import com.vber.common.core.exception.ServiceException;
 import com.vber.common.core.utils.MapstructUtils;
+import com.vber.common.core.utils.StringUtils;
 import com.vber.common.mybatis.core.page.PageQuery;
-import com.vber.system.domain.SysDictData;
 import com.vber.common.mybatis.core.page.TableDataInfo;
-import com.vber.common.core.exception.ServiceException;
-import com.vber.common.core.utils.StringUtils;
 import com.vber.common.redis.utils.CacheUtils;
+import com.vber.system.domain.SysDictData;
 import com.vber.system.domain.bo.SysDictDataBo;
 import com.vber.system.domain.vo.SysDictDataVo;
 import com.vber.system.mapper.SysDictDataMapper;
@@ -135,4 +136,18 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
         throw new ServiceException("操作失败");
     }
 
+    /**
+     * 校验字典键值是否唯一
+     *
+     * @param dict 字典数据
+     * @return 结果
+     */
+    @Override
+    public boolean checkDictDataUnique(SysDictDataBo dict) {
+        Long dictCode = ObjectUtil.isNull(dict.getDictCode()) ? -1L : dict.getDictCode();
+        SysDictData entity = baseMapper.selectOne(new LambdaQueryWrapper<SysDictData>()
+                .eq(SysDictData::getDictType, dict.getDictType()).eq(SysDictData::getDictValue, dict.getDictValue()));
+        return !ObjectUtil.isNotNull(entity) || dictCode.equals(entity.getDictCode());
+    }
+
 }