From e731e686b8788e55cfd2f953e23c2808dab4cc5b Mon Sep 17 00:00:00 2001 From: wxz Date: Fri, 7 Apr 2023 03:02:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=A7=A3=E5=86=B3=E5=B1=85=E6=B0=91?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=A4=9A=E9=80=89=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E7=B3=BB=E5=88=97=E9=97=AE=E9=A2=98=E3=80=82=E3=80=82?= =?UTF-8?q?=E3=80=82=E3=80=82=E5=A4=B4=E5=8F=91=E6=8E=89=E5=85=89=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/PidUtils.java | 27 +++ .../impl/IcNeighborHoodServiceImpl.java | 13 +- .../java/com/epmet/dao/IcResiUserDao.java | 5 +- .../service/impl/IcResiUserServiceImpl.java | 170 ++++++++++++------ .../main/resources/mapper/IcResiUserDao.xml | 19 +- 5 files changed, 172 insertions(+), 62 deletions(-) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/PidUtils.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/PidUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/PidUtils.java new file mode 100644 index 0000000000..f0cdb943b8 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/PidUtils.java @@ -0,0 +1,27 @@ +package com.epmet.commons.tools.utils; + +import org.apache.commons.lang3.StringUtils; + +/** + * pid用到的工具 + */ +public class PidUtils { + + /** + * 将orgId和pids组合传话为orgIdPath(包含自己) + * @param orgId + * @param pids + * @return + */ + public static String convertPid2OrgIdPath(String orgId,String pids) { + StringBuilder orgIdPath = new StringBuilder(); + if (StringUtils.isBlank(pids) || pids.equals("0")) { + orgIdPath.append(orgId); + } else { + orgIdPath.append(pids).append(":").append(orgId); + } + + return orgIdPath.toString(); + } + +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java index 7b863857f9..751abc9199 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java @@ -200,11 +200,16 @@ public class IcNeighborHoodServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StringUtils.isNotBlank(agencyId), IcNeighborHoodEntity::getAgencyId, agencyId); - wrapper.eq(StringUtils.isNotBlank(gridId), IcNeighborHoodEntity::getGridId, gridId); - wrapper.in(!CollectionUtils.isEmpty(agencyIds), IcNeighborHoodEntity::getAgencyId, agencyIds); - wrapper.in(!CollectionUtils.isEmpty(gridIds), IcNeighborHoodEntity::getGridId, gridIds); + wrapper.eq(StringUtils.isNotBlank(agencyId), IcNeighborHoodEntity::getAgencyId, agencyId) + .or() + .eq(StringUtils.isNotBlank(gridId), IcNeighborHoodEntity::getGridId, gridId) + .or() + .in(!CollectionUtils.isEmpty(agencyIds), IcNeighborHoodEntity::getAgencyId, agencyIds) + .or() + .in(!CollectionUtils.isEmpty(gridIds), IcNeighborHoodEntity::getGridId, gridIds); wrapper.last("ORDER BY CONVERT ( NEIGHBOR_HOOD_NAME USING gbk ) ASC"); List list = baseDao.selectList(wrapper); if (CollectionUtils.isEmpty(list)) { diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java index bb215e3734..7ea3b00fbb 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java @@ -66,8 +66,9 @@ public interface IcResiUserDao extends BaseDao { @Param("conditions") List conditions, @Param("resultColumns") List resultColumns, @Param("subTables") List subTables, - @Param("currentStaffAgencyId") String currentStaffAgencyId, - @Param("staffOrgPath") String staffOrgPath, + @Param("currentStaffAgencyId") List currentStaffAgencyIds, + @Param("staffOrgPaths") List staffOrgPaths, + @Param("gridIds") Set gridIds, @Param("resultTableName") String resultTableName, @Param("keyword") String keyword, @Param("groupByTables") Set groupByTables); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index ce0ae4cb7f..f5416c714b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -181,7 +181,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl ORG_FIELDS = Arrays.asList("AGENCY_IDS", "GRID_IDS", "AGENCY_ID", "GRID_ID"); private QueryWrapper getWrapper(Map params) { String id = (String) params.get(FieldConstant.ID_HUMP); @@ -918,36 +918,61 @@ public class IcResiUserServiceImpl extends BaseServiceImpl resultColumns = resultColumnRes.getData(); // 查询结果列对应的表: Set resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet()); - List queryAgencyIdList = formDTO.getConditions().stream() - .filter(o -> IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName()) - && CollectionUtils.isNotEmpty(o.getColumnValue()) && StringUtils.isNotBlank(o.getColumnValue().get(NumConstant.ZERO))) - .flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList()); + + // List queryAgencyIdList = formDTO.getConditions().stream() + // .filter(o -> IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_IDS".equals(o.getColumnName()) + // && CollectionUtils.isNotEmpty(o.getColumnValue()) && StringUtils.isNotBlank(o.getColumnValue().get(NumConstant.ZERO))) + // .flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList()); + + // 组织和网格单独处理 + Set queryAgencyIdList = new HashSet<>(); + Set queryGridIdList = new HashSet<>(); + + // 将以下几列单独提出来,组合起来,放入列表 + formDTO.getConditions().stream().forEach(c -> { + if (IcResiUserConstant.IC_RESI_USER.equals(c.getTableName()) && CollectionUtils.isNotEmpty(c.getColumnValue()) + && StringUtils.isNotBlank(c.getColumnValue().get(NumConstant.ZERO))) { + if ("AGENCY_IDS".equals(c.getColumnName())) { + queryAgencyIdList.addAll(c.getColumnValue()); + } else if ("GRID_IDS".equals(c.getColumnName())) { + queryGridIdList.addAll(c.getColumnValue()); + } else if ("AGENCY_ID".equals(c.getColumnName()) && ! queryAgencyIdList.contains(c.getColumnValue())) { + queryAgencyIdList.addAll(c.getColumnValue()); + } else if ("GRID_ID".equals(c.getColumnName()) && ! queryGridIdList.contains(c.getColumnValue())) { + queryGridIdList.addAll(c.getColumnValue()); + } + } + }); + + // 移除需要特殊处理的conditions + formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && ORG_FIELDS.contains(o.getColumnName())); //添加数据权限 - String staffOrgPath; - String agencyId; - //如果查询条件中 有居民表的agencyId 则匹配查询该组织下的 数据 - if (queryAgencyIdList.isEmpty()){ + List staffOrgPaths; + List agencyIds = null; + //如果查询条件中 没有有居民表的agencyId,则查询该工作人员所属组织的信息 + if (queryAgencyIdList.isEmpty() && queryGridIdList.isEmpty()){ CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId()); - agencyId = staffInfoCacheResult.getAgencyId(); + agencyIds = Arrays.asList(staffInfoCacheResult.getAgencyId()); + + String op; if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) { - staffOrgPath = staffInfoCacheResult.getAgencyPIds().concat(":").concat(staffInfoCacheResult.getAgencyId()); + op = staffInfoCacheResult.getAgencyPIds().concat(":").concat(staffInfoCacheResult.getAgencyId()); } else { - staffOrgPath = staffInfoCacheResult.getAgencyId(); + op = staffInfoCacheResult.getAgencyId(); } + + staffOrgPaths = Arrays.asList(op); } else { - formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName())); - AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(queryAgencyIdList.get(NumConstant.ZERO)); - if (agencyInfo == null){ - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取组织信息失败"); - } - agencyId = agencyInfo.getId(); - staffOrgPath = agencyInfo.getPids(); - if (StringUtils.isBlank(staffOrgPath)){ - staffOrgPath = agencyId; - }else{ - staffOrgPath = staffOrgPath+StrConstant.COLON+agencyInfo.getId(); - } + // 将组织id列表,转化为组织orgIdPath列表 + staffOrgPaths = queryAgencyIdList.stream().map(agId -> { + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(agId); + if (agencyInfo == null) { + String errorMsg = "查询机关单位失败:" + agId; + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), errorMsg, errorMsg); + } + return PidUtils.convertPid2OrgIdPath(agId, agencyInfo.getPids()); + }).collect(Collectors.toList()); } // 查询列表展示项需要用到哪些子表 Result> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1); @@ -976,14 +1001,19 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> pageInfo = new PageInfo<>(); if (null == formDTO.getIsPage() || formDTO.getIsPage()) { //分页 - String finalStaffOrgPath = staffOrgPath; + List finalStaffOrgPath = staffOrgPaths; + List finalAgencyIds = agencyIds; pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(), formDTO.getFormCode(), formDTO.getConditions(), resultColumns, finalSubTables, - agencyId, finalStaffOrgPath,null, formDTO.getKeyword(), + finalAgencyIds, + finalStaffOrgPath, + queryGridIdList, + null, + formDTO.getKeyword(), groupByTables)); } else { List> list = baseDao.selectListResiMap(formDTO.getCustomerId(), @@ -991,8 +1021,10 @@ public class IcResiUserServiceImpl extends BaseServiceImpl resultColumns = resultColumnRes.getData(); // 查询结果列对应的表: Set resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet()); - List queryAgencyIdList = formDTO.getConditions().stream() - .filter(o -> IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName()) - && CollectionUtils.isNotEmpty(o.getColumnValue()) && StringUtils.isNotBlank(o.getColumnValue().get(NumConstant.ZERO))) - .flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList()); + + // 组织和网格单独处理 + Set queryAgencyIdList = new HashSet<>(); + Set queryGridIdList = new HashSet<>(); + + // 将以下几列单独提出来,组合起来,放入列表 + formDTO.getConditions().stream().forEach(c -> { + if (IcResiUserConstant.IC_RESI_USER.equals(c.getTableName()) && CollectionUtils.isNotEmpty(c.getColumnValue()) + && StringUtils.isNotBlank(c.getColumnValue().get(NumConstant.ZERO))) { + if ("AGENCY_IDS".equals(c.getColumnName())) { + queryAgencyIdList.addAll(c.getColumnValue()); + } else if ("GRID_IDS".equals(c.getColumnName())) { + queryGridIdList.addAll(c.getColumnValue()); + } else if ("AGENCY_ID".equals(c.getColumnName()) && ! queryAgencyIdList.contains(c.getColumnValue())) { + queryAgencyIdList.addAll(c.getColumnValue()); + } else if ("GRID_ID".equals(c.getColumnName()) && ! queryGridIdList.contains(c.getColumnValue())) { + queryGridIdList.addAll(c.getColumnValue()); + } + } + }); + + // 移除需要特殊处理的conditions + formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && ORG_FIELDS.contains(o.getColumnName())); //添加数据权限 - String staffOrgPath; - String agencyId; - //如果查询条件中 有居民表的agencyId 则匹配查询该组织下的 数据 - if (queryAgencyIdList.isEmpty()){ + List staffOrgPaths; + List agencyIds = null; + //如果查询条件中 没有有居民表的agencyId,则查询该工作人员所属组织的信息 + if (queryAgencyIdList.isEmpty() && queryGridIdList.isEmpty()){ CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId()); - agencyId = staffInfoCacheResult.getAgencyId(); + agencyIds = Arrays.asList(staffInfoCacheResult.getAgencyId()); + + String op; if (StringUtils.isNotBlank(staffInfoCacheResult.getAgencyPIds()) && !NumConstant.ZERO_STR.equals(staffInfoCacheResult.getAgencyPIds())) { - staffOrgPath = staffInfoCacheResult.getAgencyPIds().concat(":").concat(staffInfoCacheResult.getAgencyId()); + op = staffInfoCacheResult.getAgencyPIds().concat(":").concat(staffInfoCacheResult.getAgencyId()); } else { - staffOrgPath = staffInfoCacheResult.getAgencyId(); + op = staffInfoCacheResult.getAgencyId(); } + + staffOrgPaths = Arrays.asList(op); } else { - formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName())); - AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(queryAgencyIdList.get(NumConstant.ZERO)); - if (agencyInfo == null){ - throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取组织信息失败"); - } - agencyId = agencyInfo.getId(); - staffOrgPath = agencyInfo.getPids(); - if (StringUtils.isBlank(staffOrgPath)){ - staffOrgPath = agencyId; - }else{ - staffOrgPath = staffOrgPath+StrConstant.COLON+agencyInfo.getId(); - } + // 将组织id列表,转化为组织orgIdPath列表 + staffOrgPaths = queryAgencyIdList.stream().map(agId -> { + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(agId); + if (agencyInfo == null) { + String errorMsg = "查询机关单位失败:" + agId; + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), errorMsg, errorMsg); + } + return PidUtils.convertPid2OrgIdPath(agId, agencyInfo.getPids()); + }).collect(Collectors.toList()); } + // 查询列表展示项需要用到哪些子表 Result> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1); List subTables = subTablesRes.getData(); @@ -3378,14 +3431,19 @@ public class IcResiUserServiceImpl extends BaseServiceImpl> pageInfo = new PageInfo<>(); if (null == formDTO.getIsPage() || formDTO.getIsPage()) { //分页 - String finalStaffOrgPath = staffOrgPath; + List finalStaffOrgPath = staffOrgPaths; + List finalAgencyIds = agencyIds; pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(), formDTO.getFormCode(), formDTO.getConditions(), resultColumns, finalSubTables, - agencyId, finalStaffOrgPath,null, formDTO.getKeyword(), + finalAgencyIds, + finalStaffOrgPath, + queryGridIdList, + null, + formDTO.getKeyword(), groupByTables)); } else { List> list = baseDao.selectListResiMap(formDTO.getCustomerId(), @@ -3393,8 +3451,10 @@ public class IcResiUserServiceImpl extends BaseServiceImpl AND ${resultTableName}.ID IS NOT NULL - and ic_resi_user.pids like concat(#{staffOrgPath},'%') + + and ( + + ic_resi_user.pids like concat(#{orgIdPath},'%') + + + or + + + + ic_resi_user.GRID_ID in ( + + #{gridId} + + ) + + ) +