lizijie
2019-07-25 30d1267479ad9cb076cb2692befc6fe3a53fa7d9
src/main/java/com/moral/controller/ScreenController.java
@@ -1,8 +1,54 @@
package com.moral.controller;
import static com.moral.common.util.ResourceUtil.getValue;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
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;
@@ -44,51 +90,12 @@
import com.moral.service.SensorService;
import com.moral.service.SensorUnitService;
import com.moral.service.WeatherService;
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 org.apache.commons.collections.CollectionUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.xml.sax.InputSource;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static com.moral.common.util.ResourceUtil.getValue;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
/**
 * The Class ScreenController.大屏接口
@@ -96,7 +103,7 @@
@RestController
@RequestMapping("/screen")
@CrossOrigin(origins = "*", maxAge = 3600)
@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
@Api(tags = "Screen", description = "大屏接口")
public class ScreenController {
    public static Logger log = Logger.getLogger(ScreenController.class);
@@ -114,15 +121,21 @@
    @Resource
    DeviceVersionService deviceVersionService;
    /** The screen service. */
    /**
     * The screen service.
     */
    @Resource
    private HistoryService historyService;
    /** The account service. */
    /**
     * The account service.
     */
    @Resource
    private AccountService accountService;
    /** The device service. */
    /**
     * The device service.
     */
    @Resource
    private DeviceService deviceService;
@@ -136,11 +149,15 @@
//   @Value(value = "classpath:system/alarmLevels.json")
//   private org.springframework.core.io.Resource resource;
    /** The redis template. */
    /**
     * The redis template.
     */
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    /** The level key. */
    /**
     * The level key.
     */
    private String levelKey = "alarm_";
    @Resource
@@ -162,7 +179,7 @@
    /**
     * Screen login. 大屏登录
     *
     *
     * @param request the request
     * @return the map
     */
@@ -220,7 +237,7 @@
    /**
     * Gets the equipment states. 获取该账号下所有设备的状态
     *
     *
     * @param request the request
     * @return the equipment states
     */
@@ -233,13 +250,13 @@
    /**
     * Gets the alarm levels. 获取报警配置
     *
     *
     * @param request the request
     * @return the alarm levels
     */
    @GetMapping("alarm-levels")
    public Object getAlarmLevels(HttpServletRequest request, Optional<Integer> orgId, Optional<Integer> mpId,
            Optional<String> mac) {
                                 Optional<String> mac) {
        List<Map<String, Object>> sensorAlarmList = null;
        try {
            AlarmConfig alarmConfig = null;
@@ -312,7 +329,6 @@
    }
    /**
     *
     * @param dataSortCondition 数据排名查询条件
     * @return
     */
@@ -349,7 +365,7 @@
    /**
     * Gets the average by all. 获取某账号某区域10分钟前到5分钟前所有传感器平均数值排名
     *
     *
     * @param request the request
     * @return the average by all
     * @throws Exception
@@ -471,7 +487,7 @@
     */
    /**
     * 地图主页
     *
     *
     * @param model
     * @param code
     * @param accountId
@@ -479,7 +495,7 @@
     */
    @RequestMapping(value = "/map-page", method = RequestMethod.GET)
    public ModelAndView map(ModelAndView model, @RequestParam("areaCode") long code,
            @RequestParam("accountId") int accountId) {
                            @RequestParam("accountId") int accountId) {
        Account account = accountService.getAccountById(accountId);
        String regionName = areaService.queryFullNameByCode(code);
        if (account != null && regionName != null) {
@@ -509,7 +525,7 @@
    @RequestMapping(value = "/get-monitorpoints", method = RequestMethod.GET)
    @ResponseBody
    public ResultBean getMonitorpointList(@RequestParam("orgId") String orgId, MapBounds mapBounds,
            @RequestParam("regionCode") String regionCode) {
                                          @RequestParam("regionCode") String regionCode) {
        ResultBean<List<MonitorPoint>> resultBean = new ResultBean();
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("orgId", orgId);
@@ -525,7 +541,7 @@
    @RequestMapping(value = "/get-devices", method = RequestMethod.GET)
    @ResponseBody
    public ResultBean getDevices(@RequestParam("orgId") Integer orgId, MapBounds mapBounds,
            @RequestParam("regionCode") String regionCode) {
                                 @RequestParam("regionCode") String regionCode) {
        ResultBean<List<Device>> resultBean = new ResultBean();
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("orgId", orgId);
@@ -541,14 +557,14 @@
    @RequestMapping(value = "get-devices-for-popup", method = RequestMethod.GET)
    @ResponseBody
    public PageResult getDevicesForPopup(@RequestParam("orgId") Integer orgId, String name, Integer pageSize,
            Integer pageNo) {
                                         Integer pageNo) {
        return deviceService.query(orgId, name, pageSize, pageNo);
    }
    @RequestMapping(value = "get-devices-by-mid-oid", method = RequestMethod.GET)
    @ResponseBody
    public PageResult getDevicesByMidOid(@RequestParam("orgId") Integer orgId, @RequestParam("mpId") Integer mpId,
            Integer pageSize, Integer pageNo) {
                                         Integer pageSize, Integer pageNo) {
        return deviceService.query(orgId, mpId, pageSize, pageNo);
    }
@@ -639,7 +655,7 @@
    /**
     * 根据监控点id获取所属设备version数据集
     *
     *
     * @param mptid
     * @return
     */
@@ -655,7 +671,7 @@
            @ApiImplicitParam(name = "dimension", value = "维度(profession、region、monitorPoint选一)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "accountId", value = "账户id", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(name = "timeType", value = "时间类型(month、day、hour选一)", required = true, paramType = "query", dataType = "int"), })
            @ApiImplicitParam(name = "timeType", value = "时间类型(month、day、hour选一)", required = true, paramType = "query", dataType = "int"),})
    public ResultBean<List<Map<String, Object>>> getRegionRankingData(HttpServletRequest request) {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        List<Map<String, Object>> list = historyService.getRegionRankingData(parameters);
@@ -669,7 +685,7 @@
    @ApiOperation(value = "获取实时监控页面布局", notes = "")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "primaryKey", defaultValue = "898607b0101730391967", value = "值为:设备mac或监控站id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "type", defaultValue = "device", value = "值为:'monitorPoint'或'device'", required = true, paramType = "query", dataType = "String"), })
            @ApiImplicitParam(name = "type", defaultValue = "device", value = "值为:'monitorPoint'或'device'", required = true, paramType = "query", dataType = "String"),})
    @GetMapping("rtm-layout")
    public ResultBean realTimeMonitorLayout(String primaryKey, String type) {
        RealTimeDeviceLayout rtdLayout = null;
@@ -711,7 +727,7 @@
            @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "mac", value = "设备mac", required = false, 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"), })
            @ApiImplicitParam(name = "time", value = "时间,月份(格式:2018-03)", required = true, paramType = "query", dataType = "String"),})
    public ResultBean<List<Map<String, Object>>> getMonitorPointOrDeviceAvgDataBySensorKey(HttpServletRequest request)
            throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
@@ -738,7 +754,7 @@
    @GetMapping("getmpoint-byid")
    @ApiOperation(value = "获取监测站数据", notes = "获取监测站数据,包含名称、地址、坐标等详细信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "监控站id", required = true, paramType = "query", dataType = "Integer"), })
            @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "监控站id", required = true, paramType = "query", dataType = "Integer"),})
    public ResultBean<MonitorPoint> getMonitorPointById(Integer monitorPointId) {
        MonitorPoint monitorPoint = monitorPointService.queryMonitorPointById(monitorPointId);
        return new ResultBean<>(monitorPoint);
@@ -750,7 +766,7 @@
    @GetMapping("aqi24hours")
    @ApiOperation(value = "最近24小时aqi数值", notes = "最近24小时国控aqi数值")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"), })
            @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"),})
    public ResultBean<List<Map<String, Object>>> getAqi24HoursNC(@RequestParam("orgid") Integer organizationId) {
        return new ResultBean<>(hangzhouAqiService.queryAqi24Hours(organizationId));
    }
@@ -758,7 +774,7 @@
    @GetMapping("mpt-dev-summary")
    @ApiOperation(value = "监控总数和设备状态信息", notes = "监控总数和设备状态信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"), })
            @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"),})
    public ResultBean<Map> getMptAndDevSummary(@RequestParam("orgid") Integer organizationId) {
        Map<String, Map> result = new HashMap<>(2);
        Integer mptCount = monitorPointService.countOfSubOrgs(organizationId);
@@ -773,7 +789,7 @@
    @GetMapping("weather")
    @ApiOperation(value = "获取区域天气情况", notes = "获取区域天气情况")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String")})
    public ResultBean<Map<String, Object>> getWeatherDataByRegion(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        Map<String, Object> map = weatherService.getWeatherDataByRegion(parameters);
@@ -786,7 +802,7 @@
            @ApiImplicitParam(name = "accountId", defaultValue = "1", value = "登录账号的id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", defaultValue = "e1,e2,e3", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", defaultValue = "", value = "时间(long类型时间)", required = false, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "interval", defaultValue = "30", value = "时间间隔(秒)", required = true, paramType = "query", dataType = "Integer"), })
            @ApiImplicitParam(name = "interval", defaultValue = "30", value = "时间间隔(秒)", required = true, paramType = "query", dataType = "Integer"),})
    public ResultBean<Map<String, Object>> getActualDataByRegion(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        Map<String, Object> map = historyService.getActualDataByRegion(parameters);
@@ -796,7 +812,7 @@
    @GetMapping("quality")
    @ApiOperation(value = "获取优良天数", notes = "获取优良天数")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String")})
    public ResultBean<Map<String, Object>> getQualityCountDayByRegion(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        Map<String, Object> map = qualityDailyService.getQualityCountDayByRegion(parameters);
@@ -807,7 +823,7 @@
    @ApiOperation(value = "获取监控点以及设备", notes = "获取监控点以及设备")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "organizationId", defaultValue = "8", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<MonitorPoint>> getMonitorPointsAndDevicesByRegion(HttpServletRequest request)
            throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
@@ -819,7 +835,7 @@
    @ApiOperation(value = "刷新设备状态", notes = "刷新设备状态")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "organizationId", defaultValue = "8", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String")})
    public ResultBean<Collection<Object>> getDevicesStateByRegion(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        Collection<Object> monitorPoints = monitorPointService.getDevicesStateByRegion(parameters);
@@ -835,7 +851,7 @@
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "time", defaultValue = "2019", value = "查询的时间", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", defaultValue = "e27", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> getemissionsData(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        List<Map<String, Object>> result = historyDailyService.getEmissionsData(parameters);
@@ -849,7 +865,7 @@
            @ApiImplicitParam(name = "time", defaultValue = "2019", value = "查询的时间", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", defaultValue = "e27", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "overproofRatio", defaultValue = "0", value = "超标比例(0,1,2,3)(超标,超标100%,超标200%,超标300%)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String")})
    public ResultBean<Map> getOverproofData(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        Map result = historyDailyService.getOverproofData(parameters);
@@ -859,7 +875,7 @@
    @GetMapping("limit-device")
    @ApiOperation(value = "获取设备的警报限值", notes = "获取设备的警报限值")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", defaultValue = "p5dnd7a0391956", value = "设备mac码", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "mac", defaultValue = "p5dnd7a0391956", value = "设备mac码", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> getLimitDataByDevice(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String density = deviceService.getLimitDataByDevice(parameters);
@@ -877,13 +893,13 @@
    }
    /**
     * @description 根据设备mac,监测因子,时间查询返回界面
     * @author ZhuDongming
     * @date 2019-06-05 10:02:10
     * @param model
     * @param request
     * @return
     * @throws Exception
     * @description 根据设备mac,监测因子,时间查询返回界面
     * @author ZhuDongming
     * @date 2019-06-05 10:02:10
     */
    @GetMapping("/map-traceability")
    @ApiOperation(value = "获取污染溯源", notes = "获取污染溯源")
@@ -891,7 +907,7 @@
            @ApiImplicitParam(name = "monitorPointId", value = "监测点id", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(name = "mac", value = "设备mac地址", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "查询时间", required = true, paramType = "query", dataType = "String") })
            @ApiImplicitParam(name = "time", value = "查询时间", required = true, paramType = "query", dataType = "String")})
    public ModelAndView traceability(ModelAndView model, HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        Integer monitorPointId = Integer.parseInt(parameters.get("monitorPointId").toString());
@@ -911,7 +927,7 @@
            params.put("regionName", regionName);
            params.put("monitorPoint", monitorPoint);
            params.put("device", device);
            params.put("deviceSecond",deviceSecond);
            params.put("deviceSecond", deviceSecond);
            String paramsJson = params.toJSONString();
            model.addObject("traceabilityParams", paramsJson);
            model.setViewName("traceability");
@@ -945,72 +961,221 @@
      System.out.println("ScreenController-----getSensor-----map:"+map);
      return new ResultBean<Map<String, Object>>(map);
   }*/
   /*@GetMapping("getSensorByMonitorPointId")
   @ApiOperation(value = "返回单位", notes = "返回单位")
    @GetMapping("getSensorByMonitorPointId")
    @ApiOperation(value = "返回单位", notes = "返回单位")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitor_point_id", value = "监测站点id", required = true, paramType = "query", dataType = "String")
    })
    public ResultBean<List<Map<String, Object>>> getSensorByMonitorPointId(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String monitor_point_id = (String) parameters.get("monitor_point_id");
        List<Map<String, Object>> map = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id);
        return new ResultBean<List<Map<String, Object>>>(map);
    }
    @GetMapping("getSensorByDeviceId")
   @ApiOperation(value = "通过设备获取因子", notes = "通过设备获取因子")
   @ApiImplicitParams(value = {
         @ApiImplicitParam(name = "monitor_point_id", value = "监测站点id", required = true, paramType = "query", dataType = "String")
         @ApiImplicitParam(name = "id", value = "设备id", required = true, paramType = "query", dataType = "String")
   })
   public ResultBean<Map<String, Object>> getSensorByMonitorPointId(HttpServletRequest request) throws Exception {
   public ResultBean<List<Map<String, Object>>> getSensorByDeviceId(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
      String monitor_point_id = (String) parameters.get("monitor_point_id");
      System.out.println("ScreenController-----getSensorByMonitorPointId-----monitor_point_id:"+monitor_point_id);
      Map<String, Object> map = sensorUnitService.getSensorsByMonitPointId(monitor_point_id);
      System.out.println("ScreenController-----getSensorByMonitorPointId-----map:"+map);
      return new ResultBean<Map<String, Object>>(map);
   }*/
   @GetMapping("AIForecast")
   @ApiOperation(value = "AI预测", notes = "AI预测")
   @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 = "sensorKey", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
         @ApiImplicitParam(name = "time", value = "时间,天(格式:2018-03-06)", required = true, paramType = "query", dataType = "String"),
   })
   public ResultBean<List<Map<String, Object>>> AIForecast (HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = getParametersStartingWith(request, null);
      ParameterUtils.getTimeType4Time(parameters);
      String monitor_point_id = (String) parameters.get("monitorPoint");
      parameters.put("monitorPointId", parameters.remove("monitorPoint"));
      Object sensorKey = parameters.remove("sensorKey");
      parameters.put("sensors", Arrays.asList(sensorKey));
      List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
      System.out.println("ScreenController-----AIForecast-----list:"+list);
      //获取单位信息
      Map<String, Map<String, Object>> sensorMap = sensorUnitService.getSensorsByMonitPointId(monitor_point_id);
      if(sensorMap!=null && !sensorMap.isEmpty()) {
         for (Map<String, Object> map : list) {
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
            map.put("value", map.remove(sensorKey));
            String sensor = map.get("sensorKey").toString();
            if(sensorMap.get(sensor)!=null) {
               map.put("unit", sensorMap.get("unit"));
               map.put("name", sensorMap.get("name"));
               map.put("rules", sensorMap.get("rules"));
            }else {
               map.put("unit", null);
               map.put("name", null);
               map.put("rules", null);
      String id = (String) parameters.get("id");
      List<Map<String, Object>> list = sensorService.getSensorByDeviceId(id);
      Map<String,Object> map = list.get(0);
      String monitor_point_id = map.get("monitor_point_id").toString();
      List<Map<String, Object>> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id);
      System.out.println(sensorUnitList);
      for (Map<String, Object> sensorMap : list) {
         for (Map<String, Object> sensorUnitMap : sensorUnitList) {
            if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensor_key"))) {
               sensorMap.put("unit", sensorUnitMap.get("name"));
            }
         }
      }else {
         for (Map<String, Object> map : list) {
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
            map.put("value", map.remove(sensorKey));
            map.put("unit", null);
            map.put("name", null);
            map.put("rules", null);
         }
      }
      //return null;
      return new ResultBean<List<Map<String, Object>>>(list);
   }
   @GetMapping("getSensorWithUnitByMonitorPointId")
   @ApiOperation(value = "通过站点获取因子", notes = "通过站点获取因子")
   @ApiImplicitParams(value = {
         @ApiImplicitParam(name = "monitor_point_id", value = "站点id", required = true, paramType = "query", dataType = "String")
   })
   public ResultBean<List<Map<String, Object>>> getSensorWithUnitByMonitorPointId(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
      String monitor_point_id = (String) parameters.get("monitor_point_id");
      List<Map<String, Object>> list = sensorService.getSensorByMonitorPointId(monitor_point_id);
      List<Map<String, Object>> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id);
      System.out.println(sensorUnitList);
      for (Map<String, Object> sensorMap : list) {
         for (Map<String, Object> sensorUnitMap : sensorUnitList) {
            if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensor_key"))) {
               sensorMap.put("unit", sensorUnitMap.get("name"));
            }
         }
      }
      return new ResultBean<List<Map<String, Object>>>(list);
   }
    @GetMapping("AIForecast")
    @ApiOperation(value = "AI预测", notes = "AI预测")
    @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 = "sensorKey", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间,天(格式:2018-03-06)", required = true, paramType = "query", dataType = "String"),
    })
    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();
        String[] timeArray = intoTime.split("-");
        //System.out.println(timeArray);
        Integer year = Integer.parseInt(timeArray[0]);
        Integer mon = Integer.parseInt(timeArray[1]);
        if (mon > 1) {
            mon = mon - 1;
        } else {
            mon = 12;
            year = year - 1;
        }
        String alterTime = year.toString() + "-" + mon.toString() + "-" + timeArray[2];
        //System.out.println(alterTime);
        parameters.put("time", alterTime);
        ParameterUtils.getTimeType4Time(parameters);
        String monitor_point_id = (String) parameters.get("monitorPoint");
        parameters.put("monitorPointId", parameters.remove("monitorPoint"));
        String[] sensorKeys = parameters.remove("sensorKey").toString().split(",");
        parameters.put("sensors", Arrays.asList(sensorKeys));
        // monitorPointService.isCompensateCalculation(parameters);
        List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
        Map<String, Object> mpMap = new HashMap<>();
        mpMap = monitorPointService.selectAllById(monitorPoint);
        //生命一个map,用来存放查询天气信息是需要的参数
        Map<String, Object> weatherParameters = new HashMap<>();
        weatherParameters.put("organizationId", mpMap.get("organization_id"));
        weatherParameters.put("time", intoTime);
        //获取天气信息
        Map<String, Object> weatherMap = weatherService.get15DayWeatherDataByRegion(weatherParameters);
        Map<String, Object> tempMap = TempAllocationUtils.tempAllocation(weatherMap);
        //获取单位信息
        Map<String, Map<String, Object>> sensorUnitMap = sensorUnitService.getSensorsByMonitPointId(monitor_point_id);
        for (Map<String, Object> map : list) {
            String time = map.get("time").toString();
            time = time.substring(time.length() - 2);
            map.put("time", Integer.valueOf(time));
            map.put("temp", tempMap.get(map.get("time").toString()));
            List<Number> values = new ArrayList<Number>();
            List<String> units = new ArrayList<String>();
            for (String string : sensorKeys) {
                if (sensorUnitMap != null && !sensorUnitMap.isEmpty()) {
                    if (sensorUnitMap.get(string) != null) {
                        units.add(sensorUnitMap.get(string).get("name").toString());
                        String rules = sensorUnitMap.get(string).get("rules").toString();
                        rules = rules.replace("{0}", "a");
                        rules = rules.replace("d", "");
                        Expression expression = AviatorEvaluator.compile(rules);
                        Double value;
                        Map<String, Object> ev = new HashMap<>();
                        ev.put("a", map.get(string));
                        value = (Double) expression.execute(ev);
                        //保留两位小数
                        DecimalFormat df = new DecimalFormat("#.00");
                        value = Double.parseDouble(df.format(value));
                        values.add(value);
                    } else {
                        Map<String, Object> sensorMap = sensorService.getSensorBySensorKey(string);
                        units.add(sensorMap.get("unit").toString());
                        values.add((Number) map.remove(string));
                    }
                } else {
                    Map<String, Object> sensorMap = sensorService.getSensorBySensorKey(string);
                    units.add(sensorMap.get("unit").toString());
                    values.add((Number) map.remove(string));
                }
                //values.add((Number) map.remove(string));
            }
            map.put("values", values);
            map.put("units", units);
        }
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    @GetMapping("getWeather")
    @ApiOperation(value = "获取天气信息", notes = "获取天气信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间,天(格式:2018-03-06)", required = true, paramType = "query", dataType = "String"),
    })
    public ResultBean<Map<String, Object>> getWeather(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
        Map<String, Object> map = weatherService.get15DayWeatherDataByRegion(parameters);
        /*Map<String, Object> tempMap = new HashMap<>();
        Double tempDay = Double.parseDouble(map.get("tempDay").toString());
        Double tempNight = Double.parseDouble(map.get("tempNight").toString());
        Double time5 = tempNight;
        Double time13 = tempDay;
        Double difference = tempDay-tempNight;
        Double dif_8 = difference/8;
        Double dif_16 = difference/16;
        tempMap.put("5", time5);
        tempMap.put("13", time13);
        String time = null;
        Double t = time5;
        for(int i=4;i>=0;i--) {
           time = ""+i;
           t = t+dif_16;
           String tempLast = ""+Math.round(t);
           tempMap.put(time, tempLast);
        }
        Double y = time5;
        for(int i=6;i<13;i++) {
           time = ""+i;
           y = y+dif_8;
           String tempLast = ""+Math.round(y);
           tempMap.put(time, tempLast);
        }
        Double z = time13;
        for(int i=14;i<=23;i++) {
           time = ""+i;
           z = z-dif_16;
           String tempLast = ""+Math.round(z);
           tempMap.put(time, tempLast);
        }*/
        Map<String, Object> tempMap = TempAllocationUtils.tempAllocation(map);
        return new ResultBean<Map<String, Object>>(tempMap);
    }
    @GetMapping("/uavTrajectory")
    @ApiOperation(value = "显示无人机飞行轨迹", notes = "显示无人机飞行轨迹")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392068)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2019-07-17 17:07:00)", required = false, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2019-07-17 17:07:00)", required = false, paramType = "query", dataType = "String")
    })
    public ModelAndView uavTrajectory(ModelAndView model, HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String mac = parameters.get("mac").toString();
        if (mac != null && mac.length() != 0) {
            List<Map<String, Object>> sensorList = historyMinutelyService.getSensorData(parameters);
            JSONObject params = new JSONObject();
            params.put("sensorInfo", sensorList);
            String paramsJson = params.toJSONString();
            model.addObject("uavTrajectoryParams", paramsJson);
            model.setViewName("uavTrajectory");
            return model;
        }else {
            StringBuilder msg = new StringBuilder();
            msg.append(" param[0] mac:");
            msg.append(mac);
            log.warn(msg);
            model.setViewName("403");
            return model;
        }
    }
}