xufenglei
2018-04-20 29d968d69ee52e7b0f87132467b21940fa9361cb
src/main/java/com/moral/controller/ScreenController.java
@@ -1,26 +1,23 @@
package com.moral.controller;
import static com.moral.common.util.RedisUtil.get;
import static com.moral.common.util.RedisUtil.hasKey;
import static com.moral.common.util.ResourceUtil.getValue;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
import java.io.*;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSONObject;
import com.moral.common.bean.PageResult;
import com.moral.common.xml.Version;
import com.moral.entity.Account;
import com.moral.entity.MapBounds;
import com.moral.entity.MonitorPoint;
import com.moral.service.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
import org.dom4j.Document;
@@ -29,16 +26,43 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONReader;
import com.alibaba.fastjson.TypeReference;
import com.moral.common.bean.ResultBean;
import com.moral.common.util.ValidateUtil;
import org.springframework.util.ObjectUtils;
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.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.ValidateUtil;
import com.moral.common.xml.Version;
import com.moral.entity.Account;
import com.moral.entity.Device;
import com.moral.entity.MapBounds;
import com.moral.entity.MonitorPoint;
import com.moral.entity.alarm.AlarmConfigValue;
import com.moral.entity.alarm.AlarmSensorLevel;
import com.moral.service.AccountService;
import com.moral.service.AlarmConfigService;
import com.moral.service.AlarmService;
import com.moral.service.AreaService;
import com.moral.service.DeviceService;
import com.moral.service.HistoryMinutelyService;
import com.moral.service.HistoryService;
import com.moral.service.MachineActivateService;
import com.moral.service.MonitorPointService;
import com.moral.service.SensorService;
/**
 * The Class ScreenController.大屏接口
@@ -46,9 +70,11 @@
@RestController
@RequestMapping("/screen")
//@CrossOrigin(origins = "*", maxAge = 3600)
@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public class ScreenController {
   public  static Logger log = Logger.getLogger(ScreenController.class);
    @Resource
   AlarmConfigService alarmConfigService;
   @Resource
   AreaService areaService;
@@ -86,6 +112,8 @@
   /** The level key. */
   private String levelKey = "alarm_";
   @Resource
   private AlarmService alarmService;
   /**
    * Screen login. 大屏登录
    * 
@@ -128,25 +156,25 @@
    *            the request
    * @return the alarm levels
    */
   @SuppressWarnings("resource")
   @GetMapping("alarm-levels")
   public Map<String, Object> getAlarmLevels(HttpServletRequest request,String orgId) {
      Map<String, Object> result = new LinkedHashMap<String, Object>();
      String key = levelKey + orgId;
   public Object getAlarmLevels(HttpServletRequest request, Integer orgId) {
        List<Map<String,Object>> sensorAlarmList = null;
      try {
         if (hasKey(redisTemplate, key)) {
            String levelConfigStr = get(redisTemplate, key);
            result = JSON.parseObject(levelConfigStr, new TypeReference<Map<String, Object>>() {});
         } else {
            InputStreamReader reader = new InputStreamReader(resource.getInputStream());
            result = new JSONReader(reader).readObject(new TypeReference<LinkedHashMap<String, Object>>() {});
         }
      } catch (IOException e) {
         AlarmConfigValue alarmConfigValue = alarmConfigService.queryValueByOrganizationId(orgId).get();
         Map<String,AlarmSensorLevel> alarmLevelMap = alarmConfigValue.getAlarmLevels();
         sensorAlarmList = alarmLevelMap.keySet().stream().map(key -> {
             AlarmSensorLevel alarmSensorLevel = alarmLevelMap.get(key);
            JSONObject alarmSensorLevelMap = (JSONObject) JSON.toJSON(alarmSensorLevel);
            alarmSensorLevelMap.put("key",key);
            return alarmSensorLevelMap;
         }).collect(Collectors.toList());
      } catch (Exception e) {
         e.printStackTrace();
         result.put("msg", "系统错误,请联系管理员!原因如下:" + e.getMessage());
         Map<String, Object> err = new LinkedHashMap<String, Object>();
         err.put("msg", "系统错误,请联系管理员!原因如下:" + e.getMessage());
         return  err;
      }
      return result;
      return sensorAlarmList;
   }
   /**
@@ -183,9 +211,10 @@
    * @param request
    *            the request
    * @return the average by all
    * @throws Exception
    */
   @GetMapping("all-average")
   public Map<String, Object> getAllSensorAverageByDevice(HttpServletRequest request) {
   public Map<String, Object> getAllSensorAverageByDevice(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = getParametersStartingWith(request, null);
      return historyService.getAllSensorAverageByDevice(parameters);
   }
@@ -277,12 +306,24 @@
      }
      return version;
   }
   /**
    * 地图接口
    * 开始
    */
   /**
    * 地图主页
    * @param model
    * @param code
    * @param accountId
    * @return
    */
   @RequestMapping(value = "/map-page", method = RequestMethod.GET)
   public ModelAndView map(ModelAndView model, @RequestParam("areaCode")int code, @RequestParam("accountId")int accountId){
      Account account = accountService.getAccountById(accountId);
      String regionName = areaService.selectFullNameByCode(code);
      if(account!=null&&regionName!=null){
          //去除空格
            regionName = regionName.replace(" ","");
         Object sensors = sensorService.queryAll();
         JSONObject params = new JSONObject();
         params.put("regionCode",code);
@@ -317,6 +358,18 @@
      resultBean.setCode(ResultBean.SUCCESS);
      return resultBean;
   }
   @RequestMapping(value="/get-devices",method = RequestMethod.GET)
   @ResponseBody
   public ResultBean getDevices(@RequestParam("orgId")Integer orgId,MapBounds mapBounds){
      ResultBean<List<Device>> resultBean = new ResultBean();
      Map<String,Object> paramMap = new HashMap<String, Object>();
      paramMap.put("orgId", orgId);
      paramMap.put("mapBounds",mapBounds);
      List<Device> list = deviceService.query(paramMap);
      resultBean.setData(list);
      resultBean.setCode(ResultBean.SUCCESS);
      return resultBean;
   }
   @RequestMapping(value = "get-devices-for-popup",method = RequestMethod.GET)
   @ResponseBody
   public PageResult getDevicesForPopup(
@@ -327,4 +380,97 @@
   ){
      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
   ){
      return deviceService.query(orgId,mpId,pageSize,pageNo);
   }
   @RequestMapping(value="/get-real-state-data",method = RequestMethod.POST)
   @ResponseBody
   public JsonData getRealStateAndData(@RequestBody JSONObject paramMap){
      JsonData jsonData = new JsonData();
      Map<String,Object> returnMap = new HashMap<String, Object>();
      returnMap.put("layer", paramMap.getString("layer"));
      //覆盖控件的数据刷新
      if(!CollectionUtils.isEmpty(paramMap.getJSONArray("markerKeys"))) {
         JSONArray markerKeys = paramMap.getJSONArray("markerKeys");
         List<Map<String, String>> markers = null;
         if("equipments".equals(paramMap.getString("layer"))) {
            markers = deviceService.queryDevicesState(markerKeys.toJavaList(String.class),true);
         }else {//返回监控点id和state
            String orgId= paramMap.getString("orgId");
            String areaCode= paramMap.getString("areaCode");
            for(Object mPointId:markerKeys) {
               markers = monitorPointService.queryMonitroPointsState(markerKeys.toJavaList(Integer.class));
            }
         }
         returnMap.put("markers", markers);
      }
      if(paramMap.getJSONArray("popupEquMacs")!=null&&paramMap.getJSONArray("popupEquMacs").size()>0) {
         JSONArray popupEquMacs = paramMap.getJSONArray("popupEquMacs");
         List<Map<String, String>> popupEquWithStates = null;
         for(Object mac:popupEquMacs) {
            popupEquWithStates = deviceService.queryDevicesState(popupEquMacs.toJavaList(String.class),false);
         }
         //返回搜索结果的状态
         returnMap.put("popupEquStates", popupEquWithStates);
      }
      jsonData.setExtData(returnMap);
      return jsonData;
   }
   @GetMapping("monitor_points")
   public ResultBean<List<MonitorPoint>> getMonitorPointsByOrganizationId(Integer orgId) {
      //Map<String, Object> parameters = getParametersStartingWith(request, null);
      List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsByOrganizationId(orgId);
      return new ResultBean<List<MonitorPoint>>(monitorPoints);
   }
   @GetMapping("report_avg_datas")
   public ResultBean<List<Map<String, Object>>> getMonitorPointOrDeviceAvgData(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = getParametersStartingWith(request, null);
      parameters.put("type", "month");
      parameters.put("monitorPointId", parameters.remove("monitorPoint"));
      String sensorKey = parameters.remove("sensorKey").toString();
      List<String> sensorKeys = new ArrayList<String>();
      sensorKeys.add(sensorKey);
      parameters.put("sensors", sensorKeys);
      List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
      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));
      }
      return new ResultBean<List<Map<String, Object>>>(list);
   }
   @GetMapping("report_alarm_datas")
   public ResultBean<List<Map<String, Object>>> getAlarmData(HttpServletRequest request) throws Exception {
      Map<String, Object> parameters = getParametersStartingWith(request, null);
      parameters.put("type", "month");
      String sensorKey = "list";
      if (!ObjectUtils.isEmpty(parameters.get("sensorKey"))) {
         sensorKey = parameters.remove("sensorKey").toString();
         List<String> sensorKeys = new ArrayList<String>();
         sensorKeys.add(sensorKey);
         parameters.put("sensors", sensorKeys);
      }
      if (!ObjectUtils.isEmpty(parameters.get("organizationId"))) {
         if (!Constants.isNotSpecialOrgId(Integer.valueOf(parameters.get("organizationId").toString()))) {
            parameters.remove("organizationId");
         }
      }
      Map pieData = alarmService.getPieData(parameters);
      List<Map<String, Object>> list = (List<Map<String, Object>>) pieData.get(sensorKey);
      return new ResultBean<List<Map<String, Object>>>(list);
   }
}