Explorar o código

feat: 实现不动产资源地图查询地区树形接口

weijianghai hai 1 ano
pai
achega
8d8d5a9e87

+ 8 - 0
src/main/java/com/nokia/financeapi/controller/house/HouseResourceMapController.java

@@ -5,6 +5,7 @@ import com.nokia.financeapi.pojo.dto.GetBuildingAreaStatDto;
 import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
 import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
 import com.nokia.financeapi.pojo.vo.GetLandBuildingStatVo;
+import com.nokia.financeapi.pojo.vo.TreeAreaVo;
 import com.nokia.financeapi.service.house.HouseResourceMapService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -37,4 +38,11 @@ public class HouseResourceMapController {
     public R<List<GetLandBuildingStatVo>> getLandBuildingStat(@Valid @RequestBody GetLandBuildingStatDto dto) {
         return houseResourceMapService.getLandBuildingStat(dto);
     }
+
+    @Operation(summary = "查询地区树形")
+    @PostMapping("treeArea")
+    public R<TreeAreaVo> treeArea() {
+        return houseResourceMapService.treeArea();
+    }
+
 }

+ 16 - 0
src/main/java/com/nokia/financeapi/dao/house/AreaDao.java

@@ -0,0 +1,16 @@
+package com.nokia.financeapi.dao.house;
+
+import com.nokia.financeapi.pojo.po.AreaPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface AreaDao {
+    /**
+     * 获取所有地区
+     */
+    @Select("select * from house.area order by area_id")
+    List<AreaPo> getAll();
+}

+ 26 - 0
src/main/java/com/nokia/financeapi/pojo/po/AreaPo.java

@@ -0,0 +1,26 @@
+package com.nokia.financeapi.pojo.po;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class AreaPo {
+
+    /**
+     * 地区id
+     */
+    private Integer areaId;
+    /**
+     * 地区名称
+     */
+    private String areaName;
+    /**
+     * 父级id
+     */
+    private Integer parentId;
+    /**
+     * 地区级别
+     */
+    private Integer areaGrade;
+}

+ 25 - 0
src/main/java/com/nokia/financeapi/pojo/vo/TreeAreaVo.java

@@ -0,0 +1,25 @@
+package com.nokia.financeapi.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class TreeAreaVo {
+    @Schema(description = "地区名称", example = "石家庄")
+    private String label;
+    @Schema(description = "地区id", example = "130100")
+    private Integer value;
+    @Schema(description = "子地区列表")
+    private List<TreeAreaVo> children;
+
+    public TreeAreaVo(String label, Integer value) {
+        this.label = label;
+        this.value = value;
+    }
+}

+ 54 - 1
src/main/java/com/nokia/financeapi/service/house/HouseResourceMapService.java

@@ -1,22 +1,30 @@
 package com.nokia.financeapi.service.house;
 
 import com.nokia.financeapi.common.R;
+import com.nokia.financeapi.dao.house.AreaDao;
 import com.nokia.financeapi.dao.house.HouseResourceMapMapper;
 import com.nokia.financeapi.pojo.dto.GetBuildingAreaStatDto;
 import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
+import com.nokia.financeapi.pojo.po.AreaPo;
 import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
 import com.nokia.financeapi.pojo.vo.GetLandBuildingStatVo;
+import com.nokia.financeapi.pojo.vo.TreeAreaVo;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class HouseResourceMapService {
     private final HouseResourceMapMapper houseResourceMapMapper;
+    private final AreaDao areaDao;
 
-    public HouseResourceMapService(HouseResourceMapMapper houseResourceMapMapper) {
+    public HouseResourceMapService(HouseResourceMapMapper houseResourceMapMapper, AreaDao areaDao) {
         this.houseResourceMapMapper = houseResourceMapMapper;
+        this.areaDao = areaDao;
     }
 
     public R<GetBuildingAreaStatVo> getBuildingAreaStat(GetBuildingAreaStatDto dto) {
@@ -29,4 +37,49 @@ public class HouseResourceMapService {
         }
         return R.ok(houseResourceMapMapper.getCityLandBuildingStat());
     }
+
+    public R<TreeAreaVo> treeArea() {
+        // 查询所有地区
+        List<AreaPo> areas = areaDao.getAll();
+        Map<Integer, List<AreaPo>> parentMap = getAreaParentMap(areas);
+        // 地市列表
+        List<AreaPo> cityList = parentMap.get(130000);
+        TreeAreaVo vo = new TreeAreaVo();
+        vo.setLabel("河北省");
+        vo.setValue(130000);
+        List<TreeAreaVo> cityVoList = new ArrayList<>();
+        vo.setChildren(cityVoList);
+        for (AreaPo tt : cityList) {
+            List<TreeAreaVo> districtVoList = new ArrayList<>();
+            TreeAreaVo cityVo = new TreeAreaVo();
+            cityVo.setLabel(tt.getAreaName());
+            cityVo.setValue(tt.getAreaId());
+            cityVo.setChildren(districtVoList);
+            cityVoList.add(cityVo);
+            // 区县列表
+            List<AreaPo> districtList = parentMap.get(tt.getAreaId());
+            for (AreaPo ttt : districtList) {
+                TreeAreaVo districtVo = new TreeAreaVo();
+                districtVo.setLabel(ttt.getAreaName());
+                districtVo.setValue(ttt.getAreaId());
+                districtVoList.add(districtVo);
+            }
+        }
+        return R.ok(vo);
+    }
+
+    /**
+     * 得到地区父地图
+     *
+     * @param areas 区域
+     */
+    private Map<Integer, List<AreaPo>> getAreaParentMap(List<AreaPo> areas) {
+        Map<Integer, List<AreaPo>> parentMap = new HashMap<>();
+        for (AreaPo t : areas)
+        {
+            parentMap.putIfAbsent(t.getParentId(), new ArrayList<>());
+            parentMap.get(t.getParentId()).add(t);
+        }
+        return parentMap;
+    }
 }

+ 7 - 0
src/test/java/com/nokia/financeapi/FinanceApiApplicationTests.java

@@ -1,14 +1,21 @@
 package com.nokia.financeapi;
 
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.test.context.ActiveProfiles;
 
 @ActiveProfiles("test")
 @SpringBootTest
 class FinanceApiApplicationTests {
 
+    @Autowired
+    JdbcTemplate jdbcTemplate;
+
     @Test
     void contextLoads() {
+        String sql = "SELECT * FROM pg_database";
+        System.out.println(jdbcTemplate.queryForList(sql));
     }
 }