From 530aeddc3a2fc1310f68f6c76c82fb4aa99145b4 Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Wed, 28 Mar 2018 14:31:53 +0800 Subject: [PATCH] 报表 优化 --- src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 70 +++++++++++++++++++++++------------ 1 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java index 88fa88d..8f440cd 100644 --- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java @@ -9,6 +9,7 @@ import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -144,32 +145,29 @@ public Map<String, List<Object>> getCompareReport(Map<String, Object> parameters) throws Exception { Map<String, List<Object>> resultMap = new HashMap<String, List<Object>>(); List<Map<String, Object>> list = JSON.parseObject((String)parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() {}); - Map<String, Object> timeType = JSON.parseObject((String)parameters.remove("timeType"), new TypeReference<Map<String, Object>>() {}); - parameters.putAll(timeType); - parameters.put("type", parameters.remove("value")); - ExecutorService threadPool = Executors.newCachedThreadPool(); - CompletionService<Map<String, List<Object>>> cs = new ExecutorCompletionService<Map<String, List<Object>>>(threadPool); - String type = (String) parameters.get("type"); + parameters.putAll(getElementByType(type)); + Integer timeLength = Integer.valueOf(parameters.remove("timeLength").toString()); if ("month".equals(type)) { for (Map<String, Object> map : list) { - int timeLength = Integer.valueOf(parameters.get("timeLength").toString()); String[] formatTime = map.get("formatTime").toString().split("-"); LocalDate localDate = LocalDate.of(Integer.valueOf(formatTime[0]), Integer.valueOf(formatTime[1]), 1); int lengthOfMonth = localDate.lengthOfMonth(); if (lengthOfMonth > timeLength) { - parameters.put("timeLength", lengthOfMonth); + timeLength = lengthOfMonth; } } } List<Object> timeList = new ArrayList<Object>(); - for (int i = 0; i <Integer.valueOf(parameters.get("timeLength").toString()); i++) { + for (int i = 0; i < timeLength; i++) { timeList.add(i, String.format("%02d", "day".equals(type) || "hour".equals(type) ? i : i + 1)); } parameters.put("timeList", timeList); + ExecutorService threadPool = Executors.newCachedThreadPool(); + CompletionService<Map<String, List<Object>>> cs = new ExecutorCompletionService<Map<String, List<Object>>>(threadPool); for (int i = 0; i < list.size(); i++) { Map<String, Object> map = list.get(i); map.put("part", i); @@ -264,27 +262,20 @@ List<Map<String, Object>> resultList ; String type = (String) parameters.get("type"); + if (!parameters.containsKey("field")) { + parameters.putAll(getElementByType(type)); + } String time = (String) parameters.get("time"); String format = (String) parameters.get("format"); + Integer field = Integer.valueOf(parameters.get("field").toString()); Date start = DateUtils.parseDate(time, format), end = null ; if (parameters.containsKey("timeb")) { end = DateUtils.parseDate((String)parameters.get("timeb"), format); } else { - switch (type) { - case "year": - end = DateUtils.addYears(start, 1); - break; - case "month": - end = DateUtils.addMonths(start, 1); - break; - case "day": - end = DateUtils.addDays(start, 1); - break; - case "hour": - end = DateUtils.addHours(start, 1); - break; - } - + Calendar instance = Calendar.getInstance(); + instance.setTime(start); + instance.add(field, 1); + end = instance.getTime(); } parameters.put("start", start); parameters.put("end", end); @@ -518,4 +509,35 @@ } return lineChartDatasWithEmpty; } + + private Map<String, Object> getElementByType(Object type){ + Map<String, Object> resultMap = new HashMap<String, Object>(); + switch (type.toString()) { + case "year": + resultMap.put("format", "yyyy"); + resultMap.put("typeFormat", "%Y-%m"); + resultMap.put("timeLength", 12); + resultMap.put("field", Calendar.YEAR); + break; + case "month": + resultMap.put("format", "yyyy-MM"); + resultMap.put("typeFormat", "%Y-%m-%d"); + resultMap.put("timeLength", 28); + resultMap.put("field", Calendar.MONTH); + break; + case "day": + resultMap.put("format", "yyyy-MM-dd"); + resultMap.put("typeFormat", "%Y-%m-%d %H"); + resultMap.put("timeLength", 24); + resultMap.put("field", Calendar.DATE); + break; + case "hour": + resultMap.put("format", "yyyy-MM-dd HH"); + resultMap.put("typeFormat", "%Y-%m-%d %H:%i"); + resultMap.put("timeLength", 60); + resultMap.put("field", Calendar.HOUR); + break; + } + return resultMap; + } } -- Gitblit v1.8.0