From 973b8d6fe019d8b0f9e786e0a95b70ead8cf02b1 Mon Sep 17 00:00:00 2001 From: wxz Date: Wed, 3 Jun 2020 15:11:42 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=9D=83=E9=99=90=E6=A8=A1=E5=9D=97=E8=B0=83?= =?UTF-8?q?=E6=95=B4=EF=BC=8C=E5=B0=86=E7=BD=91=E6=A0=BCid=E5=92=8C?= =?UTF-8?q?=E9=83=A8=E9=97=A8id=E7=9A=84=E8=BE=93=E5=85=A5=E7=94=B1?= =?UTF-8?q?=E5=8D=95=E4=B8=AA=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/annotation/DataFilter.java | 4 +- .../mybatis/aspect/DataFilterAspect.java | 26 ++++----- .../mybatis/dto/form/GetSQLFilterFormDTO.java | 5 +- .../feign/MybatisGovAccessFeignClient.java | 2 +- .../epmet/dto/form/GetSQLFilterFormDTO.java | 5 +- .../epmet/service/impl/AccessServiceImpl.java | 54 ++++++++++++------- 6 files changed, 57 insertions(+), 39 deletions(-) diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java index d85182f71e..574072a71a 100644 --- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java +++ b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/annotation/DataFilter.java @@ -32,12 +32,12 @@ public @interface DataFilter { * public void test(String a, String b, String gridId) {...} * @return */ - String gridIdArgName() default ""; + String gridIdsArgName() default ""; /** * 部门ID参数名 * @return */ - String deptIdArgName() default ""; + String deptIdsArgName() default ""; } diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java index 3250a4f25f..0772305976 100644 --- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java +++ b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java @@ -19,6 +19,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Set; + /** * 数据过滤,切面处理类 * @@ -57,24 +59,24 @@ public class DataFilterAspect { MethodSignature methodSignature = (MethodSignature) point.getSignature(); DataFilter dataFilterAnno = methodSignature.getMethod().getAnnotation(DataFilter.class); String tableAlias = dataFilterAnno.tableAliases()[0]; - String gridIdArgName = dataFilterAnno.gridIdArgName(); - String deptIdArgName = dataFilterAnno.deptIdArgName(); + String gridIdsArgName = dataFilterAnno.gridIdsArgName(); + String deptIdsArgName = dataFilterAnno.deptIdsArgName(); String[] parameterNames = methodSignature.getParameterNames(); // 取出注解参数中指定的gridId和deptId的入参的值 - String gridId = null; - String deptId = null; - if (StringUtils.isNotBlank(gridIdArgName)) { - int gridIdArgIndex = ArrayUtils.indexOf(parameterNames, gridIdArgName); + Set gridIds = null; + Set deptIds = null; + if (StringUtils.isNotBlank(gridIdsArgName)) { + int gridIdArgIndex = ArrayUtils.indexOf(parameterNames, gridIdsArgName); if (gridIdArgIndex >-1){ - gridId = (String) point.getArgs()[gridIdArgIndex]; + gridIds = (Set) point.getArgs()[gridIdArgIndex]; } } - if (StringUtils.isNotBlank(deptIdArgName)) { - int deptArgIndex = ArrayUtils.indexOf(parameterNames, deptIdArgName); + if (StringUtils.isNotBlank(deptIdsArgName)) { + int deptArgIndex = ArrayUtils.indexOf(parameterNames, deptIdsArgName); if (deptArgIndex > -1) { - deptId = (String) point.getArgs()[deptArgIndex]; + deptIds = (Set) point.getArgs()[deptArgIndex]; } } @@ -84,8 +86,8 @@ public class DataFilterAspect { form.setApp(loginUserUtil.getLoginUserApp()); form.setClient(loginUserUtil.getLoginUserClient()); form.setUserId(loginUserUtil.getLoginUserId()); - form.setDepartmentId(deptId); - form.setGridId(gridId); + form.setDepartmentIds(deptIds); + form.setGridIds(gridIds); form.setOperationKey(requirePermission); form.setTableAlias(tableAlias); Result sqlFilterSegmentRst = mybatisGovAccessFeignClient.getSqlFilterSegment(form); diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java index e0d6b266d6..25c92a11a8 100644 --- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java +++ b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/dto/form/GetSQLFilterFormDTO.java @@ -3,6 +3,7 @@ package com.epmet.commons.mybatis.dto.form; import lombok.Data; import javax.validation.constraints.NotBlank; +import java.util.Set; @Data public class GetSQLFilterFormDTO { @@ -21,8 +22,8 @@ public class GetSQLFilterFormDTO { private String tableAlias; - private String gridId; + private Set gridIds; - private String departmentId; + private Set departmentIds; } diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java index 2c6e0d5ed8..a7dc3a05f9 100644 --- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java +++ b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/feign/MybatisGovAccessFeignClient.java @@ -16,7 +16,7 @@ import java.util.Set; * @Description * @Author sun */ -//, url = "localhost:8099" +//@FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = MybatisGovAccessFeignClientFallback.class, url = "localhost:8099") @FeignClient(name = ServiceConstant.GOV_ACCESS_SERVER, fallback = MybatisGovAccessFeignClientFallback.class) public interface MybatisGovAccessFeignClient { diff --git a/epmet-module/gov-access/gov-access-client/src/main/java/com/epmet/dto/form/GetSQLFilterFormDTO.java b/epmet-module/gov-access/gov-access-client/src/main/java/com/epmet/dto/form/GetSQLFilterFormDTO.java index 4a63754bd7..4901eca2bb 100644 --- a/epmet-module/gov-access/gov-access-client/src/main/java/com/epmet/dto/form/GetSQLFilterFormDTO.java +++ b/epmet-module/gov-access/gov-access-client/src/main/java/com/epmet/dto/form/GetSQLFilterFormDTO.java @@ -3,6 +3,7 @@ package com.epmet.dto.form; import lombok.Data; import javax.validation.constraints.NotBlank; +import java.util.Set; @Data public class GetSQLFilterFormDTO { @@ -21,8 +22,8 @@ public class GetSQLFilterFormDTO { private String tableAlias; - private String gridId; + private Set gridIds; - private String departmentId; + private Set departmentIds; } diff --git a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/AccessServiceImpl.java b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/AccessServiceImpl.java index 8adcf8c301..ea8397e386 100644 --- a/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/AccessServiceImpl.java +++ b/epmet-module/gov-access/gov-access-server/src/main/java/com/epmet/service/impl/AccessServiceImpl.java @@ -186,7 +186,7 @@ public class AccessServiceImpl implements AccessService { // 生成开关范围的sql过滤器 if (!CollectionUtil.isEmpty(switchScopes)) { - genSwitchScopeSqlFilter(switchScopes, sb, form.getTableAlias(), userDetails.getUserId(), form.getGridId(), form.getDepartmentId()); + genSwitchScopeSqlFilter(switchScopes, sb, form.getTableAlias(), userDetails.getUserId(), form.getGridIds(), form.getDepartmentIds()); } return sb.toString(); @@ -200,29 +200,29 @@ public class AccessServiceImpl implements AccessService { StringBuilder sb, String tableAlias, String userId, - String gridId, - String departmentId) { + Set gridIds, + Set departmentIds) { if (switchScopes.contains(OperationScopeConstant.SCOPE_I_CREATED)) { genICreatedSql(sb, userId, tableAlias); } if (switchScopes.contains(OperationScopeConstant.SCOPE_IN_GRID)) { - if (StringUtils.isBlank(gridId)) { - String error = String.format("DataFilter:拼接SQL语句出错:需要in grid权限,但是代码中没有获取到,GridId:%s", gridId); + if (CollectionUtils.isEmpty(gridIds)) { + String error = String.format("DataFilter:拼接SQL语句出错:需要in grid权限,但是代码中没有获取到gridIds"); logger.error(error); throw new RenException(error); } - genInGrid(sb, gridId, tableAlias); + genInGrid(sb, gridIds, tableAlias); } if (switchScopes.contains(OperationScopeConstant.SCOPE_IN_DEPARTMENT)) { - if (StringUtils.isBlank(departmentId)) { - String error = String.format("DataFilter:拼接SQL语句出错:需要in department权限,但是代码中没有获取到, departmentId:%s", departmentId); + if (CollectionUtils.isEmpty(departmentIds)) { + String error = String.format("DataFilter:拼接SQL语句出错:需要in department权限,但是代码中没有获取到, departmentIds"); logger.error(error); throw new RenException(error); } - genDepartmentFilterSql(sb, departmentId, tableAlias); + genDepartmentFilterSql(sb, departmentIds, tableAlias); } } @@ -246,18 +246,25 @@ public class AccessServiceImpl implements AccessService { * @param sb * @param tableAlias */ - private void genInGrid(StringBuilder sb, String gridId, String tableAlias) { + private void genInGrid(StringBuilder sb, Set gridIds, String tableAlias) { if (hasConditions.get()) { // 之前没有条件 sb.append(" OR "); } - // OR GRID_ID = 'XXX' OR GRID_ID = 'QQQ' - if (StringUtils.isBlank(tableAlias)) { - sb.append(" GRID_ID = '").append(gridId).append("' "); - } else { - sb.append(" ").append(tableAlias).append(".GRID_ID ='").append(gridId).append("' "); + // OR GRID_ID = 'XXX' OR GRID_ID = 'QQQ' OR + + for (String gridId : gridIds) { + if (StringUtils.isBlank(tableAlias)) { + sb.append(" GRID_ID = '").append(gridId).append("' OR "); + } else { + sb.append(" ").append(tableAlias).append(".GRID_ID ='").append(gridId).append("' OR "); + } } + + int lastOrIndex = sb.lastIndexOf("OR"); + sb.replace(lastOrIndex, lastOrIndex + "OR".length(), "" ); + hasConditions.set(true); } @@ -266,17 +273,24 @@ public class AccessServiceImpl implements AccessService { * * @param sb */ - private void genDepartmentFilterSql(StringBuilder sb, String deptId, String tableAlias) { + private void genDepartmentFilterSql(StringBuilder sb, Set deptIds, String tableAlias) { //Result> deptListResult = govOrgFeignClient.getDepartmentListByStaffId(staffId); if (hasConditions.get()) { // 之前没有条件 sb.append(" OR "); } - if (StringUtils.isBlank(tableAlias)) { - sb.append(" DEPARTMENT_ID = '").append(deptId).append("' "); - } else { - sb.append(" ").append(tableAlias).append(".DEPARTMENT_ID ='").append(deptId).append("' "); + + for (String deptId : deptIds) { + if (StringUtils.isBlank(tableAlias)) { + sb.append(" DEPARTMENT_ID = '").append(deptId).append("' OR "); + } else { + sb.append(" ").append(tableAlias).append(".DEPARTMENT_ID ='").append(deptId).append("' OR "); + } } + + int lastOrIndex = sb.lastIndexOf("OR"); + sb.replace(lastOrIndex, lastOrIndex + "OR".length(), "" ); + hasConditions.set(true); }