mirror of https://gitee.com/stylefeng/roses
【7.6.0】【dict】更新新增字典的业务逻辑
parent
0c154bb625
commit
3ed1f2cc27
|
@ -104,6 +104,7 @@ public class DictRequest extends BaseRequest {
|
|||
* 如果没有上级字典id,则为-1
|
||||
*/
|
||||
@ChineseDescription("上级字典的id")
|
||||
@NotNull(message = "上级字典的id不能为空", groups = {edit.class, add.class})
|
||||
private Long dictParentId;
|
||||
|
||||
/**
|
||||
|
@ -117,8 +118,8 @@ public class DictRequest extends BaseRequest {
|
|||
/**
|
||||
* 排序,带小数点
|
||||
*/
|
||||
@ChineseDescription("排序")
|
||||
@NotNull(message = "排序不能为空", groups = {add.class, edit.class})
|
||||
@ChineseDescription("排序")
|
||||
private BigDecimal dictSort;
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,11 +27,9 @@ package cn.stylefeng.roses.kernel.dict.modular.service.impl;
|
|||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.dict.api.constants.DictConstants;
|
||||
import cn.stylefeng.roses.kernel.dict.api.exception.DictException;
|
||||
import cn.stylefeng.roses.kernel.dict.api.exception.enums.DictExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict;
|
||||
|
@ -41,7 +39,8 @@ import cn.stylefeng.roses.kernel.dict.modular.pojo.request.DictRequest;
|
|||
import cn.stylefeng.roses.kernel.dict.modular.service.DictService;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.service.DictTypeService;
|
||||
import cn.stylefeng.roses.kernel.pinyin.api.PinYinApi;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.constants.SymbolConstant;
|
||||
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
|
||||
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
|
||||
|
@ -73,11 +72,6 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
@Resource
|
||||
private DictTypeService dictTypeService;
|
||||
|
||||
@Resource(name = "defaultStringCacheOperator")
|
||||
private CacheOperatorApi<String> defaultStringCacheOperator;
|
||||
|
||||
private static final String CACHE_PREFIX = "dict:";
|
||||
|
||||
@Override
|
||||
public List<TreeDictInfo> getTreeDictList(DictRequest dictRequest) {
|
||||
|
||||
|
@ -107,26 +101,26 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
@Transactional(rollbackFor = Exception.class)
|
||||
public void add(DictRequest dictRequest) {
|
||||
|
||||
// 校验字典重复
|
||||
// 校验字典重复,同一个字典类型下不能有重复的字典编码或者字典名称
|
||||
this.validateRepeat(dictRequest, false);
|
||||
|
||||
SysDict sysDict = new SysDict();
|
||||
BeanUtil.copyProperties(dictRequest, sysDict);
|
||||
sysDict.setDictParentId(DictConstants.DEFAULT_DICT_PARENT_ID);
|
||||
sysDict.setDictPids(StrUtil.BRACKET_START + DictConstants.DEFAULT_DICT_PARENT_ID + StrUtil.BRACKET_END + StrUtil.COMMA);
|
||||
sysDict.setStatusFlag(StatusEnum.ENABLE.getCode());
|
||||
|
||||
// 填充字典的拼音
|
||||
sysDict.setDictNamePinyin(pinYinApi.parseEveryPinyinFirstLetter(sysDict.getDictName()));
|
||||
|
||||
// 填充字典的pids
|
||||
String pids = this.createPids(sysDict.getDictParentId());
|
||||
sysDict.setDictPids(pids);
|
||||
|
||||
this.save(sysDict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void del(DictRequest dictRequest) {
|
||||
SysDict sysDict = this.querySysDict(dictRequest);
|
||||
sysDict.setDelFlag(YesOrNotEnum.Y.getCode());
|
||||
this.updateById(sysDict);
|
||||
|
||||
// 清除缓存中的字典值
|
||||
defaultStringCacheOperator.remove(CACHE_PREFIX + sysDict.getDictTypeId() + "|" + sysDict.getDictCode());
|
||||
// 删除字典
|
||||
this.removeById(dictRequest.getDictId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -145,9 +139,6 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
sysDict.setDictNamePinyin(pinYinApi.parseEveryPinyinFirstLetter(sysDict.getDictName()));
|
||||
|
||||
this.updateById(sysDict);
|
||||
|
||||
// 清除缓存中的字典值
|
||||
defaultStringCacheOperator.remove(CACHE_PREFIX + sysDict.getDictTypeId() + "|" + sysDict.getDictCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -181,10 +172,6 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
|
||||
@Override
|
||||
public String getDictName(String dictTypeCode, String dictCode) {
|
||||
String dictName = defaultStringCacheOperator.get(CACHE_PREFIX + dictTypeCode + "|" + dictCode);
|
||||
if (StrUtil.isNotEmpty(dictName)) {
|
||||
return dictName;
|
||||
}
|
||||
LambdaQueryWrapper<SysDict> sysDictLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysDictLambdaQueryWrapper.eq(SysDict::getDictTypeId, dictTypeCode);
|
||||
sysDictLambdaQueryWrapper.eq(SysDict::getDictCode, dictCode);
|
||||
|
@ -203,13 +190,7 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
return StrUtil.EMPTY;
|
||||
}
|
||||
|
||||
dictName = list.get(0).getDictName();
|
||||
defaultStringCacheOperator.put(CACHE_PREFIX + dictTypeCode + "|" + dictCode, dictName);
|
||||
if (dictName != null) {
|
||||
return dictName;
|
||||
} else {
|
||||
return StrUtil.EMPTY;
|
||||
}
|
||||
return list.get(0).getDictName();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -298,7 +279,6 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
if (editFlag) {
|
||||
sysDictLambdaQueryWrapper.ne(SysDict::getDictId, dictRequest.getDictId());
|
||||
}
|
||||
sysDictLambdaQueryWrapper.ne(SysDict::getDelFlag, YesOrNotEnum.Y.getCode());
|
||||
long count = this.count(sysDictLambdaQueryWrapper);
|
||||
if (count > 0) {
|
||||
throw new DictException(DictExceptionEnum.DICT_CODE_REPEAT, dictRequest.getDictTypeId(), dictRequest.getDictCode());
|
||||
|
@ -311,12 +291,38 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, SysDict> implements
|
|||
if (editFlag) {
|
||||
dictNameWrapper.ne(SysDict::getDictId, dictRequest.getDictId());
|
||||
}
|
||||
dictNameWrapper.ne(SysDict::getDelFlag, YesOrNotEnum.Y.getCode());
|
||||
long dictNameCount = this.count(dictNameWrapper);
|
||||
if (dictNameCount > 0) {
|
||||
throw new DictException(DictExceptionEnum.DICT_NAME_REPEAT, dictRequest.getDictTypeId(), dictRequest.getDictCode());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建字典的pids的值
|
||||
* <p>
|
||||
* 如果pid是顶级节点,pids = 【[-1],】
|
||||
* <p>
|
||||
* 如果pid不是顶级节点,pids = 【父菜单的pids,[pid],】
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/27 17:24
|
||||
*/
|
||||
private String createPids(Long dictParentId) {
|
||||
if (dictParentId.equals(TreeConstants.DEFAULT_PARENT_ID)) {
|
||||
return SymbolConstant.LEFT_SQUARE_BRACKETS + TreeConstants.DEFAULT_PARENT_ID + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA;
|
||||
} else {
|
||||
//获取父字典
|
||||
LambdaQueryWrapper<SysDict> dictWrapper = new LambdaQueryWrapper<>();
|
||||
dictWrapper.eq(SysDict::getDictId, dictParentId);
|
||||
dictWrapper.select(SysDict::getDictPids);
|
||||
SysDict parentDictInfo = this.getOne(dictWrapper, false);
|
||||
if (parentDictInfo == null) {
|
||||
return SymbolConstant.LEFT_SQUARE_BRACKETS + TreeConstants.DEFAULT_PARENT_ID + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA;
|
||||
} else {
|
||||
// 组装pids
|
||||
return parentDictInfo.getDictPids() + SymbolConstant.LEFT_SQUARE_BRACKETS + dictParentId + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.dict.modular.sqladapter;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 创建数据库的sql,可用在租户的创建
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2019-07-16-13:06
|
||||
*/
|
||||
@Getter
|
||||
public class DictSql extends AbstractSql {
|
||||
|
||||
@Override
|
||||
protected String mysql() {
|
||||
return "CREATE TABLE `sys_dict` (\n" +
|
||||
" `dict_id` bigint(20) NOT NULL COMMENT '字典id',\n" +
|
||||
" `dict_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典编码',\n" +
|
||||
" `dict_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典名称',\n" +
|
||||
" `dict_name_pinyin` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典名称首字母',\n" +
|
||||
" `dict_encode` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典编码',\n" +
|
||||
" `dict_type_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字典类型的编码',\n" +
|
||||
" `dict_short_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典简称',\n" +
|
||||
" `dict_short_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典简称的编码',\n" +
|
||||
" `dict_parent_id` bigint(20) NOT NULL COMMENT '上级字典的id(如果没有上级字典id,则为-1)',\n" +
|
||||
" `status_flag` tinyint(4) NOT NULL COMMENT '状态:(1-启用,2-禁用),参考 StatusEnum',\n" +
|
||||
" `dict_sort` decimal(10,2) DEFAULT NULL COMMENT '排序,带小数点',\n" +
|
||||
" `dict_pids` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '父id集合',\n" +
|
||||
" `del_flag` char(1) CHARACTER SET utf8 NOT NULL DEFAULT 'N' COMMENT '是否删除,Y-被删除,N-未删除',\n" +
|
||||
" `create_time` datetime DEFAULT NULL COMMENT '创建时间',\n" +
|
||||
" `create_user` bigint(20) DEFAULT NULL COMMENT '创建用户id',\n" +
|
||||
" `update_time` datetime DEFAULT NULL COMMENT '修改时间',\n" +
|
||||
" `update_user` bigint(20) DEFAULT NULL COMMENT '修改用户id',\n" +
|
||||
" PRIMARY KEY (`dict_id`) USING BTREE\n" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='字典';";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String sqlServer() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String pgSql() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String oracle() {
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.dict.modular.sqladapter;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 创建数据库的sql,可用在租户的创建
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2019-07-16-13:06
|
||||
*/
|
||||
@Getter
|
||||
public class DictTypeSql extends AbstractSql {
|
||||
|
||||
@Override
|
||||
protected String mysql() {
|
||||
return "CREATE TABLE `sys_dict_type` (\n" +
|
||||
" `dict_type_id` bigint(20) NOT NULL COMMENT '字典类型id',\n" +
|
||||
" `dict_type_class` int(11) DEFAULT NULL COMMENT '字典类型: 1-业务类型,2-系统类型,参考 DictTypeClassEnum',\n" +
|
||||
" `dict_type_bus_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型业务编码',\n" +
|
||||
" `dict_type_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型编码',\n" +
|
||||
" `dict_type_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型名称',\n" +
|
||||
" `dict_type_name_pinyin` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型名称首字母拼音',\n" +
|
||||
" `dict_type_desc` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '字典类型描述',\n" +
|
||||
" `status_flag` tinyint(4) DEFAULT NULL COMMENT '字典类型的状态:1-启用,2-禁用,参考 StatusEnum',\n" +
|
||||
" `dict_type_sort` decimal(10,2) DEFAULT NULL COMMENT '排序,带小数点',\n" +
|
||||
" `del_flag` char(1) CHARACTER SET utf8 NOT NULL DEFAULT 'N' COMMENT '是否删除:Y-被删除,N-未删除',\n" +
|
||||
" `create_time` datetime DEFAULT NULL COMMENT '创建时间',\n" +
|
||||
" `create_user` bigint(20) DEFAULT NULL COMMENT '创建用户id',\n" +
|
||||
" `update_time` datetime DEFAULT NULL COMMENT '修改时间',\n" +
|
||||
" `update_user` bigint(20) DEFAULT NULL COMMENT '修改用户id',\n" +
|
||||
" PRIMARY KEY (`dict_type_id`) USING BTREE\n" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='字典类型';";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String sqlServer() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String pgSql() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String oracle() {
|
||||
return "";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue