From f29d9638c9a6b4e53927bdd24d92072b18541bfb Mon Sep 17 00:00:00 2001 From: wxz Date: Mon, 8 Jun 2020 19:51:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=BE=E5=9B=9E=E6=9D=83=E9=99=90=E8=A2=AB?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E7=9A=84=E4=BB=A3=E7=A0=81?= 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 ++++++++++++------- .../main/java/com/epmet/dao/ArticleDao.java | 4 +- 7 files changed, 59 insertions(+), 41 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 1dbe11149b..2b712ff301 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 6fa5770d0e..cc723cca1f 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 @@ -139,7 +139,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(); @@ -153,29 +153,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); } } @@ -199,18 +199,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); } @@ -219,17 +226,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); } diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleDao.java index 041f642be9..048522a8bc 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleDao.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/ArticleDao.java @@ -83,7 +83,7 @@ public interface ArticleDao extends BaseDao { * @param gridList * @return java.util.List */ - @DataFilter(tableAliases = {"a", "apr"}, gridIdArgName = "gridList") + @DataFilter(tableAliases = {"a", "apr"}, gridIdsArgName = "gridList") List selectArticleListForGrid(@Param("customerId") String customerId, @Param("tagIdList") List tagIdList, Set gridList); @@ -94,7 +94,7 @@ public interface ArticleDao extends BaseDao { * @param gridList * @return java.util.List */ - @DataFilter(tableAliases = "apr", gridIdArgName = "gridList") + @DataFilter(tableAliases = "apr", gridIdsArgName = "gridList") List selectOfflineList(Set gridList);