| File was renamed from src/main/java/com/moral/service/impl/DataServiceImpl.java | 
|  |  |  | 
|---|
|  |  |  | import java.util.LinkedHashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  | import java.util.Set; | 
|---|
|  |  |  | import java.util.Map.Entry; | 
|---|
|  |  |  | import java.util.Set; | 
|---|
|  |  |  | import java.util.concurrent.Callable; | 
|---|
|  |  |  | import java.util.concurrent.CompletionService; | 
|---|
|  |  |  | import java.util.concurrent.ExecutorCompletionService; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.moral.common.util.ResourceUtil; | 
|---|
|  |  |  | import com.moral.common.util.ValidateUtil; | 
|---|
|  |  |  | import com.moral.entity.Device; | 
|---|
|  |  |  | import com.moral.mapper.DataMapper; | 
|---|
|  |  |  | import com.moral.mapper.HistoryMinutelyMapper; | 
|---|
|  |  |  | import com.moral.mapper.DeviceMapper; | 
|---|
|  |  |  | import com.moral.mapper.SensorMapper; | 
|---|
|  |  |  | import com.moral.service.DataService; | 
|---|
|  |  |  | import com.moral.service.HistoryMinutelyService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Service | 
|---|
|  |  |  | public class DataServiceImpl implements DataService { | 
|---|
|  |  |  | public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private DataMapper dataMapper; | 
|---|
|  |  |  | private HistoryMinutelyMapper historyMinutelyMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private DeviceMapper deviceMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | parameters.put("start", truncate(addDays(date, -1), Calendar.DATE)); | 
|---|
|  |  |  | // 今日00:00:00 | 
|---|
|  |  |  | parameters.put("end", truncate(date, Calendar.DATE)); | 
|---|
|  |  |  | Map<String, Double> average = dataMapper.getDayAQIByDevice(parameters); | 
|---|
|  |  |  | Map<String, Double> average = historyMinutelyMapper.getDayAQIByDevice(parameters); | 
|---|
|  |  |  | return getAQIByDataMap(average); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | resultMap.put("c", null); | 
|---|
|  |  |  | return resultMap; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String type = (String) parameters.get("type"); | 
|---|
|  |  |  | String time = (String) parameters.get("time"); | 
|---|
|  |  |  | String format = (String) parameters.get("format"); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | parameters.put("start", start); | 
|---|
|  |  |  | parameters.put("end", end); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String sensorKey = (String) parameters.get("sensorKey"); | 
|---|
|  |  |  | String sensorKeyColumn = "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey; | 
|---|
|  |  |  | parameters.put("sensorKeyColumn", sensorKeyColumn); | 
|---|
|  |  |  | List<Map<String, Object>> resultList = getMonitorPointOrDeviceAvgData4Excel(parameters); | 
|---|
|  |  |  | //        String type = (String) parameters.get("type"); | 
|---|
|  |  |  | //        String time = (String) parameters.get("time"); | 
|---|
|  |  |  | //        String format = (String) parameters.get("format"); | 
|---|
|  |  |  | //        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; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        parameters.put("start", start); | 
|---|
|  |  |  | //        parameters.put("end", end); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        String sensorKey = (String) parameters.get("sensorKey"); | 
|---|
|  |  |  | //        String sensorKeyColumn = "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey; | 
|---|
|  |  |  | //        parameters.put("sensorKeyColumn", sensorKeyColumn); | 
|---|
|  |  |  | //        List<Object> timeList = new ArrayList<Object>(); | 
|---|
|  |  |  | //        List<Object> dataList = new ArrayList<Object>(); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        if (!parameters.containsKey("mac")) { | 
|---|
|  |  |  | //            Integer monitorPointId = Integer.valueOf((String) parameters.get("monitorPoint")); | 
|---|
|  |  |  | //            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); | 
|---|
|  |  |  | //            //List<Future<Long>> list = new ArrayList<Future<Long>>(); | 
|---|
|  |  |  | //            List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); | 
|---|
|  |  |  | //            for (Map<String, Object> map : deviceVersions) { | 
|---|
|  |  |  | //                cs.submit(new Callable<List<Map<String, Object>>>() { | 
|---|
|  |  |  | //                    @Override | 
|---|
|  |  |  | //                    public List<Map<String, Object>> call() throws Exception { | 
|---|
|  |  |  | //                        Integer deviceVersionId = (Integer) map.get("deviceVersionId"); | 
|---|
|  |  |  | //                        List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId); | 
|---|
|  |  |  | //                        parameters.put("macs", macs); | 
|---|
|  |  |  | //                        return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                }); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            //Future<List<Map<String, Object>>> take = cs.take(); | 
|---|
|  |  |  | //            for (Map<String, Object> map : deviceVersions) { | 
|---|
|  |  |  | //                list.addAll(cs.take().get()); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            Map<String, Map<String, Number>> result = new LinkedHashMap<String, Map<String, Number>>(); | 
|---|
|  |  |  | //            for (Map<String, Object> map : list) { | 
|---|
|  |  |  | //                time = (String) map.get("time"); | 
|---|
|  |  |  | //                if (map.containsKey(sensorKey)) { | 
|---|
|  |  |  | //                    Double data = (Double) map.get(sensorKey); | 
|---|
|  |  |  | //                    Map<String, Number> number; | 
|---|
|  |  |  | //                    Double sum; | 
|---|
|  |  |  | //                    Integer count; | 
|---|
|  |  |  | //                    if (result.containsKey(time)) { | 
|---|
|  |  |  | //                        number = result.get(time); | 
|---|
|  |  |  | //                        count = 1 + (Integer) number.get("count"); | 
|---|
|  |  |  | //                        sum = data + (Double) number.get("sum"); | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        number = new HashMap<String, Number>(); | 
|---|
|  |  |  | //                        count = 1; | 
|---|
|  |  |  | //                        sum = data; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    number.put("count", count); | 
|---|
|  |  |  | //                    number.put("sum", sum); | 
|---|
|  |  |  | //                    number.put("avg", sum / count); | 
|---|
|  |  |  | //                    result.put(time, number); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            Iterator<Entry<String, Map<String, Number>>> iterator= result.entrySet().iterator(); | 
|---|
|  |  |  | //            while(iterator.hasNext()){ | 
|---|
|  |  |  | //                Entry<String, Map<String, Number>> entry = iterator.next(); | 
|---|
|  |  |  | //                String key = entry.getKey(); | 
|---|
|  |  |  | //                timeList.add(key.substring(key.length() - 2)); | 
|---|
|  |  |  | //                dataList.add(entry.getValue().get("avg")); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        } else { | 
|---|
|  |  |  | //            List<Map<String, Object>> demo1 = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | //            for (Map<String, Object> map : demo1) { | 
|---|
|  |  |  | //                time = map.get("time").toString(); | 
|---|
|  |  |  | //                time =time.substring(time.length() - 2); | 
|---|
|  |  |  | //                timeList.add(time); | 
|---|
|  |  |  | //                dataList.add(map.get(sensorKey)); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Object> timeList = new ArrayList<Object>(); | 
|---|
|  |  |  | List<Object> dataList = new ArrayList<Object>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!parameters.containsKey("mac")) { | 
|---|
|  |  |  | Integer monitorPointId = Integer.valueOf((String) parameters.get("monitorPoint")); | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | //List<Future<Long>> list = new ArrayList<Future<Long>>(); | 
|---|
|  |  |  | List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); | 
|---|
|  |  |  | for (Map<String, Object> map : deviceVersions) { | 
|---|
|  |  |  | cs.submit(new Callable<List<Map<String, Object>>>() { | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<Map<String, Object>> call() throws Exception { | 
|---|
|  |  |  | Integer deviceVersionId = (Integer) map.get("deviceVersionId"); | 
|---|
|  |  |  | List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId); | 
|---|
|  |  |  | parameters.put("macs", macs); | 
|---|
|  |  |  | return dataMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //Future<List<Map<String, Object>>> take = cs.take(); | 
|---|
|  |  |  | for (Map<String, Object> map : deviceVersions) { | 
|---|
|  |  |  | list.addAll(cs.take().get()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Map<String, Map<String, Number>> result = new LinkedHashMap<String, Map<String, Number>>(); | 
|---|
|  |  |  | for (Map<String, Object> map : list) { | 
|---|
|  |  |  | time = (String) map.get("time"); | 
|---|
|  |  |  | if (map.containsKey(sensorKey)) { | 
|---|
|  |  |  | Double data = (Double) map.get(sensorKey); | 
|---|
|  |  |  | Map<String, Number> number; | 
|---|
|  |  |  | Double sum; | 
|---|
|  |  |  | Integer count; | 
|---|
|  |  |  | if (result.containsKey(time)) { | 
|---|
|  |  |  | number = result.get(time); | 
|---|
|  |  |  | count = 1 + (Integer) number.get("count"); | 
|---|
|  |  |  | sum = data + (Double) number.get("sum"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | number = new HashMap<String, Number>(); | 
|---|
|  |  |  | count = 1; | 
|---|
|  |  |  | sum = data; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | number.put("count", count); | 
|---|
|  |  |  | number.put("sum", sum); | 
|---|
|  |  |  | number.put("avg", sum / count); | 
|---|
|  |  |  | result.put(time, number); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Iterator<Entry<String, Map<String, Number>>> iterator= result.entrySet().iterator(); | 
|---|
|  |  |  | while(iterator.hasNext()){ | 
|---|
|  |  |  | Entry<String, Map<String, Number>> entry = iterator.next(); | 
|---|
|  |  |  | String key = entry.getKey(); | 
|---|
|  |  |  | timeList.add(key.substring(key.length() - 2)); | 
|---|
|  |  |  | dataList.add(entry.getValue().get("avg")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | List<Map<String, Object>> demo1 = dataMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | for (Map<String, Object> map : demo1) { | 
|---|
|  |  |  | time = map.get("time").toString(); | 
|---|
|  |  |  | time =time.substring(time.length() - 2); | 
|---|
|  |  |  | timeList.add(time); | 
|---|
|  |  |  | dataList.add(map.get(sensorKey)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String sensorKey = (String) parameters.get("sensorKey"); | 
|---|
|  |  |  | for (Map<String, Object> map : resultList) { | 
|---|
|  |  |  | String time = map.get("time").toString(); | 
|---|
|  |  |  | time =time.substring(time.length() - 2); | 
|---|
|  |  |  | timeList.add(time); | 
|---|
|  |  |  | dataList.add(map.get(sensorKey)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String part = (String) parameters.get("part"); | 
|---|
|  |  |  | resultMap.put("time" + part, timeList); | 
|---|
|  |  |  | 
|---|
|  |  |  | parametersB.put("part", "B"); | 
|---|
|  |  |  | parametersB.put("time", parametersB.get("timeb")); | 
|---|
|  |  |  | parametersB.put("monitorPoint", parametersB.get("monitorPointb")); | 
|---|
|  |  |  | parametersB.put("mac", parametersB.get("macb")); | 
|---|
|  |  |  | if (parameters.containsKey("macb")) { | 
|---|
|  |  |  | parametersB.put("mac", parametersB.get("macb")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | parametersB.remove("timeb"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | parameters.put("sensors", sensorKeys); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> macs = deviceMapper.getDeviceMacByMonitorPointAndDeviceVersion(monitorPointId, deviceVersionId); | 
|---|
|  |  |  | parameter.put("macs", macs); | 
|---|
|  |  |  | return dataMapper.getMonitorPointOrDeviceAvgData(parameter); | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(macs) || macs.contains("null") ) { | 
|---|
|  |  |  | return new ArrayList<Map<String,Object>>(); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | parameter.put("macs", macs); | 
|---|
|  |  |  | return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameter); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (Map<String, Object> map : deviceVersions) { | 
|---|
|  |  |  | 
|---|
|  |  |  | parameters.put("sensors", sensorKeys); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | resul = dataMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | resul = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return resul; | 
|---|
|  |  |  | } | 
|---|