From 356b451b2ad0f3e51eb5473c4d14fdfe3386ac07 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Fri, 30 Jun 2023 14:03:52 +0800
Subject: [PATCH] optimized code
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java | 136 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 108 insertions(+), 28 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
index 7684566..21df407 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -1,14 +1,19 @@
package com.ruoyi.system.service.impl;
+import java.util.Comparator;
import java.util.List;
-
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-
import com.ruoyi.common.core.constant.UserConstants;
+import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.system.domain.SysDictType;
+import com.ruoyi.common.security.utils.DictUtils;
+import com.ruoyi.system.api.domain.SysDictData;
+import com.ruoyi.system.api.domain.SysDictType;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.SysDictTypeMapper;
import com.ruoyi.system.service.ISysDictTypeService;
@@ -26,6 +31,15 @@
@Autowired
private SysDictDataMapper dictDataMapper;
+
+ /**
+ * 项目启动时,初始化字典到缓存
+ */
+ @PostConstruct
+ public void init()
+ {
+ loadingDictCache();
+ }
/**
* 根据条件分页查询字典类型
@@ -51,6 +65,29 @@
}
/**
+ * 根据字典类型查询字典数据
+ *
+ * @param dictType 字典类型
+ * @return 字典数据集合信息
+ */
+ @Override
+ public List<SysDictData> selectDictDataByType(String dictType)
+ {
+ List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
+ if (StringUtils.isNotEmpty(dictDatas))
+ {
+ return dictDatas;
+ }
+ dictDatas = dictDataMapper.selectDictDataByType(dictType);
+ if (StringUtils.isNotEmpty(dictDatas))
+ {
+ DictUtils.setDictCache(dictType, dictDatas);
+ return dictDatas;
+ }
+ return null;
+ }
+
+ /**
* 根据字典类型ID查询信息
*
* @param dictId 字典类型ID
@@ -68,59 +105,102 @@
* @param dictType 字典类型
* @return 字典类型
*/
+ @Override
public SysDictType selectDictTypeByType(String dictType)
{
return dictTypeMapper.selectDictTypeByType(dictType);
}
/**
- * 通过字典ID删除字典信息
- *
- * @param dictId 字典ID
- * @return 结果
- */
- @Override
- public int deleteDictTypeById(Long dictId)
- {
- return dictTypeMapper.deleteDictTypeById(dictId);
- }
-
- /**
* 批量删除字典类型信息
*
* @param dictIds 需要删除的字典ID
- * @return 结果
*/
- public int deleteDictTypeByIds(Long[] dictIds)
+ @Override
+ public void deleteDictTypeByIds(Long[] dictIds)
{
- return dictTypeMapper.deleteDictTypeByIds(dictIds);
+ for (Long dictId : dictIds)
+ {
+ SysDictType dictType = selectDictTypeById(dictId);
+ if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
+ {
+ throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
+ }
+ dictTypeMapper.deleteDictTypeById(dictId);
+ DictUtils.removeDictCache(dictType.getDictType());
+ }
+ }
+
+ /**
+ * 加载字典缓存数据
+ */
+ @Override
+ public void loadingDictCache()
+ {
+ SysDictData dictData = new SysDictData();
+ dictData.setStatus("0");
+ Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
+ for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
+ {
+ DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
+ }
+ }
+
+ /**
+ * 清空字典缓存数据
+ */
+ @Override
+ public void clearDictCache()
+ {
+ DictUtils.clearDictCache();
+ }
+
+ /**
+ * 重置字典缓存数据
+ */
+ @Override
+ public void resetDictCache()
+ {
+ clearDictCache();
+ loadingDictCache();
}
/**
* 新增保存字典类型信息
*
- * @param dictType 字典类型信息
+ * @param dict 字典类型信息
* @return 结果
*/
@Override
- public int insertDictType(SysDictType dictType)
+ public int insertDictType(SysDictType dict)
{
- return dictTypeMapper.insertDictType(dictType);
+ int row = dictTypeMapper.insertDictType(dict);
+ if (row > 0)
+ {
+ DictUtils.setDictCache(dict.getDictType(), null);
+ }
+ return row;
}
/**
* 修改保存字典类型信息
*
- * @param dictType 字典类型信息
+ * @param dict 字典类型信息
* @return 结果
*/
@Override
- @Transactional
- public int updateDictType(SysDictType dictType)
+ @Transactional(rollbackFor = Exception.class)
+ public int updateDictType(SysDictType dict)
{
- SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId());
- dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType());
- return dictTypeMapper.updateDictType(dictType);
+ SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
+ dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
+ int row = dictTypeMapper.updateDictType(dict);
+ if (row > 0)
+ {
+ List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
+ DictUtils.setDictCache(dict.getDictType(), dictDatas);
+ }
+ return row;
}
/**
@@ -130,7 +210,7 @@
* @return 结果
*/
@Override
- public String checkDictTypeUnique(SysDictType dict)
+ public boolean checkDictTypeUnique(SysDictType dict)
{
Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
--
Gitblit v1.9.3