From 636af927431b46a0788b7d76233387923135ac0c Mon Sep 17 00:00:00 2001 From: 于紫祥_1901 <email@yuzixiang_1910> Date: Tue, 01 Dec 2020 13:11:21 +0800 Subject: [PATCH] 数据空判断 --- src/main/java/com/moral/controller/ScreenController.java | 383 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 376 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 3a5e467..fb4e86b 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 @@ -701,6 +707,9 @@ //������������������������������������������������ ParameterUtils.getTimeType4Time(parameters); String time1 = (String) parameters.get("time"); + time1 = time1.replaceAll(" ", ""); + parameters.put("time",time1); + String mac1 = (String) parameters.get("mac"); List<Map<String, Object>> list = null; if (mac1 != null && mac1.equals("p5dnd7a0392018") && time1.substring(0, 4).equals("2019")) { @@ -711,13 +720,42 @@ parameters.put("sensors", Arrays.asList(sensorKey)); // monitorPointService.isCompensateCalculation(parameters); list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); + + + /* 0���������������������11������������0���������������������1-24������������������������0������������������������������������24������������ + ������������������24���������������23-24���������24������������������������0��������������� + */ + /*������������start-------------------------------------------------------------------------*/ + list.remove(0); + 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 + time1 = time1 + " 00:00:00"; + Date date = sdf.parse(time1); + date = DateUtil.rollDay(date, 1); + //������������������������ + String time2 = sdf2.format(date); + parameters.put("time", time2); + /*���������������0������������������24���������������������������*/ + List<Map<String, Object>> nextDayList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); + if(!ObjectUtils.isEmpty(nextDayList)){ + time1=time1.replaceAll(" 00:00:00"," 24"); + Map<String, Object> datas = nextDayList.get(0); + datas.put("time",time1); + list.add(datas); + } + } + /*������������end-------------------------------------------------------------------------*/ + + for (Map<String, Object> map : list) { String time = map.get("time").toString(); time = time.substring(time.length() - 2); map.put("time", Integer.valueOf(time)); - if (parameters.get("type").equals("day")) { + /* if (parameters.get("type").equals("day")) { map.put("time", Integer.valueOf(time) + 1); - } + }*/ map.put("value", map.remove(sensorKey)); } } @@ -1455,12 +1493,13 @@ public ModelAndView pollutionSource(ModelAndView model, HttpServletRequest request) throws Exception { Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); String timeStr = parameters.get("time").toString(); - String YearAndDay = timeStr.substring(0, timeStr.lastIndexOf("-")); + String yearAndDay = timeStr.substring(0, timeStr.lastIndexOf("-")); String Hour = timeStr.substring(timeStr.lastIndexOf("-") + 1); - String time = YearAndDay + " " + Hour + ":00:00"; + String time = yearAndDay + " " + Hour + ":00:00"; DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime timeLocalDateTime = LocalDateTime.parse(time, dateTimeFormatter); int month = timeLocalDateTime.getMonth().getValue(); + parameters.put("yearAndDay",yearAndDay); Point dirPoint = historyHourlyService.getDirPoint(parameters); Map<String, Object> getPollutionSourceData = historyHourlyService.getPollutionSourceDataByHour(parameters); if (MapUtils.isEmpty(getPollutionSourceData)) { @@ -2039,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; } @@ -2060,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; } @@ -2069,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); } @@ -2612,10 +2670,321 @@ return deviceList; } + @RequestMapping("/getBiaoZhun") + @ResponseBody + public List<DeviceAdjustValueTiming> getBiaoZhun(String id){ + List<DeviceAdjustValueTiming> dataByDeviceid = deviceAdjustValueTimingService.getDataByDeviceid(Integer.parseInt(id)); + for (DeviceAdjustValueTiming deviceAdjustValueTiming : dataByDeviceid) { + int seconds = Integer.parseInt(deviceAdjustValueTiming.getSeconds()); + String hour = String.valueOf(seconds/3600); + int millAndSeconds = seconds%3600; + String mill = String.valueOf(millAndSeconds/60); + String second = String.valueOf(millAndSeconds%60); + if (hour.length()<2){ + hour="0"+hour; + } + if (mill.length()<2){ + mill="0"+mill; + } + if (second.length()<2){ + second="0"+second; + } + String time = hour+":"+mill+":"+second; + Map<String, String> value = deviceAdjustValueTiming.getValue(); + Collection<String> values = value.values(); + deviceAdjustValueTiming.setSeconds(time); + } + return dataByDeviceid; + } + + @RequestMapping("/getSensor") @ResponseBody public List<Map<String, Object>> getSensor(String id){ List<Map<String, Object>> allSensors = sensorService.getSensorByDeviceId(id); return allSensors; } + + @RequestMapping("/deleteBiaoZhun") + @ResponseBody + public int deleteBiaoZhun(String id){ + int i= deviceAdjustValueTimingService.delete(id); + return i; + } + + + @GetMapping("/monitorAVGData") + @ApiOperation(value = "monitor������������������", notes = "monitor������������������") + @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 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"); + time = time+" 00:00:00"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd mm:HH:ss");//���������������MM + Date date = simpleDateFormat.parse(time); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + calendar.add(calendar.DATE,+1); + String date1= simpleDateFormat.format(date); + String date2= simpleDateFormat.format(calendar.getTime()); + String[] mIds = monitorPointIds.split(","); + List<List<Map<String,Object>>> lists = new ArrayList<>(); + if (mIds.length==1 && mIds.length!=0){ + String mId = mIds[0]; + 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<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); + } + 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); + } } \ No newline at end of file -- Gitblit v1.8.0