From 3a46aae0a8e9e4bd3cb8dcd1185a69a74668995b Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Tue, 15 Dec 2020 14:08:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/moral/controller/ScreenController.java | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 285 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 3fa1e6e..34b7118 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -2,6 +2,7 @@ import java.io.*; import java.lang.reflect.Array; +import java.math.BigDecimal; import java.net.URLEncoder; import java.text.DateFormat; import java.text.DecimalFormat; @@ -19,6 +20,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.Expression; import com.moral.common.bean.Constants; @@ -36,6 +38,7 @@ import com.moral.entity.alarm.AlarmSensorLevel; import com.moral.entity.charts.DataSortCondition; import com.moral.entity.layout.RealTimeDeviceLayout; +import com.moral.mapper.HistoryMapper; import com.moral.service.*; import com.moral.util.*; @@ -89,6 +92,9 @@ @Api(tags = "Screen", description = "������������") public class ScreenController { public static Logger log = Logger.getLogger(ScreenController.class); + + @Resource + private HistoryMapper historyMapper; @Resource AlarmConfigService alarmConfigService; @Resource @@ -721,7 +727,7 @@ */ /*������������start-------------------------------------------------------------------------*/ list.remove(0); - if (list.size() == 23) { + //if (list.size() == 23) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); //���������������������yyyy-MM-dd HH:mm:ss @@ -739,7 +745,7 @@ datas.put("time",time1); list.add(datas); } - } + //} /*������������end-------------------------------------------------------------------------*/ @@ -2072,7 +2078,7 @@ } else { mon = "" + month; } - String table = "history_minutely_" + year + mon; + String table = "history_five_minutely_" + year + mon; List list = deviceService.byMonitorIdGetDeviceAndWind(monitorPointId, table); return list; } @@ -2093,7 +2099,7 @@ } else { mon = "" + month; } - String table = "history_minutely_" + year + mon; + String table = "history_five_minutely_" + year + mon; List list = deviceService.byMonitorIdGetDeviceAndWindSpecial(monitorPointId, table); return list; } @@ -2102,9 +2108,28 @@ @ApiOperation(value = "���������������������������", notes = "���������������������������") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "���������id", required = true, paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "time", value = "���6���(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) + @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) public ResultBean<List<Map<String, Object>>> getWeatherNextDayDataByRegion(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); + List<String> sensorKeys=new ArrayList<>(); + sensorKeys.add("e15"); + parameters.put("sensorKeys",sensorKeys); + List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters); + return new ResultBean<List<Map<String, Object>>>(resultList); + } + + + @GetMapping("forecastPM") + @ApiOperation(value = "������������������������������", notes = "������������������������������") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "���������id", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) + public ResultBean<List<Map<String, Object>>> getForecastAndRealPM(HttpServletRequest request) throws Exception { + Map<String, Object> parameters = getParametersStartingWith(request, null); + List<String> sensorKeys=new ArrayList<>(); + sensorKeys.add("e1"); + sensorKeys.add("e2"); + parameters.put("sensorKeys",sensorKeys); List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters); return new ResultBean<List<Map<String, Object>>>(resultList); } @@ -2693,7 +2718,7 @@ @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPointIds", value = "������monitorid", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")}) - public List<List<Map>> monitorAVGData(HttpServletRequest request) throws Exception { + public ResultBean<List<Map<String,Object>>> monitorAVGData(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); String monitorPointIds = (String) parameters.get("monitorPointIds"); String time = (String) parameters.get("time"); @@ -2706,18 +2731,267 @@ String date1= simpleDateFormat.format(date); String date2= simpleDateFormat.format(calendar.getTime()); String[] mIds = monitorPointIds.split(","); - List<List<Map>> lists = new ArrayList<>(); + List<List<Map<String,Object>>> lists = new ArrayList<>(); if (mIds.length==1 && mIds.length!=0){ String mId = mIds[0]; - List<Map> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mId, date1, date2); + List<Map<String,Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mId, date1, date2); + Double maxO3 = Double.parseDouble(dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 1).get("maxO3").toString()); + Map<String,Object> dailyAvgData =new HashMap<>(); + if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data")!=""){ + dailyAvgData = (Map<String, Object>) dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data"); + dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue()); + }else { + dailyAvgData= historyHourlyService.getAvgDataByMId(mId, date1, date2); + if (dailyAvgData!=null){ + dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue()); + }else { + dailyAvgData = new HashMap<>(); + dailyAvgData.put("PM2_5",""); + dailyAvgData.put("NO2",""); + dailyAvgData.put("SO2",""); + dailyAvgData.put("PM10",""); + dailyAvgData.put("O3_day",""); + dailyAvgData.put("CO",""); + } + } + dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1); + dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1); + Map<String,Object> dayMap = new HashMap<>(); + dayMap.put("data",dailyAvgData); + dayMap.put("time",date1.substring(0,11)); + dataAvbByMIdAndTime.add(dayMap); + for (int i = 0; i <dataAvbByMIdAndTime.size() ; i++) { + if (i!=dataAvbByMIdAndTime.size()-1){ + Map<String, Object> map1 = AQICalculation2.hourlyAQI((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")); + if (Double.parseDouble(map1.get("AQI").toString())>50.0){ + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants",map1.get("maxSensor")); + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI")); + }else { + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants","-"); + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI")); + } + }else { + Map<String, Object> map1 = AQICalculation2.dayAQI((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")); + if (map1.get("AQI").toString().equals("")){ + break; + } + if (Double.parseDouble(map1.get("AQI").toString())>50.0){ + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants",map1.get("maxSensor")); + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI")); + }else { + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants","-"); + ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI")); + } + } + } + List timeList = new ArrayList(); + for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) { + timeList.add(dataAvbByMIdAndTime.get(q).get("time")); + } + if (dataAvbByMIdAndTime.size()<25){ + for (int j = 1; j < 25; j++) { + Map<String,Object> map = null; + for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) { + if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2){ + continue; + }else { + // System.out.println(Integer.parseInt(dataAvbByMIdAndTime.get(q).get("time").toString())+"==="+j); + String sj=""; + if (j<10){ + sj="0"+j; + }else { + if (j==24){ + sj="00"; + }else { + sj=""+j; + } + } + if (!timeList.contains(sj)){ + map = new HashMap<>(); + map.put("time",sj); + Map map1 = new HashMap(); + map1.put("PM2_5",""); + map1.put("NO2",""); + map1.put("primary_pollutants","-"); + map1.put("SO2",""); + map1.put("O3",""); + map1.put("PM10",""); + map1.put("O3_8h",""); + map1.put("CO",""); + map1.put("AQI",""); + map.put("data",map1); + dataAvbByMIdAndTime.add(map); + break; + }else { + break; + } + } + } + } + } + /* for (int i1 = 0; i1 < dataAvbByMIdAndTime.size(); i1++) { + System.out.println(dataAvbByMIdAndTime.get(i1)); + }*/ + Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>(){ + public int compare(Map<String, Object> o1, Map<String, Object> o2) { + String name1 =(String)o1.get("time");//name1���������list������������������������ + String name2= (String)o2.get("time"); //name1���������list���������������������������name + return name1.compareTo(name2); + } + }); + Map map1 = dataAvbByMIdAndTime.get(0); + dataAvbByMIdAndTime.remove(0); + dataAvbByMIdAndTime.add(map1); + for (int j = 0; j <dataAvbByMIdAndTime.size() ; j++) { + if (dataAvbByMIdAndTime.get(j).get("time").toString().length()>2){ + Map map2 = dataAvbByMIdAndTime.get(j); + dataAvbByMIdAndTime.remove(j); + dataAvbByMIdAndTime.add(map2); + } + } + if (dataAvbByMIdAndTime.size()==1){ + dataAvbByMIdAndTime=null; + } lists.add(dataAvbByMIdAndTime); //List<Device> devicesByMonitorPointId = deviceService.getDevicesByMonitorPointId(Integer.valueOf(mId)); }else { for (int i = 0; i <mIds.length ; i++) { - List<Map> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mIds[i], date1, date2); + List<Map<String,Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mIds[i], date1, date2); + Double maxO3 = Double.parseDouble(dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 1).get("maxO3").toString()); + Map<String,Object> dailyAvgData =new HashMap<>(); + if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data")!=""){ + dailyAvgData = (Map<String, Object>) dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data"); + dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue()); + }else { + dailyAvgData= historyHourlyService.getAvgDataByMId(mIds[i], date1, date2); + if (dailyAvgData!=null){ + dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue()); + }else { + dailyAvgData = new HashMap<>(); + dailyAvgData.put("PM2_5",""); + dailyAvgData.put("NO2",""); + dailyAvgData.put("SO2",""); + dailyAvgData.put("PM10",""); + dailyAvgData.put("O3_day",""); + dailyAvgData.put("CO",""); + } + } + dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1); + dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1); + Map<String,Object> dayMap = new HashMap<>(); + dayMap.put("data",dailyAvgData); + dayMap.put("time",date1.substring(0,11)); + dataAvbByMIdAndTime.add(dayMap); + List timeList = new ArrayList(); + for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) { + timeList.add(dataAvbByMIdAndTime.get(q).get("time")); + } + if (dataAvbByMIdAndTime.size()<25){ + for (int j = 1; j < 25; j++) { + Map<String,Object> map = null; + for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) { + if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2){ + continue; + }else { + // System.out.println(Integer.parseInt(dataAvbByMIdAndTime.get(q).get("time").toString())+"==="+j); + String sj=""; + if (j<10){ + sj="0"+j; + }else { + if (j==24){ + sj="00"; + }else { + sj=""+j; + } + } + if (!timeList.contains(sj)){ + map = new HashMap<>(); + map.put("time",sj); + Map map1 = new HashMap(); + map1.put("PM2_5",""); + map1.put("NO2",""); + map1.put("SO2",""); + map1.put("O3",""); + map1.put("PM10",""); + map1.put("O3_8h",""); + map1.put("CO",""); + map.put("data",map1); + dataAvbByMIdAndTime.add(map); + break; + }else { + break; + } + } + } + + } + } + Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>(){ + public int compare(Map<String, Object> o1, Map<String, Object> o2) { + String name1 =(String)o1.get("time");//name1���������list������������������������ + String name2= (String)o2.get("time"); //name1���������list���������������������������name + return name1.compareTo(name2); + } + }); + Map map1 = dataAvbByMIdAndTime.get(0); + dataAvbByMIdAndTime.remove(0); + dataAvbByMIdAndTime.add(map1); + for (int j = 0; j <dataAvbByMIdAndTime.size() ; j++) { + if (dataAvbByMIdAndTime.get(j).get("time").toString().length()>2){ + Map map2 = dataAvbByMIdAndTime.get(j); + dataAvbByMIdAndTime.remove(j); + dataAvbByMIdAndTime.add(map2); + } + } lists.add(dataAvbByMIdAndTime); } + List<Map<String, Object>> dataByMonitorPoints = historyHourlyService.getDataByMonitorPoints(mIds, date1, date2); + lists.add(dataByMonitorPoints); } - return lists; + List<Map<String, Object>> rList =new ArrayList<>(); + if (lists.size()==1 && lists.get(0)!=null){ + for (int i = 0; i < lists.get(0).size(); i++) { + List list = new ArrayList(); + list.add(lists.get(0).get(i).get("data")); + Map map = new HashMap(); + map.put("data",list); + map.put("time",lists.get(0).get(i).get("time")); + rList.add(map); + } + + } else if (lists.size()==1 && lists.get(0)==null){ + rList.add(null); + }else { + for (int j = 0; j < lists.get(0).size(); j++) { + Map<String, Object> listMap = new HashMap(); + List<Map> mapList = new ArrayList<>(); + if (lists.get(0).size() == 1) { + mapList.add(null); + } else { + mapList.add((Map) lists.get(0).get(j).get("data")); + } + for (int i = 1; i < lists.size(); i++) { + if (lists.get(i).size() == 1) { + mapList.add(null); + listMap.put("data", mapList); + } else { + if (lists.get(0).get(j).get("time").equals(lists.get(i).get(j).get("time"))) { + mapList.add((Map) lists.get(i).get(j).get("data")); + } + listMap.put("time", lists.get(0).get(j).get("time")); + listMap.put("data", mapList); + } + } + rList.add(listMap); + } + } + return new ResultBean<List<Map<String,Object>>>(rList); } -} + + @PostMapping("byAccountGetDevices") + public List<Device> byAccountGetDevices(@RequestBody Map<String, Object> parameters) { + String id =parameters.get("id").toString(); + List<Device> devicesList = deviceService.getDevicesByAccountId(id); + return devicesList; + } +} \ No newline at end of file -- Gitblit v1.8.0