Commit 06bf1140 by zhangkb

修改加载标签兼容一个用户多个机构情况

parent ac28d254
package com.keymobile.tagmanager.api; package com.keymobile.tagmanager.api;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -15,7 +15,6 @@ import com.keymobile.tagmanager.model.SysTag; ...@@ -15,7 +15,6 @@ import com.keymobile.tagmanager.model.SysTag;
import com.keymobile.tagmanager.model.Tag; import com.keymobile.tagmanager.model.Tag;
import com.keymobile.tagmanager.service.TagService; import com.keymobile.tagmanager.service.TagService;
import com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode; import com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode;
import com.keymobile.tagmanager.util.Constants;
import com.keymobile.tagmanager.util.UserInfoUtils; import com.keymobile.tagmanager.util.UserInfoUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -74,7 +73,10 @@ public class TagCtrl { ...@@ -74,7 +73,10 @@ public class TagCtrl {
@RequestParam(required = false) String deptIdPath) throws TagNotExistException { @RequestParam(required = false) String deptIdPath) throws TagNotExistException {
//获取当前登录用户机构 //获取当前登录用户机构
deptIdPath = UserInfoUtils.getDataRoleOrg(); deptIdPath = UserInfoUtils.getDataRoleOrg();
return tagService.queryDimensionTagAsTree(deptIdPath, parentId); //考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath);
return tagService.queryDimensionTagAsTree(orgIds, parentId);
} }
@ApiOperation(value = "获取个人标签树", notes = "获取个人标签树") @ApiOperation(value = "获取个人标签树", notes = "获取个人标签树")
...@@ -84,9 +86,12 @@ public class TagCtrl { ...@@ -84,9 +86,12 @@ public class TagCtrl {
@RequestParam(required = false) String deptIdPath) throws TagNotExistException { @RequestParam(required = false) String deptIdPath) throws TagNotExistException {
//获取当前登录用户机构id //获取当前登录用户机构id
deptIdPath = UserInfoUtils.getDataRoleOrg(); deptIdPath = UserInfoUtils.getDataRoleOrg();
//考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath);
//获取当前登录用户id //获取当前登录用户id
String userId = UserInfoUtils.getUserId(); String userId = UserInfoUtils.getUserId();
return tagService.queryPersonalTagAsTree(parentId, userId, deptIdPath); return tagService.queryPersonalTagAsTree(parentId, userId, orgIds);
} }
@ApiOperation(value = "搜索维度标签里面的个人标签", notes = "搜索维度标签里面的个人标签") @ApiOperation(value = "搜索维度标签里面的个人标签", notes = "搜索维度标签里面的个人标签")
...@@ -100,7 +105,10 @@ public class TagCtrl { ...@@ -100,7 +105,10 @@ public class TagCtrl {
@RequestParam("pageSize") Integer pageSize) throws TagNotExistException{ @RequestParam("pageSize") Integer pageSize) throws TagNotExistException{
String userName = UserInfoUtils.getUserId(); String userName = UserInfoUtils.getUserId();
deptIdPath = UserInfoUtils.getDataRoleOrg(); deptIdPath = UserInfoUtils.getDataRoleOrg();
return tagService.searchPersonalDimensionTagByPage(userName, deptIdPath, keyword, //考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath);
return tagService.searchPersonalDimensionTagByPage(userName, orgIds, keyword,
path, domain, new Page(pageSize, pageNo)); path, domain, new Page(pageSize, pageNo));
} }
...@@ -114,7 +122,10 @@ public class TagCtrl { ...@@ -114,7 +122,10 @@ public class TagCtrl {
@RequestParam("pageSize") Integer pageSize) throws TagNotExistException{ @RequestParam("pageSize") Integer pageSize) throws TagNotExistException{
String userName = UserInfoUtils.getUserId(); String userName = UserInfoUtils.getUserId();
deptIdPath = UserInfoUtils.getDataRoleOrg(); deptIdPath = UserInfoUtils.getDataRoleOrg();
return tagService.searchPersonalTagByPage(userName, deptIdPath, keyword, path, domain, new Page(pageSize, pageNo)); //考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath);
return tagService.searchPersonalTagByPage(userName, orgIds, keyword, path, domain, new Page(pageSize, pageNo));
} }
// @PreAuthorize("principal.authorities.?[authority.startsWith('ROLE_tagmanager_admin')].size() > 0") // @PreAuthorize("principal.authorities.?[authority.startsWith('ROLE_tagmanager_admin')].size() > 0")
...@@ -142,7 +153,10 @@ public class TagCtrl { ...@@ -142,7 +153,10 @@ public class TagCtrl {
@RequestParam(required = false) String deptIdPath) throws TagNotExistException { @RequestParam(required = false) String deptIdPath) throws TagNotExistException {
String userName = UserInfoUtils.getUserId(); String userName = UserInfoUtils.getUserId();
deptIdPath = UserInfoUtils.getDataRoleOrg(); deptIdPath = UserInfoUtils.getDataRoleOrg();
return tagService.queryPersonalTagExcludeOpenTypeAsTree(parentId, userName, deptIdPath); //考虑一个用户对应多个机构的情况
List<String> orgIds = new ArrayList<>();
orgIds.add(deptIdPath);
return tagService.queryPersonalTagExcludeOpenTypeAsTree(parentId, userName, orgIds);
} }
@ApiOperation(value = "分享/取消分享标签(0:取消分享 1:分享)", notes = "分享/取消分享标签(0:取消分享 1:分享)") @ApiOperation(value = "分享/取消分享标签(0:取消分享 1:分享)", notes = "分享/取消分享标签(0:取消分享 1:分享)")
......
package com.keymobile.tagmanager.service; package com.keymobile.tagmanager.service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -115,17 +117,19 @@ public class TagService { ...@@ -115,17 +117,19 @@ public class TagService {
} }
//获取维度标签树 //获取维度标签树
public JsonNode[] queryDimensionTagAsTree(String dept, String parentId) throws TagNotExistException { public JsonNode[] queryDimensionTagAsTree(List<String> orgIds,
String parentId) throws TagNotExistException {
List<Tag> tags = new ArrayList<>(); List<Tag> tags = new ArrayList<>();
//根据当前登录用户所属机构获取对应公司机构id List<String> companyOrgIdList = this.getCompanyOrgIdListByUserOrgIds(orgIds);
String companyOrgId = this.getCompanyOrgIdByUserOrgId(dept); if(!companyOrgIdList.isEmpty()) {
if (StringUtils.isEmpty(parentId)) {//从根节点开始获取 if (StringUtils.isEmpty(parentId)) {//从根节点开始获取
tags = mongoOperations.find(createDimensionTagQuery(companyOrgId), Tag.class); tags = mongoOperations.find(createDimensionTagQuery(companyOrgIdList), Tag.class);
} else { } else {
Tag parentTag = getTagById(parentId); Tag parentTag = getTagById(parentId);
//获取父节点标签下的所有子标签 //获取父节点标签下的所有子标签
tags = getDimensionSubTag(parentTag,companyOrgId); tags = getDimensionSubTag(parentTag,companyOrgIdList);
//tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName()))); //tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
}
} }
List<JsonNode> nodes = new ArrayList<>(); List<JsonNode> nodes = new ArrayList<>();
tags.forEach(p -> { tags.forEach(p -> {
...@@ -144,16 +148,17 @@ public class TagService { ...@@ -144,16 +148,17 @@ public class TagService {
//获取个人标签树 //获取个人标签树
public JsonNode[] queryPersonalTagAsTree(String parentId, String userId, public JsonNode[] queryPersonalTagAsTree(String parentId, String userId,
String dept) List<String> orgIds) throws TagNotExistException{
throws TagNotExistException{
List<Tag> tags = new ArrayList<>(); List<Tag> tags = new ArrayList<>();
//根据用户所属机构id获取对应的公司机构id List<String> companyOrgIdList = this.getCompanyOrgIdListByUserOrgIds(orgIds);
String companyOrgId = this.getCompanyOrgIdByUserOrgId(dept); if(!companyOrgIdList.isEmpty()) {
if (StringUtils.isEmpty(parentId)) {//从根目录开始查找 if (StringUtils.isEmpty(parentId)) {//从根目录开始查找
tags = mongoOperations.find(this.createNewPersonalTagQuery(userId, dept, companyOrgId), Tag.class); tags = mongoOperations.find(this.createNewPersonalTagQuery(userId, orgIds,
}else { companyOrgIdList), Tag.class);
Tag parentTag = getTagById(parentId); }else {
tags = this.getNewPersonSubTag(parentTag, userId, dept, companyOrgId); Tag parentTag = getTagById(parentId);
tags = this.getNewPersonSubTag(parentTag, userId, orgIds, companyOrgIdList);
}
} }
List<JsonNode> nodes = new ArrayList<>(); List<JsonNode> nodes = new ArrayList<>();
tags.forEach(p -> { tags.forEach(p -> {
...@@ -168,6 +173,24 @@ public class TagService { ...@@ -168,6 +173,24 @@ public class TagService {
} }
} }
//根据用户管理的机构list获取公司机构id
public List<String> getCompanyOrgIdListByUserOrgIds(List<String> orgIds)
throws TagNotExistException{
List<String> companyOrgIdList = new ArrayList<>();
//定义用于去重用户公司机构id的map
Map<String,String> companyOrgIdMap = new HashMap<>();
for(String orgId : orgIds) {
//根据当前登录用户所属机构获取对应公司机构id
String companyOrgId = this.getCompanyOrgIdByUserOrgId(orgId);
companyOrgIdMap.put(companyOrgId, companyOrgId);
}
//遍历map,获取去重的公司机构id的list
for(Map.Entry<String,String> entry : companyOrgIdMap.entrySet()) {
companyOrgIdList.add(entry.getValue());
}
return companyOrgIdList;
}
//根据用户所属机构id获取对应的公司机构id //根据用户所属机构id获取对应的公司机构id
public String getCompanyOrgIdByUserOrgId(String dept) throws TagNotExistException{ public String getCompanyOrgIdByUserOrgId(String dept) throws TagNotExistException{
//根据用户机构id获取机构信息 //根据用户机构id获取机构信息
...@@ -193,18 +216,22 @@ public class TagService { ...@@ -193,18 +216,22 @@ public class TagService {
} }
//根据关键字查询维度标签数据 //根据关键字查询维度标签数据
public Page searchPersonalDimensionTagByPage(String userName, String dept, String keyword, public Page searchPersonalDimensionTagByPage(String userName, List<String> orgIds, String keyword,
String path, Integer domain, Page page) throws TagNotExistException{ String path, Integer domain, Page page) throws TagNotExistException{
Criteria andCriterias = createPersonalDimensionTagCriteria(userName, path, dept); List<String> companyOrgIdList = this.getCompanyOrgIdListByUserOrgIds(orgIds);
if (StringUtils.isNotBlank(keyword) && !"*".equals(keyword)) { page.setData(new ArrayList<ExtTag>());
andCriterias.andOperator(createKeywordRegexQuery(Arrays.asList("name", "nameEn", "desc"), keyword)); page.setTotal(0L);
if(!companyOrgIdList.isEmpty()) {
Criteria andCriterias = createPersonalDimensionTagCriteria(userName, path, companyOrgIdList);
if (StringUtils.isNotBlank(keyword) && !"*".equals(keyword)) {
andCriterias.andOperator(createKeywordRegexQuery(Arrays.asList("name", "nameEn", "desc"), keyword));
}
Query q = createPageQuery(page, andCriterias);
List<Tag> tags = mongoOperations.find(q, Tag.class);
long count = mongoOperations.count(q, Tag.class);
page.setData(decoratorToExtTag(tags, userName));
page.setTotal(count);
} }
Query q = createPageQuery(page, andCriterias);
List<Tag> tags = mongoOperations.find(q, Tag.class);
long count = mongoOperations.count(q, Tag.class);
page.setData(decoratorToExtTag(tags, userName));
page.setTotal(count);
return page; return page;
} }
...@@ -223,18 +250,23 @@ public class TagService { ...@@ -223,18 +250,23 @@ public class TagService {
} }
//根据关键字查找个人标签 //根据关键字查找个人标签
public Page searchPersonalTagByPage(String userName, String dept, String keyword, String path, public Page searchPersonalTagByPage(String userName, List<String> orgIds, String keyword, String path,
Integer domain, Page page) throws TagNotExistException{ Integer domain, Page page) throws TagNotExistException{
Criteria andCriterias = createPersonalTagCriteria(userName, dept, path); page.setData(new ArrayList<ExtTag>());
if (StringUtils.isNotBlank(keyword) && !"*".equals(keyword)) { page.setTotal(0L);
andCriterias.andOperator(createKeywordRegexQuery(Arrays.asList("name", "nameEn", "desc"), keyword)); List<String> companyOrgIdList = this.getCompanyOrgIdListByUserOrgIds(orgIds);
if(!companyOrgIdList.isEmpty()) {
Criteria andCriterias = createPersonalTagCriteria(userName, orgIds, companyOrgIdList, path);
if (StringUtils.isNotBlank(keyword) && !"*".equals(keyword)) {
andCriterias.andOperator(createKeywordRegexQuery(Arrays.asList("name", "nameEn", "desc"), keyword));
}
Query q = createPageQuery(page, andCriterias);
List<Tag> tags = mongoOperations.find(q, Tag.class);
long count = mongoOperations.count(q, Tag.class);
page.setData(decoratorToExtTag(tags, userName));
page.setTotal(count);
} }
Query q = createPageQuery(page, andCriterias);
List<Tag> tags = mongoOperations.find(q, Tag.class);
long count = mongoOperations.count(q, Tag.class);
page.setData(decoratorToExtTag(tags, userName));
page.setTotal(count);
return page; return page;
} }
...@@ -262,18 +294,14 @@ public class TagService { ...@@ -262,18 +294,14 @@ public class TagService {
} }
//获取新增个人标签加载上级标签树接口 //获取新增个人标签加载上级标签树接口
public JsonNode[] queryPersonalTagExcludeOpenTypeAsTree(String parentId, String userName, String dept) throws TagNotExistException { public JsonNode[] queryPersonalTagExcludeOpenTypeAsTree(String parentId, String userName,
List<String> orgIds) throws TagNotExistException {
List<Tag> tags = new ArrayList<>(); List<Tag> tags = new ArrayList<>();
//根据普通用户机构id获取机构信息 List<String> companyOrgIdList = this.getCompanyOrgIdListByUserOrgIds(orgIds);
String companyOrgId = this.getCompanyOrgIdByUserOrgId(dept); if(!companyOrgIdList.isEmpty()) {
if (StringUtils.isEmpty(parentId)) { tags = mongoOperations.find(createPersonalExcludeOpenTypeTagQuery(userName, companyOrgIdList),
tags = mongoOperations.find(createPersonalExcludeOpenTypeTagQuery(userName, companyOrgId), Tag.class); Tag.class);
} }
/**else {
Tag parentTag = getTagById(parentId);
tags = getPersonSubTag(parentTag, userName);
//tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
}*/
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());
...@@ -332,18 +360,29 @@ public class TagService { ...@@ -332,18 +360,29 @@ public class TagService {
} }
//拼接个人维度标签树查询条件 //拼接个人维度标签树查询条件
private Query createDimensionTagQuery(String dept) { private Query createDimensionTagQuery(List<String> companyOrgIdList) {
return Query.query(Criteria.where("dimensionType").is(Constants.TAG_DIMENSION_TRUE) Criteria criteriaOr = new Criteria();
.and("tagType").is(Constants.TAG_PERSONAL_TYPE) for(String companyOrgId : companyOrgIdList) {
.and("proDept").is(dept)) Criteria criteria = Criteria.where("dimensionType").is(Constants.TAG_DIMENSION_TRUE)
.with(Sort.by(getDefaultTagOrders())); .and("tagType").is(Constants.TAG_PERSONAL_TYPE)
.and("proDept").is(companyOrgId);
//加入or条件中
criteriaOr.orOperator(criteria);
}
return Query.query(criteriaOr).with(Sort.by(getDefaultTagOrders()));
} }
//根据机构获取当前维度标签的所有子标签 //根据机构获取当前维度标签的所有子标签
private List<Tag> getDimensionSubTag(Tag parentTag,String companyOrgId) { private List<Tag> getDimensionSubTag(Tag parentTag,List<String> companyOrgIdList) {
List<Tag> dirs = mongoOperations.find(new Query().addCriteria(Criteria.where("path") Criteria criteriaOr = new Criteria();
.regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR) for(String companyOrgId : companyOrgIdList) {
.and("dimensionType").is(Constants.TAG_DIMENSION_TRUE) Criteria criteria = Criteria.where("path")
.and("proDept").is(companyOrgId)) .regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR)
.and("dimensionType").is(Constants.TAG_DIMENSION_TRUE)
.and("proDept").is(companyOrgId);
//加入or条件中
criteriaOr.orOperator(criteria);
}
List<Tag> dirs = mongoOperations.find(new Query().addCriteria(criteriaOr)
.with(Sort.by(getDefaultTagOrders())), Tag.class); .with(Sort.by(getDefaultTagOrders())), Tag.class);
dirs.add(parentTag); dirs.add(parentTag);
return dirs; return dirs;
...@@ -363,32 +402,42 @@ public class TagService { ...@@ -363,32 +402,42 @@ public class TagService {
return orders; return orders;
} }
//拼接查找个人标签条件 //拼接查找个人标签条件
private Query createNewPersonalTagQuery(String userId,String deptId, private Query createNewPersonalTagQuery(String userId,List<String> orgIds,
String companyId) { List<String> companyOrgIdList) {
Criteria criteria = Criteria.where("tagType").is("1");//获取自定义标签 Criteria criteria = Criteria.where("tagType").is("1");//获取自定义标签
criteria.orOperator( for(String companyOrgId : companyOrgIdList) {
Criteria.where("proDept").is(companyId) Criteria criteriaDim = Criteria.where("proDept").is(companyOrgId)
.and("dimensionType").is(Constants.TAG_DIMENSION_TRUE),//标签是维度管理员机构的 .and("dimensionType").is(Constants.TAG_DIMENSION_TRUE);//标签是维度管理员机构的
Criteria.where("dept").is(deptId).and("tagUser").is(userId),//标签是普通用户结构且普通用户名创建 Criteria criteriaShare = Criteria.where("proDept").is(companyOrgId)
Criteria.where("proDept").is(companyId) .and("isOpen").is(Constants.TAG_OPEN_STATUS);//公司机构id是companyId和是共享状态的
.and("isOpen").is(Constants.TAG_OPEN_STATUS)//公司机构id是companyId和是共享状态的 criteria.orOperator(criteriaDim,criteriaShare);
); }
for(String orgId : orgIds) {
Criteria criteriaUser = Criteria.where("dept").is(orgId).and("tagUser").is(userId);
criteria.orOperator(criteriaUser);
}
return Query.query(criteria) return Query.query(criteria)
.with(Sort.by(getDefaultTagOrders())); .with(Sort.by(getDefaultTagOrders()));
} }
//根据父标签查找子标签 //根据父标签查找子标签
private List<Tag> getNewPersonSubTag(Tag parentTag, String userId,String deptId, private List<Tag> getNewPersonSubTag(Tag parentTag, String userId,List<String> orgIds,
String companyId) { List<String> companyOrgIdList) {
List<Tag> dirs = mongoOperations.find(new Query().addCriteria(Criteria.where("path") Criteria criteria = Criteria.where("path")
.regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR) .regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR)
.and("tagType").is(Constants.TAG_PERSONAL_TYPE) .and("tagType").is(Constants.TAG_PERSONAL_TYPE);
.orOperator( for(String companyOrgId : companyOrgIdList) {
Criteria.where("proDept").is(companyId) Criteria criteriaDim = Criteria.where("proDept").is(companyOrgId)
.and("dimensionType").is(Constants.TAG_DIMENSION_TRUE),//标签是维度管理员机构的 .and("dimensionType").is(Constants.TAG_DIMENSION_TRUE);//标签是维度管理员机构的
Criteria.where("dept").is(deptId).and("tagUser").is(userId),//标签是普通用户结构且普通用户名创建 Criteria criteriaShare = Criteria.where("proDept").is(companyOrgId)
Criteria.where("proDept").is(companyId) .and("isOpen").is(Constants.TAG_OPEN_STATUS);//公司机构id是companyId和是共享状态的
.and("isOpen").is(Constants.TAG_OPEN_STATUS)//公司机构id是companyId和是共享状态的 criteria.orOperator(criteriaDim,criteriaShare);
)).with(Sort.by(getDefaultTagOrders())), Tag.class); }
for(String orgId : orgIds) {
Criteria criteriaUser = Criteria.where("dept").is(orgId).and("tagUser").is(userId);
criteria.orOperator(criteriaUser);
}
List<Tag> dirs = mongoOperations.find(new Query().addCriteria(criteria)
.with(Sort.by(getDefaultTagOrders())), Tag.class);
dirs.add(parentTag); dirs.add(parentTag);
return dirs; return dirs;
} }
...@@ -401,16 +450,17 @@ public class TagService { ...@@ -401,16 +450,17 @@ public class TagService {
} }
//拼接根据机构id查询个人维度标签 //拼接根据机构id查询个人维度标签
private Criteria createPersonalDimensionTagCriteria(String userName, private Criteria createPersonalDimensionTagCriteria(String userName,
String path, String dept)throws TagNotExistException String path, List<String> companyOrgIdList)throws TagNotExistException {
{ Criteria criteriaOr = new Criteria();
//根据当前用户所属机构获取公司结构id for(String companyOrgId : companyOrgIdList) {
String companyOrgId = this.getCompanyOrgIdByUserOrgId(dept); Criteria criteria = Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE)
Criteria criteria = Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE) .and("proDept").is(companyOrgId).and("dimensionType").is(Constants.TAG_DIMENSION_TRUE);
.and("proDept").is(companyOrgId).and("dimensionType").is(Constants.TAG_DIMENSION_TRUE); criteriaOr.orOperator(criteria);
}
if (StringUtils.isNotBlank(path)) { if (StringUtils.isNotBlank(path)) {
criteria.and("path").regex("^"+path); criteriaOr.and("path").regex("^"+path);
} }
return criteria; return criteriaOr;
} }
//拼接查找系统标签条件 //拼接查找系统标签条件
private Criteria createSystemTagCriteria(String path) { private Criteria createSystemTagCriteria(String path) {
...@@ -436,24 +486,26 @@ public class TagService { ...@@ -436,24 +486,26 @@ public class TagService {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
//拼接个人标签查询条件 //拼接个人标签查询条件
private Criteria createPersonalTagCriteria(String userName, String dept, String path) throws TagNotExistException{ private Criteria createPersonalTagCriteria(String userName, List<String> orgIds,
//根据当前用户机构id获取所属公司机构id List<String> companyOrgIdList, String path) throws TagNotExistException{
String companyOrgId = this.getCompanyOrgIdByUserOrgId(dept); Criteria criteriaOr = new Criteria();
Criteria criteria1 = Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE) for(String orgId : orgIds) {
.and("dept").is(dept).and("tagUser").is(userName); Criteria criteria = Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE)
if (StringUtils.isNotBlank(path)) { .and("dept").is(orgId).and("tagUser").is(userName);
criteria1 = criteria1.and("path").regex("^"+path); if (StringUtils.isNotBlank(path)) {
return new Criteria().orOperator( criteria.and("path").regex("^"+path);
criteria1, }
//查询共享个人标签 criteriaOr.orOperator(criteria);
Criteria.where("proDept").is(companyOrgId)
.and("path").regex("^"+path).and("isOpen").is(Constants.TAG_OPEN_STATUS));
}else {
return new Criteria().orOperator(
criteria1,
//查询共享个人标签
Criteria.where("proDept").is(companyOrgId).and("isOpen").is(Constants.TAG_OPEN_STATUS));
} }
for(String companyOrgId : companyOrgIdList) {
Criteria criteria = Criteria.where("proDept").is(companyOrgId)
.and("isOpen").is(Constants.TAG_OPEN_STATUS);
if (StringUtils.isNotBlank(path)) {
criteria.and("path").regex("^"+path);
}
criteriaOr.orOperator(criteria);
}
return criteriaOr;
} }
//拼接查询当前系统标签子标签条件 //拼接查询当前系统标签子标签条件
private List<Tag> getSystemSubTag(Tag parentTag) { private List<Tag> getSystemSubTag(Tag parentTag) {
...@@ -465,9 +517,14 @@ public class TagService { ...@@ -465,9 +517,14 @@ public class TagService {
return dirs; return dirs;
} }
//拼接获取维度标签条件 //拼接获取维度标签条件
private Query createPersonalExcludeOpenTypeTagQuery(String userName, String dept) { private Query createPersonalExcludeOpenTypeTagQuery(String userName, List<String> companyOrgIdList) {
return Query.query(Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE) Criteria criteriaOr = new Criteria();
.and("dept").is(dept).and("dimensionType").is(Constants.TAG_DIMENSION_TRUE)) for(String companyOrgId : companyOrgIdList) {
Criteria criteria = Criteria.where("tagType").is(Constants.TAG_PERSONAL_TYPE)
.and("dept").is(companyOrgId).and("dimensionType").is(Constants.TAG_DIMENSION_TRUE);
criteriaOr.orOperator(criteria);
}
return Query.query(criteriaOr)
.with(Sort.by(getDefaultTagOrders())); .with(Sort.by(getDefaultTagOrders()));
} }
...@@ -504,27 +561,27 @@ public class TagService { ...@@ -504,27 +561,27 @@ public class TagService {
// return new JsonNode[] {}; // return new JsonNode[] {};
// } // }
private Query createPersonalTagQuery(String userName, String dept, Criteria... serachCriterias)throws TagNotExistException { // private Query createPersonalTagQuery(String userName, String dept, Criteria... serachCriterias)throws TagNotExistException {
return Query.query( // return Query.query(
createPersonalTagCriteria(userName, dept, null)) // createPersonalTagCriteria(userName, dept, null))
.with(Sort.by(getDefaultTagOrders())); // .with(Sort.by(getDefaultTagOrders()));
} // }
//
public List<Tag> getPersonSubTag(Tag parentTag, String userName) { // public List<Tag> getPersonSubTag(Tag parentTag, String userName) {
List<Tag> dirs = mongoOperations.find(new Query().addCriteria(Criteria.where("path") // List<Tag> dirs = mongoOperations.find(new Query().addCriteria(Criteria.where("path")
.regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR) // .regex("^"+parentTag.getPath() + Constants.TAG_PATH_SEPARATOR)
.and("tagType").is(Constants.TAG_PERSONAL_TYPE) // .and("tagType").is(Constants.TAG_PERSONAL_TYPE)
.orOperator( // .orOperator(
Criteria.where("openStatus").is(Constants.TAG_OPEN_STATUS), // Criteria.where("openStatus").is(Constants.TAG_OPEN_STATUS),
Criteria.where("creator").is(userName))) // Criteria.where("creator").is(userName)))
.with(Sort.by(getDefaultTagOrders())), Tag.class); // .with(Sort.by(getDefaultTagOrders())), Tag.class);
dirs.add(parentTag); // dirs.add(parentTag);
return dirs; // return dirs;
} // }
//
private Criteria createPathRegexQuery(String path) { // private Criteria createPathRegexQuery(String path) {
return Criteria.where("path").regex("^"+path); // return Criteria.where("path").regex("^"+path);
} // }
public List<SysTag> listSysTags() { public List<SysTag> listSysTags() {
return mongoOperations.findAll(SysTag.class); return mongoOperations.findAll(SysTag.class);
......
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