Commit 1b886516 authored by 雍欢's avatar 雍欢

生成QueryRequest的方法抽象成接口,并提供cglib和javassist两种实现方式

parent 78f7fb17
...@@ -6,6 +6,7 @@ import com.huigou.data.domain.query.ParentIdQueryRequest; ...@@ -6,6 +6,7 @@ import com.huigou.data.domain.query.ParentIdQueryRequest;
import com.huigou.uasp.bmp.opm.domain.model.access.Permission; import com.huigou.uasp.bmp.opm.domain.model.access.Permission;
import com.huigou.uasp.bmp.opm.domain.model.access.Role; import com.huigou.uasp.bmp.opm.domain.model.access.Role;
import com.huigou.uasp.bmp.opm.domain.model.access.UIElementPermission; import com.huigou.uasp.bmp.opm.domain.model.access.UIElementPermission;
import com.huigou.uasp.bmp.opm.domain.model.org.Org;
import com.huigou.uasp.bmp.opm.domain.model.resource.ResourceOperation; import com.huigou.uasp.bmp.opm.domain.model.resource.ResourceOperation;
import com.huigou.uasp.bmp.opm.domain.query.AuthorizationsQueryRequest; import com.huigou.uasp.bmp.opm.domain.query.AuthorizationsQueryRequest;
import com.huigou.uasp.bmp.opm.domain.query.AuthorizedPermissionsByOrgFullIdQueryRequest; import com.huigou.uasp.bmp.opm.domain.query.AuthorizedPermissionsByOrgFullIdQueryRequest;
...@@ -387,4 +388,13 @@ public interface AccessApplication { ...@@ -387,4 +388,13 @@ public interface AccessApplication {
void quoteRole(String sourceOrgId, String destOrgId); void quoteRole(String sourceOrgId, String destOrgId);
List<Map<String, Object>> queryPermissionsByFullId(String parentId); List<Map<String, Object>> queryPermissionsByFullId(String parentId);
/**
* 根据角色编码查询组织用户成员
*
* @param roleCode 角色编码
* @return 组织用户成员
* @since 1.2.11
*/
List<Org> queryPersonMemberByRoleCode(String roleCode);
} }
package com.huigou.uasp.bmp.opm.impl; package com.huigou.uasp.bmp.opm.impl;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.huigou.domain.ValidStatus;
import com.huigou.uasp.bmp.opm.domain.model.org.OrgNodeKind;
import com.huigou.uasp.bmp.opm.proxy.AccessApplicationProxy; import com.huigou.uasp.bmp.opm.proxy.AccessApplicationProxy;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
...@@ -847,4 +848,39 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl ...@@ -847,4 +848,39 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
Permission permission = this.permissionRepository.findOne(parentId); Permission permission = this.permissionRepository.findOne(parentId);
return this.sqlExecutorDao.queryToListMap(sql, permission.getFullId() + "%"); return this.sqlExecutorDao.queryToListMap(sql, permission.getFullId() + "%");
} }
@Override
public List<Org> queryPersonMemberByRoleCode(String roleCode) {
Specification<Role> spec = (root, query, cb) -> root.get("code")
.in(Arrays.asList(StringUtils.split(roleCode, ",")));
List<Role> roles = generalRepository.findAll(Role.class, spec);
if (roles.isEmpty()) {
return Collections.emptyList();
}
QueryDescriptor queryDescriptor = this.sqlExecutorDao.getQuery("config/uasp/query/bmp/opm.xml", "access");
String sql = queryDescriptor.getSqlByName("queryFirstAuthorizationByRoleId");
List<AuthorizationDesc> authorizationDescs = roles.stream()
.flatMap(role -> ((List<AuthorizationDesc>) this.generalRepository.query(sql,
QueryParameter.buildParameters("roleId", role.getId()))).stream())
.collect(Collectors.toList());
List<Org> orgs = authorizationDescs.stream().map(AuthorizationDesc::getOrgId)
.filter(Objects::nonNull)
.map(orgApplication::loadOrg).filter(Objects::nonNull)
.filter(org -> org.getValidStatus() == ValidStatus.ENABLED)
.collect(Collectors.toList());
// 这里用Set,可以自动去重
Set<Org> users = orgs.stream().filter(org -> OrgNodeKind.fromValue(org.getOrgKindId()) == OrgNodeKind.PSM)
.collect(Collectors.toSet());
Set<Org> usersInOrgs = orgs.stream()
.filter(org -> org.getOrgKind() != OrgNodeKind.PSM).map(Org::getId)
.map(orgApplication::queryAllPersonMembersByOrgId)
.flatMap(List::stream)
.collect(Collectors.toSet());
// 合并、去重
users.addAll(usersInOrgs);
return users.stream().collect(Collectors.toList());
}
} }
\ No newline at end of file
...@@ -1321,7 +1321,7 @@ public class OrgApplicationImpl extends BaseApplication implements OrgApplicatio ...@@ -1321,7 +1321,7 @@ public class OrgApplicationImpl extends BaseApplication implements OrgApplicatio
person.setPassword(OpmUtil.getDefaultEncryptPassword()); person.setPassword(OpmUtil.getDefaultEncryptPassword());
person.setIsOperator(false); person.setIsOperator(false);
if (person.getSecurityGrade() != null) { if (StringUtils.isNotBlank(person.getSecurityGrade())) {
SecurityPolicy securityPolicy = this.securityPolicyApplication.findSecurityGrade(person.getSecurityGrade(), ValidStatus.ENABLED.getId()); SecurityPolicy securityPolicy = this.securityPolicyApplication.findSecurityGrade(person.getSecurityGrade(), ValidStatus.ENABLED.getId());
String securityGradeText = DictUtil.getDictionaryDetailText("securityGrade", person.getSecurityGrade()); String securityGradeText = DictUtil.getDictionaryDetailText("securityGrade", person.getSecurityGrade());
Assert.state(securityPolicy != null, String.format("密级“%s”没有设置或启用安全策略。", securityGradeText)); Assert.state(securityPolicy != null, String.format("密级“%s”没有设置或启用安全策略。", securityGradeText));
......
...@@ -8,7 +8,6 @@ import javax.persistence.Temporal; ...@@ -8,7 +8,6 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import com.huigou.context.Operator; import com.huigou.context.Operator;
import com.huigou.context.ThreadLocalUtil; import com.huigou.context.ThreadLocalUtil;
...@@ -56,10 +55,10 @@ public class Creator { ...@@ -56,10 +55,10 @@ public class Creator {
public void buildCreatedInfo() { public void buildCreatedInfo() {
Operator operator = ThreadLocalUtil.getOperator(); Operator operator = ThreadLocalUtil.getOperator();
if (operator != null) {
setCreatedById(operator.getPersonMemberId()); setCreatedById(operator.getPersonMemberId());
setCreatedByName(operator.getPersonMemberName()); setCreatedByName(operator.getPersonMemberName());
}
setCreatedDate(new Date()); setCreatedDate(new Date());
} }
......
...@@ -25,7 +25,7 @@ public abstract class AbstractQueryRequestFactory implements QueryRequestFactory ...@@ -25,7 +25,7 @@ public abstract class AbstractQueryRequestFactory implements QueryRequestFactory
public QueryAbstractRequest getQueryRequest(Method method, Object[] args) { public QueryAbstractRequest getQueryRequest(Method method, Object[] args) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
QueryAbstractRequest queryRequest = newInstance(method, args); QueryAbstractRequest queryRequest = newInstance(method, args);
LOG.info("为查询方法 {}.{} 生成QueryRequest,共花费{}毫秒", method.getClass().getName(), method.getName(), System.currentTimeMillis() - startTime); LOG.info("为查询方法 {}.{} 生成QueryRequest,共花费{}毫秒", method.getDeclaringClass().getName(), method.getName(), System.currentTimeMillis() - startTime);
PropertyDescriptor[] propertyDescriptors; PropertyDescriptor[] propertyDescriptors;
try { try {
propertyDescriptors = Introspector.getBeanInfo(queryRequest.getClass()).getPropertyDescriptors(); propertyDescriptors = Introspector.getBeanInfo(queryRequest.getClass()).getPropertyDescriptors();
......
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