feat(REQ-2300): 查询数据权限接口
This commit is contained in:
parent
e52beb9c0c
commit
c3f7639dfb
@ -2,11 +2,7 @@ package cn.axzo.tyr.client.feign;
|
||||
|
||||
import cn.axzo.basics.common.page.PageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.common.annotation.RepeatedSubmit;
|
||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.DeleteDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||
import cn.axzo.tyr.client.model.res.EnumRes;
|
||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||
@ -28,7 +24,6 @@ public interface DataObjectApi {
|
||||
@PostMapping("/api/dataObject/create")
|
||||
ApiResult<Long> createDataObject(@RequestBody @Valid CreateDataObjectReq req);
|
||||
|
||||
|
||||
/**
|
||||
* 修改数据对象
|
||||
* @param req
|
||||
@ -63,4 +58,12 @@ public interface DataObjectApi {
|
||||
*/
|
||||
@GetMapping("/api/dataObject/get")
|
||||
ApiResult<DataObjectRes> getDataObject(@RequestParam Long dataObjectId);
|
||||
|
||||
/**
|
||||
* 根据租户范围、数据对象code查询数据对象
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/dataObject/query")
|
||||
ApiResult<DataObjectRes> queryDataObject(@RequestBody @Valid QueryDataObjectReq req);
|
||||
}
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/6/3
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class QueryDataObjectReq implements Serializable {
|
||||
|
||||
/**
|
||||
* 数据对象code
|
||||
*/
|
||||
@NotBlank(message = "数据对象code不能为空")
|
||||
private String dataObjectCode;
|
||||
|
||||
/**
|
||||
* 租户范围 1:单位租户 2:项目租户 3:政务监管平台 6:OMS
|
||||
*/
|
||||
private Integer tenantScope;
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
package cn.axzo.tyr.server.controller.data.object;
|
||||
|
||||
import cn.axzo.basics.auth.enums.WorkspaceTypeWithLegacyEnum;
|
||||
import cn.axzo.basics.common.page.PageResult;
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
@ -10,12 +9,8 @@ import cn.axzo.tyr.client.common.enums.EnumTypeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.RowPermissionEnum;
|
||||
import cn.axzo.tyr.client.common.enums.TenantScopeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.WorkspaceJoinType;
|
||||
import cn.axzo.tyr.client.feign.DataObjectApi;
|
||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.DeleteDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||
import cn.axzo.tyr.client.model.res.EnumRes;
|
||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||
@ -91,4 +86,8 @@ public class DataObjectController implements DataObjectApi {
|
||||
return ApiResult.ok(dataObjectService.getDataObject(dataObjectId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<DataObjectRes> queryDataObject(QueryDataObjectReq req) {
|
||||
return ApiResult.ok(dataObjectService.queryDataObject(req));
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.page.PageResult;
|
||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||
|
||||
@ -17,4 +18,6 @@ public interface DataObjectService {
|
||||
PageResult<SimpleDataObjectRes> pageDataObject(PageDataObjectReq req);
|
||||
|
||||
DataObjectRes getDataObject(Long dataObjectId);
|
||||
|
||||
DataObjectRes queryDataObject(QueryDataObjectReq req);
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
||||
import cn.axzo.basics.common.exception.ServiceException;
|
||||
import cn.axzo.basics.common.page.PageResult;
|
||||
import cn.axzo.tyr.client.common.enums.ReturnCodeEnum;
|
||||
@ -16,6 +17,7 @@ import cn.axzo.tyr.client.model.data.object.RuleScopeQueryBO;
|
||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.PageDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.QueryDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||
import cn.axzo.tyr.client.model.res.SimpleDataObjectRes;
|
||||
import cn.axzo.tyr.server.repository.dao.DataObjectAttrDao;
|
||||
@ -36,6 +38,7 @@ import com.google.common.collect.Lists;
|
||||
import groovy.lang.Tuple2;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
@ -274,87 +277,21 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
if (Objects.isNull(dataObject)) {
|
||||
throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage());
|
||||
}
|
||||
DataObjectRes res = DataObjectMapper.INSTANCE.dataObject2DataObjectRes(dataObject);
|
||||
|
||||
// 获取数据对象字段
|
||||
DataObjectAttrQueryBO bo1 = DataObjectAttrQueryBO.builder().dataObjectId(dataObjectId).build();
|
||||
List<DataObjectAttr> objectAttrList = dataObjectAttrDao.listByBO(bo1);
|
||||
Map<String, String> attrMap;
|
||||
if (CollUtil.isNotEmpty(objectAttrList)) {
|
||||
List<AttributeBO> attributeBOS = DataObjectMapper.INSTANCE.dataObjectAttrs2AttributeBOs(objectAttrList);
|
||||
List<AttributeBO> attributeBOList = attributeBOS.stream().sorted(Comparator.comparing(AttributeBO::getSort)).collect(Collectors.toList());
|
||||
res.setAttrs(attributeBOList);
|
||||
attrMap = attributeBOList.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a));
|
||||
} else {
|
||||
attrMap = null;
|
||||
return buildDataObjectRes(dataObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataObjectRes queryDataObject(QueryDataObjectReq req) {
|
||||
List<DataObject> dataObjects = dataObjectDao.lambdaQuery()
|
||||
.eq(DataObject::getIsDelete, DeleteEnum.NORMAL.getValue())
|
||||
.eq(StringUtils.isNotBlank(req.getDataObjectCode()), DataObject::getDataObjectCode, req.getDataObjectCode())
|
||||
.eq(Objects.nonNull(req.getTenantScope()), DataObject::getTenantScope, req.getTenantScope())
|
||||
.list();
|
||||
if (CollectionUtils.isEmpty(dataObjects)) {
|
||||
throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage());
|
||||
}
|
||||
|
||||
// 获取数据对象规则
|
||||
DataObjectRuleQueryBO bo2 = DataObjectRuleQueryBO.builder().dataObjectId(dataObjectId).build();
|
||||
List<DataObjectRule> dataObjectRules = dataObjectRuleDao.listByBO(bo2);
|
||||
if (CollUtil.isNotEmpty(dataObjectRules)) {
|
||||
res.setDataObjectRuleBOList(new ArrayList<>(dataObjectRules.size() - 1));
|
||||
dataObjectRules.forEach(e -> {
|
||||
if (YesNoEnum.YES.getValue().equals(e.getIsDefault())) {
|
||||
DefaultDataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2DefaultRuleBO(e);
|
||||
res.setDefaultDataObjectRuleBO(ruleBO);
|
||||
} else {
|
||||
DataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2RuleBO(e);
|
||||
res.getDataObjectRuleBOList().add(ruleBO);
|
||||
}
|
||||
});
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
List<DataObjectRuleBO> sortedRuleList = res.getDataObjectRuleBOList().stream().sorted(Comparator.comparing(DataObjectRuleBO::getSort)).collect(Collectors.toList());
|
||||
res.setDataObjectRuleBOList(sortedRuleList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 获取数据对象规则字段
|
||||
RuleAttrQueryBO bo3 = RuleAttrQueryBO.builder().dataObjectId(dataObjectId).build();
|
||||
List<DataObjectRuleAttr> ruleAttrList = dataObjectRuleAttrDao.listByBO(bo3);
|
||||
if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(ruleAttrList)) {
|
||||
Map<Long, List<DataObjectRuleAttr>> ruleAttrMap = ruleAttrList.stream().collect(Collectors.groupingBy(DataObjectRuleAttr::getDataObjectRuleId));
|
||||
// 默认
|
||||
List<DataObjectRuleAttr> ruleAttrList1 = ruleAttrMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(ruleAttrList1)) {
|
||||
List<AttributePermissionBO> permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList1);
|
||||
permissionBOs.forEach(e -> e.setAttrName(attrMap.get(e.getAttrCode())));
|
||||
List<AttributePermissionBO> permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList());
|
||||
res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOList);
|
||||
}
|
||||
|
||||
//自定义
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
res.getDataObjectRuleBOList().forEach(e -> buildRuleAttr(attrMap, ruleAttrMap, e));
|
||||
}
|
||||
}
|
||||
|
||||
// 获取数据对象规则范围
|
||||
RuleScopeQueryBO bo4 = RuleScopeQueryBO.builder().dataObjectId(dataObjectId).build();
|
||||
List<DataObjectRuleScope> scopeList = dataObjectRuleScopeDao.listByBO(bo4);
|
||||
if (CollUtil.isNotEmpty(scopeList)) {
|
||||
Map<Long, List<DataObjectRuleScope>> scopeMap = scopeList.stream().collect(Collectors.groupingBy(DataObjectRuleScope::getDataObjectRuleId));
|
||||
// 默认
|
||||
List<DataObjectRuleScope> defaultScopeList = scopeMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(defaultScopeList)) {
|
||||
List<Long> relationIdList = defaultScopeList.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList());
|
||||
res.getDefaultDataObjectRuleBO().setRelationId(relationIdList);
|
||||
}
|
||||
|
||||
//自定义
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
res.getDataObjectRuleBOList().forEach(e -> {
|
||||
List<DataObjectRuleScope> scopeList1 = scopeMap.get(e.getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(scopeList1)) {
|
||||
List<Long> relationIdList = scopeList1.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList());
|
||||
e.setRelationId(relationIdList);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
return buildDataObjectRes(dataObjects.get(0));
|
||||
}
|
||||
|
||||
private static void buildRuleAttr(Map<String, String> attrMap, Map<Long, List<DataObjectRuleAttr>> ruleAttrMap, DataObjectRuleBO e) {
|
||||
@ -428,4 +365,88 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private DataObjectRes buildDataObjectRes(DataObject dataObject) {
|
||||
DataObjectRes res = DataObjectMapper.INSTANCE.dataObject2DataObjectRes(dataObject);
|
||||
|
||||
// 获取数据对象字段
|
||||
DataObjectAttrQueryBO bo1 = DataObjectAttrQueryBO.builder().dataObjectId(dataObject.getId()).build();
|
||||
List<DataObjectAttr> objectAttrList = dataObjectAttrDao.listByBO(bo1);
|
||||
Map<String, String> attrMap;
|
||||
if (CollUtil.isNotEmpty(objectAttrList)) {
|
||||
List<AttributeBO> attributeBOS = DataObjectMapper.INSTANCE.dataObjectAttrs2AttributeBOs(objectAttrList);
|
||||
List<AttributeBO> attributeBOList = attributeBOS.stream().sorted(Comparator.comparing(AttributeBO::getSort)).collect(Collectors.toList());
|
||||
res.setAttrs(attributeBOList);
|
||||
attrMap = attributeBOList.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a));
|
||||
} else {
|
||||
attrMap = null;
|
||||
}
|
||||
|
||||
// 获取数据对象规则
|
||||
DataObjectRuleQueryBO bo2 = DataObjectRuleQueryBO.builder().dataObjectId(dataObject.getId()).build();
|
||||
List<DataObjectRule> dataObjectRules = dataObjectRuleDao.listByBO(bo2);
|
||||
if (CollUtil.isNotEmpty(dataObjectRules)) {
|
||||
res.setDataObjectRuleBOList(new ArrayList<>(dataObjectRules.size() - 1));
|
||||
dataObjectRules.forEach(e -> {
|
||||
if (YesNoEnum.YES.getValue().equals(e.getIsDefault())) {
|
||||
DefaultDataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2DefaultRuleBO(e);
|
||||
res.setDefaultDataObjectRuleBO(ruleBO);
|
||||
} else {
|
||||
DataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2RuleBO(e);
|
||||
res.getDataObjectRuleBOList().add(ruleBO);
|
||||
}
|
||||
});
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
List<DataObjectRuleBO> sortedRuleList = res.getDataObjectRuleBOList().stream().sorted(Comparator.comparing(DataObjectRuleBO::getSort)).collect(Collectors.toList());
|
||||
res.setDataObjectRuleBOList(sortedRuleList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 获取数据对象规则字段
|
||||
RuleAttrQueryBO bo3 = RuleAttrQueryBO.builder().dataObjectId(dataObject.getId()).build();
|
||||
List<DataObjectRuleAttr> ruleAttrList = dataObjectRuleAttrDao.listByBO(bo3);
|
||||
if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(ruleAttrList)) {
|
||||
Map<Long, List<DataObjectRuleAttr>> ruleAttrMap = ruleAttrList.stream().collect(Collectors.groupingBy(DataObjectRuleAttr::getDataObjectRuleId));
|
||||
// 默认
|
||||
List<DataObjectRuleAttr> ruleAttrList1 = ruleAttrMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(ruleAttrList1)) {
|
||||
List<AttributePermissionBO> permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList1);
|
||||
permissionBOs.forEach(e -> e.setAttrName(attrMap.get(e.getAttrCode())));
|
||||
List<AttributePermissionBO> permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList());
|
||||
res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOList);
|
||||
}
|
||||
|
||||
//自定义
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
res.getDataObjectRuleBOList().forEach(e -> buildRuleAttr(attrMap, ruleAttrMap, e));
|
||||
}
|
||||
}
|
||||
|
||||
// 获取数据对象规则范围
|
||||
RuleScopeQueryBO bo4 = RuleScopeQueryBO.builder().dataObjectId(dataObject.getId()).build();
|
||||
List<DataObjectRuleScope> scopeList = dataObjectRuleScopeDao.listByBO(bo4);
|
||||
if (CollUtil.isNotEmpty(scopeList)) {
|
||||
Map<Long, List<DataObjectRuleScope>> scopeMap = scopeList.stream().collect(Collectors.groupingBy(DataObjectRuleScope::getDataObjectRuleId));
|
||||
// 默认
|
||||
List<DataObjectRuleScope> defaultScopeList = scopeMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(defaultScopeList)) {
|
||||
List<Long> relationIdList = defaultScopeList.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList());
|
||||
res.getDefaultDataObjectRuleBO().setRelationId(relationIdList);
|
||||
}
|
||||
|
||||
//自定义
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
res.getDataObjectRuleBOList().forEach(e -> {
|
||||
List<DataObjectRuleScope> scopeList1 = scopeMap.get(e.getDataObjectRuleId());
|
||||
if (CollUtil.isNotEmpty(scopeList1)) {
|
||||
List<Long> relationIdList = scopeList1.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList());
|
||||
e.setRelationId(relationIdList);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user