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.dao.house.AreaDao; import com.nokia.financeapi.dao.house.HouseResourceMapMapper; import com.nokia.financeapi.pojo.dto.GetBuildingAreaStatDto; import com.nokia.financeapi.pojo.dto.GetBuildingMapDto; 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.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 com.nokia.financeapi.pojo.vo.TreeAreaVo; import com.nokia.financeapi.service.common.file.FileService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.validation.Valid; import java.time.LocalDate; import java.time.format.DateTimeFormatter; 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; private final FileService fileService; public HouseResourceMapService(HouseResourceMapMapper houseResourceMapMapper, AreaDao areaDao, FileService fileService) { this.houseResourceMapMapper = houseResourceMapMapper; this.areaDao = areaDao; this.fileService = fileService; } public R getBuildingAreaStat(GetBuildingAreaStatDto dto) { GetBuildingAreaStatVo vo = houseResourceMapMapper.getBuildingAreaStat(dto); return R.ok(vo); } public R> getLandBuildingStat(GetLandBuildingStatDto dto) { if (StringUtils.hasText(dto.getCity())) { List vo = houseResourceMapMapper.getDistrictLandBuildingStat(dto); return R.ok(vo); } List vo = houseResourceMapMapper.getCityLandBuildingStat(); return R.ok(vo); } public R treeArea() { // 查询所有地区 List areas = areaDao.getAll(); Map> parentMap = getAreaParentMap(areas); // 地市列表 List cityList = parentMap.get(130000); TreeAreaVo vo = new TreeAreaVo(); vo.setLabel("河北省"); vo.setValue(130000); List cityVoList = new ArrayList<>(); vo.setChildren(cityVoList); for (AreaPo tt : cityList) { List districtVoList = new ArrayList<>(); TreeAreaVo cityVo = new TreeAreaVo(); cityVo.setLabel(tt.getAreaName()); cityVo.setValue(tt.getAreaId()); cityVo.setChildren(districtVoList); cityVoList.add(cityVo); // 区县列表 List 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> getAreaParentMap(List areas) { Map> parentMap = new HashMap<>(); for (AreaPo t : areas) { parentMap.putIfAbsent(t.getParentId(), new ArrayList<>()); parentMap.get(t.getParentId()).add(t); } return parentMap; } public R> getBuildingMap(GetBuildingMapDto dto) { Integer endDate = dto.getEndDate(); // 账期为空则取最新的账期 if (dto.getEndDate() == null) { endDate = houseResourceMapMapper.getBuildingMonthMaxDate(); } if (endDate == null) { return R.ok(); } dto.setEndDate(endDate); LocalDate endLocalDate = LocalDate.parse(endDate + "01", DateTimeFormatter.ofPattern("yyyyMMdd")); LocalDate startLocalDate = endLocalDate.withDayOfYear(1); Integer startDate = Integer.valueOf(startLocalDate.format(DateTimeFormatter.ofPattern("yyyyMM"))); dto.setStartDate(startDate); // 坐标为空根据区县获取建筑 if (dto.getLeftLng() == null || dto.getRightLng() == null || dto.getLeftLat() == null || dto.getRightLat() == null) { List vo = houseResourceMapMapper.getBuildingByDistrict(dto); return R.ok(vo); } // 查询坐标范围内的建筑 List vo = houseResourceMapMapper.getBuildingByCoordinate(dto); vo.forEach(t -> { if (StringUtils.hasText(t.getBuildingImg())) { t.setBuildingImg(fileService.getBucket() + t.getBuildingImg()); } }); return R.ok(vo); } public R> getBuildingRepairStat(@Valid GetBuildingRepairStatDto dto) { if (StringUtils. hasText(dto.getCity())) { List vo = houseResourceMapMapper.getDistrictRepairStat(dto); return R.ok(vo); } List vo = houseResourceMapMapper.getCityRepairStat(); return R.ok(vo); } public R> getNotice(GetHouseNoticeDto dto) { if (!StringUtils.hasText(dto.getCity())) { dto.setCity("全省"); } List vo = houseResourceMapMapper.getNotice(dto); return R.ok(vo); } public R> getRentOutStat() { String s = """ [ { "unit": "石家庄", "income": "1058.74", "finishingRate": 57.00 }, { "unit": "唐山", "income": "1214.61", "finishingRate": "55.30" }, { "unit": "秦皇岛", "income": "402.7", "finishingRate": "63.70" }, { "unit": "邯郸", "income": "508.25", "finishingRate": "52.20" }, { "unit": "邢台", "income": "441.54", "finishingRate": "57.70" }, { "unit": "保定", "income": "1361.7", "finishingRate": "68.70" }, { "unit": "张家口", "income": "534.46", "finishingRate": "45.40" }, { "unit": "承德", "income": "480.68", "finishingRate": "49.40" }, { "unit": "廊坊", "income": "490.37", "finishingRate": "53.00" }, { "unit": "沧州", "income": "1008.13", "finishingRate": "54.20" }, { "unit": "衡水", "income": "368.94", "finishingRate": "52.60" }, { "unit": "雄安", "income": "28.52", "finishingRate": "66.20" }, { "unit": "传输局", "income": "269.96", "finishingRate": "52.10" }, { "unit": "省本部", "income": "1044.94", "finishingRate": "62.10" } ] """; return R.ok(new Gson().fromJson(s, new TypeToken>() { }.getType())); } public R> getBuildingOptions(GetBuildingOptionsDto dto) { Integer endDate = dto.getEndDate(); // 账期为空则取最新的账期 if (dto.getEndDate() == null) { endDate = houseResourceMapMapper.getBuildingMonthMaxDate(); } if (endDate == null) { return R.ok(); } dto.setEndDate(endDate); LocalDate endLocalDate = LocalDate.parse(endDate + "01", DateTimeFormatter.ofPattern("yyyyMMdd")); LocalDate startLocalDate = endLocalDate.withDayOfYear(1); Integer startDate = Integer.valueOf(startLocalDate.format(DateTimeFormatter.ofPattern("yyyyMM"))); dto.setStartDate(startDate); List vo = houseResourceMapMapper.getBuildingOptions(dto); vo.forEach(t -> { if (StringUtils.hasText(t.getBuildingImg())) { t.setBuildingImg(fileService.getBucket() + t.getBuildingImg()); } }); return R.ok(vo); } }