于紫祥_1901
2020-09-18 cb888577b99892706860d2732785d22842aae9b0
src/main/java/com/moral/controller/ScreenController.java
@@ -1,9 +1,7 @@
package com.moral.controller;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.*;
import java.lang.reflect.Array;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@@ -15,10 +13,42 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.moral.common.bean.Constants;
import com.moral.common.bean.JsonData;
import com.moral.common.bean.PageResult;
import com.moral.common.bean.ResultBean;
import com.moral.common.util.BeanUtils;
import com.moral.common.util.ParameterUtils;
import com.moral.common.util.ValidateUtil;
import com.moral.common.util.WebUtils;
import com.moral.common.xml.Version;
import com.moral.entity.*;
import com.moral.entity.alarm.AlarmConfig;
import com.moral.entity.alarm.AlarmConfigValue;
import com.moral.entity.alarm.AlarmSensorLevel;
import com.moral.entity.charts.DataSortCondition;
import com.moral.entity.layout.RealTimeDeviceLayout;
import com.moral.service.*;
import com.moral.util.*;
import com.rabbitmq.client.*;
import com.rabbitmq.client.Channel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
import net.sf.json.JSONString;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.ibatis.annotations.Param;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
@@ -39,65 +69,9 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.xml.sax.InputSource;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.moral.common.bean.Constants;
import com.moral.common.bean.JsonData;
import com.moral.common.bean.PageResult;
import com.moral.common.bean.ResultBean;
import com.moral.common.util.BeanUtils;
import com.moral.common.util.ParameterUtils;
import com.moral.common.util.ValidateUtil;
import com.moral.common.util.WebUtils;
import com.moral.common.xml.Version;
import com.moral.entity.Account;
import com.moral.entity.AreaNames;
import com.moral.entity.Device;
import com.moral.entity.DeviceVersion;
import com.moral.entity.MapBounds;
import com.moral.entity.MonitorPoint;
import com.moral.entity.Organization;
import com.moral.entity.Point;
import com.moral.entity.Region;
import com.moral.entity.alarm.AlarmConfig;
import com.moral.entity.alarm.AlarmConfigValue;
import com.moral.entity.alarm.AlarmSensorLevel;
import com.moral.entity.charts.DataSortCondition;
import com.moral.entity.layout.RealTimeDeviceLayout;
import com.moral.service.AccountService;
import com.moral.service.AlarmConfigService;
import com.moral.service.AlarmDailyService;
import com.moral.service.AreaService;
import com.moral.service.DeviceService;
import com.moral.service.DeviceVersionService;
import com.moral.service.DictionaryDataService;
import com.moral.service.HangzhouAqiService;
import com.moral.service.HistoryDailyService;
import com.moral.service.HistoryHourlyService;
import com.moral.service.HistoryMinutelyService;
import com.moral.service.HistoryService;
import com.moral.service.MachineActivateService;
import com.moral.service.MonitorPointService;
import com.moral.service.OrganizationLayoutService;
import com.moral.service.OrganizationService;
import com.moral.service.QualityDailyService;
import com.moral.service.SensorService;
import com.moral.service.SensorUnitService;
import com.moral.service.WeatherService;
import com.moral.util.AQICalculation;
import com.moral.util.TempAllocationUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import static com.moral.common.util.ResourceUtil.getValue;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
import static java.util.Calendar.*;
/**
 * The Class ScreenController.大屏接口
@@ -122,6 +96,9 @@
    MonitorPointService monitorPointService;
    @Resource
    DeviceVersionService deviceVersionService;
  /*  @Resource
    HistorySpecialService historySpecialService;*/
    /**
     * The screen service.
@@ -181,6 +158,7 @@
    @Resource
    private QualityDailyService qualityDailyService;
    /**
     * Screen login. 大屏登录
@@ -595,6 +573,12 @@
        return sensorsMapList;
    }
    @GetMapping("/getSensorsAllMap")
    public List<Map<String, String>> getSensorsAllMap(String mac) {
        List<Map<String, String>> sensorsMapList = sensorService.getSensorsAllMap();
        return sensorsMapList;
    }
    @RequestMapping(value = "/get-monitorpoints", method = RequestMethod.GET)
    @ResponseBody
    public ResultBean getMonitorpointList(@RequestParam("orgId") String orgId, MapBounds mapBounds,
@@ -613,6 +597,15 @@
    @RequestMapping(value = "/get-devices", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "设备信息", notes = "设备信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "orgId", defaultValue = "5", value = "组织Id", required = true, paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "地区编码", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "Fe", defaultValue = "31.485018", value = "东北角纬度", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "Ge", defaultValue = "121.378395", value = "东北角经度", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "Ke", defaultValue = "31.296614", value = "西南角纬度", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "Le", defaultValue = "120.59651", value = "西南角经度", required = true, paramType = "query", dataType = "String")
    })
    public ResultBean getDevices(@RequestParam("orgId") Integer orgId, MapBounds mapBounds,
                                 @RequestParam("regionCode") String regionCode) {
        ResultBean<List<Device>> resultBean = new ResultBean();
@@ -697,6 +690,9 @@
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
            if(parameters.get("type").equals("day")){
                map.put("time", Integer.valueOf(time)+1);
            }
            map.put("value", map.remove(sensorKey));
        }
        return new ResultBean<List<Map<String, Object>>>(list);
@@ -839,45 +835,15 @@
        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);
        List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
        String type = parameters.get("type").toString();
        ArrayList<Map<String, Object>> resultList = new ArrayList<>();
        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);
        }
        ArrayList<Map<String, Object>> resultList = new ArrayList<>();
        List<Map<String, Object>> monitorList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
        List<Map<String, Object>> areaList = hangzhouAqiService.getAreaAvgDataByAreaCode(parameters);
        if (areaList.isEmpty() && monitorList.isEmpty()) {
            return new ResultBean<List<Map<String, Object>>>(resultList);
@@ -911,7 +877,6 @@
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
        }
        for (Map<String, Object> m : monitorList) {
@@ -920,7 +885,7 @@
            m.put("time", Integer.valueOf(time));
        }
        Integer maxTime = 0;
        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);
@@ -951,59 +916,53 @@
            } else {
                resultList.set(time - 1, map);
            }
        }
        if (type.equals("day")) {
            for (int i = 0; i < resultList.size(); i++) {
                if (resultList.get(i) == null) {
                    Map<String, Object> hashMap = new HashMap<>();
        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);
                    hashMap.put(s, "");
                    resultList.set(i, hashMap);
                }
            }
        } else {
            for (int i = 0; i < resultList.size(); i++) {
                if (resultList.get(i) == null) {
                    Map<String, Object> hashMap = new HashMap<>();
                } else {
                    hashMap.put("time", i + 1);
                    hashMap.put(s, "");
                    resultList.set(i, hashMap);
                }
                hashMap.put(s, "");
                resultList.set(i, hashMap);
            }
        }
        for (Map<String, Object> map : resultList) {
            List<Object> values = new ArrayList<>();
            for (Map<String, Object> map1 : monitorList) {
                if (map.get("time").toString().equals(map1.get("time").toString())) {
                    values.add(map.remove(s));
                    values.add(map1.remove(s));
                    map.put("values", values);
                }
        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) {
            List<Object> values = new ArrayList<>();
            if (map.containsKey(s)) {
                values.add(map.remove(s));
                ArrayList<String> values = new ArrayList<>();
                values.add(map.remove(s).toString());
                values.add("");
                map.put("values", values);
            }
        }
        List<Map<String, Object>> mapList = new ArrayList<>();
        for (Map<String, Object> map : resultList) {
            String values = map.get("values").toString();
            String string = StringUtils.strip(values, "[]");
            String[] strings = string.split(",");
            if (!strings[0].equals("") || !strings[1].equals(" ")) {
                mapList.add(map);
        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>>>(mapList);
        return new ResultBean<List<Map<String, Object>>>(resultList);
    }
    @GetMapping("getmpoint-byid")
@@ -1213,9 +1172,7 @@
   public ResultBean<Map<String, Object>> getSensor(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
      String mac = (String) parameters.get("mac");
      //System.out.println("ScreenController-----getSensor-----mac:"+mac);
      Map<String, Object> map = sensorUnitService.getSensorByMac(mac);
      System.out.println("ScreenController-----getSensor-----map:"+map);
      return new ResultBean<Map<String, Object>>(map);
   }*/
@@ -1283,7 +1240,6 @@
    })
    public ResultBean<List<Map<String, Object>>> AIForecast(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        //System.out.println(parameters);
        String monitorPoint = (String) parameters.get("monitorPoint");
        String intoTime = parameters.get("time").toString();
        Date date = new SimpleDateFormat("yy-MM-dd").parse(intoTime);
@@ -1528,6 +1484,57 @@
        String startHour = st.substring(st.lastIndexOf("-") + 1);
        String startTime = startYearAndDay + " " + startHour + ":00:00";
        String et = parameters.get("endTime").toString();
        String endYearAndDay = et.substring(0, st.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();
        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();
            //System.out.println(paramsJson);
            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);
@@ -1549,8 +1556,8 @@
            params.put("sensorInfo", sensorList);
            params.put("sensorsMap", sensorsMap);
            String paramsJson = params.toJSONString();
            model.addObject("carTrajectoryParams", paramsJson);
            model.setViewName("cartrajectory");
            model.addObject("trajectoryParams", paramsJson);
            model.setViewName("trajectorydatashow");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
@@ -1588,4 +1595,623 @@
        }
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    @RequestMapping(value = "/newMap-page", method = RequestMethod.GET)
    public ModelAndView newMap(ModelAndView model, @RequestParam("areaCode") long code,
                               @RequestParam("accountId") int accountId) {
        Account account = accountService.getAccountById(accountId);
        List<MonitorPoint> monitorPointList = monitorPointService.getMonitorPointListByAccountId(accountId);
        String regionName = areaService.queryFullNameByCode(code);
        if (account != null && regionName != null) {
            Object sensors = sensorService.queryAll();
            JSONObject params = new JSONObject();
            params.put("regionCode", code);
            params.put("regionName", regionName);
            params.put("accountId", accountId);
            params.put("orgId", account.getOrganizationId());
            params.put("sensors", sensors);
            String paramsJson = params.toJSONString();
            model.addObject("mapParams", paramsJson);
            model.setViewName("newmap");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] areaCode:");
            msg.append(code);
            msg.append(" param[0] accountId:");
            msg.append(accountId);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
    @GetMapping("/uavDroppoint")
    @ApiOperation(value = "无人机落点应用", notes = "无人机落点应用")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392068)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2019-07-17-18)", required = true, paramType = "query", dataType = "String")
    })
    public ModelAndView uavDroppoint(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
            JSONObject params = new JSONObject();
            params.put("sensorInfo", sensorData);
            params.put("sensorsMap", sensorsMap);
            params.put("sensorKey", parameters.get("sensorKey"));
            params.put("unit", parameters.get("unit"));
            params.put("description", parameters.get("description"));
            String paramsJson = params.toJSONString();
            model.addObject("uavDroppointParams", paramsJson);
            model.setViewName("uavdroppoint");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] mac:");
            msg.append(mac);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
    @GetMapping("/uavChannel")
    @ApiOperation(value = "无人机污染源通道应用", notes = "无人机污染源通道应用")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392068)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2019-07-17-18)", required = true, paramType = "query", dataType = "String")
    })
    public ModelAndView uavChannel(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
            JSONObject params = new JSONObject();
            params.put("sensorInfo", sensorData);
            params.put("sensorsMap", sensorsMap);
            params.put("sensorKey", parameters.get("sensorKey"));
            params.put("unit", parameters.get("unit"));
            params.put("description", parameters.get("description"));
            String paramsJson = params.toJSONString();
            model.addObject("uavChannelParams", paramsJson);
            model.setViewName("uavchannelnew");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] mac:");
            msg.append(mac);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
    @GetMapping("/uavTracing")
    @ApiOperation(value = "无人机溯源应用", notes = "无人机溯源应用")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392068)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2019-07-17-18)", required = true, paramType = "query", dataType = "String")
    })
    public ModelAndView uavTracing(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.parseInt(endHour);
        int startHourValue = Integer.parseInt(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
            JSONObject params = new JSONObject();
            params.put("sensorInfo", sensorData);
            params.put("sensorsMap", sensorsMap);
            params.put("sensorKey", parameters.get("sensorKey"));
            params.put("unit", parameters.get("unit"));
            params.put("description", parameters.get("description"));
            String paramsJson = params.toJSONString();
            model.addObject("uavTracingParams", paramsJson);
            model.setViewName("uavtracing");
            return model;
        } else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] mac:");
            msg.append(mac);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
    @GetMapping("/purify")
    @ApiOperation(value = "获取厂区净化率", notes = "获取厂区净化率")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPointId", value = "公司Id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "因子", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
    public ModelAndView PurificationRate(HttpServletRequest request, ModelAndView model) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String monitPointIdS = (String) parameters.get("monitorPointId");
        String sensor = (String) parameters.get("sensorKey");
        String time = (String) parameters.get("time");
        String YearAndDay = time.substring(0, time.lastIndexOf("-"));
        String Hour = time.substring(time.lastIndexOf("-") + 1);
        String Time = YearAndDay + " " + Hour + ":00:00";
        int monitPointId = Integer.parseInt(monitPointIdS);
        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 1, sensor);
        String paramsJson = params.toJSONString();
        model.addObject("mapParams", paramsJson);
        model.setViewName("purityMap");
        return model;
    }
    @GetMapping("/collection")
    @ApiOperation(value = "获取厂区收集率", notes = "获取厂区收集率")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPointId", value = "公司Id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
    public ModelAndView collectionRate(HttpServletRequest request, ModelAndView model) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String monitPointIdS = (String) parameters.get("monitorPointId");
        String sensor = "";
        String time = (String) parameters.get("time");
        String YearAndDay = time.substring(0, time.lastIndexOf("-"));
        String Hour = time.substring(time.lastIndexOf("-") + 1);
        String Time = YearAndDay + " " + Hour + ":00:00";
        int monitPointId = Integer.parseInt(monitPointIdS);
        //获取公司信息
        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 2, sensor);
        model.addObject("params", params);
        model.setViewName("pressureMap");
        return model;
    }
    @GetMapping("/unorganizedEmissions")
    @ApiOperation(value = "无组织排放", notes = "无组织排放")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPointId", value = "公司Id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "因子", required = true, paramType = "query", dataType = "String"),
            // @ApiImplicitParam(name = "sensorKey", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
    public ModelAndView unorganizedEmissions(HttpServletRequest request, ModelAndView model) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String monitPointIdS = (String) parameters.get("monitorPointId");
        String sensor = (String) parameters.get("sensorKey");
        String time = (String) parameters.get("time");
        String YearAndDay = time.substring(0, time.lastIndexOf("-"));
        String Hour = time.substring(time.lastIndexOf("-") + 1);
        String Time = YearAndDay + " " + Hour + ":00:00";
        int monitPointId = Integer.parseInt(monitPointIdS);
        //获取公司信息
        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 3, sensor);
        model.addObject("params", params);
        model.setViewName("unorganizedMap");
        return model;
    }
    @GetMapping("/unorganizedEmissionsRealTime")
    @ApiOperation(value = "无组织排放实时", notes = "无组织排放实时")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPointId", value = "公司Id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "因子", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "accountId", value = "用户id", required = false, paramType = "query", dataType = "String")})
    public ModelAndView unorganizedEmissionsBackups(HttpServletRequest request, ModelAndView model) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String monitPointIdS = (String) parameters.get("monitorPointId");
        String sensor = (String) parameters.get("sensorKey");
        String accountId = (String) parameters.get("accountId");
        Account account = accountService.getAccountById(Integer.parseInt(accountId));
        int monitPointId = Integer.parseInt(monitPointIdS);
        JSONObject params = monitorPointService.getMacList(monitPointId);
        params.put("accountId", accountId);
        params.put("orgId", account.getOrganizationId());
        params.put("sensor", sensor);
        //获取公司信息
        //JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,3,sensor);
        // model.addObject("params",params);
        model.addObject("params", params);
        model.setViewName("newUnorganizedMap");
        return model;
    }
    @GetMapping("/chooseDevice")
    @ResponseBody
    public Object unorganizedEmissionsBackups(String wind, String monitPointId) {
        JSONObject params = new JSONObject();
        Double windDir = Double.parseDouble(wind);
        List<Device> deviceList = deviceService.getDeviceById2(Integer.parseInt(monitPointId));
        Map<String, Object> longAndLatiMap;
        List<Map> longAndLatiList = new ArrayList<>();//经纬度夹角集合,存放的是windList中两台设备的下标和两台设备夹角与风向角的差值
        List<Device> preAngleDeviceList = new ArrayList<Device>(); //角度减去风向最小的两台设备
        for (int f = 0; f < deviceList.size(); f++) {
            for (int h = 0; h < deviceList.size(); h++) {
                if (f != h) {
                    longAndLatiMap = new HashMap<String, Object>();
                    longAndLatiMap.put("h", h);
                    longAndLatiMap.put("f", f);
                    Double angle = mapUtils.getAngle(
                            new MyLatLng((Double) deviceList.get(h).getLongitude(),
                                    (Double) deviceList.get(h).getLatitude()),
                            new MyLatLng((Double) deviceList.get(f).getLongitude(),
                                    (Double) deviceList.get(f).getLatitude()));
                    Double angleDiff = Math.abs(angle - windDir);
                    longAndLatiMap.put("angle", angleDiff);
                    longAndLatiList.add(longAndLatiMap);
                }
            }
        }
        Double minAngle = (Double) longAndLatiList.get(0).get("angle");
        int indexAngle = 0;
        for (int j = 1; j < longAndLatiList.size(); j++) {
            if (minAngle > (Double) longAndLatiList.get(j).get("angle")) {
                minAngle = (Double) longAndLatiList.get(j).get("angle");
                indexAngle = j;
            }else {
                indexAngle=indexAngle;
            }
        }
        preAngleDeviceList.add(deviceList.get((Integer) longAndLatiList.get(indexAngle).get("h")));
        preAngleDeviceList.add(deviceList.get((Integer) longAndLatiList.get(indexAngle).get("f")));
        Double length = mapUtils.getDistance((Double) preAngleDeviceList.get(0).getLongitude(), (Double) preAngleDeviceList.get(0).getLatitude(),
                (Double) preAngleDeviceList.get(1).getLongitude(), (Double) preAngleDeviceList.get(1).getLatitude());
        Double subLength = length / 5;
        Double subLength1 = length / 6.1;
        Double angle = mapUtils.getAngle(
                new MyLatLng((Double) preAngleDeviceList.get(0).getLongitude(),
                        (Double) preAngleDeviceList.get(0).getLatitude()),
                new MyLatLng((Double) preAngleDeviceList.get(1).getLongitude(),
                        (Double) preAngleDeviceList.get(1).getLatitude()));
        List locationList = new ArrayList();
        String[] firstLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, (Double) preAngleDeviceList.get(0).getLongitude(),
                (Double) preAngleDeviceList.get(0).getLatitude(), subLength);
        String[] secondLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(firstLocation[0]),
                Double.parseDouble(firstLocation[1]), subLength);
        String[] thirdLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(secondLoction[0]),
                Double.parseDouble(secondLoction[1]), subLength);
        String[] fourthLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(thirdLocation[0]),
                Double.parseDouble(thirdLocation[1]), subLength);
        String[] fivethLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(fourthLoction[0]),
                Double.parseDouble(fourthLoction[1]), subLength1);
        locationList.add(firstLocation);
        locationList.add(secondLoction);
        locationList.add(thirdLocation);
        locationList.add(fourthLoction);
        locationList.add(fivethLoction);
        String preAngleDeviceString = JSON.toJSON(preAngleDeviceList).toString();
        params.put("preAngleDeviceString", preAngleDeviceString);//两台添加箭头的设备
        params.put("locationList", locationList);
        return params;
    }
    @GetMapping("/allDevice")
    @ResponseBody
    public Map<String,List> getAllDevice() {
        List<String> macList=deviceService.getAllMac();
        Map<String,List> latlngMap=new HashMap<String,List>();
        Map devMap=null;
        List list=new ArrayList();
        for (String mac : macList) {
            devMap=new HashMap();
            if (mac!=null){
                Device device=deviceService.byMacGetDevice(mac);
                List list1= LatLngTransformation.Convert_BD09_To_GCJ02(device.getLatitude(),device.getLongitude());
                if (device.getState()!=4+""){
                    devMap.put("state",device.getState());
                }
                devMap.put("lat",list1.get(1));
                devMap.put("lng",list1.get(0));
                devMap.put("monitorPointId",device.getMonitorPointId());
                //System.out.println(device);
                list.add(devMap);
            }else {
                continue;
            }
        }
        latlngMap.put("latlng",list);
        return latlngMap;
    }
    @GetMapping("/windAndDeviceData")
    @ResponseBody
    public List windAndDeviceData(String monitorPointId) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MINUTE, (calendar.get(Calendar.MINUTE) - 2));
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String time = df.format(calendar.getTime())+":00";
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        String mon;
        if (month<10){
            mon="0"+month;
        }else {
            mon=""+month;
        }
        String table="history_minutely_"+year+mon;
        List list=deviceService.byMonitorIdGetDeviceAndWind(monitorPointId,time,table);
        return list;
    }
    //局部风场
    @GetMapping("/windAndDeviceDataByArea")
    @ResponseBody
    public List windAndDeviceDataByArea(String monitorPointId) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MINUTE, (calendar.get(Calendar.MINUTE) - 2));
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String time = df.format(calendar.getTime())+":00";
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        String mon;
        if (month<10){
            mon="0"+month;
        }else {
            mon=""+month;
        }
        String table="history_minutely_"+year+mon;
        List list=deviceService.byMonitorIdGetDeviceAndWindSpecial(monitorPointId,time,table);
        return list;
    }
    @GetMapping("forecastO3")
    @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")})
    public ResultBean<List<Map<String, Object>>> getWeatherNextDayDataByRegion(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters);
        return new ResultBean<List<Map<String, Object>>>(resultList);
    }
    @GetMapping("weatherData")
    @ApiOperation(value = "根据city查询小时预测和实测数据", notes = "根据city查询小时预测和实测数据")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "city", value = "城市名", 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>>> getWeatherData(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> weatherList = weatherService.getWeatherData(parameters);
        return new ResultBean<List<Map<String, Object>>>(weatherList);
    }
    @GetMapping("weatherDataDay")
    @ApiOperation(value = "根据city查询日实测数据", notes = "根据city查询日实测数据")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "city", value = "城市名", 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>>> getWeatherDataByDay(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> weatherList = weatherService.getWeatherDataByDay(parameters);
        return new ResultBean<List<Map<String, Object>>>(weatherList);
    }
    @GetMapping("monitorDeviceData")
    @ApiOperation(value = "获取微型站5分钟和半小时数据", notes = "获取微型站5分钟和半小时数据")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "city", value = "城市名", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-03-15)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "type", value = "类型(5分钟:m,半小时:h)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "range", value = "要查看的设备范围(国控站周边:m,全城:a)", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> get5MinutesOrHalfHour(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> deviceData = historyMinutelyService.get5MinutesOrHalfHour(parameters);
        return new ResultBean<List<Map<String, Object>>>(deviceData);
    }
    @PostMapping("updateForecastWeather")
    public void updateForecastWeather(HttpServletRequest request){
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        weatherService.updateForecastWeather(parameters);
    }
    @GetMapping("dataByTimeSlot")
    @ApiOperation(value = "根据时间类型获取因子的值", notes = "根据时间类型获取因子的值")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "mac地址", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "起始时间(格式:2020-08-03/2020-08-03-13)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2020-08-04/2020-08-04-14)", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> getDataByTimeSlot(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        String mac = parameters.get("mac").toString();
        String startTime = parameters.get("startTime").toString();
        String endTime = parameters.get("endTime").toString();
        //对时间进行操作的接口
        Calendar calendar = getInstance();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        List<Map<String, Object>> list = new ArrayList();
        Map device = deviceService.getAllFieldByMac(parameters);
        Map monitorPointMap = monitorPointService.selectAllById(device.get("monitor_point_id").toString());
        List<Map<String, Object>> device_sensorList = sensorService.getSensorByDeviceId(device.get("id").toString());
        Map<String, Object> device_sensorUnit_map = new HashMap<>();
        for (Map<String, Object> device_sensorMap : device_sensorList) {
            device_sensorUnit_map.put(device_sensorMap.get("sensor_key").toString(),device_sensorMap.get("unit"));
        }
        Map<String, String> sensorMap = sensorService.getSensorsMap(parameters);
        if (startTime.length()==10&&endTime.length()==10){
            //获取当日时间
            Date dd = new Date();
            //格式化
            SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
            //获取系统当前时间
            String nowTime = sim.format(dd);
            int days = endTime.compareTo(nowTime);
            //System.out.println(days);
            List<String> dayList = DatesUtil.findDaysStr(startTime,endTime);
            //System.out.println("dayList:"+dayList);
            /*if (days<0){
                Date date=null;
                try {
                    date = new SimpleDateFormat("yy-MM-dd").parse(endTime);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                calendar.setTime(date);
                int day=calendar.get(Calendar.DATE);
                calendar.set(Calendar.DATE,day+1);
                endTime=new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
            }*/
            List<Map<String, Object>> sameDayHourlyList = null;
            if (days>=0){
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //获取系统当前时间
                String currentTime = df.format(dd);
                sameDayHourlyList = historyHourlyService.getDataByTimeSlot(mac,nowTime,currentTime);
            }
            List<Map<String, Object>> dataList = historyDailyService.getDataByTimeSlot(mac,startTime,endTime);
            if (dataList.isEmpty()){
                return null;
            }
            Set<String> keys = sensorMap.keySet();
            for (String key:keys) {
                Map<String,Object> oneSensorMap = new LinkedHashMap<>();
                oneSensorMap.put("monitorPointName",monitorPointMap.get("name"));
                oneSensorMap.put("deviceName",device.get("name"));
                oneSensorMap.put("sersorKey",sensorMap.get(key)+"("+device_sensorUnit_map.get(key)+")");
                for (String day:dayList) {
                    for (Map<String, Object> dataMap: dataList) {
                        JSONObject dataJson = JSONObject.parseObject(dataMap.get("json").toString());
                        if (dataMap.get("time").toString().equals(day+" 00:00:00.0")){
                            oneSensorMap.put(dataMap.get("time").toString().substring(0,10),dataJson.getJSONArray(key).get(2));
                            break;
                        }else {
                            continue;
                        }
                    }
                    if(!oneSensorMap.containsKey(day)){
                        oneSensorMap.put(day,"");
                    }
                }
                Double avg = 0.0;
                if (sameDayHourlyList != null){
                    for (Map sameDayHourlyMap:sameDayHourlyList){
                        List<Double> arr = new ArrayList<>();
                        JSONObject hourlyJson = JSONObject.parseObject(sameDayHourlyMap.get("json").toString());
                        arr.add(Double.parseDouble(hourlyJson.getJSONArray(key).get(2).toString()));
                        Double sum = 0.0;
                        for (int i=0;i<arr.size();i++){
                            sum += arr.get(i);
                        }
                        avg = sum / arr.size();
                    }
                    oneSensorMap.put(nowTime,avg);
                }
                list.add(oneSensorMap);
            }
        }else if (startTime.length()==13&&endTime.length()==13){
            StringBuilder startTime_sb = new StringBuilder(startTime);
            startTime_sb.replace(10,11," ");
            startTime = startTime_sb.toString()+":00:00";
            StringBuilder endTime_sb = new StringBuilder(endTime);
            endTime_sb.replace(10,11," ");
            endTime = endTime_sb.toString()+":00:00";
            List<String> hoursList = DatesUtil.findHoursStr(startTime,endTime);
            //System.out.println("hoursList:"+hoursList);
            List<Map<String, Object>> hourlyList = historyHourlyService.getDataByTimeSlot(mac,startTime,endTime);
            if (hourlyList.isEmpty()){
                return null;
            }
            Set<String> keys = sensorMap.keySet();
            for (String key:keys) {
                Map<String,Object> oneSensorMap = new LinkedHashMap<>();
                oneSensorMap.put("monitorPointName",monitorPointMap.get("name"));
                oneSensorMap.put("deviceName",device.get("name"));
                oneSensorMap.put("sersorKey",sensorMap.get(key)+"("+device_sensorUnit_map.get(key)+")");
                for (String hour:hoursList) {
                    for (Map<String, Object> hourlyMap: hourlyList) {
                        JSONObject dataJson = JSONObject.parseObject(hourlyMap.get("json").toString());
                        if (hourlyMap.get("time").toString().equals(hour+".0")){
                            oneSensorMap.put(hourlyMap.get("time").toString().substring(0,19),dataJson.getJSONArray(key).get(2));
                            break;
                        }else {
                            continue;
                        }
                    }
                    if(!oneSensorMap.containsKey(hour)){
                        oneSensorMap.put(hour,"");
                    }
                }
                /*for (Map<String, Object> hourlyMap: hourlyList) {
                    JSONObject hourlyJson = JSONObject.parseObject(hourlyMap.get("json").toString());
                    oneSensorMap.put(hourlyMap.get("time").toString().substring(0,19),hourlyJson.getJSONArray(key).get(2));
                }*/
                list.add(oneSensorMap);
            }
        }else {
            return null;
        }
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    @GetMapping("/contrastFactor")
    @ApiOperation(value = "因子对比", notes = "因子对比")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensor", value = "因子", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-03-19、20、21)", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> contrastFactor(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List list=historyHourlyService.getDataByMacAndTime(parameters);
        //System.out.println(list);
        return new ResultBean<List<Map<String, Object>>>(list);
    }
}