czh 2 лет назад
Родитель
Сommit
61acc0415d

+ 3 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -92,6 +92,9 @@ public class Global {
     /**redis区域信息前缀*/
     public static final String REDIS_AREA_PREFIX = "areaInfo:";
 
+    /**redis区域信息前缀*/
+    public static final String REDIS_GROUP_AREA_PREFIX = "areaInfo:group:";
+
     /**redis用户菜单信息前缀*/
     public static final String REDIS_SYS_MENU_PREFIX = "sysMenu:";
 

+ 13 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/SysAreaController.java

@@ -1,6 +1,7 @@
 package com.sckw.system.controller;
 
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.system.model.vo.req.FindAreaTreeReqVo;
 import com.sckw.system.service.SysAreaService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -33,4 +34,16 @@ public class SysAreaController {
         return HttpResult.ok(list);
     }
 
+    /**
+     * @param reqVo 当前区域code
+     * @return HttpResult
+     * @desc: 查区域树
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    @PostMapping("/findTree")
+    public HttpResult findTree(@RequestBody FindAreaTreeReqVo reqVo) throws Exception {
+        return HttpResult.ok(sysAreaService.findTree(reqVo));
+    }
+
 }

+ 46 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteSystemServiceImpl.java

@@ -1,6 +1,7 @@
 package com.sckw.system.dubbo;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
@@ -12,6 +13,7 @@ import com.sckw.system.api.model.dto.res.*;
 import com.sckw.system.api.model.pojo.DeptInfoPojo;
 import com.sckw.system.dao.SysDictDao;
 import com.sckw.system.model.*;
+import com.sckw.system.model.vo.res.FindAreaTreeResVo;
 import com.sckw.system.service.KwsUserService;
 import com.sckw.system.service.SysAreaService;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -492,4 +494,48 @@ public class RemoteSystemServiceImpl implements RemoteSystemService {
         return child;
     }
 
+
+    /**
+     * @param code 区域code
+     * @return List<FindAreaTreeResVo>
+     * @desc: 查区域树
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    public List<FindAreaTreeResVo> queryAreaTree(Integer code) {
+        String key = Global.REDIS_GROUP_AREA_PREFIX + code;
+        String areaCache = RedissonUtils.getString(key);
+        if (StringUtils.isBlank(areaCache)) {
+            List<FindAreaTreeResVo> findAreaTreeResVos = queryAreaGroup(code);
+            RedissonUtils.putString(key, JSON.toJSONString(findAreaTreeResVos), Global.COMMON_EXPIRE);
+            return findAreaTreeResVos;
+        }
+
+        RedissonUtils.putString(key, areaCache, Global.COMMON_EXPIRE);
+        return JSONArray.parseArray(areaCache, FindAreaTreeResVo.class);
+    }
+
+    /**
+     * @param code 区域code
+     * @return List<FindAreaTreeResVo>
+     * @desc: 查区域树
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    private List<FindAreaTreeResVo> queryAreaGroup(Integer code) {
+        Map<String, Object> params = new HashMap<>(1);
+        params.put("pcode", code);
+        List<Map<String, Object>> list = sysAreaService.findList(params);
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+
+        List<FindAreaTreeResVo> result = BeanUtils.copyToList(list, FindAreaTreeResVo.class);
+        for (FindAreaTreeResVo findAreaTreeResVo : result) {
+            findAreaTreeResVo.setChild(queryAreaGroup(findAreaTreeResVo.getCode()));
+        }
+        return result;
+    }
+
+
 }

+ 24 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/FindAreaTreeReqVo.java

@@ -0,0 +1,24 @@
+package com.sckw.system.model.vo.req;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 查区域树
+ * @date 2023/7/31
+ */
+@Data
+public class FindAreaTreeReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1928371736958331740L;
+
+    /**
+     * 区域code
+     */
+    private Integer code;
+
+}

+ 80 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/FindAreaTreeResVo.java

@@ -0,0 +1,80 @@
+package com.sckw.system.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 查区域树
+ * @date 2023/7/31
+ */
+@Data
+public class FindAreaTreeResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2739584493144515891L;
+
+    /**
+     * 地区ID
+     */
+    private Integer code;
+
+    /**
+     * 全国省_地区ID
+     */
+    private Integer pcode;
+
+    /**
+     * 地区对应省份id
+     */
+    private Integer provinceCode;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 简称
+     */
+    private String shortName;
+
+    /**
+     * 上级地区
+     */
+    private String mergerName;
+
+    /**
+     * 省
+     */
+    private String province;
+
+    /**
+     * 市
+     */
+    private String city;
+
+    /**
+     * 级别
+     */
+    private Integer level;
+
+    /**
+     * 经度
+     */
+    private String lng;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 子区域
+     */
+    private List<FindAreaTreeResVo> child;
+
+}

+ 23 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/SysAreaService.java

@@ -1,12 +1,14 @@
 package com.sckw.system.service;
 
 import com.sckw.system.dao.SysAreaDao;
+import com.sckw.system.dubbo.RemoteSystemServiceImpl;
 import com.sckw.system.model.SysArea;
+import com.sckw.system.model.vo.req.FindAreaTreeReqVo;
+import com.sckw.system.model.vo.res.FindAreaTreeResVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 行政区域service接口
@@ -19,6 +21,8 @@ public class SysAreaService {
     @Autowired
     SysAreaDao sysAreaDao;
 
+    @Autowired
+    private RemoteSystemServiceImpl remoteSystemService;
     /**
      * 查询
      * @param params
@@ -28,6 +32,7 @@ public class SysAreaService {
         return sysAreaDao.findList(params);
     }
 
+
     /**
      * @desc: 根据id获取
      * @author: yzc
@@ -38,4 +43,20 @@ public class SysAreaService {
     public SysArea selectById(Integer code) {
         return sysAreaDao.selectById(code);
     }
+
+
+    /**
+     * @param reqVo pcode
+     * @return List<FindAreaTreeResVo>
+     * @desc: 查区域树
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    public List<FindAreaTreeResVo> findTree(FindAreaTreeReqVo reqVo) {
+        int code = 100000;
+        if (Objects.nonNull(reqVo.getCode())) {
+            code = reqVo.getCode();
+        }
+        return remoteSystemService.queryAreaTree(code);
+    }
 }