From 3569c1b9dba52699044bdb0035285107545fa1c3 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 11 Sep 2023 18:21:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=8A=B6=E6=80=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 2 +- .../dict/request/BasicDictCreateReq.java | 22 ++++----- .../model/dict/request/BasicDictQueryReq.java | 4 ++ .../server/repository/SaasBasicDictDao.java | 1 + .../impl/SaasBasicDictServiceImpl.java | 45 +++++++++++++++++++ 5 files changed, 62 insertions(+), 12 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index fbbaafb4..92096d56 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -57,7 +57,7 @@ public interface SaasBasicDictApi { /** * 添加字典 * - * @param req 其中name同一个父级节点,名称不能重复,codeMap全局唯一 + * @param req 其中name,code在同一个父级节点下不能重复 * @return 节点id */ @PostMapping("api/dict/create") diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java index 2521fcd1..c3bfa65f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java @@ -1,9 +1,12 @@ package cn.axzo.tyr.client.model.dict.request; +import cn.axzo.tyr.client.common.annotation.EnumValidator; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; /** * @author: chenwenjian @@ -15,22 +18,19 @@ import javax.validation.constraints.NotBlank; @Data public class BasicDictCreateReq { - /** - * 工作台类型,"ent", "proj", "oms" - */ - @NotBlank(message = "工作台类型不能为空") - private String workspaceType; - - /** - * 类型,"ouType", "terminal" - */ - private String type; - /** * 所属上级节点id */ + @NotNull(message = "所属上级不能为空") private Long parentId; + /** + * type类型不能为空 + */ + @NotNull(message = "type类型不能为空") + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + private DictTypeFiledEnum type; + /** * 字典名称 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 6027b314..4065c163 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -52,4 +52,8 @@ public class BasicDictQueryReq { */ private Boolean status; + /** + * 层级 + */ + private Integer level; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index 2a7b6eb4..affb17c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -34,6 +34,7 @@ public class SaasBasicDictDao extends ServiceImpl basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 5992d82b..dd0d4490 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -1,14 +1,18 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; +import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -103,8 +107,49 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); } + /** + * 创建字典节点 + * @param req + * @return + */ @Override public ApiResult create(BasicDictCreateReq req) { + SaasBasicDict parent = saasBasicDictDao.getById(req.getParentId()); + if (Objects.isNull(parent)) { + throw new ServiceException("不存在给定的上级节点"); + } + // 获取所属父节点下所有同级节点,name和code在同级节点中不能重复 + List brotherNodeList = saasBasicDictDao.getBasicDictNodeList( + BasicDictQueryReq.builder() + .parentId(req.getParentId()) + .type(req.getType()) + .build()); + brotherNodeList.forEach(n -> { + if (n.getName().equals(req.getName())) { + throw new ServiceException("该节点下已存在名称为" + req.getName() + "的节点"); + } + if (n.getCode().equals(req.getCode())) { + throw new ServiceException("该节点下已存在code为" + req.getName() + "的节点"); + } + }); + int count = 0; + for (int i = 0; i < 3; i++) { + // 生成唯一的unique_code,若生成了与数据库中已存在uniqueCode + String uniqueCode = RandomUtil.randomString(10); + SaasBasicDict saasBasicDict = BeanMapper.copyBean(req, SaasBasicDict.class, (b, s) -> { + s.setWorkspaceType(parent.getWorkspaceType()); + s.setType(b.getType().getValue()); + s.setUniqueCode(uniqueCode); + s.setLevel(parent.getLevel()+1); + s.setPath(String.join(",",parent.getPath(),uniqueCode)); + }); + try{ + boolean save = saasBasicDictDao.save(saasBasicDict); + }catch (MybatisPlusException e){ +// if () + } + } + return null; }