Browse Source

fix:解决居民信息多选导致的一系列问题。。。。头发掉光了

master
wxz 2 years ago
parent
commit
e731e686b8
  1. 27
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/PidUtils.java
  2. 13
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcNeighborHoodServiceImpl.java
  3. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  4. 170
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  5. 19
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

27
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();
}
}

13
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<IcNeighborHoodDao
} }
agencyId = result.getAgencyId(); agencyId = result.getAgencyId();
} }
// 此处支持多种条件,or连接
LambdaQueryWrapper<IcNeighborHoodEntity> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<IcNeighborHoodEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(agencyId), IcNeighborHoodEntity::getAgencyId, agencyId); wrapper.eq(StringUtils.isNotBlank(agencyId), IcNeighborHoodEntity::getAgencyId, agencyId)
wrapper.eq(StringUtils.isNotBlank(gridId), IcNeighborHoodEntity::getGridId, gridId); .or()
wrapper.in(!CollectionUtils.isEmpty(agencyIds), IcNeighborHoodEntity::getAgencyId, agencyIds); .eq(StringUtils.isNotBlank(gridId), IcNeighborHoodEntity::getGridId, gridId)
wrapper.in(!CollectionUtils.isEmpty(gridIds), IcNeighborHoodEntity::getGridId, gridIds); .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"); wrapper.last("ORDER BY CONVERT ( NEIGHBOR_HOOD_NAME USING gbk ) ASC");
List<IcNeighborHoodEntity> list = baseDao.selectList(wrapper); List<IcNeighborHoodEntity> list = baseDao.selectList(wrapper);
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {

5
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -66,8 +66,9 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
@Param("conditions") List<ResiUserQueryValueDTO> conditions, @Param("conditions") List<ResiUserQueryValueDTO> conditions,
@Param("resultColumns") List<IcFormResColumnDTO> resultColumns, @Param("resultColumns") List<IcFormResColumnDTO> resultColumns,
@Param("subTables") List<String> subTables, @Param("subTables") List<String> subTables,
@Param("currentStaffAgencyId") String currentStaffAgencyId, @Param("currentStaffAgencyId") List<String> currentStaffAgencyIds,
@Param("staffOrgPath") String staffOrgPath, @Param("staffOrgPaths") List<String> staffOrgPaths,
@Param("gridIds") Set<String> gridIds,
@Param("resultTableName") String resultTableName, @Param("resultTableName") String resultTableName,
@Param("keyword") String keyword, @Param("keyword") String keyword,
@Param("groupByTables") Set<String> groupByTables); @Param("groupByTables") Set<String> groupByTables);

170
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -181,7 +181,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
@Autowired @Autowired
private IcVaccineRelationDao icVaccineRelationDao; private IcVaccineRelationDao icVaccineRelationDao;
public static final List<String> ORG_FIELDS = Arrays.asList("AGENCY_IDS", "GRID_IDS", "AGENCY_ID", "GRID_ID");
private QueryWrapper<IcResiUserEntity> getWrapper(Map<String, Object> params) { private QueryWrapper<IcResiUserEntity> getWrapper(Map<String, Object> params) {
String id = (String) params.get(FieldConstant.ID_HUMP); String id = (String) params.get(FieldConstant.ID_HUMP);
@ -918,36 +918,61 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
List<IcFormResColumnDTO> resultColumns = resultColumnRes.getData(); List<IcFormResColumnDTO> resultColumns = resultColumnRes.getData();
// 查询结果列对应的表: // 查询结果列对应的表:
Set<String> resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet()); Set<String> resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet());
List<String> queryAgencyIdList = formDTO.getConditions().stream()
.filter(o -> IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName()) // List<String> queryAgencyIdList = formDTO.getConditions().stream()
&& CollectionUtils.isNotEmpty(o.getColumnValue()) && StringUtils.isNotBlank(o.getColumnValue().get(NumConstant.ZERO))) // .filter(o -> IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_IDS".equals(o.getColumnName())
.flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList()); // && CollectionUtils.isNotEmpty(o.getColumnValue()) && StringUtils.isNotBlank(o.getColumnValue().get(NumConstant.ZERO)))
// .flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList());
// 组织和网格单独处理
Set<String> queryAgencyIdList = new HashSet<>();
Set<String> 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; List<String> staffOrgPaths;
String agencyId; List<String> agencyIds = null;
//如果查询条件中 有居民表的agencyId 则匹配查询该组织下的 数据 //如果查询条件中 没有有居民表的agencyId,则查询该工作人员所属组织的信息
if (queryAgencyIdList.isEmpty()){ if (queryAgencyIdList.isEmpty() && queryGridIdList.isEmpty()){
CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId()); 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())) { 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 { } else {
staffOrgPath = staffInfoCacheResult.getAgencyId(); op = staffInfoCacheResult.getAgencyId();
} }
staffOrgPaths = Arrays.asList(op);
} else { } else {
formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName())); // 将组织id列表,转化为组织orgIdPath列表
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(queryAgencyIdList.get(NumConstant.ZERO)); staffOrgPaths = queryAgencyIdList.stream().map(agId -> {
if (agencyInfo == null){ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(agId);
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取组织信息失败"); if (agencyInfo == null) {
} String errorMsg = "查询机关单位失败:" + agId;
agencyId = agencyInfo.getId(); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), errorMsg, errorMsg);
staffOrgPath = agencyInfo.getPids(); }
if (StringUtils.isBlank(staffOrgPath)){ return PidUtils.convertPid2OrgIdPath(agId, agencyInfo.getPids());
staffOrgPath = agencyId; }).collect(Collectors.toList());
}else{
staffOrgPath = staffOrgPath+StrConstant.COLON+agencyInfo.getId();
}
} }
// 查询列表展示项需要用到哪些子表 // 查询列表展示项需要用到哪些子表
Result<List<SubTableJoinDTO>> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1); Result<List<SubTableJoinDTO>> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1);
@ -976,14 +1001,19 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(); PageInfo<Map<String, Object>> pageInfo = new PageInfo<>();
if (null == formDTO.getIsPage() || formDTO.getIsPage()) { if (null == formDTO.getIsPage() || formDTO.getIsPage()) {
//分页 //分页
String finalStaffOrgPath = staffOrgPath; List<String> finalStaffOrgPath = staffOrgPaths;
List<String> finalAgencyIds = agencyIds;
pageInfo = PageHelper.startPage(formDTO.getPageNo(), pageInfo = PageHelper.startPage(formDTO.getPageNo(),
formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(),
formDTO.getFormCode(), formDTO.getFormCode(),
formDTO.getConditions(), formDTO.getConditions(),
resultColumns, resultColumns,
finalSubTables, finalSubTables,
agencyId, finalStaffOrgPath,null, formDTO.getKeyword(), finalAgencyIds,
finalStaffOrgPath,
queryGridIdList,
null,
formDTO.getKeyword(),
groupByTables)); groupByTables));
} else { } else {
List<Map<String, Object>> list = baseDao.selectListResiMap(formDTO.getCustomerId(), List<Map<String, Object>> list = baseDao.selectListResiMap(formDTO.getCustomerId(),
@ -991,8 +1021,10 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
formDTO.getConditions(), formDTO.getConditions(),
resultColumns, resultColumns,
finalSubTables, finalSubTables,
agencyId, agencyIds,
staffOrgPath,null, staffOrgPaths,
queryGridIdList,
null,
formDTO.getKeyword(), formDTO.getKeyword(),
groupByTables); groupByTables);
pageInfo.setTotal(CollectionUtils.isEmpty(list) ? NumConstant.ZERO : list.size()); pageInfo.setTotal(CollectionUtils.isEmpty(list) ? NumConstant.ZERO : list.size());
@ -3320,37 +3352,58 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
List<IcFormResColumnDTO> resultColumns = resultColumnRes.getData(); List<IcFormResColumnDTO> resultColumns = resultColumnRes.getData();
// 查询结果列对应的表: // 查询结果列对应的表:
Set<String> resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet()); Set<String> resultColumnTables = resultColumns.stream().map(IcFormResColumnDTO::getTableName).collect(Collectors.toSet());
List<String> 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))) Set<String> queryAgencyIdList = new HashSet<>();
.flatMap(o -> o.getColumnValue().stream()).collect(Collectors.toList()); Set<String> 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; List<String> staffOrgPaths;
String agencyId; List<String> agencyIds = null;
//如果查询条件中 有居民表的agencyId 则匹配查询该组织下的 数据 //如果查询条件中 没有有居民表的agencyId,则查询该工作人员所属组织的信息
if (queryAgencyIdList.isEmpty()){ if (queryAgencyIdList.isEmpty() && queryGridIdList.isEmpty()){
CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId()); 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())) { 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 { } else {
staffOrgPath = staffInfoCacheResult.getAgencyId(); op = staffInfoCacheResult.getAgencyId();
} }
staffOrgPaths = Arrays.asList(op);
} else { } else {
formDTO.getConditions().removeIf(o->IcResiUserConstant.IC_RESI_USER.equals(o.getTableName()) && "AGENCY_ID".equals(o.getColumnName())); // 将组织id列表,转化为组织orgIdPath列表
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(queryAgencyIdList.get(NumConstant.ZERO)); staffOrgPaths = queryAgencyIdList.stream().map(agId -> {
if (agencyInfo == null){ AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(agId);
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取组织信息失败"); if (agencyInfo == null) {
} String errorMsg = "查询机关单位失败:" + agId;
agencyId = agencyInfo.getId(); throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), errorMsg, errorMsg);
staffOrgPath = agencyInfo.getPids(); }
if (StringUtils.isBlank(staffOrgPath)){ return PidUtils.convertPid2OrgIdPath(agId, agencyInfo.getPids());
staffOrgPath = agencyId; }).collect(Collectors.toList());
}else{
staffOrgPath = staffOrgPath+StrConstant.COLON+agencyInfo.getId();
}
} }
// 查询列表展示项需要用到哪些子表 // 查询列表展示项需要用到哪些子表
Result<List<SubTableJoinDTO>> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1); Result<List<SubTableJoinDTO>> subTablesRes = operCustomizeOpenFeignClient.querySubTables(queryDTO1);
List<SubTableJoinDTO> subTables = subTablesRes.getData(); List<SubTableJoinDTO> subTables = subTablesRes.getData();
@ -3378,14 +3431,19 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(); PageInfo<Map<String, Object>> pageInfo = new PageInfo<>();
if (null == formDTO.getIsPage() || formDTO.getIsPage()) { if (null == formDTO.getIsPage() || formDTO.getIsPage()) {
//分页 //分页
String finalStaffOrgPath = staffOrgPath; List<String> finalStaffOrgPath = staffOrgPaths;
List<String> finalAgencyIds = agencyIds;
pageInfo = PageHelper.startPage(formDTO.getPageNo(), pageInfo = PageHelper.startPage(formDTO.getPageNo(),
formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.selectListResiMap(formDTO.getCustomerId(),
formDTO.getFormCode(), formDTO.getFormCode(),
formDTO.getConditions(), formDTO.getConditions(),
resultColumns, resultColumns,
finalSubTables, finalSubTables,
agencyId, finalStaffOrgPath,null, formDTO.getKeyword(), finalAgencyIds,
finalStaffOrgPath,
queryGridIdList,
null,
formDTO.getKeyword(),
groupByTables)); groupByTables));
} else { } else {
List<Map<String, Object>> list = baseDao.selectListResiMap(formDTO.getCustomerId(), List<Map<String, Object>> list = baseDao.selectListResiMap(formDTO.getCustomerId(),
@ -3393,8 +3451,10 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
formDTO.getConditions(), formDTO.getConditions(),
resultColumns, resultColumns,
finalSubTables, finalSubTables,
agencyId, agencyIds,
staffOrgPath,null, staffOrgPaths,
queryGridIdList,
null,
formDTO.getKeyword(), formDTO.getKeyword(),
groupByTables); groupByTables);
pageInfo.setTotal(CollectionUtils.isEmpty(list) ? NumConstant.ZERO : list.size()); pageInfo.setTotal(CollectionUtils.isEmpty(list) ? NumConstant.ZERO : list.size());

19
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -90,7 +90,24 @@
<if test="resultTableName != null and resultTableName != ''"> <if test="resultTableName != null and resultTableName != ''">
AND ${resultTableName}.ID IS NOT NULL AND ${resultTableName}.ID IS NOT NULL
</if> </if>
and ic_resi_user.pids like concat(#{staffOrgPath},'%') <!-- orgIdPath过滤 -->
and (
<foreach collection="staffOrgPaths" item="orgIdPath" separator="or">
ic_resi_user.pids like concat(#{orgIdPath},'%')
</foreach>
<if test='staffOrgPaths != null and staffOrgPaths.size() > 0 and gridIds != null and gridIds.size() > 0'>
or
</if>
<!-- 网格id过滤 -->
<if test="gridIds != null and gridIds.size() > 0">
ic_resi_user.GRID_ID in (
<foreach collection="gridIds" item="gridId" separator=",">
#{gridId}
</foreach>
)
</if>
)
<if test="null != conditions and conditions.size() > 0"> <if test="null != conditions and conditions.size() > 0">
<foreach item="subCondition" collection="conditions" open="" separator="" close=""> <foreach item="subCondition" collection="conditions" open="" separator="" close="">
<if test="null != subCondition.columnValue and subCondition.columnValue.size() > 0"> <if test="null != subCondition.columnValue and subCondition.columnValue.size() > 0">

Loading…
Cancel
Save