Merge branch 'feature/REQ-1212' into feature/REQ-1102
# Conflicts: # tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java
This commit is contained in:
commit
4c15287672
@ -1,7 +1,7 @@
|
||||
package cn.axzo.tyr.client.model.dict.request;
|
||||
|
||||
import cn.axzo.tyr.client.common.annotation.EnumValidator;
|
||||
import cn.axzo.tyr.client.model.DictTypeFiledEnum;
|
||||
import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.tyr.client.model.dict.request;
|
||||
|
||||
import cn.axzo.tyr.client.common.annotation.EnumValidator;
|
||||
import cn.axzo.tyr.client.model.DictTypeFiledEnum;
|
||||
import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package cn.axzo.tyr.client.model.dict.request;
|
||||
|
||||
import cn.axzo.tyr.client.common.annotation.EnumValidator;
|
||||
import cn.axzo.tyr.client.model.DictTypeFiledEnum;
|
||||
import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum;
|
||||
import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum;
|
||||
import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@ -50,9 +50,9 @@ public class BasicDictQueryReq {
|
||||
private List<String> codes;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
* 状态,默认只查启用记录
|
||||
*/
|
||||
private Boolean status;
|
||||
private Boolean status = true;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
package cn.axzo.tyr.client.model;
|
||||
package cn.axzo.tyr.client.model.enums;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@ -28,6 +31,8 @@ public enum DictTypeFiledEnum {
|
||||
WORKSPACE("workspace","工作台")
|
||||
;
|
||||
|
||||
@EnumValue
|
||||
@JsonValue
|
||||
private final String value;
|
||||
|
||||
private final String description;
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
package cn.axzo.tyr.client.model;
|
||||
package cn.axzo.tyr.client.model.enums;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@ -26,6 +29,8 @@ public enum DictWorkSpaceTypeEnum {
|
||||
*/
|
||||
OMS("oms", "OMS工作台");
|
||||
|
||||
@EnumValue
|
||||
@JsonValue
|
||||
private final String value;
|
||||
|
||||
private final String description;
|
||||
|
||||
@ -28,37 +28,37 @@ public class SaasBasicDictController implements SaasBasicDictApi {
|
||||
|
||||
@Override
|
||||
public ApiResult<List<BasicDictNodeResp>> getBasicDictNodeList(BasicDictQueryReq req) {
|
||||
return saasBasicDictService.getBasicDictNodeList(req);
|
||||
return ApiResult.ok(saasBasicDictService.getBasicDictNodeList(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<List<BasicDictTreeResp>> getBasicDictNodeTree(BasicDictQueryReq req) {
|
||||
return saasBasicDictService.getBasicDictNodeTree(req);
|
||||
return ApiResult.ok(saasBasicDictService.getBasicDictNodeTree(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<BasicDictNodeResp> getBasicDictNode(BasicDictNodeReq req) {
|
||||
return saasBasicDictService.getBasicDictNode(req);
|
||||
return ApiResult.ok(saasBasicDictService.getBasicDictNode(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Long> create(BasicDictCreateReq req) {
|
||||
return saasBasicDictService.create(req);
|
||||
return ApiResult.ok(saasBasicDictService.create(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Boolean> update(BasicDictUpdateReq req) {
|
||||
return saasBasicDictService.update(req);
|
||||
return ApiResult.ok(saasBasicDictService.update(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Boolean> updateStatus(BasicDictUpdateStatusReq req) {
|
||||
return saasBasicDictService.updateStauts(req);
|
||||
return ApiResult.ok(saasBasicDictService.updateStauts(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<BasicDictNodeResp> get(Long id) {
|
||||
return saasBasicDictService.getById(id);
|
||||
return ApiResult.ok(saasBasicDictService.getById(id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package cn.axzo.tyr.server.repository;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq;
|
||||
import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq;
|
||||
import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq;
|
||||
@ -30,35 +29,33 @@ public class SaasBasicDictDao extends ServiceImpl<SaasBasicDictMapper, SaasBasic
|
||||
LambdaQueryChainWrapper<SaasBasicDict> queryChainWrapper = lambdaQuery();
|
||||
if (Objects.nonNull(req)) {
|
||||
queryChainWrapper.eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId())
|
||||
.eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "")
|
||||
.eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "")
|
||||
.eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, req.getWorkspaceType())
|
||||
.eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType())
|
||||
.in(Objects.nonNull(req.getCodes()), SaasBasicDict::getCode, req.getCodes())
|
||||
.eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0)
|
||||
.eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, req.getStatus())
|
||||
.eq(Objects.nonNull(req.getLevel()), SaasBasicDict::getLevel, req.getLevel())
|
||||
.like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName());
|
||||
}
|
||||
List<SaasBasicDict> basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list();
|
||||
return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1));
|
||||
return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class);
|
||||
}
|
||||
|
||||
public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) {
|
||||
SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue())
|
||||
SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType())
|
||||
.eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode())
|
||||
.one();
|
||||
return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1));
|
||||
return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class);
|
||||
}
|
||||
|
||||
public ApiResult<Boolean> updateStatus(BasicDictUpdateStatusReq req) {
|
||||
boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId())
|
||||
.set(SaasBasicDict::getStatus, req.getStatus() ? 1 : 0)
|
||||
public Boolean updateStatus(BasicDictUpdateStatusReq req) {
|
||||
return lambdaUpdate().eq(SaasBasicDict::getId, req.getId())
|
||||
.set(SaasBasicDict::getStatus, req.getStatus())
|
||||
.update();
|
||||
return ApiResult.ok(update);
|
||||
}
|
||||
|
||||
public ApiResult<Boolean> update(BasicDictUpdateReq req) {
|
||||
boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId())
|
||||
.set(SaasBasicDict::getName, req.getId())
|
||||
public Boolean update(BasicDictUpdateReq req) {
|
||||
return lambdaUpdate().eq(SaasBasicDict::getId, req.getId())
|
||||
.set(SaasBasicDict::getName, req.getName())
|
||||
.update();
|
||||
return ApiResult.ok(update);
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.ibatis.type.BooleanTypeHandler;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
@ -67,8 +68,8 @@ public class SaasBasicDict extends BaseEntity<SaasBasicDict> implements Serializ
|
||||
/**
|
||||
* 状态,0禁用,1启用
|
||||
*/
|
||||
@TableField(value = "status")
|
||||
private Integer status;
|
||||
@TableField(value = "status", typeHandler = BooleanTypeHandler.class)
|
||||
private Boolean status;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
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;
|
||||
@ -15,17 +14,17 @@ import java.util.List;
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface SaasBasicDictService {
|
||||
ApiResult<List<BasicDictNodeResp>> getBasicDictNodeList(BasicDictQueryReq req);
|
||||
List<BasicDictNodeResp> getBasicDictNodeList(BasicDictQueryReq req);
|
||||
|
||||
ApiResult<List<BasicDictTreeResp>> getBasicDictNodeTree(BasicDictQueryReq req);
|
||||
ApiResult<BasicDictNodeResp> getById(Long id);
|
||||
List<BasicDictTreeResp> getBasicDictNodeTree(BasicDictQueryReq req);
|
||||
|
||||
ApiResult<BasicDictNodeResp> getBasicDictNode(BasicDictNodeReq req);
|
||||
BasicDictNodeResp getById(Long id);
|
||||
|
||||
ApiResult<Long> create(BasicDictCreateReq req);
|
||||
BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req);
|
||||
|
||||
ApiResult<Boolean> update(BasicDictUpdateReq req);
|
||||
Long create(BasicDictCreateReq req);
|
||||
|
||||
ApiResult<Boolean> updateStauts(BasicDictUpdateStatusReq req);
|
||||
Boolean update(BasicDictUpdateReq req);
|
||||
|
||||
Boolean updateStauts(BasicDictUpdateStatusReq req);
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ 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.dict.request.*;
|
||||
import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp;
|
||||
import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp;
|
||||
@ -17,8 +16,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -37,8 +36,8 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
|
||||
private final SaasBasicDictDao saasBasicDictDao;
|
||||
|
||||
@Override
|
||||
public ApiResult<List<BasicDictNodeResp>> getBasicDictNodeList(BasicDictQueryReq req) {
|
||||
return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req));
|
||||
public List<BasicDictNodeResp> getBasicDictNodeList(BasicDictQueryReq req) {
|
||||
return saasBasicDictDao.getBasicDictNodeList(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -48,10 +47,11 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<List<BasicDictTreeResp>> getBasicDictNodeTree(BasicDictQueryReq req) {
|
||||
public List<BasicDictTreeResp> getBasicDictNodeTree(BasicDictQueryReq req) {
|
||||
// 获取所有节点
|
||||
List<BasicDictNodeResp> basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(req);
|
||||
return ApiResult.ok(constructDictTree(basicDictNodeList));
|
||||
|
||||
return constructDictTree(basicDictNodeList);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,41 +62,27 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
|
||||
*/
|
||||
public List<BasicDictTreeResp> constructDictTree(List<BasicDictNodeResp> nodeList) {
|
||||
if (CollectionUtil.isEmpty(nodeList)) {
|
||||
return null;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
ArrayList<BasicDictTreeResp> root = new ArrayList<>();
|
||||
LinkedHashMap<Long, BasicDictTreeResp> map = new LinkedHashMap<>();
|
||||
List<Long> parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList());
|
||||
nodeList.addAll(BeanMapper.copyList(saasBasicDictDao.listByIds(parentIds), BasicDictNodeResp.class));
|
||||
|
||||
nodeList.forEach(node -> {
|
||||
BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class);
|
||||
map.put(node.getId(), treeNode);
|
||||
if (node.getParentId() == 0) {
|
||||
root.add(treeNode);
|
||||
}
|
||||
});
|
||||
Map<Long, BasicDictTreeResp> nodeMap = nodeList.stream()
|
||||
.distinct()
|
||||
.collect(Collectors.toMap(BasicDictNodeResp::getId, nodeResp -> BeanMapper.copyBean(nodeResp, BasicDictTreeResp.class)));
|
||||
|
||||
// 若没有顶级节点(即一级节点),则需要查询一级节点
|
||||
if (CollectionUtil.isEmpty(root)) {
|
||||
List<Long> parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList());
|
||||
List<SaasBasicDict> parentDicts = saasBasicDictDao.listByIds(parentIds);
|
||||
parentDicts.forEach(s -> {
|
||||
BasicDictTreeResp parentTreeNode = BeanMapper.copyBean(s, BasicDictTreeResp.class, (s1, b) -> b.setStatus(s1.getStatus() == 1));
|
||||
root.add(parentTreeNode);
|
||||
map.put(parentTreeNode.getId(), parentTreeNode);
|
||||
});
|
||||
}
|
||||
|
||||
map.values().forEach(treeNode -> {
|
||||
BasicDictTreeResp parent = map.get(treeNode.getParentId());
|
||||
if (Objects.nonNull(parent)) {
|
||||
nodeMap.forEach((id, basicDictTreeResp) -> {
|
||||
if (basicDictTreeResp.getParentId() == 0) {
|
||||
root.add(basicDictTreeResp);
|
||||
} else {
|
||||
BasicDictTreeResp parent = nodeMap.get(basicDictTreeResp.getParentId());
|
||||
if (Objects.isNull(parent.getChildren())) {
|
||||
parent.setChildren(new ArrayList<>());
|
||||
}
|
||||
parent.getChildren().add(treeNode);
|
||||
parent.getChildren().add(basicDictTreeResp);
|
||||
}
|
||||
});
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
@ -107,18 +93,19 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
|
||||
* @return 一个字典节点
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<BasicDictNodeResp> getBasicDictNode(BasicDictNodeReq req) {
|
||||
return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req));
|
||||
public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) {
|
||||
return saasBasicDictDao.getBasicDictNode(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建字典节点
|
||||
* 目前不支持创建顶级节点即工作台类型
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<Long> create(BasicDictCreateReq req) {
|
||||
public Long create(BasicDictCreateReq req) {
|
||||
SaasBasicDict parent = saasBasicDictDao.getById(req.getParentId());
|
||||
if (Objects.isNull(parent)) {
|
||||
throw new ServiceException("不存在给定的上级节点");
|
||||
@ -134,43 +121,44 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService {
|
||||
throw new ServiceException("该节点下已存在名称为" + req.getName() + "的节点");
|
||||
}
|
||||
if (n.getCode().equals(req.getCode())) {
|
||||
throw new ServiceException("该节点下已存在code为" + req.getName() + "的节点");
|
||||
throw new ServiceException("该节点下已存在code为" + req.getCode() + "的节点");
|
||||
}
|
||||
});
|
||||
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 {
|
||||
// 生成唯一的unique_code,若生成了与数据库中已存在uniqueCode重复的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));
|
||||
});
|
||||
boolean save = saasBasicDictDao.save(saasBasicDict);
|
||||
if (save) {
|
||||
return saasBasicDict.getId();
|
||||
}
|
||||
} catch (MybatisPlusException e) {
|
||||
// if ()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
throw new ServiceException("系统繁忙,请稍后重试");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Boolean> update(BasicDictUpdateReq req) {
|
||||
public Boolean update(BasicDictUpdateReq req) {
|
||||
return saasBasicDictDao.update(req);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Boolean> updateStauts(BasicDictUpdateStatusReq req) {
|
||||
public Boolean updateStauts(BasicDictUpdateStatusReq req) {
|
||||
return saasBasicDictDao.updateStatus(req);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<BasicDictNodeResp> getById(Long id) {
|
||||
return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class));
|
||||
public BasicDictNodeResp getById(Long id) {
|
||||
return BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -13,6 +13,9 @@ spring:
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
mybatis-plus:
|
||||
type-enums-package: cn.axzo.tyr.client.model.enums
|
||||
|
||||
logging:
|
||||
level:
|
||||
com.alibaba.nacos.client.config.impl: WARN
|
||||
|
||||
Loading…
Reference in New Issue
Block a user