LandStatisticsService.java 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169
  1. package platform.modules.government.service;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import org.springframework.transaction.annotation.Transactional;
  5. import platform.common.Constant;
  6. import platform.common.util.DateUtil;
  7. import platform.common.util.StringUtils;
  8. import platform.modules.company.dao.StockLandDao;
  9. import platform.modules.company.dto.StockLandStatistic;
  10. import platform.modules.government.entity.Street;
  11. import java.text.DateFormat;
  12. import java.text.ParseException;
  13. import java.text.SimpleDateFormat;
  14. import java.util.*;
  15. /**
  16. * 用地统计service
  17. */
  18. @Service
  19. @Transactional
  20. public class LandStatisticsService {
  21. @Autowired
  22. private StockLandDao stockLandDao;
  23. @Autowired
  24. private StreetService streetService;
  25. /**
  26. * @Author: huZhiHao
  27. * @Description: 获取待审核 审核中 已审核 统计
  28. * @Date: 2020/1/13
  29. * @Params:
  30. * @Return:
  31. **/
  32. public Object getApproveStatusStatistic(String streetId) {
  33. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetId(streetId, null);
  34. //创建待处理,处理中,已处理
  35. List<Map> pending = new ArrayList<>(), processing = new ArrayList<>(), processed = new ArrayList<>();
  36. //创建待处理具体
  37. Integer pendingCompany = 0, pendingStreet = 0;
  38. //创建处理中具体
  39. Integer processingLocalAudit = 0, processingDistribute = 0, processingEasyProcess = 0, processingComplianceAudit = 0, processingUnitedAudit = 0, processingGovernmentAudit = 0, processingHGXSCTG = 0;
  40. //创建已处理具体
  41. Integer processedPassed = 0, processedReject = 0, processedNotPass = 0;
  42. for (StockLandStatistic stockLand : stockLandList) {
  43. //待审核
  44. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.LOCAL_AUDIT)
  45. && Objects.equals(stockLand.getApproval_round(), "1")
  46. && Objects.equals(stockLand.getApply_user_type(), Constant.UserType.STREET + "")) {
  47. //处于属地初审 轮次为1 申请人类型为街道
  48. pendingStreet++;
  49. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.LOCAL_AUDIT)
  50. && Objects.equals(stockLand.getApproval_round(), "1")
  51. && Objects.equals(stockLand.getApply_user_type(), Constant.UserType.COMPANY + "")) {
  52. //处于属地初审 轮次为1 申请人类型为企业
  53. pendingCompany++;
  54. }
  55. //审核中
  56. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.LOCAL_AUDIT)
  57. && !Objects.equals(stockLand.getApproval_round(), "1")) {
  58. //处于属地初审 轮次为2
  59. processingLocalAudit++;
  60. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PENDING_DISTRIBUTE)) {
  61. //处于待分发
  62. processingDistribute++;
  63. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.JYLCHQ)) {
  64. //处于简易流程
  65. processingEasyProcess++;
  66. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  67. //处于合规性审查
  68. processingComplianceAudit++;
  69. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.UNITED_AUDIT)) {
  70. //处于联合评议
  71. processingUnitedAudit++;
  72. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.GOVERNMENT_AUDIT)) {
  73. //处于区政府审核
  74. processingGovernmentAudit++;
  75. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.HGXSCTG)) {
  76. //处于合规性审查汇总
  77. processingGovernmentAudit++;
  78. }
  79. //已审核
  80. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)
  81. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  82. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  83. //通过
  84. processedPassed++;
  85. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  86. //不通过
  87. processedNotPass++;
  88. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  89. //退回
  90. processedReject++;
  91. }
  92. }
  93. Map<String, Object> temp;
  94. //装配待处理具体
  95. temp = new HashMap<>();
  96. temp.put("name", "企业申请");
  97. temp.put("value", pendingCompany);
  98. pending.add(temp);
  99. temp = new HashMap<>();
  100. temp.put("name", "街道代理");
  101. temp.put("value", pendingStreet);
  102. pending.add(temp);
  103. //装配处理中具体
  104. temp = new HashMap<>();
  105. temp.put("name", "属地初审");
  106. temp.put("value", processingLocalAudit);
  107. processing.add(temp);
  108. temp = new HashMap<>();
  109. temp.put("name", "待分发");
  110. temp.put("value", processingDistribute);
  111. processing.add(temp);
  112. temp = new HashMap<>();
  113. temp.put("name", "简易流程办理中");
  114. temp.put("value", processingEasyProcess);
  115. processing.add(temp);
  116. temp = new HashMap<>();
  117. temp.put("name", "合规性审查");
  118. temp.put("value", processingComplianceAudit);
  119. processing.add(temp);
  120. temp = new HashMap<>();
  121. temp.put("name", "联合评议");
  122. temp.put("value", processingUnitedAudit);
  123. processing.add(temp);
  124. temp = new HashMap<>();
  125. temp.put("name", "区政府审核");
  126. temp.put("value", processingGovernmentAudit);
  127. processing.add(temp);
  128. temp = new HashMap<>();
  129. temp.put("name", "合规性审查汇总");
  130. temp.put("value", processingHGXSCTG);
  131. processing.add(temp);
  132. //装配已处理具体
  133. temp = new HashMap<>();
  134. temp.put("name", "通过");
  135. temp.put("value", processedPassed);
  136. processed.add(temp);
  137. temp = new HashMap<>();
  138. temp.put("name", "不通过");
  139. temp.put("value", processedNotPass);
  140. processed.add(temp);
  141. temp = new HashMap<>();
  142. temp.put("name", "退回");
  143. temp.put("value", processedReject);
  144. processed.add(temp);
  145. //最后装配一起返回
  146. Map<String, List> map = new HashMap<>();
  147. map.put("pending", pending);
  148. map.put("processing", processing);
  149. map.put("processed", processed);
  150. return map;
  151. }
  152. /**
  153. * @Author: huZhiHao
  154. * @Description: 获取月度分类统计
  155. * @Date: 2020/1/13
  156. * @Params:
  157. * @Return:
  158. **/
  159. public Object getTypeStatistic(String streetId, String startTime, String endTime) {
  160. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetIdAndTime(streetId, startTime, endTime);
  161. //创建 申请数量 退回数量 通过数量 不通过数量 列表
  162. List<Integer> apply = new ArrayList<>(), reject = new ArrayList<>(), pass = new ArrayList<>(), notPass = new ArrayList<>();
  163. //创建存量工业用地用途依法改变 申请数量 退回数量 通过数量 不通过数量
  164. Integer useChangeApplyNum = 0, useChangeRejectNum = 0, useChangePassNum = 0, useChangeNotPassNum = 0;
  165. //创建存量工业用地项目公司股权(结构)变更登记 退回数量 通过数量 不通过数量
  166. Integer equityStructureChangeApplyNum = 0, equityStructureChangeRejectNum = 0, equityStructureChangePassNum = 0, equityStructureChangeNotPassNum = 0;
  167. //创建存量工业用地不动产权权属转移登记 退回数量 通过数量 不通过数量
  168. Integer immovablesChangeApplyNum = 0, immovablesChangeRejectNum = 0, immovablesChangePassNum = 0, immovablesChangeNotPassNum = 0;
  169. //创建存量工业用地房屋出租 退回数量 通过数量 不通过数量
  170. Integer rentApplyNum = 0, rentRejectNum = 0, rentPassNum = 0, rentNotPassNum = 0;
  171. //创建X轴坐标名称
  172. List<String> xAxisName = new ArrayList<>();
  173. //创建通过率
  174. int rentPassRate, useChangePassRate, immovablesChangePassRate, equityStructureChangePassRate;
  175. for (StockLandStatistic stockLand : stockLandList) {
  176. if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.RENT)) {
  177. //存量工业用地房屋出租
  178. rentApplyNum++;
  179. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  180. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  181. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  182. //通过
  183. rentPassNum++;
  184. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  185. //不通过
  186. rentNotPassNum++;
  187. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  188. //退回
  189. rentRejectNum++;
  190. }
  191. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.EQUITY_STRUCTURE_CHANGE)) {
  192. //存量工业用地项目公司股权(结构)变更登记
  193. equityStructureChangeApplyNum++;
  194. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  195. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  196. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  197. //通过
  198. equityStructureChangePassNum++;
  199. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  200. //不通过
  201. equityStructureChangeNotPassNum++;
  202. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  203. //退回
  204. equityStructureChangeRejectNum++;
  205. }
  206. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.IMMOVABLES_CHANGE)) {
  207. //存量工业用地不动产权权属转移登记
  208. immovablesChangeApplyNum++;
  209. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  210. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  211. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  212. //通过
  213. immovablesChangePassNum++;
  214. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  215. //不通过
  216. immovablesChangeNotPassNum++;
  217. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  218. //退回
  219. immovablesChangeRejectNum++;
  220. }
  221. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.USE_CHANGE)) {
  222. //存量工业用地用途依法改变
  223. useChangeApplyNum++;
  224. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  225. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  226. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  227. //通过
  228. useChangePassNum++;
  229. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  230. //不通过
  231. useChangeNotPassNum++;
  232. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  233. //退回
  234. useChangeRejectNum++;
  235. }
  236. }
  237. }
  238. List<Map> listMap = new ArrayList<>();
  239. Map<String, Object> temp;
  240. //装配申请数量具体
  241. //存量工业用地房屋出租
  242. apply.add(rentApplyNum);
  243. //存量工业用地用途依法改变
  244. apply.add(useChangeApplyNum);
  245. //存量工业用地不动产权权属转移登记
  246. apply.add(immovablesChangeApplyNum);
  247. //存量工业用地项目公司股权(结构)变更登记
  248. apply.add(equityStructureChangeApplyNum);
  249. temp = new HashMap<>();
  250. temp.put("name", "申请数量");
  251. temp.put("type", "bar");
  252. temp.put("data", apply);
  253. listMap.add(temp);
  254. //存量工业用地房屋出租
  255. reject.add(rentRejectNum);
  256. //存量工业用地用途依法改变
  257. reject.add(useChangeRejectNum);
  258. //存量工业用地不动产权权属转移登记
  259. reject.add(immovablesChangeRejectNum);
  260. //存量工业用地项目公司股权(结构)变更登记
  261. reject.add(equityStructureChangeRejectNum);
  262. temp = new HashMap<>();
  263. temp.put("name", "退回数量");
  264. temp.put("type", "bar");
  265. temp.put("data", reject);
  266. listMap.add(temp);
  267. //存量工业用地房屋出租
  268. pass.add(rentPassNum);
  269. //存量工业用地用途依法改变
  270. pass.add(useChangePassNum);
  271. //存量工业用地不动产权权属转移登记
  272. pass.add(immovablesChangePassNum);
  273. //存量工业用地项目公司股权(结构)变更登记
  274. pass.add(equityStructureChangePassNum);
  275. temp = new HashMap<>();
  276. temp.put("name", "审核通过");
  277. temp.put("type", "bar");
  278. temp.put("data", pass);
  279. listMap.add(temp);
  280. //存量工业用地房屋出租
  281. notPass.add(rentNotPassNum);
  282. //存量工业用地用途依法改变
  283. notPass.add(useChangeNotPassNum);
  284. //存量工业用地不动产权权属转移登记
  285. notPass.add(immovablesChangeNotPassNum);
  286. //存量工业用地项目公司股权(结构)变更登记
  287. notPass.add(equityStructureChangeNotPassNum);
  288. temp = new HashMap<>();
  289. temp.put("name", "审核不通过");
  290. temp.put("type", "bar");
  291. temp.put("data", notPass);
  292. listMap.add(temp);
  293. rentPassRate = rentApplyNum == 0 ? 0 : rentPassNum * 100 / rentApplyNum;
  294. useChangePassRate = useChangeApplyNum == 0 ? 0 : useChangePassNum * 100 / useChangeApplyNum;
  295. immovablesChangePassRate = immovablesChangeApplyNum == 0 ? 0 : immovablesChangePassNum * 100 / immovablesChangeApplyNum;
  296. equityStructureChangePassRate = equityStructureChangeApplyNum == 0 ? 0 : equityStructureChangePassNum * 100 / equityStructureChangeApplyNum;
  297. xAxisName.add("存量工业用地房屋出租 \n\n通过率:" + rentPassRate + "%");
  298. xAxisName.add("存量工业用地用途依法改变 \n\n通过率:" + useChangePassRate + "%");
  299. xAxisName.add("存量工业用地不动产权权属转移登记 \n\n通过率:" + immovablesChangePassRate + "%");
  300. xAxisName.add("存量工业用地项目公司股权(结构)变更登记 \n\n通过率:" + equityStructureChangePassRate + "%");
  301. Map ret = new HashMap();
  302. ret.put("data", listMap);
  303. ret.put("xAxisName", xAxisName);
  304. return ret;
  305. }
  306. /**
  307. * @Author: huZhiHao
  308. * @Description: 获取月度审核结果对比
  309. * @Date: 2020/1/13
  310. * @Params:
  311. * @Return:
  312. **/
  313. public Object getMonthlyApproveResult() {
  314. String[] timeMorning = new String[12];
  315. String[] timeEvening = new String[12];
  316. Date date1 = new Date();//获取当前时间
  317. String endTime = DateUtil.getTimeString(date1);
  318. List<Map> listMap = new ArrayList<>();
  319. //创建X轴坐标名称
  320. List<String> xAxisName = new ArrayList<>();
  321. try {
  322. for (int i = 0; i <= 11; i++) {
  323. Calendar calendar = Calendar.getInstance();
  324. calendar.setTime(date1);
  325. calendar.add(Calendar.MONTH, i - 11);//当前时间前去一个月,即一个月前的时间
  326. Date date2 = calendar.getTime();//获取一年前的时间,或者一个月前的时间
  327. String dateString = DateUtil.getTimeString(date2);
  328. String date_str = dateString.split(" ")[0];
  329. Calendar cale = Calendar.getInstance();
  330. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  331. cale.setTime(formatter.parse(date_str));
  332. cale.add(Calendar.MONTH, 0);
  333. cale.set(Calendar.DAY_OF_MONTH, 1);
  334. timeMorning[i] = formatter.format(cale.getTime()) + " 00:00:00"; // 当月第一天 2019-02-01
  335. cale.add(Calendar.MONTH, 1);
  336. cale.set(Calendar.DAY_OF_MONTH, 0);
  337. timeEvening[i] = formatter.format(cale.getTime()) + " 23:59:59"; // 当月最后一天 2019-02-28
  338. }
  339. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetIdAndTime(null, timeMorning[0], endTime);
  340. //创建 通过 不通过 退回 数组
  341. int[] passNum = new int[12], notPassNum = new int[12], rejectNum = new int[12];
  342. for (int i = 0; i < 12; i++) {
  343. String[] timeArray = timeMorning[i].split("-");
  344. xAxisName.add(timeArray[0] + "年" + timeArray[1] + "月");
  345. for (StockLandStatistic stockLand : stockLandList) {
  346. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  347. if (dateFormat.parse(timeMorning[i]).getTime() <= dateFormat.parse(stockLand.getCreate_time()).getTime()
  348. && dateFormat.parse(timeEvening[i]).getTime() >= dateFormat.parse(stockLand.getCreate_time()).getTime()) {
  349. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  350. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  351. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  352. //通过
  353. passNum[i]++;
  354. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  355. //不通过
  356. notPassNum[i]++;
  357. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  358. //退回
  359. rejectNum[i]++;
  360. }
  361. }
  362. }
  363. }
  364. Map<String, Object> temp;
  365. temp = new HashMap<>();
  366. temp.put("name", "审核通过");
  367. temp.put("type", "bar");
  368. temp.put("stack", "group1");
  369. temp.put("data", passNum);
  370. listMap.add(temp);
  371. temp = new HashMap<>();
  372. temp.put("name", "审核不通过");
  373. temp.put("type", "bar");
  374. temp.put("stack", "group1");
  375. temp.put("data", notPassNum);
  376. listMap.add(temp);
  377. temp = new HashMap<>();
  378. temp.put("name", "审核退回");
  379. temp.put("type", "bar");
  380. temp.put("stack", "group1");
  381. temp.put("data", rejectNum);
  382. listMap.add(temp);
  383. } catch (ParseException e) {
  384. e.printStackTrace();
  385. }
  386. Map ret = new HashMap();
  387. ret.put("data", listMap);
  388. ret.put("xAxisName", xAxisName);
  389. return ret;
  390. }
  391. /**
  392. * @Author: huZhiHao
  393. * @Description: 月度审核统计表
  394. * @Date: 2020/1/13
  395. * @Params:
  396. * @Return:
  397. **/
  398. public Object getMonthlyApproveStatistic(String streetId, String startTime, String endTime) {
  399. try {
  400. /*计算日期*/
  401. String[] timeMorning = null;
  402. String[] timeEvening = null;
  403. Date date1 = new Date();//获取当前时间
  404. int mounthCount = 12;
  405. //如果未传开始结束时间 默认当前月前十二个月
  406. if (StringUtils.isEmpty(startTime) && StringUtils.isEmpty(endTime)) {
  407. mounthCount = 12;
  408. endTime = DateUtil.getTimeString(date1);
  409. } else if (StringUtils.isEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
  410. mounthCount = 12;
  411. date1 = DateUtil.parseTimeStringToDate(endTime, "yyyy-MM-dd");
  412. } else if (StringUtils.isNotEmpty(startTime) && StringUtils.isEmpty(endTime)) {
  413. Date startDate = DateUtil.parseTimeStringToDate(startTime, "yyyy-MM-dd");
  414. endTime = DateUtil.getTimeString(date1);
  415. Date endDate = DateUtil.parseTimeStringToDate(endTime, "yyyy-MM-dd");
  416. mounthCount = DateUtil.getMonthDiff(startDate, endDate);
  417. } else {
  418. Date startDate = DateUtil.parseTimeStringToDate(startTime, "yyyy-MM-dd");
  419. Date endDate = DateUtil.parseTimeStringToDate(endTime, "yyyy-MM-dd");
  420. date1 = DateUtil.parseTimeStringToDate(endTime, "yyyy-MM-dd");
  421. mounthCount = DateUtil.getMonthDiff(startDate, endDate);
  422. }
  423. timeMorning = new String[mounthCount];
  424. timeEvening = new String[mounthCount];
  425. for (int i = 0; i < mounthCount; i++) {
  426. Calendar calendar = Calendar.getInstance();
  427. calendar.setTime(date1);
  428. calendar.add(Calendar.MONTH, i - (mounthCount - 1));//当前时间前去一个月,即一个月前的时间
  429. Date date2 = calendar.getTime();//获取一年前的时间,或者一个月前的时间
  430. String dateString = DateUtil.getTimeString(date2);
  431. String date_str = dateString.split(" ")[0];
  432. Calendar cale = Calendar.getInstance();
  433. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  434. cale.setTime(formatter.parse(date_str));
  435. cale.add(Calendar.MONTH, 0);
  436. cale.set(Calendar.DAY_OF_MONTH, 1);
  437. timeMorning[i] = formatter.format(cale.getTime()) + " 00:00:00"; // 当月第一天
  438. cale.add(Calendar.MONTH, 1);
  439. cale.set(Calendar.DAY_OF_MONTH, 0);
  440. timeEvening[i] = formatter.format(cale.getTime()) + " 23:59:59"; // 当月最后一天
  441. }
  442. if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
  443. startTime = timeMorning[0];
  444. }
  445. /*计算日期*/
  446. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetIdAndTime(streetId, startTime, endTime);
  447. Map<String, Object> map = null;
  448. List<Map> resultList = new ArrayList<>();
  449. //初始化统计值
  450. int rentApplyAmountNum = 0, rentPassAmountNum = 0, useChangeApplyAmountNum = 0, useChangePassAmountNum = 0, immovablesChangeApplyAmountNum = 0, immovablesChangePassAmountNum = 0,
  451. equityStructureChangeApplyAmountNum = 0, equityStructureChangePassAmountNum = 0, equityStructureChangeSummaryProcedureApplyAmountNum = 0, equityStructureChangeSummaryProcedurePassAmountNum = 0,
  452. immovablesChangeSummaryProcedureApplyAmountNum = 0, immovablesChangeSummaryProcedurePassAmountNum = 0, totalApplyAmountNum = 0, totalPassAmountNum = 0;
  453. for (int i = 0; i < mounthCount; i++) {
  454. map = new HashMap<>();
  455. //行名称
  456. String[] timeArray = timeMorning[i].split("-");
  457. // stockLandMonthlyApproveStatistic.setRowName(timeArray[0] + "年" + timeArray[1] + "月");
  458. map.put("rowName", timeArray[0] + "年" + timeArray[1] + "月");
  459. //初始化统计值
  460. int rentApplyNum = 0, rentPassNum = 0, useChangeApplyNum = 0, useChangePassNum = 0, immovablesChangeApplyNum = 0, immovablesChangePassNum = 0,
  461. equityStructureChangeApplyNum = 0, equityStructureChangePassNum = 0, equityStructureChangeSummaryProcedureApplyNum = 0, equityStructureChangeSummaryProcedurePassNum = 0,
  462. immovablesChangeSummaryProcedureApplyNum = 0, immovablesChangeSummaryProcedurePassNum = 0, totalApplyNum = 0, totalPassNum = 0;
  463. for (StockLandStatistic stockLand : stockLandList) {
  464. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  465. if (dateFormat.parse(timeMorning[i]).getTime() <= dateFormat.parse(stockLand.getCreate_time()).getTime()
  466. && dateFormat.parse(timeEvening[i]).getTime() >= dateFormat.parse(stockLand.getCreate_time()).getTime()) {
  467. if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.RENT)) {
  468. //存量工业用地房屋出租
  469. totalApplyNum++;
  470. rentApplyNum++;
  471. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  472. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  473. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  474. //通过
  475. totalPassNum++;
  476. rentPassNum++;
  477. }
  478. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.USE_CHANGE)) {
  479. //存量工业用地用途依法改变
  480. totalApplyNum++;
  481. useChangeApplyNum++;
  482. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  483. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  484. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  485. //通过
  486. totalPassNum++;
  487. useChangePassNum++;
  488. }
  489. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.IMMOVABLES_CHANGE)) {
  490. //存量工业用地不动产权权属转移登记
  491. totalApplyNum++;
  492. immovablesChangeApplyNum++;
  493. //是否简易流程
  494. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.JYLCHQ)) {
  495. immovablesChangeSummaryProcedureApplyNum++;
  496. }
  497. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  498. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  499. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  500. //通过
  501. totalPassNum++;
  502. immovablesChangePassNum++;
  503. //是否简易流程
  504. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_APPROVED)) {
  505. immovablesChangeSummaryProcedurePassNum++;
  506. }
  507. }
  508. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.EQUITY_STRUCTURE_CHANGE)) {
  509. //存量工业用地项目公司股权(结构)变更登记
  510. totalApplyNum++;
  511. equityStructureChangeApplyNum++;
  512. //是否简易流程
  513. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  514. equityStructureChangeSummaryProcedureApplyNum++;
  515. }
  516. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  517. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  518. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  519. //通过
  520. totalPassNum++;
  521. equityStructureChangePassNum++;
  522. //是否简易流程
  523. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  524. equityStructureChangeSummaryProcedurePassNum++;
  525. }
  526. }
  527. }
  528. }
  529. }
  530. rentApplyAmountNum += rentApplyNum;
  531. rentPassAmountNum += rentPassNum;
  532. useChangeApplyAmountNum += useChangeApplyNum;
  533. useChangePassAmountNum += useChangePassNum;
  534. immovablesChangeApplyAmountNum += immovablesChangeApplyNum;
  535. immovablesChangePassAmountNum += immovablesChangePassNum;
  536. equityStructureChangeApplyAmountNum += equityStructureChangeApplyNum;
  537. equityStructureChangePassAmountNum += equityStructureChangePassNum;
  538. equityStructureChangeSummaryProcedureApplyAmountNum += equityStructureChangeSummaryProcedureApplyNum;
  539. equityStructureChangeSummaryProcedurePassAmountNum += equityStructureChangeSummaryProcedurePassNum;
  540. immovablesChangeSummaryProcedureApplyAmountNum += immovablesChangeSummaryProcedureApplyNum;
  541. immovablesChangeSummaryProcedurePassAmountNum += immovablesChangeSummaryProcedurePassNum;
  542. totalApplyAmountNum += totalApplyNum;
  543. totalPassAmountNum += totalPassNum;
  544. map.put("rentApplyNum", rentApplyNum);
  545. map.put("rentPassNum", rentPassNum);
  546. map.put("rentPassRate", rentApplyNum == 0 ? 0 : rentPassNum * 100 / rentApplyNum);
  547. map.put("useChangeApplyNum", useChangeApplyNum);
  548. map.put("useChangePassNum", useChangePassNum);
  549. map.put("useChangePassRate", useChangeApplyNum == 0 ? 0 : useChangePassNum * 100 / useChangeApplyNum);
  550. map.put("immovablesChangeApplyNum", immovablesChangeApplyNum + "(" + immovablesChangeSummaryProcedureApplyNum + ")");
  551. map.put("immovablesChangePassNum", immovablesChangePassNum + "(" + immovablesChangeSummaryProcedurePassNum + ")");
  552. map.put("immovablesChangePassRate",
  553. (immovablesChangeApplyNum == 0 ? 0 : immovablesChangePassNum * 100 / immovablesChangeApplyNum)
  554. + "%(" + (immovablesChangeSummaryProcedureApplyNum == 0 ? 0 : immovablesChangeSummaryProcedurePassNum * 100 / immovablesChangeSummaryProcedureApplyNum) + "%)"
  555. );
  556. map.put("equityStructureChangeApplyNum", equityStructureChangeApplyNum + "(" + equityStructureChangeSummaryProcedureApplyNum + ")");
  557. map.put("equityStructureChangePassNum", equityStructureChangePassNum + "(" + equityStructureChangeSummaryProcedurePassNum + ")");
  558. map.put("equityStructureChangePassRate",
  559. (equityStructureChangeApplyNum == 0 ? 0 : equityStructureChangePassNum * 100 / equityStructureChangeApplyNum)
  560. + "%(" + (equityStructureChangeSummaryProcedureApplyNum == 0 ? 0 : equityStructureChangeSummaryProcedurePassNum * 100 / equityStructureChangeSummaryProcedureApplyNum) + "%)"
  561. );
  562. map.put("totalApplyNum", totalApplyNum);
  563. map.put("totalPassNum", totalPassNum);
  564. map.put("totalPassRate", totalApplyNum == 0 ? 0 : totalPassNum * 100 / totalApplyNum);
  565. resultList.add(map);
  566. }
  567. map = new HashMap<>();
  568. map.put("rowName", "合计");
  569. map.put("rentApplyNum", rentApplyAmountNum);
  570. map.put("rentPassNum", rentPassAmountNum);
  571. map.put("rentPassRate", rentApplyAmountNum == 0 ? 0 : rentPassAmountNum * 100 / rentApplyAmountNum);
  572. map.put("useChangeApplyNum", useChangeApplyAmountNum);
  573. map.put("useChangePassNum", useChangePassAmountNum);
  574. map.put("useChangePassRate", useChangeApplyAmountNum == 0 ? 0 : useChangePassAmountNum * 100 / useChangeApplyAmountNum);
  575. map.put("immovablesChangeApplyNum", immovablesChangeApplyAmountNum+ "(" + immovablesChangeSummaryProcedureApplyAmountNum + ")");
  576. map.put("immovablesChangePassNum", immovablesChangePassAmountNum+ "(" + immovablesChangeSummaryProcedurePassAmountNum + ")");
  577. map.put("immovablesChangePassRate",
  578. (immovablesChangeApplyAmountNum == 0 ? 0 : immovablesChangePassAmountNum * 100 / immovablesChangeApplyAmountNum)
  579. + "%(" + (immovablesChangeSummaryProcedureApplyAmountNum == 0 ? 0 : immovablesChangeSummaryProcedurePassAmountNum * 100 / immovablesChangeSummaryProcedureApplyAmountNum) + "%)"
  580. );
  581. map.put("equityStructureChangeApplyNum", equityStructureChangeApplyAmountNum + "(" + equityStructureChangeSummaryProcedureApplyAmountNum + ")");
  582. map.put("equityStructureChangePassNum", equityStructureChangePassAmountNum + "(" + equityStructureChangeSummaryProcedurePassAmountNum + ")");
  583. map.put("equityStructureChangePassRate",
  584. (equityStructureChangeApplyAmountNum == 0 ? 0 : equityStructureChangePassAmountNum * 100 / equityStructureChangeApplyAmountNum)
  585. + "%(" + (equityStructureChangeSummaryProcedureApplyAmountNum == 0 ? 0 : equityStructureChangeSummaryProcedurePassAmountNum * 100 / equityStructureChangeSummaryProcedureApplyAmountNum) + "%)"
  586. );
  587. map.put("totalApplyNum", totalApplyAmountNum);
  588. map.put("totalPassNum", totalPassAmountNum);
  589. map.put("totalPassRate", totalApplyAmountNum == 0 ? 0 : totalPassAmountNum * 100 / totalApplyAmountNum);
  590. resultList.add(map);
  591. return resultList;
  592. } catch (ParseException e) {
  593. e.printStackTrace();
  594. }
  595. return null;
  596. }
  597. /**
  598. * @Author: huZhiHao
  599. * @Description: 板块统计表
  600. * @Date: 2020/1/13
  601. * @Params:
  602. * @Return:
  603. **/
  604. public Object getPlateStatistic(String startTime, String endTime) {
  605. //所有街道列表
  606. List<Street> streetList = streetService.findList();
  607. int[] rentApplyNum = new int[streetList.size() + 1], rentRejectNum = new int[streetList.size() + 1], rentPassNum = new int[streetList.size() + 1], rentNotPassNum = new int[streetList.size() + 1], rentPassRate = new int[streetList.size() + 1];
  608. int[] useChangeApplyNum = new int[streetList.size() + 1], useChangeRejectNum = new int[streetList.size() + 1], useChangePassNum = new int[streetList.size() + 1], useChangeNotPassNum = new int[streetList.size() + 1], useChangePassRate = new int[streetList.size() + 1];
  609. int[] immovablesChangeApplyNum = new int[streetList.size() + 1], immovablesChangeRejectNum = new int[streetList.size() + 1], immovablesChangePassNum = new int[streetList.size() + 1], immovablesChangeNotPassNum = new int[streetList.size() + 1], immovablesChangePassRate = new int[streetList.size() + 1];
  610. int[] equityStructureChangeApplyNum = new int[streetList.size() + 1], equityStructureChangeRejectNum = new int[streetList.size() + 1], equityStructureChangePassNum = new int[streetList.size() + 1], equityStructureChangeNotPassNum = new int[streetList.size() + 1], equityStructureChangePassRate = new int[streetList.size() + 1];
  611. int[] immovablesChangeSummaryProcedureApplyNum = new int[streetList.size() + 1], immovablesChangeSummaryProcedurePassNum = new int[streetList.size() + 1], immovablesChangeSummaryProcedureNotPassNum = new int[streetList.size() + 1], immovablesChangeSummaryProcedureRejectNum = new int[streetList.size() + 1], immovablesChangeSummaryProcedurePassRate = new int[streetList.size() + 1];
  612. int[] equityStructureChangeSummaryProcedureApplyNum = new int[streetList.size() + 1], equityStructureChangeSummaryProcedurePassNum = new int[streetList.size() + 1], equityStructureChangeSummaryProcedureNotPassNum = new int[streetList.size() + 1], equityStructureChangeSummaryProcedureRejectNum = new int[streetList.size() + 1], equityStructureChangeSummaryProcedurePassRate = new int[streetList.size() + 1];
  613. int[] applyNum = new int[streetList.size() + 1], rejectNum = new int[streetList.size() + 1], passNum = new int[streetList.size() + 1], notPassNum = new int[streetList.size() + 1], passRate = new int[streetList.size() + 1];
  614. String[] immovablesChangeApplyNumStr = new String[streetList.size() + 1], immovablesChangeRejectNumStr = new String[streetList.size() + 1], immovablesChangePassNumStr = new String[streetList.size() + 1], immovablesChangeNotPassNumStr = new String[streetList.size() + 1], immovablesChangePassRateStr = new String[streetList.size() + 1];
  615. String[] equityStructureChangeApplyNumStr = new String[streetList.size() + 1], equityStructureChangeRejectNumStr = new String[streetList.size() + 1], equityStructureChangePassNumStr = new String[streetList.size() + 1], equityStructureChangeNotPassNumStr = new String[streetList.size() + 1], equityStructureChangePassRateStr = new String[streetList.size() + 1];
  616. //存量用地信息
  617. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetIdAndTime(null, startTime, endTime);
  618. for (StockLandStatistic stockLand : stockLandList) {
  619. if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.RENT)) {
  620. //存量工业用地房屋出租
  621. for (int i = 0; i < streetList.size(); i++) {
  622. //判断是哪个街道
  623. if (Objects.equals(stockLand.getStreet_id(), streetList.get(i).getId().toString())) {
  624. applyNum[i]++;
  625. rentApplyNum[i]++;
  626. applyNum[streetList.size()]++;
  627. rentApplyNum[streetList.size()]++;
  628. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  629. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  630. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  631. //通过
  632. passNum[i]++;
  633. rentPassNum[i]++;
  634. passNum[streetList.size()]++;
  635. rentPassNum[streetList.size()]++;
  636. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  637. //不通过
  638. notPassNum[i]++;
  639. rentNotPassNum[i]++;
  640. notPassNum[streetList.size()]++;
  641. rentNotPassNum[streetList.size()]++;
  642. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  643. //退回
  644. rejectNum[i]++;
  645. rentRejectNum[i]++;
  646. rejectNum[streetList.size()]++;
  647. rentRejectNum[streetList.size()]++;
  648. }
  649. }
  650. }
  651. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.USE_CHANGE)) {
  652. //存量工业用地用途依法改变
  653. for (int i = 0; i < streetList.size(); i++) {
  654. //判断是哪个街道
  655. if (Objects.equals(stockLand.getStreet_id(), streetList.get(i).getId().toString())) {
  656. applyNum[i]++;
  657. useChangeApplyNum[i]++;
  658. applyNum[streetList.size()]++;
  659. useChangeApplyNum[streetList.size()]++;
  660. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  661. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  662. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  663. //通过
  664. passNum[i]++;
  665. useChangePassNum[i]++;
  666. passNum[streetList.size()]++;
  667. useChangePassNum[streetList.size()]++;
  668. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  669. //不通过
  670. notPassNum[i]++;
  671. useChangeNotPassNum[i]++;
  672. notPassNum[streetList.size()]++;
  673. useChangeNotPassNum[streetList.size()]++;
  674. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  675. //退回
  676. rejectNum[i]++;
  677. useChangeRejectNum[i]++;
  678. rejectNum[streetList.size()]++;
  679. useChangeRejectNum[streetList.size()]++;
  680. }
  681. }
  682. }
  683. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.IMMOVABLES_CHANGE)) {
  684. //存量工业用地不动产权权属转移登记
  685. for (int i = 0; i < streetList.size(); i++) {
  686. //判断是哪个街道
  687. if (Objects.equals(stockLand.getStreet_id(), streetList.get(i).getId().toString())) {
  688. applyNum[i]++;
  689. immovablesChangeApplyNum[i]++;
  690. applyNum[streetList.size()]++;
  691. immovablesChangeApplyNum[streetList.size()]++;
  692. //是否简易流程
  693. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.JYLCHQ)) {
  694. immovablesChangeSummaryProcedureApplyNum[i]++;
  695. immovablesChangeSummaryProcedureApplyNum[streetList.size()]++;
  696. }
  697. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  698. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  699. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  700. //通过
  701. passNum[i]++;
  702. immovablesChangePassNum[i]++;
  703. passNum[streetList.size()]++;
  704. immovablesChangePassNum[streetList.size()]++;
  705. //是否简易流程
  706. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_APPROVED)) {
  707. immovablesChangeSummaryProcedurePassNum[i]++;
  708. immovablesChangeSummaryProcedurePassNum[streetList.size()]++;
  709. }
  710. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  711. //不通过
  712. notPassNum[i]++;
  713. immovablesChangeNotPassNum[i]++;
  714. notPassNum[streetList.size()]++;
  715. immovablesChangeNotPassNum[streetList.size()]++;
  716. //是否简易流程
  717. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_DENY)) {
  718. immovablesChangeSummaryProcedureNotPassNum[i]++;
  719. immovablesChangeSummaryProcedureNotPassNum[streetList.size()]++;
  720. }
  721. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  722. //退回
  723. rejectNum[i]++;
  724. immovablesChangeRejectNum[i]++;
  725. rejectNum[streetList.size()]++;
  726. immovablesChangeRejectNum[streetList.size()]++;
  727. //是否简易流程
  728. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_DENY)) {
  729. immovablesChangeSummaryProcedureRejectNum[i]++;
  730. immovablesChangeSummaryProcedureRejectNum[streetList.size()]++;
  731. }
  732. }
  733. }
  734. }
  735. } else if (Objects.equals(stockLand.getApply_type(), Constant.LandApplyType.EQUITY_STRUCTURE_CHANGE)) {
  736. //存量工业用地项目公司股权(结构)变更登记
  737. for (int i = 0; i < streetList.size(); i++) {
  738. //判断是哪个街道
  739. if (Objects.equals(stockLand.getStreet_id(), streetList.get(i).getId().toString())) {
  740. applyNum[i]++;
  741. equityStructureChangeApplyNum[i]++;
  742. applyNum[streetList.size()]++;
  743. equityStructureChangeApplyNum[streetList.size()]++;
  744. //是否简易流程
  745. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  746. equityStructureChangeSummaryProcedureApplyNum[i]++;
  747. equityStructureChangeSummaryProcedureApplyNum[streetList.size()]++;
  748. }
  749. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  750. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  751. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  752. //通过
  753. passNum[i]++;
  754. equityStructureChangePassNum[i]++;
  755. passNum[streetList.size()]++;
  756. equityStructureChangePassNum[streetList.size()]++;
  757. //是否简易流程
  758. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  759. equityStructureChangeSummaryProcedurePassNum[i]++;
  760. equityStructureChangeSummaryProcedurePassNum[streetList.size()]++;
  761. }
  762. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  763. //不通过
  764. notPassNum[i]++;
  765. equityStructureChangeNotPassNum[i]++;
  766. notPassNum[streetList.size()]++;
  767. equityStructureChangeNotPassNum[streetList.size()]++;
  768. //是否简易流程
  769. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  770. equityStructureChangeSummaryProcedureNotPassNum[i]++;
  771. equityStructureChangeSummaryProcedureNotPassNum[streetList.size()]++;
  772. }
  773. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  774. //退回
  775. rejectNum[i]++;
  776. equityStructureChangeRejectNum[i]++;
  777. rejectNum[streetList.size()]++;
  778. equityStructureChangeRejectNum[streetList.size()]++;
  779. //是否简易流程
  780. if (StringUtils.isNotEmpty(stockLand.getSummary_procedure())) {
  781. equityStructureChangeSummaryProcedureRejectNum[i]++;
  782. equityStructureChangeSummaryProcedureRejectNum[streetList.size()]++;
  783. }
  784. }
  785. }
  786. }
  787. }
  788. }
  789. Map map = new HashMap();
  790. List<Map> applyResultList = new ArrayList<>();
  791. List<Map> passResultList = new ArrayList<>();
  792. List<Map> notPassResultList = new ArrayList<>();
  793. List<Map> rejectResultList = new ArrayList<>();
  794. List<Map> passRateResultList = new ArrayList<>();
  795. /*提交数量*/
  796. Map rentApplyNumMap = new HashMap();
  797. rentApplyNumMap.put("name", "存量工业用地房屋出租");
  798. rentApplyNumMap.put("streetNum", rentApplyNum);
  799. Map useChangeApplyNumMap = new HashMap();
  800. useChangeApplyNumMap.put("name", "存量工业用地用途依法改变");
  801. useChangeApplyNumMap.put("streetNum", useChangeApplyNum);
  802. Map immovablesChangeApplyNumMap = new HashMap();
  803. immovablesChangeApplyNumMap.put("name", "存量工业用地不动产权权属转移登记");
  804. immovablesChangeApplyNumMap.put("streetNum", immovablesChangeApplyNumStr);
  805. Map equityStructureChangeApplyNumMap = new HashMap();
  806. equityStructureChangeApplyNumMap.put("name", "存量工业用地项目公司股权(结构)变更登记");
  807. equityStructureChangeApplyNumMap.put("streetNum", equityStructureChangeApplyNumStr);
  808. applyResultList.add(rentApplyNumMap);
  809. applyResultList.add(useChangeApplyNumMap);
  810. applyResultList.add(immovablesChangeApplyNumMap);
  811. applyResultList.add(equityStructureChangeApplyNumMap);
  812. Map applyNumMap = new HashMap();
  813. applyNumMap.put("name", "提交数量");
  814. applyNumMap.put("num", applyNum);
  815. applyNumMap.put("type", applyResultList);
  816. /*提交数量*/
  817. /*退回数量*/
  818. Map rentRejectNumMap = new HashMap();
  819. rentRejectNumMap.put("name", "存量工业用地房屋出租");
  820. rentRejectNumMap.put("streetNum", rentRejectNum);
  821. Map useChangeRejectNumMap = new HashMap();
  822. useChangeRejectNumMap.put("name", "存量工业用地用途依法改变");
  823. useChangeRejectNumMap.put("streetNum", useChangeRejectNum);
  824. Map immovablesChangeRejectNumMap = new HashMap();
  825. immovablesChangeRejectNumMap.put("name", "存量工业用地不动产权权属转移登记");
  826. immovablesChangeRejectNumMap.put("streetNum", immovablesChangeRejectNumStr);
  827. Map equityStructureChangeRejectNumMap = new HashMap();
  828. equityStructureChangeRejectNumMap.put("name", "存量工业用地项目公司股权(结构)变更登记");
  829. equityStructureChangeRejectNumMap.put("streetNum", equityStructureChangeRejectNumStr);
  830. rejectResultList.add(rentRejectNumMap);
  831. rejectResultList.add(useChangeRejectNumMap);
  832. rejectResultList.add(immovablesChangeRejectNumMap);
  833. rejectResultList.add(equityStructureChangeRejectNumMap);
  834. Map rejectNumMap = new HashMap();
  835. rejectNumMap.put("name", "退回数量");
  836. rejectNumMap.put("num", rejectNum);
  837. rejectNumMap.put("type", rejectResultList);
  838. /*退回数量*/
  839. /*通过数量*/
  840. Map rentPassNumMap = new HashMap();
  841. rentPassNumMap.put("name", "存量工业用地房屋出租");
  842. rentPassNumMap.put("streetNum", rentPassNum);
  843. Map useChangePassNumMap = new HashMap();
  844. useChangePassNumMap.put("name", "存量工业用地用途依法改变");
  845. useChangePassNumMap.put("streetNum", useChangePassNum);
  846. Map immovablesChangePassNumMap = new HashMap();
  847. immovablesChangePassNumMap.put("name", "存量工业用地不动产权权属转移登记");
  848. immovablesChangePassNumMap.put("streetNum", immovablesChangePassNumStr);
  849. Map equityStructureChangePassNumMap = new HashMap();
  850. equityStructureChangePassNumMap.put("name", "存量工业用地项目公司股权(结构)变更登记");
  851. equityStructureChangePassNumMap.put("streetNum", equityStructureChangePassNumStr);
  852. passResultList.add(rentPassNumMap);
  853. passResultList.add(useChangePassNumMap);
  854. passResultList.add(immovablesChangePassNumMap);
  855. passResultList.add(equityStructureChangePassNumMap);
  856. Map passNumMap = new HashMap();
  857. passNumMap.put("name", "通过数量");
  858. passNumMap.put("num", passNum);
  859. passNumMap.put("type", passResultList);
  860. /*通过数量*/
  861. /*不通过数量*/
  862. Map rentNotPassNumMap = new HashMap();
  863. rentNotPassNumMap.put("name", "存量工业用地房屋出租");
  864. rentNotPassNumMap.put("streetNum", rentNotPassNum);
  865. Map useChangeNotPassNumMap = new HashMap();
  866. useChangeNotPassNumMap.put("name", "存量工业用地用途依法改变");
  867. useChangeNotPassNumMap.put("streetNum", useChangeNotPassNum);
  868. Map immovablesChangeNotPassNumMap = new HashMap();
  869. immovablesChangeNotPassNumMap.put("name", "存量工业用地不动产权权属转移登记");
  870. immovablesChangeNotPassNumMap.put("streetNum", immovablesChangeNotPassNumStr);
  871. Map equityStructureChangeNotPassNumMap = new HashMap();
  872. equityStructureChangeNotPassNumMap.put("name", "存量工业用地项目公司股权(结构)变更登记");
  873. equityStructureChangeNotPassNumMap.put("streetNum", equityStructureChangeNotPassNumStr);
  874. notPassResultList.add(rentNotPassNumMap);
  875. notPassResultList.add(useChangeNotPassNumMap);
  876. notPassResultList.add(immovablesChangeNotPassNumMap);
  877. notPassResultList.add(equityStructureChangeNotPassNumMap);
  878. Map notPassNumMap = new HashMap();
  879. notPassNumMap.put("name", "不通过数量");
  880. notPassNumMap.put("num", notPassNum);
  881. notPassNumMap.put("type", notPassResultList);
  882. /*不通过数量*/
  883. /*通过率*/
  884. for (int i = 0; i <= streetList.size(); i++) {
  885. rentPassRate[i] = rentApplyNum[i] == 0 ? 0 : rentPassNum[i] * 100 / rentApplyNum[i];
  886. useChangePassRate[i] = useChangeApplyNum[i] == 0 ? 0 : useChangePassNum[i] * 100 / useChangeApplyNum[i];
  887. immovablesChangePassRate[i] = immovablesChangeApplyNum[i] == 0 ? 0 : immovablesChangePassNum[i] * 100 / immovablesChangeApplyNum[i];
  888. equityStructureChangePassRate[i] = equityStructureChangeApplyNum[i] == 0 ? 0 : equityStructureChangePassNum[i] * 100 / equityStructureChangeApplyNum[i];
  889. immovablesChangeSummaryProcedurePassRate[i] = immovablesChangeSummaryProcedureApplyNum[i] == 0 ? 0 : immovablesChangeSummaryProcedurePassNum[i] * 100 / immovablesChangeSummaryProcedureApplyNum[i];
  890. equityStructureChangeSummaryProcedurePassRate[i] = equityStructureChangeSummaryProcedureApplyNum[i] == 0 ? 0 : equityStructureChangeSummaryProcedurePassNum[i] * 100 / equityStructureChangeSummaryProcedureApplyNum[i];
  891. passRate[i] = applyNum[i] == 0 ? 0 : passNum[i] * 100 / applyNum[i];
  892. equityStructureChangeApplyNumStr[i] = equityStructureChangeApplyNum[i] + "(" + equityStructureChangeSummaryProcedureApplyNum[i] + ")";
  893. equityStructureChangePassNumStr[i] = equityStructureChangePassNum[i] + "(" + equityStructureChangeSummaryProcedurePassNum[i] + ")";
  894. equityStructureChangeNotPassNumStr[i] = equityStructureChangeNotPassNum[i] + "(" + equityStructureChangeSummaryProcedureNotPassNum[i] + ")";
  895. equityStructureChangeRejectNumStr[i] = equityStructureChangeRejectNum[i] + "(" + equityStructureChangeSummaryProcedureRejectNum[i] + ")";
  896. equityStructureChangePassRateStr[i] = equityStructureChangePassRate[i] + "%(" + equityStructureChangeSummaryProcedurePassRate[i] + "%)";
  897. immovablesChangeApplyNumStr[i] = immovablesChangeApplyNum[i] + "(" + immovablesChangeSummaryProcedureApplyNum[i] + ")";
  898. immovablesChangePassNumStr[i] = immovablesChangePassNum[i] + "(" + immovablesChangeSummaryProcedurePassNum[i] + ")";
  899. immovablesChangeNotPassNumStr[i] = immovablesChangeNotPassNum[i] + "(" + immovablesChangeSummaryProcedureNotPassNum[i] + ")";
  900. immovablesChangeRejectNumStr[i] = immovablesChangeRejectNum[i] + "(" + immovablesChangeSummaryProcedureRejectNum[i] + ")";
  901. immovablesChangePassRateStr[i] = immovablesChangePassRate[i] + "%(" + immovablesChangeSummaryProcedurePassRate[i] + "%)";
  902. }
  903. Map rentPassRateNumMap = new HashMap();
  904. rentPassRateNumMap.put("name", "存量工业用地房屋出租");
  905. rentPassRateNumMap.put("streetNum", rentPassRate);
  906. Map useChangePassRateNumMap = new HashMap();
  907. useChangePassRateNumMap.put("name", "存量工业用地用途依法改变");
  908. useChangePassRateNumMap.put("streetNum", useChangePassRate);
  909. Map immovablesChangePassRateNumMap = new HashMap();
  910. immovablesChangePassRateNumMap.put("name", "存量工业用地不动产权权属转移登记");
  911. immovablesChangePassRateNumMap.put("streetNum", immovablesChangePassRateStr);
  912. Map equityStructureChangePassRateNumMap = new HashMap();
  913. equityStructureChangePassRateNumMap.put("name", "存量工业用地项目公司股权(结构)变更登记");
  914. equityStructureChangePassRateNumMap.put("streetNum", equityStructureChangePassRateStr);
  915. passRateResultList.add(rentPassRateNumMap);
  916. passRateResultList.add(useChangePassRateNumMap);
  917. passRateResultList.add(immovablesChangePassRateNumMap);
  918. passRateResultList.add(equityStructureChangePassRateNumMap);
  919. Map passRateMap = new HashMap();
  920. passRateMap.put("name", "通过率");
  921. passRateMap.put("num", passRate);
  922. passRateMap.put("type", passRateResultList);
  923. /*通过率*/
  924. List<Map> data = new ArrayList<>();
  925. data.add(applyNumMap);
  926. data.add(rejectNumMap);
  927. data.add(passNumMap);
  928. data.add(notPassNumMap);
  929. data.add(passRateMap);
  930. map.put("data", data);
  931. Street street1 = new Street();
  932. street1.setName(" ");
  933. Street street2 = new Street();
  934. street2.setName("合计");
  935. streetList.add(0, street1);
  936. streetList.add(street2);
  937. map.put("head", streetList);
  938. return map;
  939. }
  940. /**
  941. * @Author: huZhiHao
  942. * @Description: 每日统计表
  943. * @Date: 2020/1/13
  944. * @Params:
  945. * @Return:
  946. **/
  947. public Object getDailyStatistic(String streetId, String startTime, String endTime) throws ParseException {
  948. List<String> days = getDaysBetweenTwoDay(startTime, endTime);
  949. int mounthCount = days.size();
  950. String[] timeMorning = new String[mounthCount];
  951. String[] timeEvening = new String[mounthCount];
  952. List<Map> listMap = new ArrayList<>();
  953. //创建X轴坐标名称
  954. List<String> xAxisName = new ArrayList<>();
  955. for (int i = 0; i < mounthCount; i++) {
  956. timeMorning[i] = days.get(i) + " 00:00:00";
  957. timeEvening[i] = days.get(i) + " 23:59:59";
  958. }
  959. /*计算日期*/
  960. startTime = startTime + " 00:00:00";
  961. endTime = endTime + " 23:59:59";
  962. List<StockLandStatistic> stockLandList = stockLandDao.findListByStreetIdAndTime(streetId, startTime, endTime);
  963. //创建 通过 不通过 退回 数组
  964. int[] applyNum = new int[mounthCount], passNum = new int[mounthCount], notPassNum = new int[mounthCount], rejectNum = new int[mounthCount];
  965. for (int i = 0; i < mounthCount; i++) {
  966. String[] timeArray = timeMorning[i].split(" ")[0].split("-");
  967. xAxisName.add(timeArray[1] + "月" + timeArray[2] + "日");
  968. for (StockLandStatistic stockLand : stockLandList) {
  969. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  970. if (dateFormat.parse(timeMorning[i]).getTime() <= dateFormat.parse(stockLand.getCreate_time()).getTime()
  971. && dateFormat.parse(timeEvening[i]).getTime() >= dateFormat.parse(stockLand.getCreate_time()).getTime()) {
  972. applyNum[i]++;
  973. if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.PASSED)
  974. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTPASSED)
  975. || Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.APPROVED)) {
  976. //通过
  977. passNum[i]++;
  978. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)) {
  979. //不通过
  980. notPassNum[i]++;
  981. } else if (Objects.equals(stockLand.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  982. //退回
  983. rejectNum[i]++;
  984. }
  985. }
  986. }
  987. }
  988. Map<String, Object> temp;
  989. temp = new HashMap<>();
  990. temp.put("name", "提交数量");
  991. temp.put("type", "line");
  992. temp.put("data", applyNum);
  993. listMap.add(temp);
  994. temp = new HashMap<>();
  995. temp.put("name", "审核通过");
  996. temp.put("type", "line");
  997. temp.put("data", passNum);
  998. listMap.add(temp);
  999. temp = new HashMap<>();
  1000. temp.put("name", "审核不通过");
  1001. temp.put("type", "line");
  1002. temp.put("data", notPassNum);
  1003. listMap.add(temp);
  1004. temp = new HashMap<>();
  1005. temp.put("name", "审核退回");
  1006. temp.put("type", "line");
  1007. temp.put("data", rejectNum);
  1008. listMap.add(temp);
  1009. Map ret = new HashMap();
  1010. ret.put("data", listMap);
  1011. ret.put("xAxisName", xAxisName);
  1012. return ret;
  1013. }
  1014. //取一段时间的每一天
  1015. public static List<String> getDaysBetweenTwoDay(String dateStart, String dateEnd) {
  1016. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1017. List<String> dateList = new ArrayList<String>();
  1018. try {
  1019. Date dateOne = sdf.parse(dateStart);
  1020. Date dateTwo = sdf.parse(dateEnd);
  1021. Calendar calendar = Calendar.getInstance();
  1022. calendar.setTime(dateOne);
  1023. dateList.add(dateStart);
  1024. while (calendar.getTime().before(dateTwo)) { //倒序时间,顺序after改before其他相应的改动。
  1025. calendar.add(Calendar.DAY_OF_MONTH, 1);
  1026. dateList.add(sdf.format(calendar.getTime()));
  1027. }
  1028. } catch (Exception e) {
  1029. e.printStackTrace();
  1030. }
  1031. return dateList;
  1032. }
  1033. }