diff --git a/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java b/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java index 68782c2c..af234a49 100644 --- a/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java +++ b/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java @@ -122,22 +122,19 @@ public interface CommonMapper { } - public default String toString(Object o){ + public default String toString(Object o) { - if (o instanceof String) { - return ((String) o); - } if (o == null) { return null; - }else if (o instanceof BaseEntity) { + } else if (o instanceof String) { + return ((String) o); + } else if (o instanceof BaseEntity) { return ((BaseEntity) o).getId(); } else if (o instanceof BaseDto) { return ((BaseDto) o).getId(); - } else if (o instanceof String) { - return (String) o; - }else { + } else { return o.toString(); } diff --git a/src/main/java/cn/lihongjie/coal/coalBlend/mapper/CoalBlendMapper.java b/src/main/java/cn/lihongjie/coal/coalBlend/mapper/CoalBlendMapper.java index c1be834f..454eb148 100644 --- a/src/main/java/cn/lihongjie/coal/coalBlend/mapper/CoalBlendMapper.java +++ b/src/main/java/cn/lihongjie/coal/coalBlend/mapper/CoalBlendMapper.java @@ -24,4 +24,5 @@ public interface CoalBlendMapper { void updateEntity(@MappingTarget CoalBlendEntity entity, UpdateCoalBlendDto dto); + } diff --git a/src/main/java/cn/lihongjie/coal/common/Ctx.java b/src/main/java/cn/lihongjie/coal/common/Ctx.java index e347ab9a..c19181c2 100644 --- a/src/main/java/cn/lihongjie/coal/common/Ctx.java +++ b/src/main/java/cn/lihongjie/coal/common/Ctx.java @@ -1,8 +1,8 @@ package cn.lihongjie.coal.common; -import cn.lihongjie.coal.user.entity.UserEntity; import cn.lihongjie.coal.session.SessionService; +import cn.lihongjie.coal.user.entity.UserEntity; import lombok.experimental.UtilityClass; import org.springframework.security.core.context.SecurityContextHolder; @@ -47,4 +47,6 @@ public class Ctx { public static UserEntity currentUser() { return getAuthentication().getUser(); } + + } diff --git a/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryEntity.java b/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryEntity.java index 89c57528..019d68a9 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryEntity.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryEntity.java @@ -8,8 +8,11 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; import org.hibernate.annotations.Comment; +import org.hibernate.annotations.Formula; +import java.util.ArrayList; import java.util.List; @Entity @@ -26,6 +29,15 @@ public class DictionaryEntity extends CommonEntity { @Comment("字典类型 1 静态字典 2 动态字典") private String dictType; + + @Formula("(select i.name\n" + + "from t_dictionary d,\n" + + " t_dictionary_item i\n" + + "where d.id = i.dictionary_id\n" + + " and d.code = 'dict.type'\n" + + " and i.code = dict_type)") + private String dictTypeName; + @OneToOne @Comment("动态字典关联的脚本") private ScriptEntity script; @@ -39,4 +51,37 @@ public class DictionaryEntity extends CommonEntity { } } + + public void addItem(DictionaryItemEntity ni) { + if (this.item == null) { + this.item = new ArrayList<>(); + + } + ; + + + boolean found = false; + + for (DictionaryItemEntity di : item) { + + if (StringUtils.equalsIgnoreCase(di.getCode(), ni.getCode())) { + found = true; + + + return; + } + + } + + if (!found) { + + ni.initParent(null); + ni.initDict(this); + + + this.item.add(ni); + } + + + } } diff --git a/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryItemEntity.java b/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryItemEntity.java index fe0dbe53..5688c008 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryItemEntity.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/entity/DictionaryItemEntity.java @@ -28,6 +28,22 @@ public class DictionaryItemEntity extends CommonEntity { private DictionaryItemEntity parent; + public void initParent(DictionaryItemEntity o) { + + this.parent = o; + + if (children != null) { + children.forEach(x -> x.initParent(this)); + } + } + + public void initDict(DictionaryEntity dictionaryEntity) { + this.dictionary= dictionaryEntity; + if (children != null) { + children.forEach(x -> x.initDict(dictionaryEntity)); + } + + } } diff --git a/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryItemMapper.java b/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryItemMapper.java index 2ff432ef..05a11f8f 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryItemMapper.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryItemMapper.java @@ -2,6 +2,7 @@ package cn.lihongjie.coal.dictionary.mapper; import cn.lihongjie.coal.base.mapper.CommonMapper; +import cn.lihongjie.coal.coalBlend.mapper.CoalBlendMapper; import cn.lihongjie.coal.dictionary.dto.CreateDictionaryItemDto; import cn.lihongjie.coal.dictionary.dto.DictionaryItemDto; import cn.lihongjie.coal.dictionary.dto.UpdateDictionaryItemDto; @@ -16,6 +17,9 @@ import org.mapstruct.MappingTarget; ) public interface DictionaryItemMapper { + CoalBlendMapper INSTANCE = org.mapstruct.factory.Mappers.getMapper(CoalBlendMapper.class); + DictionaryItemEntity copy(DictionaryItemEntity i); + DictionaryItemDto toDto(DictionaryItemEntity user); DictionaryItemEntity toEntity(CreateDictionaryItemDto request); diff --git a/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryRepository.java b/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java similarity index 83% rename from src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryRepository.java rename to src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java index 4d681e69..a479cfa7 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/mapper/DictionaryRepository.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/repository/DictionaryRepository.java @@ -1,4 +1,4 @@ -package cn.lihongjie.coal.dictionary.mapper; +package cn.lihongjie.coal.dictionary.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.dictionary.entity.DictionaryEntity; diff --git a/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java b/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java index a3ac553b..be0716ec 100644 --- a/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java +++ b/src/main/java/cn/lihongjie/coal/dictionary/service/DictionaryService.java @@ -8,17 +8,28 @@ import cn.lihongjie.coal.dictionary.dto.DictionaryDetailedDto; import cn.lihongjie.coal.dictionary.dto.DictionaryDto; import cn.lihongjie.coal.dictionary.dto.UpdateDictionaryDto; import cn.lihongjie.coal.dictionary.entity.DictionaryEntity; +import cn.lihongjie.coal.dictionary.entity.DictionaryItemEntity; +import cn.lihongjie.coal.dictionary.mapper.DictionaryItemMapper; import cn.lihongjie.coal.dictionary.mapper.DictionaryMapper; -import cn.lihongjie.coal.dictionary.mapper.DictionaryRepository; +import cn.lihongjie.coal.dictionary.repository.DictionaryRepository; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; +import org.springframework.core.io.ClassPathResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import java.io.InputStream; +import java.util.List; + @Service @Slf4j public class DictionaryService extends BaseService { @@ -101,4 +112,76 @@ public class DictionaryService extends BaseService defaultDicts; + + List exists = findAll(); + + try (InputStream inputStream = classPathResource.getInputStream()) { + defaultDicts = mapper.readValue(inputStream, new TypeReference>() { + }); + + + } + + + for (DictionaryEntity dictionary : defaultDicts) { + + boolean found = false; + for (DictionaryEntity exist : exists) { + + + if (StringUtils.equalsIgnoreCase(dictionary.getCode(), exist.getCode())) { + + for (DictionaryItemEntity item : dictionary.getItem()) { + found = true; + exist.addItem(dictionaryItemMapper.copy(item)); + + } + + + } + + + } + + + if (!found) { + DictionaryEntity nd = new DictionaryEntity(); + nd.setCode(dictionary.getCode()); + nd.setName(dictionary.getName()); + + nd.setDictType("1"); + for (DictionaryItemEntity item : dictionary.getItem()) { + nd.addItem(item); + } + + this.repository.save(nd); + + } + + + + + + + + + + } + + + } } diff --git a/src/main/java/cn/lihongjie/coal/resource/dto/ResourceDto.java b/src/main/java/cn/lihongjie/coal/resource/dto/ResourceDto.java index f3149852..5a8902f6 100644 --- a/src/main/java/cn/lihongjie/coal/resource/dto/ResourceDto.java +++ b/src/main/java/cn/lihongjie/coal/resource/dto/ResourceDto.java @@ -10,7 +10,7 @@ public class ResourceDto extends CommonDto { @Comment("资源类型") private String type; - + private String typeName; @Comment("资源地址") diff --git a/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java b/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java index 090573df..9359ebfe 100644 --- a/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java +++ b/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.hibernate.annotations.Comment; +import org.hibernate.annotations.Formula; import java.util.ArrayList; import java.util.List; @@ -34,6 +35,15 @@ public class ResourceEntity extends CommonEntity { private String type; + @Formula("(select i.name\n" + + "from t_dictionary d,\n" + + " t_dictionary_item i\n" + + "where d.id = i.dictionary_id\n" + + " and d.code = 'resource.type'\n" + + " and i.code = type)") + private String typeName; + + @Comment("资源地址") private String url; diff --git a/src/main/java/cn/lihongjie/coal/runner/InitDataRunner.java b/src/main/java/cn/lihongjie/coal/runner/InitDataRunner.java index 022c3492..4ec638a8 100644 --- a/src/main/java/cn/lihongjie/coal/runner/InitDataRunner.java +++ b/src/main/java/cn/lihongjie/coal/runner/InitDataRunner.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.runner; import cn.lihongjie.coal.coalParameterDef.service.CoalParameterDefService; +import cn.lihongjie.coal.dictionary.service.DictionaryService; import cn.lihongjie.coal.organization.entity.OrganizationEntity; import cn.lihongjie.coal.organization.service.OrganizationService; import cn.lihongjie.coal.resource.service.ResourceService; @@ -31,6 +32,9 @@ public class InitDataRunner implements CommandLineRunner { @Autowired ResourceService resourceService; + + @Autowired + DictionaryService dictionaryService; @Override public void run(String... args) throws Exception { @@ -53,6 +57,9 @@ public class InitDataRunner implements CommandLineRunner { resourceService.initUrlResource(); + dictionaryService.initDefault(); + + } finally { SecurityContextHolder.clearContext(); diff --git a/src/main/resources/config/dictionary.json b/src/main/resources/config/dictionary.json new file mode 100644 index 00000000..c25ca682 --- /dev/null +++ b/src/main/resources/config/dictionary.json @@ -0,0 +1,37 @@ +[ + { + "code": "resource.type", + "name": "资源类型", + "item": [ + { + "code": "0", + "name": "菜单" + }, + { + "code": "1", + "name": "按钮" + }, + { + "code": "2", + "name": "url" + } + ] + }, + + { + "code": "dict.type", + "name": "字典类型", + "item": [ + { + "code": "1", + "name": "静态字典" + }, + { + "code": "2", + "name": "动态字典" + } + + ] + } + +] \ No newline at end of file