|
|
@@ -3,23 +3,16 @@ package cn.tr.module.sys.dict.service.impl;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.tr.core.exception.ServiceException;
|
|
|
-import cn.tr.core.exception.TRExcCode;
|
|
|
-import cn.tr.module.sys.dict.dto.SysDictDTO;
|
|
|
-import cn.tr.module.sys.dict.dto.SysDictItemDTO;
|
|
|
-import cn.tr.module.sys.dict.dto.SysDictItemQueryDTO;
|
|
|
-import cn.tr.module.sys.dict.dto.SysDictQueryDTO;
|
|
|
+import cn.tr.module.sys.dict.dto.*;
|
|
|
import cn.tr.module.sys.dict.po.SysDictItemPO;
|
|
|
import cn.tr.module.sys.dict.repository.SysDictItemRepository;
|
|
|
import cn.tr.module.sys.dict.service.ISysDictItemService;
|
|
|
import cn.tr.module.sys.dict.service.ISysDictService;
|
|
|
import cn.tr.module.sys.mapper.dict.DictItemMapper;
|
|
|
-import cn.tr.plugin.dict.bo.DictBO;
|
|
|
-import cn.tr.plugin.dict.config.cache.DictManager;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.boot.CommandLineRunner;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.util.*;
|
|
|
@@ -32,12 +25,15 @@ import java.util.stream.Collectors;
|
|
|
* @Date: 2023年03月24日
|
|
|
*/
|
|
|
@Slf4j
|
|
|
-@AllArgsConstructor
|
|
|
@Service
|
|
|
-public class SysDictItemServiceImpl implements ISysDictItemService, CommandLineRunner {
|
|
|
- private final SysDictItemRepository dictItemRepository;
|
|
|
- private final ISysDictService dictService;
|
|
|
- private final DictManager dictManager;
|
|
|
+public class SysDictItemServiceImpl implements ISysDictItemService {
|
|
|
+ @Autowired
|
|
|
+ private SysDictItemRepository dictItemRepository;
|
|
|
+ @Autowired
|
|
|
+ private ISysDictService dictService;
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private ISysDictItemService self;
|
|
|
|
|
|
@Override
|
|
|
public List<SysDictItemDTO> selectDictItemDataList(SysDictItemQueryDTO query) {
|
|
|
@@ -65,7 +61,7 @@ public class SysDictItemServiceImpl implements ISysDictItemService, CommandLineR
|
|
|
public boolean insertDictItem(SysDictItemDTO source) {
|
|
|
boolean result = dictItemRepository.insert(DictItemMapper.INSTANCE.toDictItemPO(source)) != 0;
|
|
|
if(result){
|
|
|
- loadDict(source);
|
|
|
+ refreshDictByDictId(source.getDictId());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
@@ -81,7 +77,6 @@ public class SysDictItemServiceImpl implements ISysDictItemService, CommandLineR
|
|
|
return CollectionUtil.size(ids);
|
|
|
}
|
|
|
int result = dictItemRepository.deleteBatchIds(ids);
|
|
|
-
|
|
|
List<SysDictDTO> dicts = dictService.selectDictByIds(
|
|
|
items.stream().map(SysDictItemPO::getDictId).collect(Collectors.toSet())
|
|
|
);
|
|
|
@@ -91,7 +86,7 @@ public class SysDictItemServiceImpl implements ISysDictItemService, CommandLineR
|
|
|
if(dict==null){
|
|
|
return;
|
|
|
}
|
|
|
- dictManager.evict(dict.getDictCode(),item.getValue());
|
|
|
+ refreshDictByDictId(dict.getDictId());
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
@@ -100,49 +95,29 @@ public class SysDictItemServiceImpl implements ISysDictItemService, CommandLineR
|
|
|
public boolean updateDictItemById(SysDictItemDTO source) {
|
|
|
boolean result = dictItemRepository.updateById(DictItemMapper.INSTANCE.toDictItemPO(source)) != 0;
|
|
|
if(result){
|
|
|
- loadDict(source);
|
|
|
+ refreshDictByDictId(source.getDictId());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void reloadCache() {
|
|
|
- List<SysDictDTO> allDict = dictService.selectDictDataList(new SysDictQueryDTO());
|
|
|
- Map< String, SysDictDTO> dictMap = allDict.stream().collect(Collectors.groupingBy(SysDictDTO::getDictId, Collectors.collectingAndThen(Collectors.toList(), CollUtil::getFirst)));
|
|
|
- List<SysDictItemDTO> allDictItems = this.selectDictItemDataList(new SysDictItemQueryDTO());
|
|
|
- Map<String, List<DictBO>> loadMap = allDictItems.stream()
|
|
|
- .collect(Collectors.groupingBy(dict->dictMap.get(dict.getDictId()).getDictCode(),
|
|
|
- Collectors.collectingAndThen(Collectors.toList(),
|
|
|
- value -> value.stream().map(item -> DictBO.builder()
|
|
|
- .value(item.getValue())
|
|
|
- .label(item.getLabel())
|
|
|
- .color(item.getColor())
|
|
|
- .sort(item.getSort())
|
|
|
- .build()
|
|
|
- )
|
|
|
- .collect(Collectors.toList())
|
|
|
- )
|
|
|
- )
|
|
|
- );
|
|
|
- dictManager.loadAll(loadMap);
|
|
|
+ public List<SysDictItemSmallDTO> selectDictItemsByDictCode(String dictCode) {
|
|
|
+ SysDictDTO dict = dictService.selectDictByCode(dictCode);
|
|
|
+ if(dict==null){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ List<SysDictItemSmallDTO> result = DictItemMapper.INSTANCE.toDictItemSmallDtoList(dictItemRepository.selectList(new LambdaQueryWrapper<SysDictItemPO>()
|
|
|
+ .eq(SysDictItemPO::getDictId, dict.getDictId())));
|
|
|
+ result.sort(Comparator.comparing(SysDictItemSmallDTO::getSort));
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
- private void loadDict(SysDictItemDTO source){
|
|
|
- SysDictDTO dict = dictService.selectDictById(source.getDictId());
|
|
|
+ private void refreshDictByDictId(String dictId){
|
|
|
+ SysDictDTO dict = dictService.selectDictById(dictId);
|
|
|
if(dict==null){
|
|
|
- throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选字典不存在,添加失败");
|
|
|
+ return;
|
|
|
}
|
|
|
- dictManager.load(dict.getDictCode(),Arrays.asList( DictBO.builder()
|
|
|
- .value(source.getValue())
|
|
|
- .label(source.getLabel())
|
|
|
- .color(source.getColor())
|
|
|
- .sort(source.getSort())
|
|
|
- .build()));
|
|
|
- }
|
|
|
+ self.delCache(dict.getDictCode());
|
|
|
|
|
|
- @Override
|
|
|
- public void run(String... args) throws Exception {
|
|
|
- reloadCache();
|
|
|
- log.info("================== 字典加载完毕 ==================");
|
|
|
}
|
|
|
}
|