JinPengYong
2020-04-26 cda3fcb63a6cebb154a3770c4c6c288cd660d762
国控因子与监测因子平均值对比
9 files modified
195 ■■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 144 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HangzhouAqiMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HangzhouAqiService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryMinutelyService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java 11 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/HangzhouAqiMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMinutelyMapper.xml 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java
@@ -9,15 +9,7 @@
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@@ -831,6 +823,140 @@
        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;
    }
    parameters.put("sensors1", sensorKey1);
    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);
    }
    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);
        }
      }
    }
    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 = "获取监测站数据,包含名称、地址、坐标等详细信息")
    @ApiImplicitParams(value = {
src/main/java/com/moral/mapper/HangzhouAqiMapper.java
@@ -14,4 +14,7 @@
    
    List<Map<String, Object>> getAqisByOrganizationId(Map<String, Object> parameters);
    
  Integer queryCityCode(@Param("areaCode") Integer areaCode);
}
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
@@ -14,6 +14,8 @@
    List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters);
  List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters);
    /**
     * @param sensorKeys
     * @param timePeriod
src/main/java/com/moral/service/HangzhouAqiService.java
@@ -11,4 +11,6 @@
 */
public interface HangzhouAqiService {
    public List<Map<String, Object>> queryAqi24Hours(@NotNull Integer orgId);
  public Integer queryCityCode(@NotNull Integer areaCode);
}
src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -19,6 +19,8 @@
    Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters);
    List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception;
    Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria);
    void convertQueryParam(Map<String, Object> parameters) throws ParseException;
src/main/java/com/moral/service/impl/HangzhouAqiServiceImpl.java
@@ -34,8 +34,10 @@
    public List<Map> queryAqiOfTimePeriod(String code,TimePeriod timePeriod) {
        return  hangzhouAqiMapper.selectAqisByCodeAndTimePeriod(code,timePeriod);
    }
    /**
     * 根据组织id获取最近24小时国控aqi数据
   *
     * @param orgId
     * @return 返回长度为24的数组,查不到的数据设置为0
     */
@@ -88,8 +90,8 @@
        Collections.reverse(aqi24HoursValues);
        return aqi24HoursValues;
    }
    private Integer getCode(Integer orgId,boolean isGetCityCode)
    {
  private Integer getCode(Integer orgId, boolean isGetCityCode) {
        Organization org = organizationMapper.selectByPrimaryKey(orgId);
        Integer code  = null;
        if(isGetCityCode) {
@@ -102,4 +104,9 @@
        }
        return  code;
    }
  @Override
  public Integer queryCityCode(Integer areaCode) {
    return  hangzhouAqiMapper.queryCityCode(areaCode);
  }
}
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -358,6 +358,16 @@
    }
    @Override
  public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception {
    convertQueryParam(parameters);
    if (!ObjectUtils.isEmpty(parameters.get("compensate"))) {
      parameters.put("timeUnits", "10min");
    }
    return historyMinutelyMapper.getAreaAvgDataByAreaCode(parameters);
  }
  @Override
    public void convertQueryParam(Map<String, Object> parameters) throws ParseException {
        if (!parameters.containsKey("field")) {
            // String type = (String) parameters.get("type");
src/main/resources/mapper/HangzhouAqiMapper.xml
@@ -47,4 +47,8 @@
            h.time DESC
        LIMIT 24
    </select>
  <select id="queryCityCode" resultType="integer">
      select city_code from area where area_code = #{areaCode}
    </select>
</mapper>
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -77,6 +77,23 @@
        ORDER BY
        time
    </select>
  <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map">
    SELECT
    DATE_FORMAT(time, #{typeFormat}) time,
    AVG(aqi_json->'$.${sensors1}') AS '${sensors2}'
    FROM
    hangzhou_aqi ha
    WHERE
    ha.time >= #{start}
    AND ha.time <![CDATA[<]]> #{end}
    AND ha.city_code = #{areaCode}
    GROUP BY
    DATE_FORMAT(time, #{typeFormat})
    ORDER BY
    time
  </select>
    <select id="selectLineChartDateByCrieria" resultType="java.util.Map">
        SELECT
        <choose>