ZhuDongming
2020-05-13 4428fd50d5e8216d5d7bd63a7fc2e1bb8e239d9d
src/main/java/com/moral/controller/ScreenController.java
@@ -823,139 +823,150 @@
        return new ResultBean<List<Map<String, Object>>>(list);
    }
  @GetMapping("report_avg_AreaData")
  @ApiOperation(value = "获取国控因子与监测因子平均值", notes = "获取国控因子与监测因子平均值")
  @ApiImplicitParams(value = {
    @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"),
    @ApiImplicitParam(name = "mac", value = "设备mac", required = false, paramType = "query", dataType = "String"),
    @ApiImplicitParam(name = "areaCode", value = "地区代码", required = true, paramType = "query", dataType = "String"),
    @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
    @ApiImplicitParam(name = "time", value = "时间,月份(格式:2018-03)", required = true, paramType = "query", dataType = "String"),})
  public ResultBean<List<Map<String, Object>>> getAreaAvgDataByAreaCode(HttpServletRequest request)
    throws Exception {
    Map<String, Object> parameters = getParametersStartingWith(request, null);
    ParameterUtils.getTimeType4Time(parameters);
    parameters.put("monitorPointId", parameters.remove("monitorPoint"));
    parameters.put("areaCode", parameters.remove("areaCode"));
    String[] sensorKeys = parameters.remove("sensorKey").toString().split(",");
    String s=sensorKeys[0];
    parameters.put("sensors", Arrays.asList(sensorKeys));
    parameters.put("sensors2", s);
    List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
    for (Map<String, Object> monitorMap : monitorList) {
      String time = monitorMap.get("time").toString();
      time = time.substring(time.length() - 2);
      monitorMap.put("time", Integer.valueOf(time));
    }
    Integer maxTime = 0;
    Integer max1 = 0;
    if (monitorList.size() != 0) {
      Map<String, Object> monitorMap = monitorList.get(monitorList.size() - 1);
      max1 = Integer.valueOf(monitorMap.get("time").toString());
    } else {
      max1 = 0;
    }
    String sensorKey1 = s;
    switch (s) {
      case "e1":
        sensorKey1 = "PM2_5";
        break;
      case "e2":
        sensorKey1 = "PM10";
        break;
      case "e10":
        sensorKey1 = "CO";
        break;
      case "e11":
        sensorKey1 = "SO2";
        break;
      case "e15":
        sensorKey1 = "O3";
        break;
      case "e16":
        sensorKey1 = "NO2";
        break;
      default:
        break;
    }
    @GetMapping("report_avg_AreaData")
    @ApiOperation(value = "获取国控因子与监测因子平均值", notes = "获取国控因子与监测因子平均值")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "mac", value = "设备mac", required = false, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "areaCode", value = "地区代码", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间,月份(格式:2018-03)", required = true, paramType = "query", dataType = "String"),})
    public ResultBean<List<Map<String, Object>>> getAreaAvgDataByAreaCode(HttpServletRequest request)
            throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        ParameterUtils.getTimeType4Time(parameters);
        parameters.put("monitorPointId", parameters.remove("monitorPoint"));
        parameters.put("areaCode", parameters.remove("areaCode"));
        String[] sensorKeys = parameters.remove("sensorKey").toString().split(",");
        String type = parameters.get("type").toString();
        String s = sensorKeys[0];
        parameters.put("sensors", Arrays.asList(sensorKeys));
        parameters.put("sensors2", s);
    parameters.put("sensors1", sensorKey1);
        ArrayList<Map<String, Object>> resultList = new ArrayList<>();
    List<Map<String, Object>> areaList = historyMinutelyService.getAreaAvgDataByAreaCode(parameters);
    if (areaList.isEmpty()) {
      Integer areaCode = Integer.valueOf(request.getParameter("areaCode"));
      areaCode = hangzhouAqiService.queryCityCode(areaCode);
      parameters.remove("areaCode");
      parameters.put("areaCode", String.valueOf(areaCode));
      areaList = historyMinutelyService.getAreaAvgDataByAreaCode(parameters);
    }
        List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
        List<Map<String, Object>> areaList = hangzhouAqiService.getAreaAvgDataByAreaCode(parameters);
    for (Map<String, Object> areaMap : areaList) {
      String time = areaMap.get("time").toString();
      time = time.substring(time.length() - 2);
      areaMap.put("time", Integer.valueOf(time));
    }
    Integer max = 0;
    if (areaList.size() != 0) {
      Map<String, Object> areaMap = areaList.get(areaList.size() - 1);
      max = Integer.valueOf(areaMap.get("time").toString());
    } else {
      max = 0;
    }
    if (max1 >= max) {
      maxTime = max1;
    } else {
      maxTime = max;
    }
    ArrayList<Map<String, Object>> resultList = new ArrayList<>();
    for (int i = 0; i <= maxTime; i++) {
      resultList.add(null);
    }
    for (Map<String, Object> areaMap : areaList) {
      Integer time = Integer.valueOf(areaMap.get("time").toString());
      resultList.set(time, areaMap);
    }
    for (Map<String, Object> resultMap : resultList) {
      for (Map<String, Object> monitorMap : monitorList) {
        ArrayList<String> values = new ArrayList<>();
        String monitorTime = monitorMap.get("time").toString();
        if (resultMap != null) {
          String resultTime = resultMap.get("time").toString();
          if (resultTime.equals(monitorTime)) {
            String value = resultMap.remove(s).toString();
            String value1 = monitorMap.remove(s).toString();
            values.add(value);
            values.add(value1);
            resultMap.put("values", values);
          }
        } else {
          String value1 = monitorMap.get(s).toString();
          values.add(null);
          values.add(value1);
        if (areaList.isEmpty() && monitorList.isEmpty()) {
            return new ResultBean<List<Map<String, Object>>>(resultList);
        } else if (areaList.isEmpty()) {
            resultList.addAll(monitorList);
            for (Map<String, Object> resultMap : resultList) {
                String time = resultMap.get("time").toString();
                time = time.substring(time.length() - 2);
                resultMap.put("time", Integer.valueOf(time));
                List<String> values = new ArrayList<>();
                values.add("");
                values.add(resultMap.remove(s).toString());
                resultMap.put("values", values);
            }
            return new ResultBean<List<Map<String, Object>>>(resultList);
        } else if (monitorList.isEmpty()) {
            resultList.addAll(areaList);
            for (Map<String, Object> resultMap : resultList) {
                String time = resultMap.get("time").toString();
                time = time.substring(time.length() - 2);
                resultMap.put("time", Integer.valueOf(time));
                List<String> values = new ArrayList<>();
                values.add(resultMap.remove(s).toString());
                values.add("");
                resultMap.put("values", values);
            }
            return new ResultBean<List<Map<String, Object>>>(resultList);
        }
      }
        for (Map<String, Object> map : areaList) {
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
        }
        for (Map<String, Object> m : monitorList) {
            String time = m.get("time").toString();
            time = time.substring(time.length() - 2);
            m.put("time", Integer.valueOf(time));
        }
        Integer maxTime;
        Map<String, Object> areaMap = areaList.get(areaList.size() - 1);
        Integer areaMax = Integer.valueOf(areaMap.get("time").toString());
        Map<String, Object> monitorMap = monitorList.get(monitorList.size() - 1);
        Integer monitorMax = Integer.valueOf(monitorMap.get("time").toString());
        if (type.equals("day")) {
            if (areaMax >= monitorMax) {
                maxTime = areaMax + 1;
            } else {
                maxTime = monitorMax + 1;
            }
        } else {
            if (areaMax >= monitorMax) {
                maxTime = areaMax;
            } else {
                maxTime = monitorMax;
            }
        }
        for (int i = 0; i < maxTime; i++) {
            resultList.add(null);
        }
        for (Map<String, Object> map : areaList) {
            Integer time = Integer.valueOf(map.get("time").toString());
            if (type.equals("day")) {
                resultList.set(time, map);
            } else {
                resultList.set(time - 1, map);
            }
        }
        for (int i = 0; i <resultList.size() ; i++) {
            if (resultList.get(i) == null) {
                Map<String, Object> hashMap = new HashMap<>();
                if(type.equals("day")){
                    hashMap.put("time", i);
                }else {
                    hashMap.put("time", i + 1);
                }
                hashMap.put(s, "");
                resultList.set(i, hashMap);
            }
        }
        for (Map<String, Object> map1 : monitorList) {
            ArrayList<String> values = new ArrayList<>();
            Integer time = Integer.valueOf(map1.get("time").toString());
            Map<String, Object> map;
            if (type.equals("day")) {
                map = resultList.get(time);
            } else {
                map = resultList.get(time - 1);
            }
            values.add(map.remove(s).toString());
            values.add(map1.get(s).toString());
            map.put("values", values);
        }
        for (Map<String, Object> map : resultList) {
            if (map.containsKey(s)) {
                ArrayList<String> values = new ArrayList<>();
                values.add(map.remove(s).toString());
                values.add("");
                map.put("values",values);
            }
        }
        Iterator<Map<String, Object>> it = resultList.iterator();
        while(it.hasNext()){
            Map<String, Object> next = it.next();
            ArrayList<String> values = (ArrayList<String>)next.get("values");
            if(values.get(0).equals("")&&values.get(1).equals("")){
                it.remove();
            }
        }
        return new ResultBean<List<Map<String, Object>>>(resultList);
    }
    resultList.removeAll(Collections.singleton(null));
    for (Map<String, Object> resultMap : resultList) {
      if (resultMap.containsKey(s)) {
        ArrayList<String> values = new ArrayList<>();
        values.add(resultMap.remove(s).toString());
        values.add(null);
        resultMap.put("values", values);
      }
    }
    return new ResultBean<List<Map<String, Object>>>(resultList);
  }
    @GetMapping("getmpoint-byid")
    @ApiOperation(value = "获取监测站数据", notes = "获取监测站数据,包含名称、地址、坐标等详细信息")
@@ -1342,7 +1353,12 @@
        String et = parameters.get("endTime").toString();
        String endYearAndDay = et.substring(0, et.lastIndexOf("-"));
        String endHour = et.substring(et.lastIndexOf("-") + 1);
        String endTime = endYearAndDay + " " + endHour + ":00:00";
        int endHourValue = Integer.valueOf(endHour);
        int startHourValue = Integer.valueOf(startHour);
        if (endHourValue <= startHourValue) {
            endHourValue = startHourValue + 1;
        }
        String endTime = startYearAndDay + " " + endHourValue + ":00:00";
        parameters.put("startTime", startTime);
        parameters.put("endTime", endTime);
        String mac = parameters.get("mac").toString();
@@ -1463,7 +1479,7 @@
    @GetMapping("/carTrajectory")
    @ApiOperation(value = "显示走航车轨迹", notes = "显示走航车轨迹")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392082)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392081)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2020-03-19-14)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2020-03-19-17)", required = true, paramType = "query", dataType = "String")
    })
@@ -1474,9 +1490,13 @@
        String startHour = st.substring(st.lastIndexOf("-") + 1);
        String startTime = startYearAndDay + " " + startHour + ":00:00";
        String et = parameters.get("endTime").toString();
        String endYearAndDay = et.substring(0, et.lastIndexOf("-"));
        String endHour = et.substring(et.lastIndexOf("-") + 1);
        String endTime = endYearAndDay + " " + endHour + ":00:00";
        int endHourValue = Integer.valueOf(endHour);
        int startHourValue = Integer.valueOf(startHour);
        if (endHourValue <= startHourValue) {
            endHourValue = startHourValue + 1;
        }
        String endTime = startYearAndDay + " " + endHourValue + ":00:00";
        parameters.put("startTime", startTime);
        parameters.put("endTime", endTime);
        String mac = parameters.get("mac").toString();
@@ -1493,6 +1513,54 @@
            String paramsJson = params.toJSONString();
            model.addObject("carTrajectoryParams", paramsJson);
            model.setViewName("cartrajectory");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] mac:");
            msg.append(mac);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
    @GetMapping("/trajectoryDataShow")
    @ApiOperation(value = "轨迹及数据", notes = "轨迹及数据")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392081)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2020-03-19-14)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2020-03-19-17)", required = true, paramType = "query", dataType = "String")
    })
    public ModelAndView trajectoryDataShow(ModelAndView model, HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String st = parameters.get("startTime").toString();
        String startYearAndDay = st.substring(0, st.lastIndexOf("-"));
        String startHour = st.substring(st.lastIndexOf("-") + 1);
        String startTime = startYearAndDay + " " + startHour + ":00:00";
        String et = parameters.get("endTime").toString();
        String endHour = et.substring(et.lastIndexOf("-") + 1);
        int endHourValue = Integer.valueOf(endHour);
        int startHourValue = Integer.valueOf(startHour);
        if (endHourValue <= startHourValue) {
            endHourValue = startHourValue + 1;
        }
        String endTime = startYearAndDay + " " + endHourValue + ":00:00";
        parameters.put("startTime", startTime);
        parameters.put("endTime", endTime);
        String mac = parameters.get("mac").toString();
        if (mac != null && mac.length() != 0) {
            List<List<Map<String, Object>>> sensorData = historyService.getCarSensorData(parameters);
            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
            List<Map<String, Object>> sensorList = new ArrayList<>();
            if (sensorData.size() == 3) {
                sensorList = sensorData.get(0);
            }
            JSONObject params = new JSONObject();
            params.put("sensorInfo", sensorList);
            params.put("sensorsMap", sensorsMap);
            String paramsJson = params.toJSONString();
            model.addObject("trajectoryParams", paramsJson);
            model.setViewName("trajectorydatashow");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
@@ -1530,5 +1598,4 @@
        }
        return new ResultBean<List<Map<String, Object>>>(list);
    }
}