From 9bba06de160435e2515789e0c2e0e744ae013a1a Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 07 Feb 2024 13:01:10 +0800
Subject: [PATCH] 场所过滤修改,区域查询修改

---
 src/main/java/org/springblade/modules/system/mapper/RegionMapper.java              |    6 +
 src/main/java/org/springblade/common/cache/DictBizCache.java                       |    2 
 src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java     |   49 ++++++++++--
 src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java  |    4 
 src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java             |    2 
 src/main/java/org/springblade/modules/system/controller/DictBizController.java     |    4 
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml                 |   75 ++++++++++++++----
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java                |    8 +
 src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml               |   24 +----
 src/main/java/org/springblade/modules/system/service/IDictBizService.java          |    2 
 src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml              |    3 
 src/main/java/org/springblade/modules/place/vo/PlaceVO.java                        |    4 +
 src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java   |   36 ++++++++
 src/main/java/org/springblade/common/cache/SysCache.java                           |    2 
 src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java |    2 
 15 files changed, 164 insertions(+), 59 deletions(-)

diff --git a/src/main/java/org/springblade/common/cache/DictBizCache.java b/src/main/java/org/springblade/common/cache/DictBizCache.java
index 180b49d..802c0c8 100644
--- a/src/main/java/org/springblade/common/cache/DictBizCache.java
+++ b/src/main/java/org/springblade/common/cache/DictBizCache.java
@@ -110,7 +110,7 @@
 	 */
 	public static List<DictBiz> getList(String code) {
 		String keyPrefix = DICT_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
-		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> dictService.getList(code));
+		return CacheUtil.get(DICT_CACHE, keyPrefix, code, () -> dictService.getList(code,null));
 	}
 
 }
diff --git a/src/main/java/org/springblade/common/cache/SysCache.java b/src/main/java/org/springblade/common/cache/SysCache.java
index 451b0ad..190da4b 100644
--- a/src/main/java/org/springblade/common/cache/SysCache.java
+++ b/src/main/java/org/springblade/common/cache/SysCache.java
@@ -341,13 +341,11 @@
 		//所有行政区划code
 		List<String> allRegionList = new ArrayList<>();
 		deptIdList.forEach(id->{
-
 			List<String> list = new ArrayList<>();
 			// 查询对应的区域编号code
 			Dept dept = deptService.getById(id);
 			if (null!=dept && !Strings.isBlank(dept.getRegionCode()) && !AuthUtil.isAdministrator()){
 				list = getRegionChildCodes(dept.getRegionCode());
-
 				//行政区划不为空添加进集合
 				if (list.size()>0){
 					allRegionList.addAll(list);
diff --git a/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java b/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
index 90d0d88..3cb6a37 100644
--- a/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
+++ b/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
@@ -119,7 +119,7 @@
 	private void handleDictBiz(List<HouseholdVO> householdList) {
 		if (householdList.size()>0){
 			// 查询角色关系字典
-			List<DictBiz> dictBizList = dictBizService.getList("roleRelation");
+			List<DictBiz> dictBizList = dictBizService.getList("roleRelation",null);
 			if (dictBizList.size()>0) {
 				// 遍历
 				for (HouseholdVO householdVO : householdList) {
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
index a5efc5b..b977333 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
@@ -40,16 +40,18 @@
 	 *
 	 * @param page
 	 * @param place
-	 * @param houseCodeList
+	 * @param gridCodeList
 	 * @param regionChildCodesList
+	 * @param isAdministrator
 	 * @param isAdministrator
 	 * @return
 	 */
 	List<PlaceVO> selectNinePlacePage(IPage page,
 								  @Param("place") PlaceVO place,
-								  @Param("houseCodeList") List<String> houseCodeList,
+								  @Param("gridCodeList") List<String> gridCodeList,
 								  @Param("regionChildCodesList") List<String> regionChildCodesList,
-								  @Param("isAdministrator") Integer isAdministrator);
+								  @Param("isAdministrator") Integer isAdministrator,
+								  @Param("nineTypeList") List<String> nineTypeList);
 
 
 	/**
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
index 7da6da5..5cae2f2 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
@@ -105,15 +105,15 @@
         jpe.confirm_flag confirmFlag,
         bus.`name` AS policeName,
         bus.phone AS policePhone,
-        IFNULL(jda.address_name,jp.location) addressName,
+        jp.location as addressName,
         jpag.pcs_name deptName
         from jczz_place jp
+        left join jczz_grid jg on jg.grid_code = jp.grid_code and jg.is_deleted = 0
         left join blade_user bu on bu.id = jp.principal_user_id and bu.is_deleted = 0
         left join jczz_place_ext jpe on jpe.place_id=jp.id and jpe.is_deleted = 0
         LEFT JOIN jczz_police_affairs_grid jpag on jp.jw_grid_code= jpag.jw_grid_code
         left join blade_region br on br.code = jpag.community_code
         LEFT JOIN blade_user bus on bus.id = jpag.police_user_id
-        LEFT JOIN jczz_doorplate_address jda on jda.address_code=jp.house_code
         left join (
         select a.* from jczz_place_poi_label a inner join
         (
@@ -144,11 +144,12 @@
         <if test="place.policeName!=null and place.policeName!=''">
             and bus.name like concat('%',#{place.policeName},'%')
         </if>
-
-        <if test="place.nineType!=null and place.nineType!=''">
-            and jp.nine_type = #{place.nineType}
+        <if test="nineTypeList!=null and nineTypeList.size()>0">
+            and jp.nine_type in
+            <foreach collection="nineTypeList" separator="," open="(" close=")" item="nineType">
+                #{nineType}
+            </foreach>
         </if>
-
         <if test="place.isFront!=null and place.isFront!=''">
             and jp.is_front = #{place.isFront}
         </if>
@@ -173,20 +174,60 @@
         <if test="place.isPerfect==2">
             and jp.status = 2
         </if>
-        <if test="houseCodeList != null and houseCodeList.size()>0">
-            and jp.house_code in
-            <foreach collection="houseCodeList" item="houseCode" separator ="," open="("  close=")">
-                #{houseCode}
-            </foreach>
-        </if>
         <if test="isAdministrator==2">
             <choose>
-                <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
-                    and jg.grid_code in
-                    <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
-                        #{code}
-                    </foreach>
+                <when test="place.roleName != null and place.roleName != ''">
+                    <if test="place.roleName=='wgy'">
+                        <choose>
+                            <when test="gridCodeList !=null and gridCodeList.size()>0">
+                                and jp.grid_code in
+                                <foreach collection="gridCodeList" item="code" open="(" close=")" separator=",">
+                                    #{code}
+                                </foreach>
+                            </when>
+                            <otherwise>
+                                and jp.grid_code in ('')
+                            </otherwise>
+                        </choose>
+                    </if>
+                    <if test="place.roleName=='mj'">
+                        <choose>
+                            <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
+                                and jpag.community_code in
+                                <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                    #{code}
+                                </foreach>
+                            </when>
+                            <otherwise>
+                                and jpag.community_code in ('')
+                            </otherwise>
+                        </choose>
+                    </if>
                 </when>
+                <otherwise>
+                    <choose>
+                        <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
+                            and
+                            (
+                            jg.grid_code in
+                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                #{code}
+                            </foreach>
+                            or
+                            jpag.community_code in
+                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
+                                #{code}
+                            </foreach>
+                            )
+                        </when>
+                        <otherwise>
+                            and
+                            (
+                            jg.grid_code in ('') or jpag.community_code in in ('')
+                            )
+                        </otherwise>
+                    </choose>
+                </otherwise>
             </choose>
         </if>
         order by jp.create_time desc,jp.id desc
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
index 90aa577..2e78c5c 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
@@ -59,6 +59,7 @@
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.service.IDeptService;
 import org.springblade.modules.system.service.IDictBizService;
+import org.springblade.modules.system.service.IRegionService;
 import org.springblade.modules.system.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -66,6 +67,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 场所表 服务实现类
@@ -104,6 +106,9 @@
 
 	@Autowired
 	private IHouseholdService householdService;
+
+	@Autowired
+	private IDictBizService dictBizService;
 
 	/**
 	 * 自定义列表查询
@@ -1188,17 +1193,43 @@
 	 */
 	@Override
 	public IPage<PlaceVO> selectNinePlacePage(IPage<PlaceVO> page, PlaceVO place) {
-		// todo
-		List<String> regionChildCodesList = new ArrayList<>();//SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
-		Integer isAdministrator = AuthUtil.isAdministrator() == true ? 1 : 2;
-		List<String> list = new ArrayList<>();
-		if (null != place.getRoleName() && !place.getRoleName().equals("")) {
-			if (place.getRoleName().equals("网格员")) {
-				// 查询对应的房屋地址code
-				list = gridService.getAddressCodeListByUserId(AuthUtil.getUserId());
+		String roleName = SpringUtils.getRequestParam("roleName");
+		String communityCode = SpringUtils.getRequestParam("communityCode");
+		if (!Strings.isBlank(communityCode)){
+			// 校验社区编号是否合规
+			if(null!=SpringUtils.getBean(IRegionService.class).getById(communityCode)) {
+				place.setCommunityCode(communityCode);
 			}
 		}
-		List<PlaceVO> placeVOS = baseMapper.selectNinePlacePage(page, place, list, regionChildCodesList, isAdministrator);
+		List<String> regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
+		Integer isAdministrator = AuthUtil.isAdministrator()==true?1:2;
+		// 网格编号集合
+		List<String> gridCodeList = new ArrayList<>();
+		// 民警角色
+		if (!Strings.isBlank(roleName)){
+			place.setRoleName(roleName);
+			if(roleName.equals("mj")) {
+				regionChildCodesList = SpringUtil.getBean(IPoliceAffairsGridService.class).getCommunityCodeListByUserId(AuthUtil.getUserId());
+			}
+			if (roleName.equals("wgy")) {
+				gridCodeList = SpringUtil.getBean(IGridService.class).getGridListByUserId(AuthUtil.getUserId());
+			}
+		}
+		List<String> strings = new ArrayList<>();
+		if (null!=place.getNineType()){
+			QueryWrapper<DictBiz> queryWrapper = new QueryWrapper<>();
+			queryWrapper.eq("is_deleted",0).eq("dict_key",place.getNineType()).eq("code","nineType");
+			// 先查询当前
+			DictBiz one = dictBizService.getOne(queryWrapper);
+			// 查询本身和子集的key
+			List<DictBiz> list = dictBizService.getList("nineType", one.getId());
+			if (list.size()==0){
+				strings.add(place.getNineType().toString());
+			}else {
+				strings = list.stream().map(DictBiz::getDictKey).collect(Collectors.toList());
+			}
+		}
+		List<PlaceVO> placeVOS = baseMapper.selectNinePlacePage(page, place, gridCodeList, regionChildCodesList, isAdministrator,strings);
 		// 返回
 		return page.setRecords(placeVOS);
 	}
diff --git a/src/main/java/org/springblade/modules/place/vo/PlaceVO.java b/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
index fd83d1a..1d7e289 100644
--- a/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
+++ b/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
@@ -149,5 +149,9 @@
 	private String deptName;
 	@ApiModelProperty(value = "地址")
 	private String addressName;
+	/**
+	 * 社区编号
+	 */
+	private String communityCode;
 
 }
diff --git a/src/main/java/org/springblade/modules/system/controller/DictBizController.java b/src/main/java/org/springblade/modules/system/controller/DictBizController.java
index 89bf79c..733f1f6 100644
--- a/src/main/java/org/springblade/modules/system/controller/DictBizController.java
+++ b/src/main/java/org/springblade/modules/system/controller/DictBizController.java
@@ -161,7 +161,7 @@
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "获取字典", notes = "获取字典")
 	public R<List<DictBiz>> dictionary(String code) {
-		List<DictBiz> tree = dictService.getList(code);
+		List<DictBiz> tree = dictService.getList(code,null);
 		return R.data(tree);
 	}
 
@@ -172,7 +172,7 @@
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "获取字典树", notes = "获取字典树")
 	public R<List<DictBizVO>> dictionaryTree(String code) {
-		List<DictBiz> tree = dictService.getList(code);
+		List<DictBiz> tree = dictService.getList(code,null);
 		return R.data(DictBizWrapper.build().listNodeVO(tree));
 	}
 
diff --git a/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java b/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java
index 9a571ce..49f7e51 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java
@@ -44,7 +44,7 @@
 	 * @param code 字典编号
 	 * @return
 	 */
-	List<DictBiz> getList(String code);
+	List<DictBiz> getList(String code,Long parentId);
 
 	/**
 	 * 获取树形节点
diff --git a/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml b/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml
index 1c1c2ae..2a95d91 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml
@@ -53,6 +53,9 @@
             and parent_id > 0
             and is_sealed = 0
             and is_deleted = 0
+        <if test="param2!=null">
+            and parent_id = #{param2}
+        </if>
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
diff --git a/src/main/java/org/springblade/modules/system/mapper/RegionMapper.java b/src/main/java/org/springblade/modules/system/mapper/RegionMapper.java
index eb0f7a0..dcbbfd7 100644
--- a/src/main/java/org/springblade/modules/system/mapper/RegionMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/RegionMapper.java
@@ -106,4 +106,10 @@
 	 */
 	@MapKey(value = "id")
 	Map<String, TreeStringNode> getPoliceTreeList();
+
+	/**
+	 * 查询公安相关的区域数据
+	 * @return
+	 */
+	List<Region> getPoliceList();
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml b/src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml
index 3493418..ffbffac 100644
--- a/src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml
@@ -246,25 +246,11 @@
         right join jczz_grid jg on jg.community_code = br.village_code and jg.is_deleted = 0
         where br.ancestors like concat('%',#{regionCode},'%')
         )
-        union all
-        (
-            SELECT
-            t1.id,t1.parentId,t1.name
-            FROM
-                (
-                SELECT
-                    @ids AS ids,
-                    ( SELECT @ids := GROUP_CONCAT( id ) FROM police_region WHERE FIND_IN_SET( parentId, @ids ) ) AS cids
-                FROM
-                    police_region
-                WHERE
-                    @ids IS NOT NULL
-                    AND @ids := #{regionCode}
-                ) id,
-                police_region t1
-            WHERE
-                FIND_IN_SET(t1.parentId,ids)
-        )
+    </select>
+
+    <!--查询公安相关的区域数据-->
+    <select id="getPoliceList" resultType="org.springblade.modules.system.entity.Region">
+        SELECT id as code,parentId as parent_code,name,'' as ancestors,null as region_level,1 as sort FROM police_region
     </select>
 
 
diff --git a/src/main/java/org/springblade/modules/system/service/IDictBizService.java b/src/main/java/org/springblade/modules/system/service/IDictBizService.java
index faafecf..5583d53 100644
--- a/src/main/java/org/springblade/modules/system/service/IDictBizService.java
+++ b/src/main/java/org/springblade/modules/system/service/IDictBizService.java
@@ -61,7 +61,7 @@
 	 * @param code 字典编号
 	 * @return
 	 */
-	List<DictBiz> getList(String code);
+	List<DictBiz> getList(String code,Long parentId);
 
 	/**
 	 * 新增或修改
diff --git a/src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java
index 7b20b5e..2ce4115 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java
@@ -68,8 +68,8 @@
 	}
 
 	@Override
-	public List<DictBiz> getList(String code) {
-		return baseMapper.getList(code);
+	public List<DictBiz> getList(String code,Long parentId) {
+		return baseMapper.getList(code,parentId);
 	}
 
 	@Override
diff --git a/src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java
index 938b5ce..b7efe4c 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java
@@ -17,8 +17,10 @@
 package org.springblade.modules.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.util.Strings;
 import org.springblade.common.cache.SysCache;
@@ -43,6 +45,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import static org.springblade.common.cache.RegionCache.*;
 
@@ -230,6 +233,37 @@
 	 */
 	@Override
 	public List<Region> getRegionChild(String regionCode) {
-		return baseMapper.getRegionChildList(regionCode);
+		// 创建区域对象
+		List<Region> list = new ArrayList<>();
+		// 查询公安相关的区域数据
+		List<Region> regionList = baseMapper.getPoliceList();
+		if (regionList.size()>0) {
+			List<Region> policeList = treeRegionList(regionList,regionCode, list);
+			list.addAll(policeList);
+		}
+		// 查询综治区域集合
+		List<Region> regionChildList = baseMapper.getRegionChildList(regionCode);
+		list.addAll(regionChildList);
+		//  返回
+		return list;
+	}
+
+	/**
+	 * 获取某个父节点下面的所有子节点
+	 * @param regionList
+	 * @param parentCode
+	 * @param list
+	 * @return
+	 */
+	public static List<Region> treeRegionList( List<Region> regionList, String parentCode,List<Region> list){
+		for(Region region: regionList){
+			//遍历出父id等于参数的id,add进子节点集合
+			if(region.getParentCode().equals(parentCode)){
+				list.add(region);
+				//递归遍历下一级
+				treeRegionList(regionList,region.getCode(),list);
+			}
+		}
+		return list;
 	}
 }

--
Gitblit v1.9.3