Commit bc6720bc by zhangkb

标签共享代码提交

parent fd83c649
...@@ -2,6 +2,7 @@ package com.keymobile.tagmanager.api; ...@@ -2,6 +2,7 @@ package com.keymobile.tagmanager.api;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -117,6 +118,7 @@ public class TagCtrl { ...@@ -117,6 +118,7 @@ public class TagCtrl {
//获取当前登录用户机构id //获取当前登录用户机构id
deptIdPath = /**UserInfoUtils.getDataRoleOrg()*/String.valueOf(GrantedAuthHelper.getUserOrg()); deptIdPath = /**UserInfoUtils.getDataRoleOrg()*/String.valueOf(GrantedAuthHelper.getUserOrg());
logger.info("personalDept:"+deptIdPath); logger.info("personalDept:"+deptIdPath);
//考虑一个用户对应多个机构的情况 //考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>(); List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath); orgIds.add(deptIdPath);
...@@ -261,6 +263,16 @@ public class TagCtrl { ...@@ -261,6 +263,16 @@ public class TagCtrl {
return tagExportService.exportTagAnalysisExcel(dataType, type, response); return tagExportService.exportTagAnalysisExcel(dataType, type, response);
} }
@ApiOperation(value = "根据用户授予的数据权限加载标签元数据", notes = "根据用户授予的数据权限加载标签元数据")
@PostMapping(value = "/getByTagWithPrivilege")
public Map<String,Object> getTagMetadataWithDataPrivilege(@RequestParam String dimensionType,
@RequestParam String idPath,@RequestParam(required = false) String keyword,
@RequestParam(required = false) String modelPath,@RequestParam int pageNum,
@RequestParam int pageSize,@RequestParam String tagType){
return tagService.getTagMetadataWithDataPrivilege(dimensionType, idPath, keyword, modelPath,
pageNum, pageSize, tagType);
}
//---------------以下为导入系统的时候用到------------------ //---------------以下为导入系统的时候用到------------------
@ApiOperation(value = "查询系统标签", notes = "查询系统标签") @ApiOperation(value = "查询系统标签", notes = "查询系统标签")
......
package com.keymobile.tagmanager.model; package com.keymobile.tagmanager.model;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import com.keymobile.tagmanager.util.Constants; import com.keymobile.tagmanager.util.Constants;
public class ExtTag extends Tag{ public class ExtTag extends Tag{
/** /**
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private String operable = Constants.TAG_OPERABLE_FALSE; private String operable = Constants.TAG_OPERABLE_FALSE;
public ExtTag(Tag t, String operable) { private String shareable = Constants.TAG_SHAREABLE_FALSE;
BeanUtils.copyProperties(t, this);
this.operable = operable; public ExtTag(Tag t, String operable) {
} BeanUtils.copyProperties(t, this);
this.operable = operable;
public void setOperable(String operable) { }
this.operable = operable;
} public ExtTag(Tag t, String operable,String shareable) {
BeanUtils.copyProperties(t, this);
public String getOperable() { this.operable = operable;
return operable; this.shareable = shareable;
} }
public void setOperable(String operable) {
} this.operable = operable;
}
public String getOperable() {
return operable;
}
public String getShareable() {
return shareable;
}
public void setShareable(String shareable) {
this.shareable = shareable;
}
}
...@@ -14,6 +14,7 @@ public interface RepoServiceClient { ...@@ -14,6 +14,7 @@ public interface RepoServiceClient {
public Map<String,Object> getTagMetadata(@RequestParam String dimensionType, public Map<String,Object> getTagMetadata(@RequestParam String dimensionType,
@RequestParam String idPath, @RequestParam String idPath,
@RequestParam(required = false) String keyword, @RequestParam(required = false) String keyword,
@RequestParam(required = false) String modelPath,
@RequestParam(required = false) int pageNum, @RequestParam(required = false) int pageNum,
@RequestParam(required = false) int pageSize, @RequestParam(required = false) int pageSize,
@RequestParam String tagType); @RequestParam String tagType);
......
...@@ -111,7 +111,7 @@ public class TagFileService { ...@@ -111,7 +111,7 @@ public class TagFileService {
public int exportTagMetadataExcel(String idPath,String dimensionType, public int exportTagMetadataExcel(String idPath,String dimensionType,
String tagType,HttpServletResponse response) { String tagType,HttpServletResponse response) {
//获取标签元数据信息 //获取标签元数据信息
Map<String,Object> data = repoService.getTagMetadata(dimensionType,idPath, "", 1, 10000,tagType); Map<String,Object> data = repoService.getTagMetadata(dimensionType,idPath, "", null, 1, 100000,tagType);
List<Map<String,Object>> content = (List<Map<String,Object>>)data.get("content"); List<Map<String,Object>> content = (List<Map<String,Object>>)data.get("content");
List<TagMetadata> toExportTagMeta = new ArrayList<>(); List<TagMetadata> toExportTagMeta = new ArrayList<>();
for(Map<String,Object> map : content) { for(Map<String,Object> map : content) {
......
...@@ -4,9 +4,11 @@ import java.util.Arrays; ...@@ -4,9 +4,11 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -21,6 +23,9 @@ import org.springframework.data.mongodb.core.MongoOperations; ...@@ -21,6 +23,9 @@ import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import com.keymobile.auth.common.security.GrantedAuthHelper;
import com.keymobile.tagmanager.exception.TagDuplicateException; import com.keymobile.tagmanager.exception.TagDuplicateException;
import com.keymobile.tagmanager.exception.TagException; import com.keymobile.tagmanager.exception.TagException;
import com.keymobile.tagmanager.exception.TagNotExistException; import com.keymobile.tagmanager.exception.TagNotExistException;
...@@ -34,6 +39,7 @@ import com.keymobile.tagmanager.remote.AuthServiceClient; ...@@ -34,6 +39,7 @@ import com.keymobile.tagmanager.remote.AuthServiceClient;
import com.keymobile.tagmanager.remote.RepoServiceClient; import com.keymobile.tagmanager.remote.RepoServiceClient;
import com.keymobile.tagmanager.util.Constants; import com.keymobile.tagmanager.util.Constants;
import com.keymobile.tagmanager.util.JsonTreeHelper; import com.keymobile.tagmanager.util.JsonTreeHelper;
import com.keymobile.tagmanager.util.UserInfoUtils;
import com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode; import com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode;
@Service @Service
...@@ -166,6 +172,14 @@ public class TagService { ...@@ -166,6 +172,14 @@ public class TagService {
tags = this.getNewPersonSubTag(parentTag, userId, orgIds, companyOrgIdList); tags = this.getNewPersonSubTag(parentTag, userId, orgIds, companyOrgIdList);
} }
} }
//判断共享节点是否可见
Iterator<Tag> iterator = tags.iterator();
while (iterator.hasNext()) {
Tag tag = iterator.next();
if("1".equals(tag.getIsOpen()) && !isShareTag(tag)) {//如果不是共享可见的
iterator.remove();
}
}
List<JsonNode> nodes = new ArrayList<>(); List<JsonNode> nodes = new ArrayList<>();
tags.forEach(p -> { tags.forEach(p -> {
JsonNode node = new JsonNode(p.getPath(), p.getId(), p.getPath(), p.getIdPath() JsonNode node = new JsonNode(p.getPath(), p.getId(), p.getPath(), p.getIdPath()
...@@ -267,7 +281,7 @@ public class TagService { ...@@ -267,7 +281,7 @@ public class TagService {
List<Tag> tags = mongoOperations.find(q, Tag.class); List<Tag> tags = mongoOperations.find(q, Tag.class);
long count = mongoOperations.count(q, Tag.class); long count = mongoOperations.count(q, Tag.class);
page.setData(decoratorToExtTag(tags, userName)); page.setData(decoratorAndShareToExtTag(tags, userName));
page.setTotal(count); page.setTotal(count);
} }
return page; return page;
...@@ -616,6 +630,14 @@ public class TagService { ...@@ -616,6 +630,14 @@ public class TagService {
Constants.TAG_OPERABLE_TRUE : Constants.TAG_OPERABLE_FALSE); Constants.TAG_OPERABLE_TRUE : Constants.TAG_OPERABLE_FALSE);
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
//2020-2-20 desc:判断标签是否能被分享使用
private List<ExtTag> decoratorAndShareToExtTag(List<Tag> tags, String userName){
return tags.stream().map(t -> {
return new ExtTag(t,t.getTagUser().equals(userName) ?
Constants.TAG_OPERABLE_TRUE : Constants.TAG_OPERABLE_FALSE,
this.isShareTag(t) ? Constants.TAG_SHAREABLE_TRUE : Constants.TAG_SHAREABLE_FALSE);
}).collect(Collectors.toList());
}
//拼接个人标签查询条件 //拼接个人标签查询条件
private Criteria createPersonalTagCriteria(String userName, List<String> orgIds, private Criteria createPersonalTagCriteria(String userName, List<String> orgIds,
List<String> companyOrgIdList, String path,String keyword) throws TagNotExistException{ List<String> companyOrgIdList, String path,String keyword) throws TagNotExistException{
...@@ -671,7 +693,111 @@ public class TagService { ...@@ -671,7 +693,111 @@ public class TagService {
.with(Sort.by(getDefaultTagOrders())); .with(Sort.by(getDefaultTagOrders()));
} }
//根据授予的元数据数据权限过滤标签关联的元数据
@SuppressWarnings("unchecked")
public Map<String,Object> getTagMetadataWithDataPrivilege(String dimensionType,String idPath,
String keyword,String modelPath,int pageNum,int pageSize,String tagType){
//调用repo接口获取标签关联的元数据
Map<String,Object> tagData = repoService.getTagMetadata(dimensionType,
idPath,keyword, modelPath,pageNum, pageSize,tagType);
List<Map<String,Object>> content = (List<Map<String,Object>>)tagData.get("content");
if(content.isEmpty()) {
return tagData;
}else {
//获取用户关联的数据权限
Map<Long, Set<String>> systemTagMap = GrantedAuthHelper.getDataPrivileges();
logger.info("tag metadata user privilege:"+systemTagMap);
if(systemTagMap.isEmpty()) {
tagData.put("content", new String[0]);
tagData.put("totalElements",0);
tagData.put("totalPages",0);
tagData.put("numberOfElements",0);
return tagData;
}else {
//比较标签关联的元数据所属系统跟用户被授予的系统是否一致
for(Map<String,Object> mData : content) {
mData.put("operable", "0");
if(mData.get("sysList")!=null) {
List<String> sysList = (List<String>)mData.get("sysList");
//比较系统,有同个系统的则为可见的共享标签
for(String sys : sysList) {
if(systemTagMap.get(Long.valueOf(sys))!=null) {
if(systemTagMap.get(Long.valueOf(sys)).contains("*")) {
mData.put("operable", "1");
}else {
//根据当前用户被授予的标签获取关联的元数据
Set<String> tags = systemTagMap.get(Long.valueOf(sys));
for(String usrTag : tags) {
Map<String,Object> userTagData = repoService.getTagMetadata("1",
usrTag, "", null, 1, 100000,"1");
List<Map<String,Object>> tagContent = (List<Map<String,Object>>)userTagData.get("content");
if(tagContent.contains(mData)) {
mData.put("operable", "1");
}
}
}
}
}
}
}
tagData.put("content", content);
return tagData;
}
}
}
//判断共享的标签是否可见
@SuppressWarnings("unchecked")
public boolean isShareTag(Tag tag) {
//获取当前用户id
String userName = UserInfoUtils.getUserId();
if(StringUtils.isNotBlank(userName)) {
//如果共享标签是当前客户所创,标识为true
if(userName.equals(tag.getTagUser())) {
return true;
}else {
/*获取当前用户关联的标签和系统(接口返回的数据格式:{4=[*], 9=[*]}或者
{4=["3c8fd99f-73cb-42d3-a864-6a86f0dd0d81,eb866730-e02d-455e-b880-58de4603c967",
"3c8fd99f-73cb-42d3-a864-6a86f0dd0d81,37eb3327-a63c-41b8-b1fd-385fd4eb58a4"]})*/
Map<Long, Set<String>> systemTagMap = GrantedAuthHelper.getDataPrivileges();
logger.info("tag share systemTagMap:"+systemTagMap);
if(!systemTagMap.isEmpty()) {
//获取传入的标签关联的元数据
Map<String,Object> data = repoService.getTagMetadata(tag.getDimensionType(),
tag.getIdPath(),"", null,1, 100000,tag.getTagType());
List<Map<String,Object>> content = (List<Map<String,Object>>)data.get("content");
if(!content.isEmpty()) {
//比较标签关联的元数据所属系统跟用户被授予的系统是否一致
for(Map<String,Object> mData : content) {
if(mData.get("sysList")!=null) {
List<String> sysList = (List<String>)mData.get("sysList");
//比较系统,有同个系统的则为可见的共享标签
for(String sys : sysList) {
if(systemTagMap.get(Long.valueOf(sys))!=null) {
if(systemTagMap.get(Long.valueOf(sys)).contains("*")) {
return true;
}else {
//根据当前用户被授予的标签获取关联的元数据
Set<String> tags = systemTagMap.get(Long.valueOf(sys));
for(String usrTag : tags) {
Map<String,Object> tagData = repoService.getTagMetadata("1",
usrTag, "", null, 1, 100000,"1");
List<Map<String,Object>> tagContent = (List<Map<String,Object>>)tagData.get("content");
if(tagContent.contains(mData)) {
return true;
}
}
}
}
}
}
}
}
}
}
}
return false;
}
...@@ -745,5 +871,4 @@ public class TagService { ...@@ -745,5 +871,4 @@ public class TagService {
mongoOperations.save(sysTag); mongoOperations.save(sysTag);
return sysTag; return sysTag;
} }
} }
...@@ -92,5 +92,6 @@ public final class Constants { ...@@ -92,5 +92,6 @@ public final class Constants {
public static final String DEPT_DEFAULT_ID_PATH = "4285,4287"; public static final String DEPT_DEFAULT_ID_PATH = "4285,4287";
public static final String DEPT_DEFAULT_SEPERATOR = ","; public static final String DEPT_DEFAULT_SEPERATOR = ",";
public static final String TAG_SHAREABLE_TRUE = "1";
public static final String TAG_SHAREABLE_FALSE = "0";
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment