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 | 83 +++++++++++++++++++++++++---------------- 1 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java index 984d382..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; @@ -143,44 +144,37 @@ @Override 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.get("items"), new TypeReference<List<Map<String, Object>>>() {}); - parameters.remove("items"); - Map<String, Object> timeType = JSON.parseObject((String)parameters.get("timeTypes"), new TypeReference<Map<String, Object>>() {}); - parameters.remove("timeTypes"); - parameters.putAll(timeType); - parameters.put("type", parameters.get("value")); - parameters.remove("value"); + List<Map<String, Object>> list = JSON.parseObject((String)parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() {}); - 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); if (ObjectUtils.isEmpty(map.get("mac"))) { map.remove("mac"); } - map.put("time", map.get("formatTime")); - map.remove("formatTime"); + map.put("time", map.remove("formatTime")); map.putAll(parameters); cs.submit(new Callable<Map<String, List<Object>>>() { @Override @@ -268,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); @@ -318,7 +305,7 @@ // ������������������ if (!parameters.containsKey("mac")) { resultList = new ArrayList<Map<String,Object>>(); - Integer monitorPointId = Integer.valueOf(parameters.get("monitorPoint").toString()); + Integer monitorPointId = Integer.valueOf(parameters.get("monitorPointId").toString()); List<Map<String, Object>> deviceVersions = deviceMapper.getDeviceVersionIdByMonitorPoint(monitorPointId); ExecutorService threadPool = Executors.newCachedThreadPool(); CompletionService<List<Map<String, Object>>> cs = new ExecutorCompletionService<List<Map<String, Object>>>(threadPool); @@ -349,8 +336,7 @@ } Map<String, Map<String, Number[]>> result = new LinkedHashMap<String, Map<String, Number[]>>(); for (Map<String, Object> map : list) { - time = (String) map.get("time"); - map.remove("time"); + time = (String) map.remove("time"); Map<String, Number[]> times = new HashMap<String, Number[]>(); if (result.containsKey(time)) { times = (Map<String, Number[]>) result.get(time); @@ -523,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