Browse Source

feat: 不动产资源地图获取出租收入统计修改为查询数据库表

weijianghai 1 year ago
parent
commit
d11e5af5e3

+ 3 - 2
src/main/java/com/nokia/financeapi/controller/house/HouseResourceMapController.java

@@ -7,6 +7,7 @@ import com.nokia.financeapi.pojo.dto.GetBuildingOptionsDto;
 import com.nokia.financeapi.pojo.dto.GetBuildingRepairStatDto;
 import com.nokia.financeapi.pojo.dto.GetHouseNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
+import com.nokia.financeapi.pojo.dto.GetRentOutStatDto;
 import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingMapVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingOptionsVo;
@@ -75,8 +76,8 @@ public class HouseResourceMapController {
 
     @Operation(summary = "获取出租收入统计")
     @PostMapping("/getRentOutStat")
-    public R<List<GetRentOutStatVo>> getRentOutStat() {
-        return houseResourceMapService.getRentOutStat();
+    public R<List<GetRentOutStatVo>> getRentOutStat(@Valid @RequestBody GetRentOutStatDto dto) {
+        return houseResourceMapService.getRentOutStat(dto);
     }
 
     @Operation(summary = "获取建筑选项列表")

+ 31 - 0
src/main/java/com/nokia/financeapi/dao/common/AreaDao.java

@@ -0,0 +1,31 @@
+package com.nokia.financeapi.dao.common;
+
+import com.nokia.financeapi.pojo.po.common.AreaPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface AreaDao {
+    /**
+     * 查询地市
+     */
+    @Select("""
+select * from common.area where area_grade = 1 order by area_id
+""")
+    List<AreaPo> getCities();
+
+    /**
+     * 查询区县
+     */
+    @Select("""
+select * from common.area where area_grade = 2 order by parent_id, area_id
+""")
+    List<AreaPo> getDistricts();
+    /**
+     * 获取所有地区
+     */
+    @Select("select * from common.area order by area_id")
+    List<AreaPo> getAll();
+}

+ 26 - 0
src/main/java/com/nokia/financeapi/dao/common/OrganizationDao.java

@@ -0,0 +1,26 @@
+package com.nokia.financeapi.dao.common;
+
+import com.nokia.financeapi.pojo.po.common.OrganizationPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface OrganizationDao {
+    /**
+     * 查询二级组织机构
+     */
+    @Select("""
+select * from common.organization where grade = 1 order by order_num
+""")
+    List<OrganizationPo> getSecondOrgs();
+
+    /**
+     * 查询三级组织机构
+     */
+    @Select("""
+select * from common.organization where grade = 2 order by parent_id, order_num
+""")
+    List<OrganizationPo> getThirdOrgs();
+}

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

@@ -1,16 +0,0 @@
-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 common.area order by area_id")
-    List<AreaPo> getAll();
-}

+ 66 - 2
src/main/java/com/nokia/financeapi/dao/house/HouseResourceMapMapper.java

@@ -6,12 +6,14 @@ import com.nokia.financeapi.pojo.dto.GetBuildingOptionsDto;
 import com.nokia.financeapi.pojo.dto.GetBuildingRepairStatDto;
 import com.nokia.financeapi.pojo.dto.GetHouseNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
+import com.nokia.financeapi.pojo.dto.GetRentOutStatDto;
 import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingMapVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingOptionsVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingRepairStatVo;
 import com.nokia.financeapi.pojo.vo.GetHouseNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetLandBuildingStatVo;
+import com.nokia.financeapi.pojo.vo.GetRentOutStatVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -367,7 +369,7 @@ select
 from
     t3
 """)
-    List<GetBuildingRepairStatVo> getCityRepairStat();
+    List<GetBuildingRepairStatVo> getSecondUnitRepairStat();
 
     /**
      * 统计最新年份某个地市的各个区县的维修费
@@ -421,7 +423,7 @@ from
 order by
     total_sum
 """)
-    List<GetBuildingRepairStatVo> getDistrictRepairStat(@Param("dto") GetBuildingRepairStatDto dto);
+    List<GetBuildingRepairStatVo> getThirdUnitRepairStat(@Param("dto") GetBuildingRepairStatDto dto);
 
     /**
      * 获取不动产公告
@@ -622,4 +624,66 @@ order by
     building_area desc
 """)
     List<GetBuildingMapVo> getSbbBuildings(@Param("dto") GetBuildingMapDto dto);
+
+    @Select("""
+with
+t101 as (
+select
+    *
+from
+    house.rent_out_income_stat
+where
+    (city_name is null
+        or city_name = '')
+    and year_month = (
+    select
+        max(year_month)
+    from
+        house.rent_out_income_stat)
+),
+t102 as (
+select
+    *
+from t101 left join house.second_unit_sort on t101.area_name = house.second_unit_sort.second_unit
+order by house.second_unit_sort.sort desc
+),
+t103 as (
+select
+area_name as unit,
+income_all as income,
+budget_finish_rate * 100 as finishing_rate
+from t102
+)
+select * from t103
+""")
+    List<GetRentOutStatVo> getSecondUnitRentOutIncomeStat(@Param("dto") GetRentOutStatDto dto);
+
+    @Select("""
+with
+t101 as (
+select
+    *
+from
+    house.rent_out_income_stat
+where
+    city_name is not null
+    and city_name != ''
+    and year_month = (
+    select
+        max(year_month)
+    from
+        house.rent_out_income_stat)
+    and area_name = #{dto.city}
+),
+t102 as (
+select
+city_name as unit,
+income_all as income,
+budget_finish_rate * 100 as finishing_rate
+from t101
+order by income_all
+)
+select * from t102
+""")
+    List<GetRentOutStatVo> getThirdUnitRentOutIncomeStat(@Param("dto") GetRentOutStatDto dto);
 }

+ 10 - 0
src/main/java/com/nokia/financeapi/pojo/dto/GetRentOutStatDto.java

@@ -0,0 +1,10 @@
+package com.nokia.financeapi.pojo.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class GetRentOutStatDto {
+    @Schema(description = "地市,不传默认全省", example = "石家庄")
+    private String city;
+}

+ 2 - 14
src/main/java/com/nokia/financeapi/pojo/po/AreaPo.java → src/main/java/com/nokia/financeapi/pojo/po/common/AreaPo.java

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

+ 15 - 0
src/main/java/com/nokia/financeapi/pojo/po/common/OrganizationPo.java

@@ -0,0 +1,15 @@
+package com.nokia.financeapi.pojo.po.common;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class OrganizationPo {
+    private String id;
+    private String name;
+    private String parentId;
+    private Integer orderNum;
+    private Integer status;
+    private Integer grade;
+}

+ 67 - 0
src/main/java/com/nokia/financeapi/service/common/AreaService.java

@@ -0,0 +1,67 @@
+package com.nokia.financeapi.service.common;
+
+import com.nokia.financeapi.dao.common.AreaDao;
+import com.nokia.financeapi.pojo.po.common.AreaPo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class AreaService {
+    private final AreaDao areaDao;
+
+    public AreaService(AreaDao areaDao) {
+        this.areaDao = areaDao;
+    }
+
+    /**
+     * 查询地市
+     * @return {@link List}<{@link AreaPo}>
+     */
+    public List<AreaPo> getCities() {
+        return areaDao.getCities();
+    }
+
+    /**
+     * 查询区县
+     * @return {@link List}<{@link AreaPo}>
+     */
+    public List<AreaPo> getDistricts() {
+        return areaDao.getDistricts();
+    }
+
+    /**
+     * 获取地区字典,key:areaId,value:地区
+     * @param cities 地市列表
+     * @param districts 区县列表
+     */
+    public Map<String, AreaPo> getAreaMap(List<AreaPo> cities, List<AreaPo> districts) {
+        Map<String, AreaPo> map = new HashMap<>();
+        cities.forEach(t -> map.put(t.getAreaId(), t));
+        districts.forEach(t -> map.put(t.getAreaId(), t));
+        return map;
+    }
+
+    /**
+     * 获取区县列表字典,key:地市id,value:区县列表
+     * @param cities 地市列表
+     * @param districts 区县列表
+     */
+    public Map<String, List<AreaPo>> getDistrictListMap(List<AreaPo> cities, List<AreaPo> districts) {
+        Map<String, List<AreaPo>> map = new HashMap<>();
+        for (AreaPo city : cities) {
+            map.put(city.getAreaId(), new ArrayList<>());
+            for (AreaPo district : districts) {
+                if (city.getAreaId().equals(district.getParentId())) {
+                    map.get(city.getAreaId()).add(district);
+                }
+            }
+        }
+        return map;
+    }
+}

+ 68 - 0
src/main/java/com/nokia/financeapi/service/common/OrganizationService.java

@@ -0,0 +1,68 @@
+package com.nokia.financeapi.service.common;
+
+import com.nokia.financeapi.dao.common.OrganizationDao;
+import com.nokia.financeapi.pojo.po.common.OrganizationPo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class OrganizationService {
+    private final OrganizationDao organizationDao;
+
+    public OrganizationService(OrganizationDao organizationDao) {
+        this.organizationDao = organizationDao;
+    }
+
+    /**
+     * 查询二级组织机构
+     */
+    public List<OrganizationPo> getSecondOrgs() {
+        return organizationDao.getSecondOrgs();
+    }
+
+    /**
+     * 查询三级组织机构
+     */
+    public List<OrganizationPo> getThirdOrgs() {
+        return organizationDao.getThirdOrgs();
+    }
+
+    /**
+     * 获取组织机构字典,key:id,value:组织机构
+     * @param secondOrgs 二级组织机构列表
+     * @param thirdOrgs 三级组织机构列表
+     * @return {@link Map}<{@link String}, {@link OrganizationPo}>
+     */
+    public Map<String, OrganizationPo> getOrgMap(List<OrganizationPo> secondOrgs,
+                                                 List<OrganizationPo> thirdOrgs) {
+        Map<String, OrganizationPo> map = new HashMap<>();
+        secondOrgs.forEach(t -> map.put(t.getId(), t));
+        thirdOrgs.forEach(t -> map.put(t.getId(), t));
+        return map;
+    }
+
+    /**
+     * 获取三级组织机构列表字典,key:二级组织机构id,value:三级组织机构列表
+     * @param secondOrgs 二级组织机构列表
+     * @param thirdOrgs 三级组织机构列表
+     */
+    public Map<String, List<OrganizationPo>> getThirdOrganizationListMap(List<OrganizationPo> secondOrgs,
+                                                                         List<OrganizationPo> thirdOrgs) {
+        Map<String, List<OrganizationPo>> map = new HashMap<>();
+        for (OrganizationPo secondOrg : secondOrgs) {
+            map.put(secondOrg.getId(), new ArrayList<>());
+            for (OrganizationPo thirdOrg : thirdOrgs) {
+                if (secondOrg.getId().equals(thirdOrg.getParentId())) {
+                    map.get(secondOrg.getId()).add(thirdOrg);
+                }
+            }
+        }
+        return map;
+    }
+}

+ 12 - 83
src/main/java/com/nokia/financeapi/service/house/HouseResourceMapService.java

@@ -1,10 +1,8 @@
 package com.nokia.financeapi.service.house;
 
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
 import com.nokia.financeapi.common.R;
 import com.nokia.financeapi.config.HousePages;
-import com.nokia.financeapi.dao.house.AreaDao;
+import com.nokia.financeapi.dao.common.AreaDao;
 import com.nokia.financeapi.dao.house.HouseResourceMapMapper;
 import com.nokia.financeapi.pojo.dto.GetBuildingAreaStatDto;
 import com.nokia.financeapi.pojo.dto.GetBuildingMapDto;
@@ -12,7 +10,8 @@ import com.nokia.financeapi.pojo.dto.GetBuildingOptionsDto;
 import com.nokia.financeapi.pojo.dto.GetBuildingRepairStatDto;
 import com.nokia.financeapi.pojo.dto.GetHouseNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
-import com.nokia.financeapi.pojo.po.AreaPo;
+import com.nokia.financeapi.pojo.dto.GetRentOutStatDto;
+import com.nokia.financeapi.pojo.po.common.AreaPo;
 import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingMapVo;
 import com.nokia.financeapi.pojo.vo.GetBuildingOptionsVo;
@@ -159,10 +158,10 @@ public class HouseResourceMapService {
 
     public R<List<GetBuildingRepairStatVo>> getBuildingRepairStat(@Valid GetBuildingRepairStatDto dto) {
         if (StringUtils. hasText(dto.getCity())) {
-            List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getDistrictRepairStat(dto);
+            List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getThirdUnitRepairStat(dto);
             return R.ok(vo);
         }
-        List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getCityRepairStat();
+        List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getSecondUnitRepairStat();
         return R.ok(vo);
     }
 
@@ -174,83 +173,13 @@ public class HouseResourceMapService {
         return R.ok(vo);
     }
 
-    public R<List<GetRentOutStatVo>> getRentOutStat() {
-        String s = """
-                [
-                    {
-                        "unit": "石家庄",
-                        "income": "1639.60",
-                        "finishingRate": "88.32"
-                    },
-                    {
-                        "unit": "唐山",
-                        "income": "1781.84",
-                        "finishingRate": "81.10"
-                    },
-                    {
-                        "unit": "秦皇岛",
-                        "income": "629.82",
-                        "finishingRate": "99.68"
-                    },
-                    {
-                        "unit": "邯郸",
-                        "income": "767.15",
-                        "finishingRate": "78.85"
-                    },
-                    {
-                        "unit": "邢台",
-                        "income": "689.76",
-                        "finishingRate": "90.14"
-                    },
-                    {
-                        "unit": "保定",
-                        "income": "2082.43",
-                        "finishingRate": "105.01"
-                    },
-                    {
-                        "unit": "张家口",
-                        "income": "827.77",
-                        "finishingRate": "70.39"
-                    },
-                    {
-                        "unit": "承德",
-                        "income": "749.34",
-                        "finishingRate": "77.05"
-                    },
-                    {
-                        "unit": "廊坊",
-                        "income": "785.70",
-                        "finishingRate": "85.00"
-                    },
-                    {
-                        "unit": "沧州",
-                        "income": "1572.53",
-                        "finishingRate": "84.50"
-                    },
-                    {
-                        "unit": "衡水",
-                        "income": "574.86",
-                        "finishingRate": "82.00"
-                    },
-                    {
-                        "unit": "雄安",
-                        "income": "43.01",
-                        "finishingRate": "99.79"
-                    },
-                    {
-                        "unit": "省机动局",
-                        "income": "456.90",
-                        "finishingRate": "88.21"
-                    },
-                    {
-                        "unit": "省本部",
-                        "income": "1574.88",
-                        "finishingRate": "93.52"
-                    }
-                ]
-                                """;
-        return R.ok(new Gson().fromJson(s, new TypeToken<List<GetRentOutStatVo>>() {
-        }.getType()));
+    public R<List<GetRentOutStatVo>> getRentOutStat(GetRentOutStatDto dto) {
+        if (StringUtils.hasText(dto.getCity())) {
+            List<GetRentOutStatVo> vo = houseResourceMapMapper.getThirdUnitRentOutIncomeStat(dto);
+            return R.ok(vo);
+        }
+        List<GetRentOutStatVo> vo = houseResourceMapMapper.getSecondUnitRentOutIncomeStat(dto);
+        return R.ok(vo);
     }
 
     public R<List<GetBuildingOptionsVo>> getBuildingOptions(GetBuildingOptionsDto dto, String token) {