CarrierStatisticService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. package platform.modules.carrier.service;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import platform.common.Constant;
  8. import platform.common.base.service.DictionaryItemService;
  9. import platform.common.util.ShiroUtils;
  10. import platform.modules.build.service.FloorService;
  11. import platform.modules.carrier.dto.CarrierLibraryResult;
  12. import platform.modules.carrier.dto.SearchCondition;
  13. import platform.modules.carrier.entity.*;
  14. import platform.modules.government.entity.User;
  15. import platform.modules.government.service.StreetService;
  16. import java.math.BigDecimal;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. /**
  21. * @author kevin
  22. * @since 2019/4/23 4:05 PM
  23. */
  24. @Service
  25. @Transactional
  26. public class CarrierStatisticService {
  27. @Autowired
  28. private StreetService streetService;
  29. @Autowired
  30. private ParkService parkService;
  31. @Autowired
  32. private BuildingService buildingService;
  33. @Autowired
  34. private DictionaryItemService dictionaryItemService;
  35. @Autowired
  36. private FloorService floorService;
  37. @Autowired
  38. private InvestmentInfoService investmentInfoService;
  39. @Autowired
  40. private ContractFloorService contractFloorService;
  41. /**
  42. * 载体库街道列表
  43. *
  44. * @param pageNum
  45. * @param pageSize
  46. * @return
  47. */
  48. @Transactional(readOnly = true)
  49. public PageInfo getStreetStatistic(Integer pageNum, Integer pageSize) {
  50. SearchCondition condition = new SearchCondition();
  51. userTypeConditon(condition);
  52. PageHelper.startPage(pageNum, pageSize);
  53. List<CarrierLibraryResult> libraryResults = streetService.getStreetStatistic(condition);
  54. for (CarrierLibraryResult result : libraryResults) {
  55. Double sumRentArea = streetService.getStreetRentAreaStatistic(result.getId());
  56. result.setSumRentArea(sumRentArea);
  57. //楼栋建筑面积为空,按楼层建筑面积和算,楼层建筑面积为空按,楼层已租、代租只和算
  58. Double sumBuildArea = getSumStreetBuildingArea(result.getId());
  59. result.setSumBuildArea(sumBuildArea);
  60. }
  61. return new PageInfo<>(libraryResults);
  62. }
  63. /**
  64. * 载体库街道列表
  65. *
  66. * @param pageNum
  67. * @param pageSize
  68. * @return
  69. */
  70. @Transactional(readOnly = true)
  71. public Map<String, Object> getWechatStreetStatistic(Integer pageNum, Integer pageSize) {
  72. SearchCondition condition = new SearchCondition();
  73. userTypeConditon(condition);
  74. PageHelper.startPage(pageNum, pageSize);
  75. List<CarrierLibraryResult> libraryResults = streetService.getStreetStatistic(condition);
  76. //总的租住面积
  77. Double totalRentArea = 0d;
  78. Double totalRestArea = 0d;
  79. for (CarrierLibraryResult result : libraryResults) {
  80. Double sumRentArea = streetService.getStreetRentAreaStatistic(result.getId());
  81. result.setSumRentArea(sumRentArea);
  82. totalRentArea += sumRentArea;
  83. //楼栋建筑面积为空,按楼层建筑面积和算,楼层建筑面积为空按,楼层已租、代租只和算
  84. Double sumBuildArea = getSumStreetBuildingArea(result.getId());
  85. result.setSumBuildArea(sumBuildArea);
  86. totalRestArea += result.getSumRestArea();
  87. }
  88. Map<String, Object> map = new HashMap<>();
  89. map.put("pageInfo", new PageInfo<>(libraryResults));
  90. map.put("totalRentArea", toScale2(totalRentArea));
  91. map.put("totalRestArea", toScale2(totalRestArea));
  92. return map;
  93. }
  94. /**
  95. * 获取街道建筑面积
  96. *
  97. * @param id
  98. * @return
  99. */
  100. public Double getSumStreetBuildingArea(Integer id) {
  101. Double sumBuildArea = buildingService.findStreetTotalArea(id);
  102. // List<Building> buildings = buildingService.findBySteetId(id);
  103. // for (Building building : buildings) {
  104. // if (building.getArea() != null){
  105. // sumBuildArea += building.getArea();
  106. // }
  107. // else {
  108. // //楼栋没有建筑面积获取楼层建筑面积
  109. // double totalFloorArea = floorService.getSumFloorArea(building.getId());
  110. // sumBuildArea += totalFloorArea;
  111. // }
  112. // }
  113. return new BigDecimal(sumBuildArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  114. }
  115. /**
  116. * 获取园区建筑面积
  117. *
  118. * @param id
  119. * @return
  120. */
  121. public Double getSumParkBuildingArea(Integer id) {
  122. Double sumBuildArea = buildingService.findParkTotalArea(id);
  123. // List<Building> buildings = buildingService.findByParkId(id);
  124. // for (Building building : buildings) {
  125. // if (building.getArea() != null){
  126. // sumBuildArea += building.getArea();
  127. // }
  128. // else {
  129. // //楼栋没有建筑面积获取楼层建筑面积
  130. // double totalFloorArea = floorService.getSumFloorArea(building.getId());
  131. // sumBuildArea += totalFloorArea;
  132. // }
  133. // }
  134. return new BigDecimal(sumBuildArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  135. }
  136. /**
  137. * 获取用户角色条件
  138. *
  139. * @param condition
  140. */
  141. private void userTypeConditon(SearchCondition condition) {
  142. User user = ShiroUtils.getUserEntity();
  143. if (user.getUser_type() != null && user.getUser_type().equals(Constant.UserType.STREET)){
  144. condition.setStreetId(user.getStreet_id());
  145. }
  146. if (user.getUser_type() != null && user.getUser_type().equals(Constant.UserType.BUILD)){
  147. condition.setParkId(user.getBuild_id());
  148. }
  149. }
  150. /**
  151. * 载体库园区列表
  152. *
  153. * @param pageNum
  154. * @param pageSize
  155. * @param street_id
  156. * @return
  157. */
  158. @Transactional(readOnly = true)
  159. public PageInfo<CarrierLibraryResult> getParkStatistic(Integer pageNum, Integer pageSize, Integer street_id) {
  160. PageHelper.startPage(pageNum, pageSize);
  161. List<CarrierLibraryResult> libraryResults = parkService.getParkStatistic(street_id);
  162. for (CarrierLibraryResult result : libraryResults) {
  163. double sumBuildingArea = getSumParkBuildingArea(result.getId());
  164. result.setSumBuildArea(sumBuildingArea);
  165. Double sumRentArea = parkService.getParkRentAreaStatistic(result.getId());
  166. result.setSumRentArea(sumRentArea);
  167. //获取载体数
  168. // result.setBuildingNum(buildingService.getBuildingCount(result.getId()));
  169. }
  170. return new PageInfo<>(libraryResults);
  171. }
  172. /**
  173. * 载体库园区列表
  174. *
  175. * @param pageNum
  176. * @param pageSize
  177. * @param street_id
  178. * @return
  179. */
  180. @Transactional(readOnly = true)
  181. public Map<String, Object> getWechatParkStatistic(Integer pageNum, Integer pageSize, Integer street_id) {
  182. PageHelper.startPage(pageNum, pageSize);
  183. List<CarrierLibraryResult> libraryResults = parkService.getParkStatistic(street_id);
  184. Double totalRentArea = 0d;
  185. Double totalRestArea = 0d;
  186. for (CarrierLibraryResult result : libraryResults) {
  187. double sumBuildingArea = getSumParkBuildingArea(result.getId());
  188. result.setSumBuildArea(sumBuildingArea);
  189. Double sumRentArea = parkService.getParkRentAreaStatistic(result.getId());
  190. result.setSumRentArea(sumRentArea);
  191. totalRentArea += sumRentArea;
  192. totalRestArea += result.getSumRestArea();
  193. }
  194. Map<String, Object> map = new HashMap<>();
  195. map.put("pageInfo", new PageInfo<>(libraryResults));
  196. map.put("totalRentArea", totalRentArea);
  197. map.put("totalRestArea", totalRestArea);
  198. return map;
  199. }
  200. /**
  201. * 载体库载体列表
  202. *
  203. * @param pageNum
  204. * @param pageSize
  205. * @param condition
  206. * @return
  207. */
  208. @Transactional(readOnly = true)
  209. public PageInfo<Building> getBuildingStatistic(Integer pageNum, Integer pageSize, SearchCondition condition) {
  210. PageHelper.startPage(pageNum, pageSize);
  211. List<Building> buildingList = buildingService.getBuildingStatistic(condition);
  212. for (Building building : buildingList) {
  213. building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + ""));
  214. building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + ""));
  215. if (building.getArea() != null){
  216. building.setSumBuildArea(building.getArea());
  217. }
  218. else {
  219. //楼栋没有建筑面积获取楼层建筑面积
  220. // double totalFloorArea = floorService.getSumFloorArea(building.getId());
  221. // building.setSumBuildArea(totalFloorArea);
  222. building.setSumBuildArea(buildingService.findBuildingTotalArea(building.getId()));
  223. }
  224. CarrierLibraryResult areaStatistic = buildingService.getBuildAreaStatistic(building.getId());
  225. if (areaStatistic != null){
  226. building.setSumRestArea(areaStatistic.getSumRestArea());
  227. }
  228. // Double sumRentArea = parkService.getParkRentAreaStatistic(building.getPark_id());
  229. building.setSumRentArea(buildingService.getBuildRentAreaStatistic(building.getId()));
  230. }
  231. return new PageInfo<>(buildingList);
  232. }
  233. /**
  234. * 载体库载体列表
  235. *
  236. * @param pageNum
  237. * @param pageSize
  238. * @param condition
  239. * @return
  240. */
  241. @Transactional(readOnly = true)
  242. public Map<String, Object> getWechatBuildingStatistic(Integer pageNum, Integer pageSize, SearchCondition condition) {
  243. PageHelper.startPage(pageNum, pageSize);
  244. List<Building> buildingList = buildingService.getBuildingStatistic(condition);
  245. Double totalRentArea = 0d;
  246. Double totalRestArea = 0d;
  247. for (Building building : buildingList) {
  248. building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + ""));
  249. building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + ""));
  250. if (building.getArea() != null){
  251. building.setSumBuildArea(building.getArea());
  252. }
  253. else {
  254. //楼栋没有建筑面积获取楼层建筑面积
  255. building.setSumBuildArea(buildingService.findBuildingTotalArea(building.getId()));
  256. }
  257. CarrierLibraryResult areaStatistic = buildingService.getBuildAreaStatistic(building.getId());
  258. if (areaStatistic != null){
  259. building.setSumRestArea(areaStatistic.getSumRestArea());
  260. totalRestArea += areaStatistic.getSumRestArea();
  261. }
  262. building.setSumRentArea(buildingService.getBuildRentAreaStatistic(building.getId()));
  263. totalRentArea += buildingService.getBuildRentAreaStatistic(building.getId());
  264. }
  265. Map<String, Object> map = new HashMap<>();
  266. map.put("pageInfo", new PageInfo<>(buildingList));
  267. map.put("totalRentArea", totalRentArea);
  268. map.put("totalRestArea", totalRestArea);
  269. return map;
  270. }
  271. /**
  272. * 载体库街道列表统计
  273. *
  274. * @return
  275. */
  276. public Map<String, Double> findTotalStreetStatistic() {
  277. Double totalBuildArea = 0d;
  278. Double totalRestArea = 0d;
  279. Double totalRentArea = 0d;
  280. Double totalParks = 0d;
  281. SearchCondition conditon = new SearchCondition();
  282. List<CarrierLibraryResult> libraryResults = streetService.getStreetStatistic(conditon);
  283. for (CarrierLibraryResult result : libraryResults) {
  284. Double sumBuildArea = getSumStreetBuildingArea(result.getId());
  285. totalBuildArea += sumBuildArea;
  286. totalRestArea += result.getSumRestArea();
  287. Double sumRentArea = streetService.getStreetRentAreaStatistic(result.getId());
  288. if (sumRentArea != null){
  289. totalRentArea += sumRentArea;
  290. }
  291. totalParks = totalParks + result.getParkNum();
  292. }
  293. Map<String, Double> map = new HashMap<>();
  294. map.put("totalBuildArea", new BigDecimal(totalBuildArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  295. map.put("totalRentArea", new BigDecimal(totalRentArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  296. map.put("totalRestArea", new BigDecimal(totalRestArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  297. map.put("totalParks", new BigDecimal(totalParks).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  298. return map;
  299. }
  300. /**
  301. * 载体库园区列表
  302. *
  303. * @param id
  304. * @return
  305. */
  306. @Transactional(readOnly = true)
  307. public Map<String, Double> findTotalParkStatistic(Integer id) {
  308. Double totalBuildArea = 0d;
  309. Double totalRestArea = 0d;
  310. Double totalRentArea =0d;
  311. Integer totalBuildingNum =0;
  312. List<CarrierLibraryResult> libraryResults = parkService.getParkStatistic(id);
  313. for (CarrierLibraryResult result : libraryResults) {
  314. Double sumBuildArea = getSumParkBuildingArea(result.getId());
  315. totalBuildArea += sumBuildArea;
  316. totalRestArea += result.getSumRestArea();
  317. Double sumRentArea = parkService.getParkRentAreaStatistic(result.getId());
  318. if (sumRentArea != null){
  319. totalRentArea += sumRentArea;
  320. }
  321. totalBuildingNum += result.getBuildingNum();
  322. }
  323. Map<String, Double> map = new HashMap<>();
  324. map.put("totalBuildArea", new BigDecimal(totalBuildArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  325. map.put("totalRentArea", new BigDecimal(totalRentArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  326. map.put("totalRestArea", new BigDecimal(totalRestArea).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  327. map.put("totalBuildingNum", new BigDecimal(totalBuildingNum).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue());
  328. return map;
  329. }
  330. /**
  331. * 统计
  332. *
  333. * @param startTime
  334. * @param endTime
  335. * @return
  336. */
  337. public CarrierStatistic getCarrierStatistic(String startTime, String endTime) {
  338. CarrierStatistic statistic = new CarrierStatistic();
  339. Double carrierEntryArea = buildingService.findCarrierEntryArea(startTime, endTime);
  340. statistic.setBuildingEntryArea(carrierEntryArea);
  341. Double investmentArea = investmentInfoService.findInvestmentArea(startTime, endTime);
  342. statistic.setInvestmentArea(investmentArea);
  343. Integer volume = contractFloorService.findCarrierVolume(startTime, endTime);
  344. statistic.setVolume(volume);
  345. //载体空置与招商发布
  346. List<InvestmentDistribution> distributions = investmentInfoService.findEachParkInvestmentArea(startTime, endTime);
  347. statistic.setInvestmentDistributions(distributions);
  348. //成交量
  349. List<CarrierVolume> eachParkVolume = contractFloorService.findEachParkVolume(startTime, endTime);
  350. statistic.setCarrierVolumes(eachParkVolume);
  351. return statistic;
  352. }
  353. /**
  354. * 载体分布
  355. *
  356. * @param condition
  357. */
  358. public CarrierStatistic getStreetBuildingDistribution(SearchCondition condition) {
  359. CarrierStatistic statistic = new CarrierStatistic();
  360. List<CarrierDistribution> distributions = buildingService.getStreetBuildingDistribution(condition);
  361. statistic.setDistributions(distributions);
  362. double distributionArea = 0d;
  363. int buildingCount = 0;
  364. for (CarrierDistribution distribution : distributions) {
  365. distributionArea += distribution.getBuildingArea();
  366. buildingCount += distribution.getBuildingCount();
  367. }
  368. statistic.setBuildingCount(buildingCount);
  369. statistic.setDistributionArea(toScale2(distributionArea));
  370. return statistic;
  371. }
  372. /**
  373. * double去两位小数
  374. *
  375. * @param data
  376. * @return
  377. */
  378. public Double toScale2(Double data){
  379. return new BigDecimal(data).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  380. }
  381. }