|
@@ -0,0 +1,148 @@
|
|
|
|
|
+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.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.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.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @ClassName : SysDictServiceImpl
|
|
|
|
|
+ * @Description :
|
|
|
|
|
+ * @Author : LF
|
|
|
|
|
+ * @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;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<SysDictItemDTO> selectDictItemDataList(SysDictItemQueryDTO query) {
|
|
|
|
|
+ List<String> dictIds = Arrays.asList(query.getDictId());
|
|
|
|
|
+ if(StrUtil.isNotEmpty(query.getDictCode())){
|
|
|
|
|
+ SysDictDTO dict = dictService.selectDictByCode(query.getDictCode());
|
|
|
|
|
+ if(dict!=null){
|
|
|
|
|
+ dictIds.add(dict.getDictId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return DictItemMapper.INSTANCE.toDictItemDtoList(
|
|
|
|
|
+ dictItemRepository.selectList(new LambdaQueryWrapper<SysDictItemPO>()
|
|
|
|
|
+ .in(CollectionUtil.isNotEmpty(dictIds), SysDictItemPO::getDictId,dictIds)
|
|
|
|
|
+ )
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SysDictItemDTO selectDictItemById(String id) {
|
|
|
|
|
+ return DictItemMapper.INSTANCE.toDictItemDto(dictItemRepository.selectById(id));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public boolean insertDictItem(SysDictItemDTO source) {
|
|
|
|
|
+ boolean result = dictItemRepository.insert(DictItemMapper.INSTANCE.toDictItemPO(source)) != 0;
|
|
|
|
|
+ if(result){
|
|
|
|
|
+ loadDict(source);
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public int deleteDictItemByIds(Collection<String> ids) {
|
|
|
|
|
+ List<SysDictItemPO> items = dictItemRepository.selectList(
|
|
|
|
|
+ new LambdaQueryWrapper<SysDictItemPO>()
|
|
|
|
|
+ .in(SysDictItemPO::getDictItemId,ids)
|
|
|
|
|
+ );
|
|
|
|
|
+ if(CollectionUtil.isEmpty(items)){
|
|
|
|
|
+ return CollectionUtil.size(ids);
|
|
|
|
|
+ }
|
|
|
|
|
+ int result = dictItemRepository.deleteBatchIds(ids);
|
|
|
|
|
+
|
|
|
|
|
+ List<SysDictDTO> dicts = dictService.selectDictByIds(
|
|
|
|
|
+ items.stream().map(SysDictItemPO::getDictId).collect(Collectors.toSet())
|
|
|
|
|
+ );
|
|
|
|
|
+ Map< String, SysDictDTO> dictMap = dicts.stream().collect(Collectors.groupingBy(SysDictDTO::getDictId, Collectors.collectingAndThen(Collectors.toList(), CollUtil::getFirst)));
|
|
|
|
|
+ items.forEach(item->{
|
|
|
|
|
+ SysDictDTO dict = dictMap.get(item.getDictId());
|
|
|
|
|
+ if(dict==null){
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ dictManager.evict(dict.getDictCode(),item.getValue());
|
|
|
|
|
+ });
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean updateDictItemById(SysDictItemDTO source) {
|
|
|
|
|
+ boolean result = dictItemRepository.updateById(DictItemMapper.INSTANCE.toDictItemPO(source)) != 0;
|
|
|
|
|
+ if(result){
|
|
|
|
|
+ loadDict(source);
|
|
|
|
|
+ }
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void loadDict(SysDictItemDTO source){
|
|
|
|
|
+ SysDictDTO dict = dictService.selectDictById(source.getDictId());
|
|
|
|
|
+ if(dict==null){
|
|
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选字典不存在,添加失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ dictManager.load(dict.getDictCode(),Arrays.asList( DictBO.builder()
|
|
|
|
|
+ .value(source.getValue())
|
|
|
|
|
+ .label(source.getLabel())
|
|
|
|
|
+ .color(source.getColor())
|
|
|
|
|
+ .sort(source.getSort())
|
|
|
|
|
+ .build()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void run(String... args) throws Exception {
|
|
|
|
|
+ reloadCache();
|
|
|
|
|
+ log.info("================== 字典加载完毕 ==================");
|
|
|
|
|
+ }
|
|
|
|
|
+}
|