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

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

parent 78f7fb17
......@@ -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.Role;
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.query.AuthorizationsQueryRequest;
import com.huigou.uasp.bmp.opm.domain.query.AuthorizedPermissionsByOrgFullIdQueryRequest;
......@@ -387,4 +388,13 @@ public interface AccessApplication {
void quoteRole(String sourceOrgId, String destOrgId);
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;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
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 org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
......@@ -233,7 +234,7 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
if (authorizationDescs.size() == 1) {
authorizationDesc = authorizationDescs.get(0);
Assert.isTrue(false,
MessageSourceContext.getMessage(MessageConstants.OBJECT_REFERENCED_BY_WHO, role.getName(), authorizationDesc.getOrgFullName()));
MessageSourceContext.getMessage(MessageConstants.OBJECT_REFERENCED_BY_WHO, role.getName(), authorizationDesc.getOrgFullName()));
}
count = rolePermissionRepository.countByRoleId(role.getId());
Assert.isTrue(count.equals(0l), String.format("角色“%s”已有分配了权限,不能删除。", role.getName()));
......@@ -310,7 +311,7 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
}
QueryModel queryModel = this.sqlExecutorDao.getQueryModel(queryDescriptor, queryRequest);
// 使用三员管理,未启用三员,超级管理员可维护,启用三员后,安全员可维护
// 使用三员管理,未启用三员,超级管理员可维护,启用三员后,安全员可维护
if (tmspmConifg.isUseTspm()) {
Operator operator = ThreadLocalUtil.getOperator();
boolean isProcessedCondition = false;
......@@ -370,7 +371,7 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
public void updatePermission(Permission permission) {
Permission dbPermission = this.loadPermission(permission.getId());
Assert.notNull(dbPermission,
MessageSourceContext.getMessage(MessageConstants.OBJECT_NOT_FOUND_BY_ID, permission.getId(), permission.getClass().getName()));
MessageSourceContext.getMessage(MessageConstants.OBJECT_NOT_FOUND_BY_ID, permission.getId(), permission.getClass().getName()));
String oldName = dbPermission.getName();
dbPermission.fromEntity(permission);
......@@ -674,7 +675,7 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
/**
* 国际化数据转换
*
*
* @param result
* @return
*/
......@@ -714,7 +715,7 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
@Override
public Map<String, Object> queryUIElementOperations() {
List<ResourceOperation> resourceOperations = this.resourceOperationRepository.findCommonOperations(ResourceKind.UI_ELEMENT,
ResourceOperation.COMMON_OPERATION);
ResourceOperation.COMMON_OPERATION);
Map<String, Object> result = new HashMap<String, Object>(resourceOperations.size());
for (ResourceOperation resourceOperation : resourceOperations) {
......@@ -847,4 +848,39 @@ public class AccessApplicationImpl extends BaseApplication implements AccessAppl
Permission permission = this.permissionRepository.findOne(parentId);
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
person.setPassword(OpmUtil.getDefaultEncryptPassword());
person.setIsOperator(false);
if (person.getSecurityGrade() != null) {
if (StringUtils.isNotBlank(person.getSecurityGrade())) {
SecurityPolicy securityPolicy = this.securityPolicyApplication.findSecurityGrade(person.getSecurityGrade(), ValidStatus.ENABLED.getId());
String securityGradeText = DictUtil.getDictionaryDetailText("securityGrade", person.getSecurityGrade());
Assert.state(securityPolicy != null, String.format("密级“%s”没有设置或启用安全策略。", securityGradeText));
......
......@@ -8,13 +8,12 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.huigou.context.Operator;
import com.huigou.context.ThreadLocalUtil;
/**
* 创建人员
*
*
* @author gongmm
*/
@Embeddable
......@@ -56,10 +55,10 @@ public class Creator {
public void buildCreatedInfo() {
Operator operator = ThreadLocalUtil.getOperator();
setCreatedById(operator.getPersonMemberId());
setCreatedByName(operator.getPersonMemberName());
if (operator != null) {
setCreatedById(operator.getPersonMemberId());
setCreatedByName(operator.getPersonMemberName());
}
setCreatedDate(new Date());
}
......
......@@ -25,7 +25,7 @@ public abstract class AbstractQueryRequestFactory implements QueryRequestFactory
public QueryAbstractRequest getQueryRequest(Method method, Object[] args) {
long startTime = System.currentTimeMillis();
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;
try {
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