HouseResourceMapService.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package com.nokia.financeapi.service.house;
  2. import com.google.gson.Gson;
  3. import com.google.gson.reflect.TypeToken;
  4. import com.nokia.financeapi.common.R;
  5. import com.nokia.financeapi.dao.house.AreaDao;
  6. import com.nokia.financeapi.dao.house.HouseResourceMapMapper;
  7. import com.nokia.financeapi.pojo.dto.GetBuildingAreaStatDto;
  8. import com.nokia.financeapi.pojo.dto.GetBuildingMapDto;
  9. import com.nokia.financeapi.pojo.dto.GetBuildingOptionsDto;
  10. import com.nokia.financeapi.pojo.dto.GetBuildingRepairStatDto;
  11. import com.nokia.financeapi.pojo.dto.GetHouseNoticeDto;
  12. import com.nokia.financeapi.pojo.dto.GetLandBuildingStatDto;
  13. import com.nokia.financeapi.pojo.po.AreaPo;
  14. import com.nokia.financeapi.pojo.vo.GetBuildingAreaStatVo;
  15. import com.nokia.financeapi.pojo.vo.GetBuildingMapVo;
  16. import com.nokia.financeapi.pojo.vo.GetBuildingOptionsVo;
  17. import com.nokia.financeapi.pojo.vo.GetBuildingRepairStatVo;
  18. import com.nokia.financeapi.pojo.vo.GetHouseNoticeVo;
  19. import com.nokia.financeapi.pojo.vo.GetLandBuildingStatVo;
  20. import com.nokia.financeapi.pojo.vo.GetRentOutStatVo;
  21. import com.nokia.financeapi.pojo.vo.TreeAreaVo;
  22. import com.nokia.financeapi.service.common.file.FileService;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.util.StringUtils;
  25. import javax.validation.Valid;
  26. import java.time.LocalDate;
  27. import java.time.format.DateTimeFormatter;
  28. import java.util.ArrayList;
  29. import java.util.HashMap;
  30. import java.util.List;
  31. import java.util.Map;
  32. @Service
  33. public class HouseResourceMapService {
  34. private final HouseResourceMapMapper houseResourceMapMapper;
  35. private final AreaDao areaDao;
  36. private final FileService fileService;
  37. public HouseResourceMapService(HouseResourceMapMapper houseResourceMapMapper, AreaDao areaDao, FileService fileService) {
  38. this.houseResourceMapMapper = houseResourceMapMapper;
  39. this.areaDao = areaDao;
  40. this.fileService = fileService;
  41. }
  42. public R<GetBuildingAreaStatVo> getBuildingAreaStat(GetBuildingAreaStatDto dto) {
  43. GetBuildingAreaStatVo vo = houseResourceMapMapper.getBuildingAreaStat(dto);
  44. return R.ok(vo);
  45. }
  46. public R<List<GetLandBuildingStatVo>> getLandBuildingStat(GetLandBuildingStatDto dto) {
  47. if (StringUtils.hasText(dto.getCity())) {
  48. List<GetLandBuildingStatVo> vo = houseResourceMapMapper.getDistrictLandBuildingStat(dto);
  49. return R.ok(vo);
  50. }
  51. List<GetLandBuildingStatVo> vo = houseResourceMapMapper.getCityLandBuildingStat();
  52. return R.ok(vo);
  53. }
  54. public R<TreeAreaVo> treeArea() {
  55. // 查询所有地区
  56. List<AreaPo> areas = areaDao.getAll();
  57. Map<Integer, List<AreaPo>> parentMap = getAreaParentMap(areas);
  58. // 地市列表
  59. List<AreaPo> cityList = parentMap.get(130000);
  60. TreeAreaVo vo = new TreeAreaVo();
  61. vo.setLabel("河北省");
  62. vo.setValue(130000);
  63. List<TreeAreaVo> cityVoList = new ArrayList<>();
  64. vo.setChildren(cityVoList);
  65. for (AreaPo tt : cityList) {
  66. List<TreeAreaVo> districtVoList = new ArrayList<>();
  67. TreeAreaVo cityVo = new TreeAreaVo();
  68. cityVo.setLabel(tt.getAreaName());
  69. cityVo.setValue(tt.getAreaId());
  70. cityVo.setChildren(districtVoList);
  71. cityVoList.add(cityVo);
  72. // 区县列表
  73. List<AreaPo> districtList = parentMap.get(tt.getAreaId());
  74. for (AreaPo ttt : districtList) {
  75. TreeAreaVo districtVo = new TreeAreaVo();
  76. districtVo.setLabel(ttt.getAreaName());
  77. districtVo.setValue(ttt.getAreaId());
  78. districtVoList.add(districtVo);
  79. }
  80. }
  81. return R.ok(vo);
  82. }
  83. /**
  84. * 得到地区父地图
  85. *
  86. * @param areas 区域
  87. */
  88. private Map<Integer, List<AreaPo>> getAreaParentMap(List<AreaPo> areas) {
  89. Map<Integer, List<AreaPo>> parentMap = new HashMap<>();
  90. for (AreaPo t : areas) {
  91. parentMap.putIfAbsent(t.getParentId(), new ArrayList<>());
  92. parentMap.get(t.getParentId()).add(t);
  93. }
  94. return parentMap;
  95. }
  96. public R<List<GetBuildingMapVo>> getBuildingMap(GetBuildingMapDto dto) {
  97. Integer endDate = dto.getEndDate();
  98. // 账期为空则取最新的账期
  99. if (dto.getEndDate() == null) {
  100. endDate = houseResourceMapMapper.getBuildingMonthMaxDate();
  101. }
  102. if (endDate == null) {
  103. return R.ok();
  104. }
  105. dto.setEndDate(endDate);
  106. LocalDate endLocalDate = LocalDate.parse(endDate + "01", DateTimeFormatter.ofPattern("yyyyMMdd"));
  107. LocalDate startLocalDate = endLocalDate.withDayOfYear(1);
  108. Integer startDate = Integer.valueOf(startLocalDate.format(DateTimeFormatter.ofPattern("yyyyMM")));
  109. dto.setStartDate(startDate);
  110. // 坐标为空根据区县获取建筑
  111. if (dto.getLeftLng() == null || dto.getRightLng() == null || dto.getLeftLat() == null || dto.getRightLat() == null) {
  112. List<GetBuildingMapVo> vo = houseResourceMapMapper.getBuildingByDistrict(dto);
  113. return R.ok(vo);
  114. }
  115. // 查询坐标范围内的建筑
  116. List<GetBuildingMapVo> vo = houseResourceMapMapper.getBuildingByCoordinate(dto);
  117. vo.forEach(t -> {
  118. if (StringUtils.hasText(t.getBuildingImg())) {
  119. t.setBuildingImg(fileService.getBucket() + t.getBuildingImg());
  120. }
  121. });
  122. return R.ok(vo);
  123. }
  124. public R<List<GetBuildingRepairStatVo>> getBuildingRepairStat(@Valid GetBuildingRepairStatDto dto) {
  125. if (StringUtils. hasText(dto.getCity())) {
  126. List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getDistrictRepairStat(dto);
  127. return R.ok(vo);
  128. }
  129. List<GetBuildingRepairStatVo> vo = houseResourceMapMapper.getCityRepairStat();
  130. return R.ok(vo);
  131. }
  132. public R<List<GetHouseNoticeVo>> getNotice(GetHouseNoticeDto dto) {
  133. if (!StringUtils.hasText(dto.getCity())) {
  134. dto.setCity("全省");
  135. }
  136. List<GetHouseNoticeVo> vo = houseResourceMapMapper.getNotice(dto);
  137. return R.ok(vo);
  138. }
  139. public R<List<GetRentOutStatVo>> getRentOutStat() {
  140. String s = """
  141. [
  142. {
  143. "unit": "石家庄",
  144. "income": "1058.74",
  145. "finishingRate": 57.00
  146. },
  147. {
  148. "unit": "唐山",
  149. "income": "1214.61",
  150. "finishingRate": "55.30"
  151. },
  152. {
  153. "unit": "秦皇岛",
  154. "income": "402.7",
  155. "finishingRate": "63.70"
  156. },
  157. {
  158. "unit": "邯郸",
  159. "income": "508.25",
  160. "finishingRate": "52.20"
  161. },
  162. {
  163. "unit": "邢台",
  164. "income": "441.54",
  165. "finishingRate": "57.70"
  166. },
  167. {
  168. "unit": "保定",
  169. "income": "1361.7",
  170. "finishingRate": "68.70"
  171. },
  172. {
  173. "unit": "张家口",
  174. "income": "534.46",
  175. "finishingRate": "45.40"
  176. },
  177. {
  178. "unit": "承德",
  179. "income": "480.68",
  180. "finishingRate": "49.40"
  181. },
  182. {
  183. "unit": "廊坊",
  184. "income": "490.37",
  185. "finishingRate": "53.00"
  186. },
  187. {
  188. "unit": "沧州",
  189. "income": "1008.13",
  190. "finishingRate": "54.20"
  191. },
  192. {
  193. "unit": "衡水",
  194. "income": "368.94",
  195. "finishingRate": "52.60"
  196. },
  197. {
  198. "unit": "雄安",
  199. "income": "28.52",
  200. "finishingRate": "66.20"
  201. },
  202. {
  203. "unit": "传输局",
  204. "income": "269.96",
  205. "finishingRate": "52.10"
  206. },
  207. {
  208. "unit": "省本部",
  209. "income": "1044.94",
  210. "finishingRate": "62.10"
  211. }
  212. ]
  213. """;
  214. return R.ok(new Gson().fromJson(s, new TypeToken<List<GetRentOutStatVo>>() {
  215. }.getType()));
  216. }
  217. public R<List<GetBuildingOptionsVo>> getBuildingOptions(GetBuildingOptionsDto dto) {
  218. Integer endDate = dto.getEndDate();
  219. // 账期为空则取最新的账期
  220. if (dto.getEndDate() == null) {
  221. endDate = houseResourceMapMapper.getBuildingMonthMaxDate();
  222. }
  223. if (endDate == null) {
  224. return R.ok();
  225. }
  226. dto.setEndDate(endDate);
  227. LocalDate endLocalDate = LocalDate.parse(endDate + "01", DateTimeFormatter.ofPattern("yyyyMMdd"));
  228. LocalDate startLocalDate = endLocalDate.withDayOfYear(1);
  229. Integer startDate = Integer.valueOf(startLocalDate.format(DateTimeFormatter.ofPattern("yyyyMM")));
  230. dto.setStartDate(startDate);
  231. List<GetBuildingOptionsVo> vo = houseResourceMapMapper.getBuildingOptions(dto);
  232. vo.forEach(t -> {
  233. if (StringUtils.hasText(t.getBuildingImg())) {
  234. t.setBuildingImg(fileService.getBucket() + t.getBuildingImg());
  235. }
  236. });
  237. return R.ok(vo);
  238. }
  239. }