LandStatisticsService.java 58 KB

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