【7.6.0】【dict】更新新增字典的业务逻辑

pull/57/head
fengshuonan 2023-06-27 17:27:23 +08:00
parent 0c154bb625
commit 3ed1f2cc27
4 changed files with 42 additions and 186 deletions

View File

@ -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;
/**

View File

@ -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>
* pidpids = [-1],
* <p>
* pidpids = 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;
}
}
}
}

View File

@ -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.
*
* GunsAPACHE 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 "";
}
}

View File

@ -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.
*
* GunsAPACHE 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 "";
}
}